"use strict";(globalThis.webpackChunkproject_public_docs=globalThis.webpackChunkproject_public_docs||[]).push([[574],{921(e,n,i){i.r(n),i.d(n,{assets:()=>o,contentTitle:()=>d,default:()=>a,frontMatter:()=>l,metadata:()=>s,toc:()=>c});const s=JSON.parse('{"id":"milestones","title":"Milestones","description":"M0: Core Platform","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-14T00:00:00.000Z"},"sidebar":"docs","previous":{"title":"Ideas & Exploration","permalink":"/rob/CmdForge/ideas-and-exploration"}}');var r=i(4848),t=i(8453);const l={type:"milestones",project:"cmdforge",updated:new Date("2026-01-14T00:00:00.000Z")},d="Milestones",o={},c=[{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},{value:"M5: Plugin System",id:"m5-plugin-system",level:4}];function h(e){const n={code:"code",h1:"h1",h4:"h4",header:"header",hr:"hr",li:"li",p:"p",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"milestones",children:"Milestones"})}),"\n",(0,r.jsx)(n.h4,{id:"m0-core-platform",children:"M0: Core Platform"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": December 2025\n",(0,r.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,r.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,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"YAML tool definition system"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"CLI entry point and subcommands"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Provider abstraction layer"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Offline caching for tools"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Web UI for tool browsing"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool execution engine"}),(0,r.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h4,{id:"m1-production-ready",children:"M1: Production Ready"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": February 2026\n",(0,r.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,r.jsx)(n.p,{children:"Production deployment with proper server configuration, complete documentation, and improved reliability."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Public documentation"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Systemd service setup"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Gunicorn production server"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Systemd linger for persistence"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"CI/CD pipeline"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Error message improvements"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Source field display in web UI"}),(0,r.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h4,{id:"m2-tool-discovery",children:"M2: Tool Discovery"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": Q2 2026\n",(0,r.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,r.jsx)(n.p,{children:"Enable users to discover, rate, and share tools through a marketplace interface with curation to maintain quality."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool search and filtering"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"PySide6 GUI conversion"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"GUI Registry browser"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"GUI Publishing with connect flow"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Docker containers (test + ready)"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Interactive installer script"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Database migration system"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Registry curation system"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"App pairing/connection flow"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool ratings/reviews"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool marketplace UI enhancements"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"AI persona profiles"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"AI-assisted code generation"}),(0,r.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Tool search and filtering"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"/api/v1/tags"})," endpoint for listing tags with counts"]}),"\n",(0,r.jsx)(n.li,{children:"Advanced search with tag filtering (AND logic), multi-category (OR logic), owner, download range, date range"}),"\n",(0,r.jsx)(n.li,{children:"Faceted search responses with category/tag/owner counts"}),"\n",(0,r.jsxs)(n.li,{children:["CLI: ",(0,r.jsx)(n.code,{children:"--tag"}),", ",(0,r.jsx)(n.code,{children:"--owner"}),", ",(0,r.jsx)(n.code,{children:"--min-downloads"}),", ",(0,r.jsx)(n.code,{children:"--popular"}),", ",(0,r.jsx)(n.code,{children:"--since"}),", ",(0,r.jsx)(n.code,{children:"--json"}),", ",(0,r.jsx)(n.code,{children:"--show-facets"})," options"]}),"\n",(0,r.jsxs)(n.li,{children:["CLI: ",(0,r.jsx)(n.code,{children:"registry tags"})," subcommand"]}),"\n",(0,r.jsx)(n.li,{children:"Web UI: Filter sidebar with checkboxes, dropdowns, active filter chips, URL-based state"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"PySide6 GUI conversion"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Modern desktop GUI replacing urwid TUI"}),"\n",(0,r.jsx)(n.li,{children:"Sidebar navigation (My Tools, Registry, Providers, Profiles)"}),"\n",(0,r.jsx)(n.li,{children:"Tool Builder with visual form for creating/editing tools"}),"\n",(0,r.jsx)(n.li,{children:"Keyboard shortcuts (Ctrl+N, Ctrl+S, Ctrl+R, Ctrl+1/2/3/4, Escape, Ctrl+Q)"}),"\n",(0,r.jsx)(n.li,{children:"Window geometry persistence"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GUI Registry browser"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Browse/search tools with category and sort filters"}),"\n",(0,r.jsx)(n.li,{children:"Star ratings display in table and details"}),"\n",(0,r.jsx)(n.li,{children:"Clickable tags for filtering"}),"\n",(0,r.jsx)(n.li,{children:"Installed indicator (\u2713) and update available (\u2191)"}),"\n",(0,r.jsx)(n.li,{children:"Pagination for large result sets"}),"\n",(0,r.jsx)(n.li,{children:"Publisher reputation info"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"GUI Publishing"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Connect dialog with polling-based account pairing"}),"\n",(0,r.jsx)(n.li,{children:"Publish workflow with version selection"}),"\n",(0,r.jsx)(n.li,{children:"Full publish workflow with confirmation"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Infrastructure improvements"}),":"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Dockerfile.test-install"}),": Fresh environment for testing installer"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"Dockerfile.ready"}),": Pre-installed container for quick usage"]}),"\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"install.sh"}),": Interactive installer with venv, PATH setup, optional example tools"]}),"\n",(0,r.jsx)(n.li,{children:"Database migration: Auto-adds missing columns on server start"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Registry curation system"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Role-based access control (user, moderator, admin)"}),"\n",(0,r.jsx)(n.li,{children:"Tool moderation workflow (pending \u2192 approved/rejected/removed)"}),"\n",(0,r.jsx)(n.li,{children:"Publisher management (ban/unban, role changes)"}),"\n",(0,r.jsx)(n.li,{children:"Private/unlisted tool visibility (auto-approved, owner-only access)"}),"\n",(0,r.jsx)(n.li,{children:"Audit logging for all moderation actions"}),"\n",(0,r.jsx)(n.li,{children:"Admin web UI pages (pending queue, publishers, reports, audit log)"}),"\n",(0,r.jsx)(n.li,{children:"Report resolution workflow"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"App pairing/connection flow"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:[(0,r.jsx)(n.code,{children:"cmdforge config connect "})," CLI command"]}),"\n",(0,r.jsx)(n.li,{children:"GUI Connect dialog with polling-based approval"}),"\n",(0,r.jsx)(n.li,{children:'Web UI "Connections" page (replaces API Tokens)'}),"\n",(0,r.jsx)(n.li,{children:"Device hostname tracking for connected apps"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Tool ratings/reviews"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"5-star rating system with review text"}),"\n",(0,r.jsx)(n.li,{children:"Average rating display on tool cards"}),"\n",(0,r.jsx)(n.li,{children:"Publisher reputation scores"}),"\n",(0,r.jsx)(n.li,{children:"Rating count and distribution"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Tool marketplace UI enhancements"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Browse all tools on page load"}),"\n",(0,r.jsx)(n.li,{children:"Category filter dropdown"}),"\n",(0,r.jsx)(n.li,{children:"Sort by popularity, rating, newest, name"}),"\n",(0,r.jsx)(n.li,{children:"Clickable tags for filtering"}),"\n",(0,r.jsx)(n.li,{children:"Installed/update indicators"}),"\n",(0,r.jsx)(n.li,{children:"Pagination controls"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AI persona profiles"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Profile dataclass with name, description, system_prompt"}),"\n",(0,r.jsx)(n.li,{children:"8 built-in profiles (Comedian, Technical Writer, Teacher, Concise, Creative, Code Reviewer, Analyst)"}),"\n",(0,r.jsx)(n.li,{children:"Custom profile creation and storage"}),"\n",(0,r.jsx)(n.li,{children:"Profile selector in Prompt Step dialog"}),"\n",(0,r.jsx)(n.li,{children:"Profile injection during tool execution"}),"\n",(0,r.jsx)(n.li,{children:"Profiles page in GUI (Ctrl+4)"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"AI-assisted code generation"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Split-view Code Step dialog (editor + AI assist panel)"}),"\n",(0,r.jsx)(n.li,{children:"Provider selector for AI calls"}),"\n",(0,r.jsx)(n.li,{children:"Smart prompt template with available variables"}),"\n",(0,r.jsx)(n.li,{children:"Background thread for non-blocking AI calls"}),"\n",(0,r.jsx)(n.li,{children:"Automatic markdown fence stripping"}),"\n",(0,r.jsx)(n.li,{children:"Python syntax checking before save"}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h4,{id:"m3-content--automation",children:"M3: Content & Automation"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": Q3 2026\n",(0,r.jsx)(n.strong,{children:"Status"}),": Completed (100%)"]}),"\n",(0,r.jsx)(n.p,{children:"Automated content ingestion and quality assurance for the tool ecosystem."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Import Fabric patterns (233 total)"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Scheduled Fabric repo sync"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Auto-vetting pipeline integration"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Community tool submissions workflow"}),(0,r.jsx)(n.td,{children:"Done"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Duplicate detection automation"}),(0,r.jsx)(n.td,{children:"Done"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Import Fabric patterns"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Run existing ",(0,r.jsx)(n.code,{children:"scripts/import_fabric.py"})," to populate registry"]}),"\n",(0,r.jsx)(n.li,{children:"Automatic attribution with source fields (imported, MIT license, Daniel Miessler)"}),"\n",(0,r.jsx)(n.li,{children:"Category mapping based on pattern name prefixes"}),"\n",(0,r.jsx)(n.li,{children:"README generation with original pattern attribution"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Auto-vetting pipeline"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Integration with existing ",(0,r.jsx)(n.code,{children:"scrutiny.py"})," (honesty, transparency, scope, efficiency checks)"]}),"\n",(0,r.jsxs)(n.li,{children:["Integration with existing ",(0,r.jsx)(n.code,{children:"similarity.py"})," (duplicate detection)"]}),"\n",(0,r.jsx)(n.li,{children:"Auto-approve/review/reject decision logic"}),"\n",(0,r.jsx)(n.li,{children:"Helpful suggestions for tool improvements"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Scheduled sync"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Periodic checks for Fabric repo updates"}),"\n",(0,r.jsx)(n.li,{children:"Automatic import of new patterns"}),"\n",(0,r.jsx)(n.li,{children:"Version tracking for updated patterns"}),"\n",(0,r.jsx)(n.li,{children:"Admin notifications for review queue"}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h4,{id:"m4-user-experience",children:"M4: User Experience"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": Q4 2026\n",(0,r.jsx)(n.strong,{children:"Status"}),": Planning (0%)"]}),"\n",(0,r.jsx)(n.p,{children:"Visual improvements and interactive guidance for tool creation and management."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Visual node-based step editor"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Interactive onboarding walkthroughs"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool visualization improvements"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool composition and chaining UI"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Drag-and-drop step reordering"}),(0,r.jsx)(n.td,{children:"Not Started"})]})]})]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Visual node-based editor"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Graphical nodes for steps (like n8n, Google Sketch)"}),"\n",(0,r.jsx)(n.li,{children:"Visual connections showing data flow between steps"}),"\n",(0,r.jsx)(n.li,{children:"Drag-and-drop step creation"}),"\n",(0,r.jsx)(n.li,{children:"Real-time preview of tool execution flow"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Interactive walkthroughs"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"First-time user onboarding"}),"\n",(0,r.jsx)(n.li,{children:"Guided tool creation tutorial"}),"\n",(0,r.jsx)(n.li,{children:"Feature discovery tooltips"}),"\n",(0,r.jsx)(n.li,{children:"Context-sensitive help"}),"\n"]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Tool composition UI"})," includes:"]}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsx)(n.li,{children:"Visual interface for chaining tools together"}),"\n",(0,r.jsx)(n.li,{children:"Input/output mapping between tools"}),"\n",(0,r.jsx)(n.li,{children:"Dependency visualization"}),"\n",(0,r.jsx)(n.li,{children:"Meta-tool builder"}),"\n"]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h4,{id:"m5-plugin-system",children:"M5: Plugin System"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Target"}),": Q1 2027\n",(0,r.jsx)(n.strong,{children:"Status"}),": Planning (0%)"]}),"\n",(0,r.jsx)(n.p,{children:"Extensible plugin architecture for custom backends and automated testing."}),"\n",(0,r.jsxs)(n.table,{children:[(0,r.jsx)(n.thead,{children:(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.th,{children:"Deliverable"}),(0,r.jsx)(n.th,{children:"Status"})]})}),(0,r.jsxs)(n.tbody,{children:[(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Plugin architecture design"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Custom AI backend support"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool testing framework"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Tool versioning support"}),(0,r.jsx)(n.td,{children:"Not Started"})]}),(0,r.jsxs)(n.tr,{children:[(0,r.jsx)(n.td,{children:"Plugin marketplace"}),(0,r.jsx)(n.td,{children:"Not Started"})]})]})]}),"\n",(0,r.jsx)(n.hr,{})]})}function a(e={}){const{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},8453(e,n,i){i.d(n,{R:()=>l,x:()=>d});var s=i(6540);const r={},t=s.createContext(r);function l(e){const n=s.useContext(t);return s.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(r):e.components||r:l(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);