From f052628a9effa12b81f8d720cc81dc517fbdd029 Mon Sep 17 00:00:00 2001 From: rob Date: Sat, 17 Jan 2026 22:57:37 -0400 Subject: [PATCH] Fix milestones MDX error and update ideas --- 404.html | 2 +- __server/server.bundle.js | 71 ++++++++++++++----- architecture/index.html | 2 +- ...f7384.fda14303.js => 3fbf7384.013e3796.js} | 2 +- assets/js/817f7194.3dfbfc69.js | 1 - assets/js/817f7194.9dbada51.js | 1 + assets/js/e719f3dc.a5309d63.js | 1 - assets/js/e719f3dc.de2c390f.js | 1 + ...n.fa3a2ea9.js => runtime~main.a8ea285c.js} | 2 +- category/reference/index.html | 2 +- goals/index.html | 2 +- ideas-and-exploration/index.html | 22 +++--- index.html | 2 +- milestones/index.html | 56 +++++++++++++++ reference/collections/index.html | 2 +- reference/design/index.html | 2 +- reference/meta-tools/index.html | 2 +- reference/providers/index.html | 2 +- reference/registry-spec/index.html | 2 +- reference/web-ui-spec/index.html | 2 +- todos/index.html | 2 +- 21 files changed, 139 insertions(+), 42 deletions(-) rename assets/js/{3fbf7384.fda14303.js => 3fbf7384.013e3796.js} (55%) delete mode 100644 assets/js/817f7194.3dfbfc69.js create mode 100644 assets/js/817f7194.9dbada51.js delete mode 100644 assets/js/e719f3dc.a5309d63.js create mode 100644 assets/js/e719f3dc.de2c390f.js rename assets/js/{runtime~main.fa3a2ea9.js => runtime~main.a8ea285c.js} (93%) create mode 100644 milestones/index.html diff --git a/404.html b/404.html index 0651596..95dd0a3 100644 --- a/404.html +++ b/404.html @@ -4,7 +4,7 @@ CmdForge - + diff --git a/__server/server.bundle.js b/__server/server.bundle.js index bfb3328..a212e38 100644 --- a/__server/server.bundle.js +++ b/__server/server.bundle.js @@ -24211,7 +24211,9 @@ function _createMdxContent(props) { children: "cmdforge add official/toolname" }), " to add a dependency to manifest - Automatic dependency checking before running meta-tools. ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.strong, { children: "Tool testing framework" - }), " includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ", variable, " references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"] + }), " includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.code, { + children: "{variable}" + }), " references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"] }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.table, { children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.thead, { children: (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.tr, { @@ -24910,7 +24912,7 @@ href:`#${SkipToContentFallbackId}`,onClick:onClick,children:linkLabel})});} (module) { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/rob/CmdForge/","label":"CmdForge Overview","docId":"overview","unlisted":false},{"type":"link","href":"/rob/CmdForge/architecture","label":"CmdForge Architecture","docId":"architecture","unlisted":false},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/rob/CmdForge/reference/providers","label":"Provider Setup","docId":"reference/providers","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/registry-spec","label":"Registry API","docId":"reference/registry-spec","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/meta-tools","label":"Meta-Tools","docId":"reference/meta-tools","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/collections","label":"Collections","docId":"reference/collections","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/examples","label":"Example Tools","docId":"reference/examples","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/design","label":"Design Philosophy","docId":"reference/design","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/web-ui-spec","label":"Web UI Design","docId":"reference/web-ui-spec","unlisted":false}],"href":"/rob/CmdForge/category/reference"},{"type":"link","href":"/rob/CmdForge/todos","label":"CmdForge TODOs","docId":"todos","unlisted":false},{"type":"link","href":"/rob/CmdForge/goals","label":"Goals","docId":"goals","unlisted":false},{"type":"link","href":"/rob/CmdForge/ideas-and-exploration","label":"Ideas & Exploration","docId":"ideas-and-exploration","unlisted":false},{"type":"link","href":"/rob/CmdForge/milestones","label":"Milestones","docId":"milestones","unlisted":false}]},"docs":{"architecture":{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","sidebar":"docs"},"goals":{"id":"goals","title":"Goals","description":"Vision","sidebar":"docs"},"ideas-and-exploration":{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Ideas","sidebar":"docs"},"milestones":{"id":"milestones","title":"Milestones","description":"Active","sidebar":"docs"},"overview":{"id":"overview","title":"CmdForge Overview","description":"A lightweight personal tool builder for AI-powered CLI commands.","sidebar":"docs"},"reference/collections":{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","sidebar":"docs"},"reference/design":{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","sidebar":"docs"},"reference/examples":{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","sidebar":"docs"},"reference/meta-tools":{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","sidebar":"docs"},"reference/providers":{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","sidebar":"docs"},"reference/registry-spec":{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","sidebar":"docs"},"reference/web-ui-spec":{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","sidebar":"docs"},"todos":{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","sidebar":"docs"}}}}'); +module.exports = /*#__PURE__*/JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/rob/CmdForge/","label":"CmdForge Overview","docId":"overview","unlisted":false},{"type":"link","href":"/rob/CmdForge/architecture","label":"CmdForge Architecture","docId":"architecture","unlisted":false},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/rob/CmdForge/reference/providers","label":"Provider Setup","docId":"reference/providers","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/registry-spec","label":"Registry API","docId":"reference/registry-spec","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/meta-tools","label":"Meta-Tools","docId":"reference/meta-tools","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/collections","label":"Collections","docId":"reference/collections","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/examples","label":"Example Tools","docId":"reference/examples","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/design","label":"Design Philosophy","docId":"reference/design","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/web-ui-spec","label":"Web UI Design","docId":"reference/web-ui-spec","unlisted":false}],"href":"/rob/CmdForge/category/reference"},{"type":"link","href":"/rob/CmdForge/todos","label":"CmdForge TODOs","docId":"todos","unlisted":false},{"type":"link","href":"/rob/CmdForge/goals","label":"Goals","docId":"goals","unlisted":false},{"type":"link","href":"/rob/CmdForge/ideas-and-exploration","label":"Ideas & Exploration","docId":"ideas-and-exploration","unlisted":false},{"type":"link","href":"/rob/CmdForge/milestones","label":"Milestones","docId":"milestones","unlisted":false}]},"docs":{"architecture":{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","sidebar":"docs"},"goals":{"id":"goals","title":"Goals","description":"Vision","sidebar":"docs"},"ideas-and-exploration":{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","sidebar":"docs"},"milestones":{"id":"milestones","title":"Milestones","description":"Active","sidebar":"docs"},"overview":{"id":"overview","title":"CmdForge Overview","description":"A lightweight personal tool builder for AI-powered CLI commands.","sidebar":"docs"},"reference/collections":{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","sidebar":"docs"},"reference/design":{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","sidebar":"docs"},"reference/examples":{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","sidebar":"docs"},"reference/meta-tools":{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","sidebar":"docs"},"reference/providers":{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","sidebar":"docs"},"reference/registry-spec":{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","sidebar":"docs"},"reference/web-ui-spec":{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","sidebar":"docs"},"todos":{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","sidebar":"docs"}}}}'); /***/ }, @@ -28939,7 +28941,7 @@ if (true) { (module) { "use strict"; -module.exports = /*#__PURE__*/JSON.parse('{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Ideas","source":"@site/docs/ideas-and-exploration.md","sourceDirName":".","slug":"/ideas-and-exploration","permalink":"/rob/CmdForge/ideas-and-exploration","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"ideas","project":"cmdforge","updated":"2026-01-08T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/CmdForge/goals"},"next":{"title":"Milestones","permalink":"/rob/CmdForge/milestones"}}'); +module.exports = /*#__PURE__*/JSON.parse('{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","source":"@site/docs/ideas-and-exploration.md","sourceDirName":".","slug":"/ideas-and-exploration","permalink":"/rob/CmdForge/ideas-and-exploration","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"ideas","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/CmdForge/goals"},"next":{"title":"Milestones","permalink":"/rob/CmdForge/milestones"}}'); /***/ }, @@ -36039,7 +36041,7 @@ __webpack_require__.r(__webpack_exports__); const frontMatter = { type: 'ideas', project: 'cmdforge', - updated: new Date('2026-01-08T00:00:00.000Z') + updated: new Date('2026-01-17T00:00:00.000Z') }; const contentTitle = 'Ideas & Exploration'; @@ -36050,6 +36052,10 @@ const assets = { const toc = [{ + "value": "Completed", + "id": "completed", + "level": 2 +}, { "value": "Ideas", "id": "ideas", "level": 2 @@ -36072,29 +36078,52 @@ function _createMdxContent(props) { children: "Ideas & Exploration" }) }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { - id: "ideas", - children: "Ideas" + id: "completed", + children: "Completed" }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { className: "contains-task-list", children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { className: "task-list-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { type: "checkbox", + checked: true, disabled: true }), " ", "Tool marketplace design #medium"] }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { className: "task-list-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { type: "checkbox", + checked: true, disabled: true }), " ", "Tool search and filtering #medium"] }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { className: "task-list-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { type: "checkbox", + checked: true, disabled: true }), " ", "User tool ratings/reviews #low"] }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { + className: "task-list-item", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { + type: "checkbox", + checked: true, + disabled: true + }), " ", "Tool composition and chaining #medium"] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { + className: "task-list-item", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { + type: "checkbox", + checked: true, + disabled: true + }), " ", "Tool testing framework #medium"] + }), "\n"] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.h2, { + id: "ideas", + children: "Ideas" + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.ul, { + className: "contains-task-list", + children: ["\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { className: "task-list-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { type: "checkbox", @@ -36112,18 +36141,6 @@ function _createMdxContent(props) { type: "checkbox", disabled: true }), " ", "Custom AI backend support #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool composition and chaining #medium"] - }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { - className: "task-list-item", - children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { - type: "checkbox", - disabled: true - }), " ", "Tool testing framework #medium"] }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { className: "task-list-item", children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { @@ -36136,6 +36153,24 @@ function _createMdxContent(props) { type: "checkbox", disabled: true }), " ", "Provider auto-detection #low"] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { + className: "task-list-item", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { + type: "checkbox", + disabled: true + }), " ", "Mobile companion app #low"] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { + className: "task-list-item", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { + type: "checkbox", + disabled: true + }), " ", "Tool templates/scaffolding #medium"] + }), "\n", (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_components.li, { + className: "task-list-item", + children: [(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_components.input, { + type: "checkbox", + disabled: true + }), " ", "Natural language tool creation #medium"] }), "\n"] })] }); diff --git a/architecture/index.html b/architecture/index.html index dc5149c..70d876b 100644 --- a/architecture/index.html +++ b/architecture/index.html @@ -4,7 +4,7 @@ CmdForge Architecture | CmdForge - + diff --git a/assets/js/3fbf7384.fda14303.js b/assets/js/3fbf7384.013e3796.js similarity index 55% rename from assets/js/3fbf7384.fda14303.js rename to assets/js/3fbf7384.013e3796.js index be7e55c..8917d0c 100644 --- a/assets/js/3fbf7384.fda14303.js +++ b/assets/js/3fbf7384.013e3796.js @@ -1 +1 @@ -"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[854],{5253(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/rob/CmdForge/","label":"CmdForge Overview","docId":"overview","unlisted":false},{"type":"link","href":"/rob/CmdForge/architecture","label":"CmdForge Architecture","docId":"architecture","unlisted":false},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/rob/CmdForge/reference/providers","label":"Provider Setup","docId":"reference/providers","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/registry-spec","label":"Registry API","docId":"reference/registry-spec","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/meta-tools","label":"Meta-Tools","docId":"reference/meta-tools","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/collections","label":"Collections","docId":"reference/collections","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/examples","label":"Example Tools","docId":"reference/examples","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/design","label":"Design Philosophy","docId":"reference/design","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/web-ui-spec","label":"Web UI Design","docId":"reference/web-ui-spec","unlisted":false}],"href":"/rob/CmdForge/category/reference"},{"type":"link","href":"/rob/CmdForge/todos","label":"CmdForge TODOs","docId":"todos","unlisted":false},{"type":"link","href":"/rob/CmdForge/goals","label":"Goals","docId":"goals","unlisted":false},{"type":"link","href":"/rob/CmdForge/ideas-and-exploration","label":"Ideas & Exploration","docId":"ideas-and-exploration","unlisted":false},{"type":"link","href":"/rob/CmdForge/milestones","label":"Milestones","docId":"milestones","unlisted":false}]},"docs":{"architecture":{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","sidebar":"docs"},"goals":{"id":"goals","title":"Goals","description":"Vision","sidebar":"docs"},"ideas-and-exploration":{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Ideas","sidebar":"docs"},"milestones":{"id":"milestones","title":"Milestones","description":"Active","sidebar":"docs"},"overview":{"id":"overview","title":"CmdForge Overview","description":"A lightweight personal tool builder for AI-powered CLI commands.","sidebar":"docs"},"reference/collections":{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","sidebar":"docs"},"reference/design":{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","sidebar":"docs"},"reference/examples":{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","sidebar":"docs"},"reference/meta-tools":{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","sidebar":"docs"},"reference/providers":{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","sidebar":"docs"},"reference/registry-spec":{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","sidebar":"docs"},"reference/web-ui-spec":{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","sidebar":"docs"},"todos":{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","sidebar":"docs"}}}}')}}]); \ No newline at end of file +"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[854],{5253(e){e.exports=JSON.parse('{"version":{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"docs":[{"type":"link","href":"/rob/CmdForge/","label":"CmdForge Overview","docId":"overview","unlisted":false},{"type":"link","href":"/rob/CmdForge/architecture","label":"CmdForge Architecture","docId":"architecture","unlisted":false},{"type":"category","label":"Reference","collapsible":true,"collapsed":true,"items":[{"type":"link","href":"/rob/CmdForge/reference/providers","label":"Provider Setup","docId":"reference/providers","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/registry-spec","label":"Registry API","docId":"reference/registry-spec","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/meta-tools","label":"Meta-Tools","docId":"reference/meta-tools","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/collections","label":"Collections","docId":"reference/collections","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/examples","label":"Example Tools","docId":"reference/examples","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/design","label":"Design Philosophy","docId":"reference/design","unlisted":false},{"type":"link","href":"/rob/CmdForge/reference/web-ui-spec","label":"Web UI Design","docId":"reference/web-ui-spec","unlisted":false}],"href":"/rob/CmdForge/category/reference"},{"type":"link","href":"/rob/CmdForge/todos","label":"CmdForge TODOs","docId":"todos","unlisted":false},{"type":"link","href":"/rob/CmdForge/goals","label":"Goals","docId":"goals","unlisted":false},{"type":"link","href":"/rob/CmdForge/ideas-and-exploration","label":"Ideas & Exploration","docId":"ideas-and-exploration","unlisted":false},{"type":"link","href":"/rob/CmdForge/milestones","label":"Milestones","docId":"milestones","unlisted":false}]},"docs":{"architecture":{"id":"architecture","title":"CmdForge Architecture","description":"Module Structure","sidebar":"docs"},"goals":{"id":"goals","title":"Goals","description":"Vision","sidebar":"docs"},"ideas-and-exploration":{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","sidebar":"docs"},"milestones":{"id":"milestones","title":"Milestones","description":"Active","sidebar":"docs"},"overview":{"id":"overview","title":"CmdForge Overview","description":"A lightweight personal tool builder for AI-powered CLI commands.","sidebar":"docs"},"reference/collections":{"id":"reference/collections","title":"CmdForge Collections","description":"Collections are curated groups of tools that can be installed together with a single command.","sidebar":"docs"},"reference/design":{"id":"reference/design","title":"CmdForge Design Document","description":"A lightweight personal tool builder for AI-powered CLI commands","sidebar":"docs"},"reference/examples":{"id":"reference/examples","title":"Example Tools","description":"CmdForge comes with 28 pre-built tools. This document shows their configurations and usage.","sidebar":"docs"},"reference/meta-tools":{"id":"reference/meta-tools","title":"Meta-Tools: Tools That Call Other Tools","description":"Meta-tools are CmdForge tools that can invoke other tools as steps in their workflow. This enables powerful composition and reuse of existing tools.","sidebar":"docs"},"reference/providers":{"id":"reference/providers","title":"Provider Setup Guide","description":"CmdForge works with any AI CLI tool that accepts input via stdin or arguments. This guide covers setup for the most popular providers.","sidebar":"docs"},"reference/registry-spec":{"id":"reference/registry-spec","title":"CmdForge Registry Design","description":"Purpose","sidebar":"docs"},"reference/web-ui-spec":{"id":"reference/web-ui-spec","title":"CmdForge Web UI Design","description":"Purpose","sidebar":"docs"},"todos":{"id":"todos","title":"CmdForge TODOs","description":"Active Tasks","sidebar":"docs"}}}}')}}]); \ No newline at end of file diff --git a/assets/js/817f7194.3dfbfc69.js b/assets/js/817f7194.3dfbfc69.js deleted file mode 100644 index 89336ef..0000000 --- a/assets/js/817f7194.3dfbfc69.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[574],{921(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"milestones","title":"Milestones","description":"Active","source":"@site/docs/milestones.md","sourceDirName":".","slug":"/milestones","permalink":"/rob/CmdForge/milestones","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"milestones","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var s=t(4848),r=t(8453);const o={type:"milestones",project:"cmdforge",updated:new Date("2026-01-17T00:00:00.000Z")},d="Milestones",l={},c=[{value:"Active",id:"active",level:2},{value:"Completed",id:"completed",level:2},{value:"M5: Testing & Polish",id:"m5-testing--polish",level:4},{value:"M0: Core Platform",id:"m0-core-platform",level:4},{value:"M1: Production Ready",id:"m1-production-ready",level:4},{value:"M2: Tool Discovery",id:"m2-tool-discovery",level:4},{value:"M3: Content & Automation",id:"m3-content--automation",level:4},{value:"M4: User Experience",id:"m4-user-experience",level:4}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h4:"h4",header:"header",hr:"hr",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"milestones",children:"Milestones"})}),"\n",(0,s.jsx)(n.h2,{id:"active",children:"Active"}),"\n",(0,s.jsx)(n.p,{children:"(none)"}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"completed",children:"Completed"}),"\n",(0,s.jsx)(n.h4,{id:"m5-testing--polish",children:"M5: Testing & Polish"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q1 2027\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Testing framework, theming, and version management. ",(0,s.jsx)(n.strong,{children:"Project dependencies"})," (completed): - ",(0,s.jsx)(n.code,{children:"cmdforge.yaml"})," manifest format for declaring tool dependencies - ",(0,s.jsx)(n.code,{children:"cmdforge install"})," to install all dependencies from manifest - ",(0,s.jsx)(n.code,{children:"cmdforge add official/toolname"})," to add a dependency to manifest - Automatic dependency checking before running meta-tools. ",(0,s.jsx)(n.strong,{children:"Tool testing framework"})," includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ",variable," references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool testing framework"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Simple theming (external QSS files)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dark mode"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool versioning support"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Version constraints in manifests"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:["Project dependency system (",(0,s.jsx)(n.code,{children:"cmdforge install"}),")"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"cmdforge add"})," command"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dependency resolution for meta-tools"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m0-core-platform",children:"M0: Core Platform"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": December 2025\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"The foundational CmdForge platform with AI-powered CLI tool builder, YAML tool definitions, web UI, offline caching, and provider abstraction."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"YAML tool definition system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CLI entry point and subcommands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Provider abstraction layer"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Offline caching for tools"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Web UI for tool browsing"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool execution engine"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m1-production-ready",children:"M1: Production Ready"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": February 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"Production deployment with proper server configuration, complete documentation, and improved reliability."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Public documentation"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd service setup"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gunicorn production server"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd linger for persistence"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CI/CD pipeline"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Error message improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Source field display in web UI"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m2-tool-discovery",children:"M2: Tool Discovery"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q2 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality. ",(0,s.jsx)(n.strong,{children:"Tool search and filtering"})," includes: - ",(0,s.jsx)(n.code,{children:"/api/v1/tags"})," endpoint for listing tags with counts - Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range - Faceted search responses with category/tag/owner counts - CLI: ",(0,s.jsx)(n.code,{children:"--tag"}),", ",(0,s.jsx)(n.code,{children:"--owner"}),", ",(0,s.jsx)(n.code,{children:"--min-downloads"}),", ",(0,s.jsx)(n.code,{children:"--popular"}),", ",(0,s.jsx)(n.code,{children:"--since"}),", ",(0,s.jsx)(n.code,{children:"--json"}),", ",(0,s.jsx)(n.code,{children:"--show-facets"})," options - CLI: ",(0,s.jsx)(n.code,{children:"registry tags"})," subcommand - Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state ",(0,s.jsx)(n.strong,{children:"PySide6 GUI conversion"})," includes: - Modern desktop GUI replacing urwid TUI - Sidebar navigation (My Tools, Registry, Providers, Profiles) - Tool Builder with visual form for creating/editing tools - Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q) - Window geometry persistence ",(0,s.jsx)(n.strong,{children:"GUI Registry browser"})," includes: - Browse/search tools with category and sort filters - Star ratings display in table and details - Clickable tags for filtering - Installed indicator (\u2713) and update available (\u2191) - Pagination for large result sets - Publisher reputation info ",(0,s.jsx)(n.strong,{children:"GUI Publishing"})," includes: - Connect dialog with polling-based account pairing - Publish workflow with version selection - Full publish workflow with confirmation ",(0,s.jsx)(n.strong,{children:"Infrastructure improvements"}),": - ",(0,s.jsx)(n.code,{children:"Dockerfile.test-install"}),": Fresh environment for testing installer - ",(0,s.jsx)(n.code,{children:"Dockerfile.ready"}),": Pre-installed container for quick usage - ",(0,s.jsx)(n.code,{children:"install.sh"}),": Interactive installer with venv, PATH setup, optional example tools - Database migration: Auto-adds missing columns on server start ",(0,s.jsx)(n.strong,{children:"Registry curation system"})," includes: - Role-based access control (user, moderator, admin) - Tool moderation workflow (pending \u2192 approved/rejected/removed) - Publisher management (ban/unban, role changes) - Private/unlisted tool visibility (auto-approved, owner-only access) - Audit logging for all moderation actions - Admin web UI pages (pending queue, publishers, reports, audit log) - Report resolution workflow ",(0,s.jsx)(n.strong,{children:"App pairing/connection flow"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge config connect "}),' CLI command - GUI Connect dialog with polling-based approval - Web UI "Connections" page (replaces API Tokens) - Device hostname tracking for connected apps ',(0,s.jsx)(n.strong,{children:"Tool ratings/reviews"})," includes: - 5-star rating system with review text - Average rating display on tool cards - Publisher reputation scores - Rating count and distribution ",(0,s.jsx)(n.strong,{children:"Tool marketplace UI enhancements"})," includes: - Browse all tools on page load - Category filter dropdown - Sort by popularity, rating, newest, name - Clickable tags for filtering - Installed/update indicators - Pagination controls ",(0,s.jsx)(n.strong,{children:"AI persona profiles"})," includes: - Profile dataclass with name, description, system_prompt - 8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst) - Custom profile creation and storage - Profile selector in Prompt Step dialog - Profile injection during tool execution - Profiles page in GUI (Ctrl+4) ",(0,s.jsx)(n.strong,{children:"AI-assisted code generation"})," includes: - Split-view Code Step dialog (editor + AI assist panel) - Provider selector for AI calls - Smart prompt template with available variables - Background thread for non-blocking AI calls - Automatic markdown fence stripping - Python syntax checking before save"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool search and filtering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"PySide6 GUI conversion"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Registry browser"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Publishing with connect flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Docker containers (test + ready)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive installer script"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Database migration system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Registry curation system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"App pairing/connection flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool ratings/reviews"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool marketplace UI enhancements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI persona profiles"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI-assisted code generation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m3-content--automation",children:"M3: Content & Automation"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q3 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Automated content ingestion and quality assurance for the tool ecosystem. ",(0,s.jsx)(n.strong,{children:"Import Fabric patterns"})," includes: - Run existing ",(0,s.jsx)(n.code,{children:"scripts/import_fabric.py"})," to populate registry - Automatic attribution with source fields (imported, MIT license, Daniel Miessler) - Category mapping based on pattern name prefixes - README generation with original pattern attribution ",(0,s.jsx)(n.strong,{children:"Auto-vetting pipeline"})," includes: - Integration with existing ",(0,s.jsx)(n.code,{children:"scrutiny.py"})," (honesty, transparency, scope, efficiency checks) - Integration with existing ",(0,s.jsx)(n.code,{children:"similarity.py"})," (duplicate detection) - Auto-approve/review/reject decision logic - Helpful suggestions for tool improvements ",(0,s.jsx)(n.strong,{children:"Scheduled sync"})," includes: - Periodic checks for Fabric repo updates - Automatic import of new patterns - Version tracking for updated patterns - Admin notifications for review queue"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Import Fabric patterns (233 total)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Scheduled Fabric repo sync"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Auto-vetting pipeline integration"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Community tool submissions workflow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Duplicate detection automation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m4-user-experience",children:"M4: User Experience"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q4 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (87%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Visual improvements, interactive guidance, and missing registry features. ",(0,s.jsx)(n.strong,{children:"Collections CLI commands"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge collections list"})," - List available collections with tool counts - ",(0,s.jsx)(n.code,{children:"cmdforge collections info "})," - Show collection details with tool list - ",(0,s.jsx)(n.code,{children:"cmdforge collections install "})," - Install all tools in a collection - ",(0,s.jsx)(n.code,{children:"--json"})," flag for machine-readable output - ",(0,s.jsx)(n.code,{children:"--pinned"})," flag to use pinned versions from collection ",(0,s.jsx)(n.strong,{children:"Admin collections management"})," includes: - Admin dashboard page at ",(0,s.jsx)(n.code,{children:"/dashboard/admin/collections"})," - Create/edit/delete collections via web UI - Tool reference input with version pinning - Admin API endpoints (GET/POST/PUT/DELETE) ",(0,s.jsx)(n.strong,{children:"Password reset flow"})," includes: - ",(0,s.jsx)(n.code,{children:"/forgot-password"})," page with email input form - ",(0,s.jsx)(n.code,{children:"/reset-password?token=xxx"})," page with new password form - API endpoints: request, validate, complete password reset - Email utility module (logs to console in dev mode, SMTP-ready for production) - Security: 1-hour token expiry, single-use tokens, rate limiting (5/hour per IP, 3/hour per email) - Session invalidation on password change - Email enumeration prevention (always returns success message) ",(0,s.jsx)(n.strong,{children:"Visual node-based editor"})," includes: - NodeGraphQt-based flow visualization (",(0,s.jsx)(n.code,{children:"flow_graph.py"}),") - Custom node types: InputNode, PromptNode, CodeNode, OutputNode - Visual connections showing data flow between steps - Double-click nodes to edit steps - Auto-layout with fit-to-view - Keyboard shortcuts (A: select all, F: fit view) - Context menu for common actions - Help banner overlay with controls ",(0,s.jsx)(n.strong,{children:"Drag-and-drop step reordering"})," includes: - Drag-drop reordering in list view - Reordering support from flow view - Variable dependency warnings when reordering breaks references - Automatic step index updates ",(0,s.jsx)(n.strong,{children:"Tool visualization improvements"})," includes: - Flow graph widget showing tool execution pipeline - Color-coded nodes by step type (indigo=prompt, green=code, purple=tool) - Input/output port visualization - Variable flow connections between steps ",(0,s.jsx)(n.strong,{children:"Tool composition and chaining UI"}),' includes: - ToolStep data class for calling other tools as pipeline steps - ToolStepDialog for configuring tool steps (tool selection, input mapping, args) - "Add Tool" button in Tool Builder alongside Add Prompt/Add Code - ToolNode in flow graph visualization (purple node) - Input template with variable substitution from previous steps - Argument passing with variable substitution - Provider override option for nested tool calls - Recursion depth protection (max 10 levels) - Dependency checking and missing tool warnings - Auto-populate dependencies when adding ToolStep in GUI - ',(0,s.jsx)(n.code,{children:"--auto-install"})," flag for automatic dependency installation at runtime ",(0,s.jsx)(n.strong,{children:"Interactive walkthroughs"})," includes: - First-time user onboarding - Guided tool creation tutorial - Feature discovery tooltips - Context-sensitive help"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Collections CLI commands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Admin collections management UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Visual node-based step editor"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive onboarding walkthroughs"}),(0,s.jsx)(n.td,{children:"Not Started"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool visualization improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool composition and chaining UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Drag-and-drop step reordering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Password reset flow"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453(e,n,t){t.d(n,{R:()=>o,x:()=>d});var i=t(6540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/817f7194.9dbada51.js b/assets/js/817f7194.9dbada51.js new file mode 100644 index 0000000..bae95ef --- /dev/null +++ b/assets/js/817f7194.9dbada51.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[574],{921(e,n,t){t.r(n),t.d(n,{assets:()=>l,contentTitle:()=>d,default:()=>h,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"milestones","title":"Milestones","description":"Active","source":"@site/docs/milestones.md","sourceDirName":".","slug":"/milestones","permalink":"/rob/CmdForge/milestones","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"milestones","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var s=t(4848),r=t(8453);const o={type:"milestones",project:"cmdforge",updated:new Date("2026-01-17T00:00:00.000Z")},d="Milestones",l={},c=[{value:"Active",id:"active",level:2},{value:"Completed",id:"completed",level:2},{value:"M5: Testing & Polish",id:"m5-testing--polish",level:4},{value:"M0: Core Platform",id:"m0-core-platform",level:4},{value:"M1: Production Ready",id:"m1-production-ready",level:4},{value:"M2: Tool Discovery",id:"m2-tool-discovery",level:4},{value:"M3: Content & Automation",id:"m3-content--automation",level:4},{value:"M4: User Experience",id:"m4-user-experience",level:4}];function a(e){const n={code:"code",h1:"h1",h2:"h2",h4:"h4",header:"header",hr:"hr",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"milestones",children:"Milestones"})}),"\n",(0,s.jsx)(n.h2,{id:"active",children:"Active"}),"\n",(0,s.jsx)(n.p,{children:"(none)"}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h2,{id:"completed",children:"Completed"}),"\n",(0,s.jsx)(n.h4,{id:"m5-testing--polish",children:"M5: Testing & Polish"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q1 2027\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Testing framework, theming, and version management. ",(0,s.jsx)(n.strong,{children:"Project dependencies"})," (completed): - ",(0,s.jsx)(n.code,{children:"cmdforge.yaml"})," manifest format for declaring tool dependencies - ",(0,s.jsx)(n.code,{children:"cmdforge install"})," to install all dependencies from manifest - ",(0,s.jsx)(n.code,{children:"cmdforge add official/toolname"})," to add a dependency to manifest - Automatic dependency checking before running meta-tools. ",(0,s.jsx)(n.strong,{children:"Tool testing framework"})," includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect ",(0,s.jsx)(n.code,{children:"{variable}"})," references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool testing framework"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Simple theming (external QSS files)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dark mode"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool versioning support"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Version constraints in manifests"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:["Project dependency system (",(0,s.jsx)(n.code,{children:"cmdforge install"}),")"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"cmdforge add"})," command"]}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Dependency resolution for meta-tools"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m0-core-platform",children:"M0: Core Platform"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": December 2025\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"The foundational CmdForge platform with AI-powered CLI tool builder, YAML tool definitions, web UI, offline caching, and provider abstraction."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"YAML tool definition system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CLI entry point and subcommands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Provider abstraction layer"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Offline caching for tools"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Web UI for tool browsing"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool execution engine"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m1-production-ready",children:"M1: Production Ready"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": February 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsx)(n.p,{children:"Production deployment with proper server configuration, complete documentation, and improved reliability."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Public documentation"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd service setup"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Gunicorn production server"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Systemd linger for persistence"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"CI/CD pipeline"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Error message improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Source field display in web UI"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m2-tool-discovery",children:"M2: Tool Discovery"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q2 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality. ",(0,s.jsx)(n.strong,{children:"Tool search and filtering"})," includes: - ",(0,s.jsx)(n.code,{children:"/api/v1/tags"})," endpoint for listing tags with counts - Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range - Faceted search responses with category/tag/owner counts - CLI: ",(0,s.jsx)(n.code,{children:"--tag"}),", ",(0,s.jsx)(n.code,{children:"--owner"}),", ",(0,s.jsx)(n.code,{children:"--min-downloads"}),", ",(0,s.jsx)(n.code,{children:"--popular"}),", ",(0,s.jsx)(n.code,{children:"--since"}),", ",(0,s.jsx)(n.code,{children:"--json"}),", ",(0,s.jsx)(n.code,{children:"--show-facets"})," options - CLI: ",(0,s.jsx)(n.code,{children:"registry tags"})," subcommand - Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state ",(0,s.jsx)(n.strong,{children:"PySide6 GUI conversion"})," includes: - Modern desktop GUI replacing urwid TUI - Sidebar navigation (My Tools, Registry, Providers, Profiles) - Tool Builder with visual form for creating/editing tools - Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q) - Window geometry persistence ",(0,s.jsx)(n.strong,{children:"GUI Registry browser"})," includes: - Browse/search tools with category and sort filters - Star ratings display in table and details - Clickable tags for filtering - Installed indicator (\u2713) and update available (\u2191) - Pagination for large result sets - Publisher reputation info ",(0,s.jsx)(n.strong,{children:"GUI Publishing"})," includes: - Connect dialog with polling-based account pairing - Publish workflow with version selection - Full publish workflow with confirmation ",(0,s.jsx)(n.strong,{children:"Infrastructure improvements"}),": - ",(0,s.jsx)(n.code,{children:"Dockerfile.test-install"}),": Fresh environment for testing installer - ",(0,s.jsx)(n.code,{children:"Dockerfile.ready"}),": Pre-installed container for quick usage - ",(0,s.jsx)(n.code,{children:"install.sh"}),": Interactive installer with venv, PATH setup, optional example tools - Database migration: Auto-adds missing columns on server start ",(0,s.jsx)(n.strong,{children:"Registry curation system"})," includes: - Role-based access control (user, moderator, admin) - Tool moderation workflow (pending \u2192 approved/rejected/removed) - Publisher management (ban/unban, role changes) - Private/unlisted tool visibility (auto-approved, owner-only access) - Audit logging for all moderation actions - Admin web UI pages (pending queue, publishers, reports, audit log) - Report resolution workflow ",(0,s.jsx)(n.strong,{children:"App pairing/connection flow"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge config connect "}),' CLI command - GUI Connect dialog with polling-based approval - Web UI "Connections" page (replaces API Tokens) - Device hostname tracking for connected apps ',(0,s.jsx)(n.strong,{children:"Tool ratings/reviews"})," includes: - 5-star rating system with review text - Average rating display on tool cards - Publisher reputation scores - Rating count and distribution ",(0,s.jsx)(n.strong,{children:"Tool marketplace UI enhancements"})," includes: - Browse all tools on page load - Category filter dropdown - Sort by popularity, rating, newest, name - Clickable tags for filtering - Installed/update indicators - Pagination controls ",(0,s.jsx)(n.strong,{children:"AI persona profiles"})," includes: - Profile dataclass with name, description, system_prompt - 8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst) - Custom profile creation and storage - Profile selector in Prompt Step dialog - Profile injection during tool execution - Profiles page in GUI (Ctrl+4) ",(0,s.jsx)(n.strong,{children:"AI-assisted code generation"})," includes: - Split-view Code Step dialog (editor + AI assist panel) - Provider selector for AI calls - Smart prompt template with available variables - Background thread for non-blocking AI calls - Automatic markdown fence stripping - Python syntax checking before save"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool search and filtering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"PySide6 GUI conversion"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Registry browser"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"GUI Publishing with connect flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Docker containers (test + ready)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive installer script"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Database migration system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Registry curation system"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"App pairing/connection flow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool ratings/reviews"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool marketplace UI enhancements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI persona profiles"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"AI-assisted code generation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m3-content--automation",children:"M3: Content & Automation"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q3 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Automated content ingestion and quality assurance for the tool ecosystem. ",(0,s.jsx)(n.strong,{children:"Import Fabric patterns"})," includes: - Run existing ",(0,s.jsx)(n.code,{children:"scripts/import_fabric.py"})," to populate registry - Automatic attribution with source fields (imported, MIT license, Daniel Miessler) - Category mapping based on pattern name prefixes - README generation with original pattern attribution ",(0,s.jsx)(n.strong,{children:"Auto-vetting pipeline"})," includes: - Integration with existing ",(0,s.jsx)(n.code,{children:"scrutiny.py"})," (honesty, transparency, scope, efficiency checks) - Integration with existing ",(0,s.jsx)(n.code,{children:"similarity.py"})," (duplicate detection) - Auto-approve/review/reject decision logic - Helpful suggestions for tool improvements ",(0,s.jsx)(n.strong,{children:"Scheduled sync"})," includes: - Periodic checks for Fabric repo updates - Automatic import of new patterns - Version tracking for updated patterns - Admin notifications for review queue"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Import Fabric patterns (233 total)"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Scheduled Fabric repo sync"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Auto-vetting pipeline integration"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Community tool submissions workflow"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Duplicate detection automation"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.h4,{id:"m4-user-experience",children:"M4: User Experience"}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"Target"}),": Q4 2026\n",(0,s.jsx)(n.strong,{children:"Status"}),": Completed (87%)"]}),"\n",(0,s.jsxs)(n.p,{children:["Visual improvements, interactive guidance, and missing registry features. ",(0,s.jsx)(n.strong,{children:"Collections CLI commands"})," includes: - ",(0,s.jsx)(n.code,{children:"cmdforge collections list"})," - List available collections with tool counts - ",(0,s.jsx)(n.code,{children:"cmdforge collections info "})," - Show collection details with tool list - ",(0,s.jsx)(n.code,{children:"cmdforge collections install "})," - Install all tools in a collection - ",(0,s.jsx)(n.code,{children:"--json"})," flag for machine-readable output - ",(0,s.jsx)(n.code,{children:"--pinned"})," flag to use pinned versions from collection ",(0,s.jsx)(n.strong,{children:"Admin collections management"})," includes: - Admin dashboard page at ",(0,s.jsx)(n.code,{children:"/dashboard/admin/collections"})," - Create/edit/delete collections via web UI - Tool reference input with version pinning - Admin API endpoints (GET/POST/PUT/DELETE) ",(0,s.jsx)(n.strong,{children:"Password reset flow"})," includes: - ",(0,s.jsx)(n.code,{children:"/forgot-password"})," page with email input form - ",(0,s.jsx)(n.code,{children:"/reset-password?token=xxx"})," page with new password form - API endpoints: request, validate, complete password reset - Email utility module (logs to console in dev mode, SMTP-ready for production) - Security: 1-hour token expiry, single-use tokens, rate limiting (5/hour per IP, 3/hour per email) - Session invalidation on password change - Email enumeration prevention (always returns success message) ",(0,s.jsx)(n.strong,{children:"Visual node-based editor"})," includes: - NodeGraphQt-based flow visualization (",(0,s.jsx)(n.code,{children:"flow_graph.py"}),") - Custom node types: InputNode, PromptNode, CodeNode, OutputNode - Visual connections showing data flow between steps - Double-click nodes to edit steps - Auto-layout with fit-to-view - Keyboard shortcuts (A: select all, F: fit view) - Context menu for common actions - Help banner overlay with controls ",(0,s.jsx)(n.strong,{children:"Drag-and-drop step reordering"})," includes: - Drag-drop reordering in list view - Reordering support from flow view - Variable dependency warnings when reordering breaks references - Automatic step index updates ",(0,s.jsx)(n.strong,{children:"Tool visualization improvements"})," includes: - Flow graph widget showing tool execution pipeline - Color-coded nodes by step type (indigo=prompt, green=code, purple=tool) - Input/output port visualization - Variable flow connections between steps ",(0,s.jsx)(n.strong,{children:"Tool composition and chaining UI"}),' includes: - ToolStep data class for calling other tools as pipeline steps - ToolStepDialog for configuring tool steps (tool selection, input mapping, args) - "Add Tool" button in Tool Builder alongside Add Prompt/Add Code - ToolNode in flow graph visualization (purple node) - Input template with variable substitution from previous steps - Argument passing with variable substitution - Provider override option for nested tool calls - Recursion depth protection (max 10 levels) - Dependency checking and missing tool warnings - Auto-populate dependencies when adding ToolStep in GUI - ',(0,s.jsx)(n.code,{children:"--auto-install"})," flag for automatic dependency installation at runtime ",(0,s.jsx)(n.strong,{children:"Interactive walkthroughs"})," includes: - First-time user onboarding - Guided tool creation tutorial - Feature discovery tooltips - Context-sensitive help"]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Deliverable"}),(0,s.jsx)(n.th,{children:"Status"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Collections CLI commands"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Admin collections management UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Visual node-based step editor"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Interactive onboarding walkthroughs"}),(0,s.jsx)(n.td,{children:"Not Started"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool visualization improvements"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tool composition and chaining UI"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Drag-and-drop step reordering"}),(0,s.jsx)(n.td,{children:"Done"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Password reset flow"}),(0,s.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,s.jsx)(n.hr,{})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(a,{...e})}):a(e)}},8453(e,n,t){t.d(n,{R:()=>o,x:()=>d});var i=t(6540);const s={},r=i.createContext(s);function o(e){const n=i.useContext(r);return i.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e719f3dc.a5309d63.js b/assets/js/e719f3dc.a5309d63.js deleted file mode 100644 index c193bd2..0000000 --- a/assets/js/e719f3dc.a5309d63.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[207],{7271(e,s,t){t.r(s),t.d(s,{assets:()=>d,contentTitle:()=>l,default:()=>p,frontMatter:()=>o,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Ideas","source":"@site/docs/ideas-and-exploration.md","sourceDirName":".","slug":"/ideas-and-exploration","permalink":"/rob/CmdForge/ideas-and-exploration","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"ideas","project":"cmdforge","updated":"2026-01-08T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/CmdForge/goals"},"next":{"title":"Milestones","permalink":"/rob/CmdForge/milestones"}}');var n=t(4848),a=t(8453);const o={type:"ideas",project:"cmdforge",updated:new Date("2026-01-08T00:00:00.000Z")},l="Ideas & Exploration",d={},c=[{value:"Ideas",id:"ideas",level:2}];function r(e){const s={h1:"h1",h2:"h2",header:"header",input:"input",li:"li",ul:"ul",...(0,a.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"ideas--exploration",children:"Ideas & Exploration"})}),"\n",(0,n.jsx)(s.h2,{id:"ideas",children:"Ideas"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool marketplace design #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool search and filtering #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","User tool ratings/reviews #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool usage analytics #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Plugin architecture design #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Custom AI backend support #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool composition and chaining #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool testing framework #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","VS Code extension #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Provider auto-detection #low"]}),"\n"]})]})}function p(e={}){const{wrapper:s}={...(0,a.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},8453(e,s,t){t.d(s,{R:()=>o,x:()=>l});var i=t(6540);const n={},a=i.createContext(n);function o(e){const s=i.useContext(a);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function l(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),i.createElement(a.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/e719f3dc.de2c390f.js b/assets/js/e719f3dc.de2c390f.js new file mode 100644 index 0000000..4f84f50 --- /dev/null +++ b/assets/js/e719f3dc.de2c390f.js @@ -0,0 +1 @@ +"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[207],{7271(e,s,t){t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>o,default:()=>p,frontMatter:()=>a,metadata:()=>i,toc:()=>d});const i=JSON.parse('{"id":"ideas-and-exploration","title":"Ideas & Exploration","description":"Completed","source":"@site/docs/ideas-and-exploration.md","sourceDirName":".","slug":"/ideas-and-exploration","permalink":"/rob/CmdForge/ideas-and-exploration","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"type":"ideas","project":"cmdforge","updated":"2026-01-17T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Goals","permalink":"/rob/CmdForge/goals"},"next":{"title":"Milestones","permalink":"/rob/CmdForge/milestones"}}');var n=t(4848),l=t(8453);const a={type:"ideas",project:"cmdforge",updated:new Date("2026-01-17T00:00:00.000Z")},o="Ideas & Exploration",c={},d=[{value:"Completed",id:"completed",level:2},{value:"Ideas",id:"ideas",level:2}];function r(e){const s={h1:"h1",h2:"h2",header:"header",input:"input",li:"li",ul:"ul",...(0,l.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.header,{children:(0,n.jsx)(s.h1,{id:"ideas--exploration",children:"Ideas & Exploration"})}),"\n",(0,n.jsx)(s.h2,{id:"completed",children:"Completed"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tool marketplace design #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tool search and filtering #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","User tool ratings/reviews #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tool composition and chaining #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",checked:!0,disabled:!0})," ","Tool testing framework #medium"]}),"\n"]}),"\n",(0,n.jsx)(s.h2,{id:"ideas",children:"Ideas"}),"\n",(0,n.jsxs)(s.ul,{className:"contains-task-list",children:["\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool usage analytics #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Plugin architecture design #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Custom AI backend support #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","VS Code extension #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Provider auto-detection #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Mobile companion app #low"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Tool templates/scaffolding #medium"]}),"\n",(0,n.jsxs)(s.li,{className:"task-list-item",children:[(0,n.jsx)(s.input,{type:"checkbox",disabled:!0})," ","Natural language tool creation #medium"]}),"\n"]})]})}function p(e={}){const{wrapper:s}={...(0,l.R)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(r,{...e})}):r(e)}},8453(e,s,t){t.d(s,{R:()=>a,x:()=>o});var i=t(6540);const n={},l=i.createContext(n);function a(e){const s=i.useContext(l);return i.useMemo(function(){return"function"==typeof e?e(s):{...s,...e}},[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:a(e.components),i.createElement(l.Provider,{value:s},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.fa3a2ea9.js b/assets/js/runtime~main.a8ea285c.js similarity index 93% rename from assets/js/runtime~main.fa3a2ea9.js rename to assets/js/runtime~main.a8ea285c.js index 4e3de36..afff710 100644 --- a/assets/js/runtime~main.fa3a2ea9.js +++ b/assets/js/runtime~main.a8ea285c.js @@ -1 +1 @@ -(()=>{"use strict";var e,r,t,a,o,n={},b={};function c(e){var r=b[e];if(void 0!==r)return r.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,c),t.loaded=!0,t.exports}c.m=n,c.c=b,e=[],c.O=(r,t,a,o)=>{if(!t){var n=1/0;for(i=0;i=o)&&Object.keys(c.O).every(e=>c.O[e](t[d]))?t.splice(d--,1):(b=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);c.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var b=2&a&&e;("object"==typeof b||"function"==typeof b)&&!~r.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,c.d(o,n),o},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((r,t)=>(c.f[t](e,r),r),[])),c.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",105:"6704ba13",203:"0330220f",207:"e719f3dc",331:"263e9506",340:"17152627",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",530:"9bb76ab4",574:"817f7194",647:"5e95c892",742:"aba21aa0",746:"de715384",838:"edbf8f3a",854:"3fbf7384",887:"387720e6",894:"5eebbccf",969:"14eb3368"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",105:"e26e2266",203:"41bc8204",207:"a5309d63",237:"447ba118",331:"4466c5fa",340:"5e0888a9",393:"338adddd",401:"3815ec59",413:"aca18eaa",443:"1fd85cce",530:"34bde5a9",574:"3dfbfc69",647:"a3b66919",742:"4a552a5c",746:"c9cc7bb3",838:"fe76e489",854:"fda14303",887:"1e51a2f9",894:"e6c8b639",969:"33737677"}[e]+".js",c.miniCssF=e=>{},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",c.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var b,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),d&&document.head.appendChild(b)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.p="/rob/CmdForge/",c.gca=function(e){return e={17152627:"340",17896441:"401",a94703ab:"48",a7bd4aaa:"98","6704ba13":"105","0330220f":"203",e719f3dc:"207","263e9506":"331","1db78e9f":"393","1db64337":"413","5281b7a2":"443","9bb76ab4":"530","817f7194":"574","5e95c892":"647",aba21aa0:"742",de715384:"746",edbf8f3a:"838","3fbf7384":"854","387720e6":"887","5eebbccf":"894","14eb3368":"969"}[e]||e,c.p+c.u(e)},(()=>{var e={354:0,869:0};c.f.j=(r,t)=>{var a=c.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=c.p+c.u(r),b=new Error;c.l(n,t=>{if(c.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;b.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",b.name="ChunkLoadError",b.type=o,b.request=n,a[1](b)}},"chunk-"+r,r)}},c.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,b,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in b)c.o(b,a)&&(c.m[a]=b[a]);if(d)var i=d(c)}for(r&&r(t);f{"use strict";var e,r,t,a,o,n={},b={};function c(e){var r=b[e];if(void 0!==r)return r.exports;var t=b[e]={id:e,loaded:!1,exports:{}};return n[e].call(t.exports,t,t.exports,c),t.loaded=!0,t.exports}c.m=n,c.c=b,e=[],c.O=(r,t,a,o)=>{if(!t){var n=1/0;for(i=0;i=o)&&Object.keys(c.O).every(e=>c.O[e](t[d]))?t.splice(d--,1):(b=!1,o0&&e[i-1][2]>o;i--)e[i]=e[i-1];e[i]=[t,a,o]},c.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return c.d(r,{a:r}),r},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,c.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);c.r(o);var n={};r=r||[null,t({}),t([]),t(t)];for(var b=2&a&&e;("object"==typeof b||"function"==typeof b)&&!~r.indexOf(b);b=t(b))Object.getOwnPropertyNames(b).forEach(r=>n[r]=()=>e[r]);return n.default=()=>e,c.d(o,n),o},c.d=(e,r)=>{for(var t in r)c.o(r,t)&&!c.o(e,t)&&Object.defineProperty(e,t,{enumerable:!0,get:r[t]})},c.f={},c.e=e=>Promise.all(Object.keys(c.f).reduce((r,t)=>(c.f[t](e,r),r),[])),c.u=e=>"assets/js/"+({48:"a94703ab",98:"a7bd4aaa",105:"6704ba13",203:"0330220f",207:"e719f3dc",331:"263e9506",340:"17152627",393:"1db78e9f",401:"17896441",413:"1db64337",443:"5281b7a2",530:"9bb76ab4",574:"817f7194",647:"5e95c892",742:"aba21aa0",746:"de715384",838:"edbf8f3a",854:"3fbf7384",887:"387720e6",894:"5eebbccf",969:"14eb3368"}[e]||e)+"."+{48:"b8c77466",98:"3ba34601",105:"e26e2266",203:"41bc8204",207:"de2c390f",237:"447ba118",331:"4466c5fa",340:"5e0888a9",393:"338adddd",401:"3815ec59",413:"aca18eaa",443:"1fd85cce",530:"34bde5a9",574:"9dbada51",647:"a3b66919",742:"4a552a5c",746:"c9cc7bb3",838:"fe76e489",854:"013e3796",887:"1e51a2f9",894:"e6c8b639",969:"33737677"}[e]+".js",c.miniCssF=e=>{},c.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),a={},o="project-public-docs:",c.l=(e,r,t,n)=>{if(a[e])a[e].push(r);else{var b,d;if(void 0!==t)for(var f=document.getElementsByTagName("script"),i=0;i{b.onerror=b.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],b.parentNode&&b.parentNode.removeChild(b),o&&o.forEach(e=>e(t)),r)return r(t)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=u.bind(null,b.onerror),b.onload=u.bind(null,b.onload),d&&document.head.appendChild(b)}},c.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.p="/rob/CmdForge/",c.gca=function(e){return e={17152627:"340",17896441:"401",a94703ab:"48",a7bd4aaa:"98","6704ba13":"105","0330220f":"203",e719f3dc:"207","263e9506":"331","1db78e9f":"393","1db64337":"413","5281b7a2":"443","9bb76ab4":"530","817f7194":"574","5e95c892":"647",aba21aa0:"742",de715384:"746",edbf8f3a:"838","3fbf7384":"854","387720e6":"887","5eebbccf":"894","14eb3368":"969"}[e]||e,c.p+c.u(e)},(()=>{var e={354:0,869:0};c.f.j=(r,t)=>{var a=c.o(e,r)?e[r]:void 0;if(0!==a)if(a)t.push(a[2]);else if(/^(354|869)$/.test(r))e[r]=0;else{var o=new Promise((t,o)=>a=e[r]=[t,o]);t.push(a[2]=o);var n=c.p+c.u(r),b=new Error;c.l(n,t=>{if(c.o(e,r)&&(0!==(a=e[r])&&(e[r]=void 0),a)){var o=t&&("load"===t.type?"missing":t.type),n=t&&t.target&&t.target.src;b.message="Loading chunk "+r+" failed.\n("+o+": "+n+")",b.name="ChunkLoadError",b.type=o,b.request=n,a[1](b)}},"chunk-"+r,r)}},c.O.j=r=>0===e[r];var r=(r,t)=>{var a,o,[n,b,d]=t,f=0;if(n.some(r=>0!==e[r])){for(a in b)c.o(b,a)&&(c.m[a]=b[a]);if(d)var i=d(c)}for(r&&r(t);f Reference | CmdForge - + diff --git a/goals/index.html b/goals/index.html index 6efa156..1535a40 100644 --- a/goals/index.html +++ b/goals/index.html @@ -4,7 +4,7 @@ Goals | CmdForge - + diff --git a/ideas-and-exploration/index.html b/ideas-and-exploration/index.html index 04fb7af..5ac06f9 100644 --- a/ideas-and-exploration/index.html +++ b/ideas-and-exploration/index.html @@ -3,8 +3,8 @@ -Ideas & Exploration | CmdForge - +Ideas & Exploration | CmdForge + @@ -12,18 +12,24 @@

Ideas & Exploration

+

Completed

+
    +
  • Tool marketplace design #medium
  • +
  • Tool search and filtering #medium
  • +
  • User tool ratings/reviews #low
  • +
  • Tool composition and chaining #medium
  • +
  • Tool testing framework #medium
  • +

Ideas

    -
  • Tool marketplace design #medium
  • -
  • Tool search and filtering #medium
  • -
  • User tool ratings/reviews #low
  • Tool usage analytics #low
  • Plugin architecture design #medium
  • Custom AI backend support #medium
  • -
  • Tool composition and chaining #medium
  • -
  • Tool testing framework #medium
  • VS Code extension #low
  • Provider auto-detection #low
  • -
+
  • Mobile companion app #low
  • +
  • Tool templates/scaffolding #medium
  • +
  • Natural language tool creation #medium
  • + \ No newline at end of file diff --git a/index.html b/index.html index 5341d8a..00c407b 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ CmdForge Overview | CmdForge - + diff --git a/milestones/index.html b/milestones/index.html new file mode 100644 index 0000000..20bd691 --- /dev/null +++ b/milestones/index.html @@ -0,0 +1,56 @@ + + + + + +Milestones | CmdForge + + + + + + + +

    Milestones

    +

    Active

    +

    (none)

    +
    +

    Completed

    +

    M5: Testing & Polish

    +

    Target: Q1 2027 +Status: Completed (100%)

    +

    Testing framework, theming, and version management. Project dependencies (completed): - cmdforge.yaml manifest format for declaring tool dependencies - cmdforge install to install all dependencies from manifest - cmdforge add official/toolname to add a dependency to manifest - Automatic dependency checking before running meta-tools. Tool testing framework includes: - TestStepDialog for interactive step testing from GUI - Test button in Tool Builder to test individual steps - Variable input forms auto-detect {variable} references from step templates - Multiple assertion types (not_empty, contains, valid_json, matches_regex, min/max_length, etc.) - Background execution with timing metrics - Output variable display and assertion pass/fail results - Provider override for testing with mock provider

    +
    DeliverableStatus
    Tool testing frameworkDone
    Simple theming (external QSS files)Done
    Dark modeDone
    Tool versioning supportDone
    Version constraints in manifestsDone
    Project dependency system (cmdforge install)Done
    cmdforge add commandDone
    Dependency resolution for meta-toolsDone
    +
    +

    M0: Core Platform

    +

    Target: December 2025 +Status: Completed (100%)

    +

    The foundational CmdForge platform with AI-powered CLI tool builder, YAML tool definitions, web UI, offline caching, and provider abstraction.

    +
    DeliverableStatus
    YAML tool definition systemDone
    CLI entry point and subcommandsDone
    Provider abstraction layerDone
    Offline caching for toolsDone
    Web UI for tool browsingDone
    Tool execution engineDone
    +
    +

    M1: Production Ready

    +

    Target: February 2026 +Status: Completed (100%)

    +

    Production deployment with proper server configuration, complete documentation, and improved reliability.

    +
    DeliverableStatus
    Public documentationDone
    Systemd service setupDone
    Gunicorn production serverDone
    Systemd linger for persistenceDone
    CI/CD pipelineDone
    Error message improvementsDone
    Source field display in web UIDone
    +
    +

    M2: Tool Discovery

    +

    Target: Q2 2026 +Status: Completed (100%)

    +

    Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality. Tool search and filtering includes: - /api/v1/tags endpoint for listing tags with counts - Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range - Faceted search responses with category/tag/owner counts - CLI: --tag, --owner, --min-downloads, --popular, --since, --json, --show-facets options - CLI: registry tags subcommand - Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state PySide6 GUI conversion includes: - Modern desktop GUI replacing urwid TUI - Sidebar navigation (My Tools, Registry, Providers, Profiles) - Tool Builder with visual form for creating/editing tools - Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q) - Window geometry persistence GUI Registry browser includes: - Browse/search tools with category and sort filters - Star ratings display in table and details - Clickable tags for filtering - Installed indicator (✓) and update available (↑) - Pagination for large result sets - Publisher reputation info GUI Publishing includes: - Connect dialog with polling-based account pairing - Publish workflow with version selection - Full publish workflow with confirmation Infrastructure improvements: - Dockerfile.test-install: Fresh environment for testing installer - Dockerfile.ready: Pre-installed container for quick usage - install.sh: Interactive installer with venv, PATH setup, optional example tools - Database migration: Auto-adds missing columns on server start Registry curation system includes: - Role-based access control (user, moderator, admin) - Tool moderation workflow (pending → approved/rejected/removed) - Publisher management (ban/unban, role changes) - Private/unlisted tool visibility (auto-approved, owner-only access) - Audit logging for all moderation actions - Admin web UI pages (pending queue, publishers, reports, audit log) - Report resolution workflow App pairing/connection flow includes: - cmdforge config connect <username> CLI command - GUI Connect dialog with polling-based approval - Web UI "Connections" page (replaces API Tokens) - Device hostname tracking for connected apps Tool ratings/reviews includes: - 5-star rating system with review text - Average rating display on tool cards - Publisher reputation scores - Rating count and distribution Tool marketplace UI enhancements includes: - Browse all tools on page load - Category filter dropdown - Sort by popularity, rating, newest, name - Clickable tags for filtering - Installed/update indicators - Pagination controls AI persona profiles includes: - Profile dataclass with name, description, system_prompt - 8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst) - Custom profile creation and storage - Profile selector in Prompt Step dialog - Profile injection during tool execution - Profiles page in GUI (Ctrl+4) AI-assisted code generation includes: - Split-view Code Step dialog (editor + AI assist panel) - Provider selector for AI calls - Smart prompt template with available variables - Background thread for non-blocking AI calls - Automatic markdown fence stripping - Python syntax checking before save

    +
    DeliverableStatus
    Tool search and filteringDone
    PySide6 GUI conversionDone
    GUI Registry browserDone
    GUI Publishing with connect flowDone
    Docker containers (test + ready)Done
    Interactive installer scriptDone
    Database migration systemDone
    Registry curation systemDone
    App pairing/connection flowDone
    Tool ratings/reviewsDone
    Tool marketplace UI enhancementsDone
    AI persona profilesDone
    AI-assisted code generationDone
    +
    +

    M3: Content & Automation

    +

    Target: Q3 2026 +Status: Completed (100%)

    +

    Automated content ingestion and quality assurance for the tool ecosystem. Import Fabric patterns includes: - Run existing scripts/import_fabric.py to populate registry - Automatic attribution with source fields (imported, MIT license, Daniel Miessler) - Category mapping based on pattern name prefixes - README generation with original pattern attribution Auto-vetting pipeline includes: - Integration with existing scrutiny.py (honesty, transparency, scope, efficiency checks) - Integration with existing similarity.py (duplicate detection) - Auto-approve/review/reject decision logic - Helpful suggestions for tool improvements Scheduled sync includes: - Periodic checks for Fabric repo updates - Automatic import of new patterns - Version tracking for updated patterns - Admin notifications for review queue

    +
    DeliverableStatus
    Import Fabric patterns (233 total)Done
    Scheduled Fabric repo syncDone
    Auto-vetting pipeline integrationDone
    Community tool submissions workflowDone
    Duplicate detection automationDone
    +
    +

    M4: User Experience

    +

    Target: Q4 2026 +Status: Completed (87%)

    +

    Visual improvements, interactive guidance, and missing registry features. Collections CLI commands includes: - cmdforge collections list - List available collections with tool counts - cmdforge collections info <name> - Show collection details with tool list - cmdforge collections install <name> - Install all tools in a collection - --json flag for machine-readable output - --pinned flag to use pinned versions from collection Admin collections management includes: - Admin dashboard page at /dashboard/admin/collections - Create/edit/delete collections via web UI - Tool reference input with version pinning - Admin API endpoints (GET/POST/PUT/DELETE) Password reset flow includes: - /forgot-password page with email input form - /reset-password?token=xxx page with new password form - API endpoints: request, validate, complete password reset - Email utility module (logs to console in dev mode, SMTP-ready for production) - Security: 1-hour token expiry, single-use tokens, rate limiting (5/hour per IP, 3/hour per email) - Session invalidation on password change - Email enumeration prevention (always returns success message) Visual node-based editor includes: - NodeGraphQt-based flow visualization (flow_graph.py) - Custom node types: InputNode, PromptNode, CodeNode, OutputNode - Visual connections showing data flow between steps - Double-click nodes to edit steps - Auto-layout with fit-to-view - Keyboard shortcuts (A: select all, F: fit view) - Context menu for common actions - Help banner overlay with controls Drag-and-drop step reordering includes: - Drag-drop reordering in list view - Reordering support from flow view - Variable dependency warnings when reordering breaks references - Automatic step index updates Tool visualization improvements includes: - Flow graph widget showing tool execution pipeline - Color-coded nodes by step type (indigo=prompt, green=code, purple=tool) - Input/output port visualization - Variable flow connections between steps Tool composition and chaining UI includes: - ToolStep data class for calling other tools as pipeline steps - ToolStepDialog for configuring tool steps (tool selection, input mapping, args) - "Add Tool" button in Tool Builder alongside Add Prompt/Add Code - ToolNode in flow graph visualization (purple node) - Input template with variable substitution from previous steps - Argument passing with variable substitution - Provider override option for nested tool calls - Recursion depth protection (max 10 levels) - Dependency checking and missing tool warnings - Auto-populate dependencies when adding ToolStep in GUI - --auto-install flag for automatic dependency installation at runtime Interactive walkthroughs includes: - First-time user onboarding - Guided tool creation tutorial - Feature discovery tooltips - Context-sensitive help

    +
    DeliverableStatus
    Collections CLI commandsDone
    Admin collections management UIDone
    Visual node-based step editorDone
    Interactive onboarding walkthroughsNot Started
    Tool visualization improvementsDone
    Tool composition and chaining UIDone
    Drag-and-drop step reorderingDone
    Password reset flowDone
    +
    + + \ No newline at end of file diff --git a/reference/collections/index.html b/reference/collections/index.html index bfb44aa..918fb56 100644 --- a/reference/collections/index.html +++ b/reference/collections/index.html @@ -4,7 +4,7 @@ CmdForge Collections | CmdForge - + diff --git a/reference/design/index.html b/reference/design/index.html index 059161e..e5009e7 100644 --- a/reference/design/index.html +++ b/reference/design/index.html @@ -4,7 +4,7 @@ CmdForge Design Document | CmdForge - + diff --git a/reference/meta-tools/index.html b/reference/meta-tools/index.html index e26543a..487628b 100644 --- a/reference/meta-tools/index.html +++ b/reference/meta-tools/index.html @@ -4,7 +4,7 @@ Meta-Tools: Tools That Call Other Tools | CmdForge - + diff --git a/reference/providers/index.html b/reference/providers/index.html index c3a1ff9..8d6ff24 100644 --- a/reference/providers/index.html +++ b/reference/providers/index.html @@ -4,7 +4,7 @@ Provider Setup Guide | CmdForge - + diff --git a/reference/registry-spec/index.html b/reference/registry-spec/index.html index 18b60be..dd5a46e 100644 --- a/reference/registry-spec/index.html +++ b/reference/registry-spec/index.html @@ -4,7 +4,7 @@ CmdForge Registry Design | CmdForge - + diff --git a/reference/web-ui-spec/index.html b/reference/web-ui-spec/index.html index e5ca372..25a307e 100644 --- a/reference/web-ui-spec/index.html +++ b/reference/web-ui-spec/index.html @@ -4,7 +4,7 @@ CmdForge Web UI Design | CmdForge - + diff --git a/todos/index.html b/todos/index.html index 4a9f204..7c16fcd 100644 --- a/todos/index.html +++ b/todos/index.html @@ -4,7 +4,7 @@ CmdForge TODOs | CmdForge - +