@specforge/mcp 2.0.9 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +324 -0
- package/bin/specforge-mcp +19 -1
- package/dist/cli/commands/blocked.d.ts +16 -0
- package/dist/cli/commands/blocked.d.ts.map +1 -0
- package/dist/cli/commands/blocked.js +214 -0
- package/dist/cli/commands/blocked.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +16 -0
- package/dist/cli/commands/configure.d.ts.map +1 -0
- package/dist/cli/commands/configure.js +218 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/configure.types.d.ts +110 -0
- package/dist/cli/commands/configure.types.d.ts.map +1 -0
- package/dist/cli/commands/configure.types.js +105 -0
- package/dist/cli/commands/configure.types.js.map +1 -0
- package/dist/cli/commands/debug/call.d.ts +14 -0
- package/dist/cli/commands/debug/call.d.ts.map +1 -0
- package/dist/cli/commands/debug/call.js +117 -0
- package/dist/cli/commands/debug/call.js.map +1 -0
- package/dist/cli/commands/debug/index.d.ts +12 -0
- package/dist/cli/commands/debug/index.d.ts.map +1 -0
- package/dist/cli/commands/debug/index.js +12 -0
- package/dist/cli/commands/debug/index.js.map +1 -0
- package/dist/cli/commands/debug/register.d.ts +11 -0
- package/dist/cli/commands/debug/register.d.ts.map +1 -0
- package/dist/cli/commands/debug/register.js +90 -0
- package/dist/cli/commands/debug/register.js.map +1 -0
- package/dist/cli/commands/debug/test.d.ts +13 -0
- package/dist/cli/commands/debug/test.d.ts.map +1 -0
- package/dist/cli/commands/debug/test.js +117 -0
- package/dist/cli/commands/debug/test.js.map +1 -0
- package/dist/cli/commands/debug/tools.d.ts +13 -0
- package/dist/cli/commands/debug/tools.d.ts.map +1 -0
- package/dist/cli/commands/debug/tools.js +117 -0
- package/dist/cli/commands/debug/tools.js.map +1 -0
- package/dist/cli/commands/debug/types.d.ts +117 -0
- package/dist/cli/commands/debug/types.d.ts.map +1 -0
- package/dist/cli/commands/debug/types.js +43 -0
- package/dist/cli/commands/debug/types.js.map +1 -0
- package/dist/cli/commands/debug/whoami.d.ts +13 -0
- package/dist/cli/commands/debug/whoami.d.ts.map +1 -0
- package/dist/cli/commands/debug/whoami.js +161 -0
- package/dist/cli/commands/debug/whoami.js.map +1 -0
- package/dist/cli/commands/docs/content/api.d.ts +7 -0
- package/dist/cli/commands/docs/content/api.d.ts.map +1 -0
- package/dist/cli/commands/docs/content/api.js +64 -0
- package/dist/cli/commands/docs/content/api.js.map +1 -0
- package/dist/cli/commands/docs/content/concepts.d.ts +7 -0
- package/dist/cli/commands/docs/content/concepts.d.ts.map +1 -0
- package/dist/cli/commands/docs/content/concepts.js +68 -0
- package/dist/cli/commands/docs/content/concepts.js.map +1 -0
- package/dist/cli/commands/docs/content/examples.d.ts +7 -0
- package/dist/cli/commands/docs/content/examples.d.ts.map +1 -0
- package/dist/cli/commands/docs/content/examples.js +84 -0
- package/dist/cli/commands/docs/content/examples.js.map +1 -0
- package/dist/cli/commands/docs/content/index.d.ts +10 -0
- package/dist/cli/commands/docs/content/index.d.ts.map +1 -0
- package/dist/cli/commands/docs/content/index.js +10 -0
- package/dist/cli/commands/docs/content/index.js.map +1 -0
- package/dist/cli/commands/docs/content/workflow.d.ts +7 -0
- package/dist/cli/commands/docs/content/workflow.d.ts.map +1 -0
- package/dist/cli/commands/docs/content/workflow.js +44 -0
- package/dist/cli/commands/docs/content/workflow.js.map +1 -0
- package/dist/cli/commands/docs/content.d.ts +23 -0
- package/dist/cli/commands/docs/content.d.ts.map +1 -0
- package/dist/cli/commands/docs/content.js +38 -0
- package/dist/cli/commands/docs/content.js.map +1 -0
- package/dist/cli/commands/docs/display.d.ts +26 -0
- package/dist/cli/commands/docs/display.d.ts.map +1 -0
- package/dist/cli/commands/docs/display.js +53 -0
- package/dist/cli/commands/docs/display.js.map +1 -0
- package/dist/cli/commands/docs/docs.d.ts +19 -0
- package/dist/cli/commands/docs/docs.d.ts.map +1 -0
- package/dist/cli/commands/docs/docs.js +124 -0
- package/dist/cli/commands/docs/docs.js.map +1 -0
- package/dist/cli/commands/docs/index.d.ts +13 -0
- package/dist/cli/commands/docs/index.d.ts.map +1 -0
- package/dist/cli/commands/docs/index.js +13 -0
- package/dist/cli/commands/docs/index.js.map +1 -0
- package/dist/cli/commands/docs/register.d.ts +23 -0
- package/dist/cli/commands/docs/register.d.ts.map +1 -0
- package/dist/cli/commands/docs/register.js +64 -0
- package/dist/cli/commands/docs/register.js.map +1 -0
- package/dist/cli/commands/docs/tool-docs.d.ts +44 -0
- package/dist/cli/commands/docs/tool-docs.d.ts.map +1 -0
- package/dist/cli/commands/docs/tool-docs.js +182 -0
- package/dist/cli/commands/docs/tool-docs.js.map +1 -0
- package/dist/cli/commands/docs/tool-examples.d.ts +14 -0
- package/dist/cli/commands/docs/tool-examples.d.ts.map +1 -0
- package/dist/cli/commands/docs/tool-examples.js +127 -0
- package/dist/cli/commands/docs/tool-examples.js.map +1 -0
- package/dist/cli/commands/docs/types.d.ts +108 -0
- package/dist/cli/commands/docs/types.d.ts.map +1 -0
- package/dist/cli/commands/docs/types.js +33 -0
- package/dist/cli/commands/docs/types.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +16 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +322 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/doctor.types.d.ts +177 -0
- package/dist/cli/commands/doctor.types.d.ts.map +1 -0
- package/dist/cli/commands/doctor.types.js +172 -0
- package/dist/cli/commands/doctor.types.js.map +1 -0
- package/dist/cli/commands/index.d.ts +18 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +18 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +17 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +326 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/init.types.d.ts +141 -0
- package/dist/cli/commands/init.types.d.ts.map +1 -0
- package/dist/cli/commands/init.types.js +24 -0
- package/dist/cli/commands/init.types.js.map +1 -0
- package/dist/cli/commands/login.d.ts +40 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +174 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/next.d.ts +16 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +279 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/next.types.d.ts +191 -0
- package/dist/cli/commands/next.types.d.ts.map +1 -0
- package/dist/cli/commands/next.types.js +129 -0
- package/dist/cli/commands/next.types.js.map +1 -0
- package/dist/cli/commands/projects.d.ts +16 -0
- package/dist/cli/commands/projects.d.ts.map +1 -0
- package/dist/cli/commands/projects.js +149 -0
- package/dist/cli/commands/projects.js.map +1 -0
- package/dist/cli/commands/projects.types.d.ts +81 -0
- package/dist/cli/commands/projects.types.d.ts.map +1 -0
- package/dist/cli/commands/projects.types.js +35 -0
- package/dist/cli/commands/projects.types.js.map +1 -0
- package/dist/cli/commands/review/display.d.ts +33 -0
- package/dist/cli/commands/review/display.d.ts.map +1 -0
- package/dist/cli/commands/review/display.js +159 -0
- package/dist/cli/commands/review/display.js.map +1 -0
- package/dist/cli/commands/review/epic-review.d.ts +13 -0
- package/dist/cli/commands/review/epic-review.d.ts.map +1 -0
- package/dist/cli/commands/review/epic-review.js +69 -0
- package/dist/cli/commands/review/epic-review.js.map +1 -0
- package/dist/cli/commands/review/index.d.ts +13 -0
- package/dist/cli/commands/review/index.d.ts.map +1 -0
- package/dist/cli/commands/review/index.js +17 -0
- package/dist/cli/commands/review/index.js.map +1 -0
- package/dist/cli/commands/review/report.d.ts +31 -0
- package/dist/cli/commands/review/report.d.ts.map +1 -0
- package/dist/cli/commands/review/report.js +146 -0
- package/dist/cli/commands/review/report.js.map +1 -0
- package/dist/cli/commands/review/review.d.ts +17 -0
- package/dist/cli/commands/review/review.d.ts.map +1 -0
- package/dist/cli/commands/review/review.js +129 -0
- package/dist/cli/commands/review/review.js.map +1 -0
- package/dist/cli/commands/review/spec-review.d.ts +13 -0
- package/dist/cli/commands/review/spec-review.d.ts.map +1 -0
- package/dist/cli/commands/review/spec-review.js +65 -0
- package/dist/cli/commands/review/spec-review.js.map +1 -0
- package/dist/cli/commands/review/ticket-review.d.ts +37 -0
- package/dist/cli/commands/review/ticket-review.d.ts.map +1 -0
- package/dist/cli/commands/review/ticket-review.js +194 -0
- package/dist/cli/commands/review/ticket-review.js.map +1 -0
- package/dist/cli/commands/review/types.d.ts +232 -0
- package/dist/cli/commands/review/types.d.ts.map +1 -0
- package/dist/cli/commands/review/types.js +85 -0
- package/dist/cli/commands/review/types.js.map +1 -0
- package/dist/cli/commands/scaffold/display.d.ts +27 -0
- package/dist/cli/commands/scaffold/display.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/display.js +90 -0
- package/dist/cli/commands/scaffold/display.js.map +1 -0
- package/dist/cli/commands/scaffold/index.d.ts +12 -0
- package/dist/cli/commands/scaffold/index.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/index.js +12 -0
- package/dist/cli/commands/scaffold/index.js.map +1 -0
- package/dist/cli/commands/scaffold/register.d.ts +11 -0
- package/dist/cli/commands/scaffold/register.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/register.js +25 -0
- package/dist/cli/commands/scaffold/register.js.map +1 -0
- package/dist/cli/commands/scaffold/scaffold.d.ts +11 -0
- package/dist/cli/commands/scaffold/scaffold.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/scaffold.js +111 -0
- package/dist/cli/commands/scaffold/scaffold.js.map +1 -0
- package/dist/cli/commands/scaffold/targets.d.ts +31 -0
- package/dist/cli/commands/scaffold/targets.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/targets.js +84 -0
- package/dist/cli/commands/scaffold/targets.js.map +1 -0
- package/dist/cli/commands/scaffold/types.d.ts +88 -0
- package/dist/cli/commands/scaffold/types.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/types.js +21 -0
- package/dist/cli/commands/scaffold/types.js.map +1 -0
- package/dist/cli/commands/scaffold/utils.d.ts +31 -0
- package/dist/cli/commands/scaffold/utils.d.ts.map +1 -0
- package/dist/cli/commands/scaffold/utils.js +71 -0
- package/dist/cli/commands/scaffold/utils.js.map +1 -0
- package/dist/cli/commands/session/display.d.ts +40 -0
- package/dist/cli/commands/session/display.d.ts.map +1 -0
- package/dist/cli/commands/session/display.js +114 -0
- package/dist/cli/commands/session/display.js.map +1 -0
- package/dist/cli/commands/session/end.d.ts +12 -0
- package/dist/cli/commands/session/end.d.ts.map +1 -0
- package/dist/cli/commands/session/end.js +165 -0
- package/dist/cli/commands/session/end.js.map +1 -0
- package/dist/cli/commands/session/index.d.ts +13 -0
- package/dist/cli/commands/session/index.d.ts.map +1 -0
- package/dist/cli/commands/session/index.js +13 -0
- package/dist/cli/commands/session/index.js.map +1 -0
- package/dist/cli/commands/session/register.d.ts +12 -0
- package/dist/cli/commands/session/register.d.ts.map +1 -0
- package/dist/cli/commands/session/register.js +87 -0
- package/dist/cli/commands/session/register.js.map +1 -0
- package/dist/cli/commands/session/start.d.ts +12 -0
- package/dist/cli/commands/session/start.d.ts.map +1 -0
- package/dist/cli/commands/session/start.js +189 -0
- package/dist/cli/commands/session/start.js.map +1 -0
- package/dist/cli/commands/session/status.d.ts +12 -0
- package/dist/cli/commands/session/status.d.ts.map +1 -0
- package/dist/cli/commands/session/status.js +93 -0
- package/dist/cli/commands/session/status.js.map +1 -0
- package/dist/cli/commands/session/types.d.ts +179 -0
- package/dist/cli/commands/session/types.d.ts.map +1 -0
- package/dist/cli/commands/session/types.js +8 -0
- package/dist/cli/commands/session/types.js.map +1 -0
- package/dist/cli/commands/session/utils.d.ts +24 -0
- package/dist/cli/commands/session/utils.d.ts.map +1 -0
- package/dist/cli/commands/session/utils.js +72 -0
- package/dist/cli/commands/session/utils.js.map +1 -0
- package/dist/cli/commands/specs.d.ts +16 -0
- package/dist/cli/commands/specs.d.ts.map +1 -0
- package/dist/cli/commands/specs.js +212 -0
- package/dist/cli/commands/specs.js.map +1 -0
- package/dist/cli/commands/specs.types.d.ts +120 -0
- package/dist/cli/commands/specs.types.d.ts.map +1 -0
- package/dist/cli/commands/specs.types.js +75 -0
- package/dist/cli/commands/specs.types.js.map +1 -0
- package/dist/cli/commands/status.d.ts +17 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +271 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/status.types.d.ts +382 -0
- package/dist/cli/commands/status.types.d.ts.map +1 -0
- package/dist/cli/commands/status.types.js +166 -0
- package/dist/cli/commands/status.types.js.map +1 -0
- package/dist/cli/commands/switch.d.ts +18 -0
- package/dist/cli/commands/switch.d.ts.map +1 -0
- package/dist/cli/commands/switch.js +181 -0
- package/dist/cli/commands/switch.js.map +1 -0
- package/dist/cli/commands/switch.types.d.ts +123 -0
- package/dist/cli/commands/switch.types.d.ts.map +1 -0
- package/dist/cli/commands/switch.types.js +65 -0
- package/dist/cli/commands/switch.types.js.map +1 -0
- package/dist/cli/commands/ticket/command.d.ts +14 -0
- package/dist/cli/commands/ticket/command.d.ts.map +1 -0
- package/dist/cli/commands/ticket/command.js +141 -0
- package/dist/cli/commands/ticket/command.js.map +1 -0
- package/dist/cli/commands/ticket/display.d.ts +56 -0
- package/dist/cli/commands/ticket/display.d.ts.map +1 -0
- package/dist/cli/commands/ticket/display.js +205 -0
- package/dist/cli/commands/ticket/display.js.map +1 -0
- package/dist/cli/commands/ticket/index.d.ts +11 -0
- package/dist/cli/commands/ticket/index.d.ts.map +1 -0
- package/dist/cli/commands/ticket/index.js +11 -0
- package/dist/cli/commands/ticket/index.js.map +1 -0
- package/dist/cli/commands/ticket/register.d.ts +11 -0
- package/dist/cli/commands/ticket/register.d.ts.map +1 -0
- package/dist/cli/commands/ticket/register.js +39 -0
- package/dist/cli/commands/ticket/register.js.map +1 -0
- package/dist/cli/commands/ticket/resolver.d.ts +16 -0
- package/dist/cli/commands/ticket/resolver.d.ts.map +1 -0
- package/dist/cli/commands/ticket/resolver.js +35 -0
- package/dist/cli/commands/ticket/resolver.js.map +1 -0
- package/dist/cli/commands/ticket/types.d.ts +157 -0
- package/dist/cli/commands/ticket/types.d.ts.map +1 -0
- package/dist/cli/commands/ticket/types.js +8 -0
- package/dist/cli/commands/ticket/types.js.map +1 -0
- package/dist/cli/commands/tickets.d.ts +16 -0
- package/dist/cli/commands/tickets.d.ts.map +1 -0
- package/dist/cli/commands/tickets.js +271 -0
- package/dist/cli/commands/tickets.js.map +1 -0
- package/dist/cli/commands/tickets.types.d.ts +202 -0
- package/dist/cli/commands/tickets.types.d.ts.map +1 -0
- package/dist/cli/commands/tickets.types.js +138 -0
- package/dist/cli/commands/tickets.types.js.map +1 -0
- package/dist/cli/config/index.d.ts +11 -0
- package/dist/cli/config/index.d.ts.map +1 -0
- package/dist/cli/config/index.js +11 -0
- package/dist/cli/config/index.js.map +1 -0
- package/dist/cli/config/loader.d.ts +98 -0
- package/dist/cli/config/loader.d.ts.map +1 -0
- package/dist/cli/config/loader.js +237 -0
- package/dist/cli/config/loader.js.map +1 -0
- package/dist/cli/config/paths.d.ts +96 -0
- package/dist/cli/config/paths.d.ts.map +1 -0
- package/dist/cli/config/paths.js +140 -0
- package/dist/cli/config/paths.js.map +1 -0
- package/dist/cli/config/types.d.ts +148 -0
- package/dist/cli/config/types.d.ts.map +1 -0
- package/dist/cli/config/types.js +34 -0
- package/dist/cli/config/types.js.map +1 -0
- package/dist/cli/config/writer.d.ts +171 -0
- package/dist/cli/config/writer.d.ts.map +1 -0
- package/dist/cli/config/writer.js +312 -0
- package/dist/cli/config/writer.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +183 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/middleware/auth-guard.d.ts +107 -0
- package/dist/cli/middleware/auth-guard.d.ts.map +1 -0
- package/dist/cli/middleware/auth-guard.js +190 -0
- package/dist/cli/middleware/auth-guard.js.map +1 -0
- package/dist/cli/middleware/error-handler.d.ts +133 -0
- package/dist/cli/middleware/error-handler.d.ts.map +1 -0
- package/dist/cli/middleware/error-handler.js +209 -0
- package/dist/cli/middleware/error-handler.js.map +1 -0
- package/dist/cli/middleware/index.d.ts +6 -0
- package/dist/cli/middleware/index.d.ts.map +1 -0
- package/dist/cli/middleware/index.js +6 -0
- package/dist/cli/middleware/index.js.map +1 -0
- package/dist/cli/templates/commands.d.ts +20 -0
- package/dist/cli/templates/commands.d.ts.map +1 -0
- package/dist/cli/templates/commands.js +174 -0
- package/dist/cli/templates/commands.js.map +1 -0
- package/dist/cli/templates/content/sf-autonomous.d.ts +7 -0
- package/dist/cli/templates/content/sf-autonomous.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-autonomous.js +78 -0
- package/dist/cli/templates/content/sf-autonomous.js.map +1 -0
- package/dist/cli/templates/content/sf-blockers.d.ts +7 -0
- package/dist/cli/templates/content/sf-blockers.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-blockers.js +68 -0
- package/dist/cli/templates/content/sf-blockers.js.map +1 -0
- package/dist/cli/templates/content/sf-commit.d.ts +7 -0
- package/dist/cli/templates/content/sf-commit.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-commit.js +78 -0
- package/dist/cli/templates/content/sf-commit.js.map +1 -0
- package/dist/cli/templates/content/sf-context.d.ts +7 -0
- package/dist/cli/templates/content/sf-context.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-context.js +64 -0
- package/dist/cli/templates/content/sf-context.js.map +1 -0
- package/dist/cli/templates/content/sf-create-epics.d.ts +7 -0
- package/dist/cli/templates/content/sf-create-epics.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-create-epics.js +70 -0
- package/dist/cli/templates/content/sf-create-epics.js.map +1 -0
- package/dist/cli/templates/content/sf-create-spec.d.ts +7 -0
- package/dist/cli/templates/content/sf-create-spec.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-create-spec.js +67 -0
- package/dist/cli/templates/content/sf-create-spec.js.map +1 -0
- package/dist/cli/templates/content/sf-create-tickets.d.ts +7 -0
- package/dist/cli/templates/content/sf-create-tickets.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-create-tickets.js +76 -0
- package/dist/cli/templates/content/sf-create-tickets.js.map +1 -0
- package/dist/cli/templates/content/sf-epic.d.ts +7 -0
- package/dist/cli/templates/content/sf-epic.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-epic.js +69 -0
- package/dist/cli/templates/content/sf-epic.js.map +1 -0
- package/dist/cli/templates/content/sf-help.d.ts +7 -0
- package/dist/cli/templates/content/sf-help.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-help.js +61 -0
- package/dist/cli/templates/content/sf-help.js.map +1 -0
- package/dist/cli/templates/content/sf-import.d.ts +7 -0
- package/dist/cli/templates/content/sf-import.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-import.js +88 -0
- package/dist/cli/templates/content/sf-import.js.map +1 -0
- package/dist/cli/templates/content/sf-init.d.ts +7 -0
- package/dist/cli/templates/content/sf-init.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-init.js +61 -0
- package/dist/cli/templates/content/sf-init.js.map +1 -0
- package/dist/cli/templates/content/sf-next.d.ts +7 -0
- package/dist/cli/templates/content/sf-next.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-next.js +67 -0
- package/dist/cli/templates/content/sf-next.js.map +1 -0
- package/dist/cli/templates/content/sf-reset.d.ts +7 -0
- package/dist/cli/templates/content/sf-reset.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-reset.js +78 -0
- package/dist/cli/templates/content/sf-reset.js.map +1 -0
- package/dist/cli/templates/content/sf-review.d.ts +7 -0
- package/dist/cli/templates/content/sf-review.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-review.js +67 -0
- package/dist/cli/templates/content/sf-review.js.map +1 -0
- package/dist/cli/templates/content/sf-search.d.ts +7 -0
- package/dist/cli/templates/content/sf-search.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-search.js +64 -0
- package/dist/cli/templates/content/sf-search.js.map +1 -0
- package/dist/cli/templates/content/sf-status.d.ts +7 -0
- package/dist/cli/templates/content/sf-status.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-status.js +67 -0
- package/dist/cli/templates/content/sf-status.js.map +1 -0
- package/dist/cli/templates/content/sf-ticket.d.ts +7 -0
- package/dist/cli/templates/content/sf-ticket.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-ticket.js +76 -0
- package/dist/cli/templates/content/sf-ticket.js.map +1 -0
- package/dist/cli/templates/content/sf-validate.d.ts +7 -0
- package/dist/cli/templates/content/sf-validate.d.ts.map +1 -0
- package/dist/cli/templates/content/sf-validate.js +78 -0
- package/dist/cli/templates/content/sf-validate.js.map +1 -0
- package/dist/cli/templates/index.d.ts +7 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/index.js +7 -0
- package/dist/cli/templates/index.js.map +1 -0
- package/dist/cli/ui/colors.d.ts +76 -0
- package/dist/cli/ui/colors.d.ts.map +1 -0
- package/dist/cli/ui/colors.js +81 -0
- package/dist/cli/ui/colors.js.map +1 -0
- package/dist/cli/ui/dashboard.d.ts +54 -0
- package/dist/cli/ui/dashboard.d.ts.map +1 -0
- package/dist/cli/ui/dashboard.js +339 -0
- package/dist/cli/ui/dashboard.js.map +1 -0
- package/dist/cli/ui/index.d.ts +7 -0
- package/dist/cli/ui/index.d.ts.map +1 -0
- package/dist/cli/ui/index.js +7 -0
- package/dist/cli/ui/index.js.map +1 -0
- package/dist/cli/ui/output.d.ts +117 -0
- package/dist/cli/ui/output.d.ts.map +1 -0
- package/dist/cli/ui/output.js +172 -0
- package/dist/cli/ui/output.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +105 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +148 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/time.d.ts +54 -0
- package/dist/cli/ui/time.d.ts.map +1 -0
- package/dist/cli/ui/time.js +173 -0
- package/dist/cli/ui/time.js.map +1 -0
- package/dist/lib/format.d.ts +4 -4
- package/dist/lib/format.js +5 -5
- package/dist/server.js +8 -8
- package/dist/server.js.map +1 -1
- package/dist/tools/core/session.js +6 -6
- package/dist/tools/core/session.js.map +1 -1
- package/dist/tools/index.js +9 -9
- package/dist/tools/index.js.map +1 -1
- package/dist/validation/index.js +1 -1
- package/dist/validation/index.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Usage Examples
|
|
3
|
+
*
|
|
4
|
+
* Provides usage examples for all MCP tools.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Usage examples for MCP tools
|
|
8
|
+
*/
|
|
9
|
+
export const TOOL_EXAMPLES = {
|
|
10
|
+
// Context
|
|
11
|
+
get_working_context: 'get_working_context()',
|
|
12
|
+
set_working_context: `set_working_context({
|
|
13
|
+
projectId: "proj_abc123",
|
|
14
|
+
specificationId: "spec_def456"
|
|
15
|
+
})`,
|
|
16
|
+
// Projects
|
|
17
|
+
list_projects: 'list_projects({ limit: 10 })',
|
|
18
|
+
get_project: 'get_project({ projectId: "proj_abc123" })',
|
|
19
|
+
// Specifications
|
|
20
|
+
list_specifications: `list_specifications({
|
|
21
|
+
projectId: "proj_abc123",
|
|
22
|
+
status: "in_progress"
|
|
23
|
+
})`,
|
|
24
|
+
get_specification: 'get_specification({ specificationId: "spec_def456" })',
|
|
25
|
+
create_specification: `create_specification({
|
|
26
|
+
projectId: "proj_abc123",
|
|
27
|
+
title: "User Authentication",
|
|
28
|
+
description: "Implement user auth with OAuth"
|
|
29
|
+
})`,
|
|
30
|
+
update_specification: `update_specification({
|
|
31
|
+
specificationId: "spec_def456",
|
|
32
|
+
status: "in_progress"
|
|
33
|
+
})`,
|
|
34
|
+
// Epics
|
|
35
|
+
list_epics: 'list_epics({ specificationId: "spec_def456" })',
|
|
36
|
+
get_epic: 'get_epic({ epicId: "epic_ghi789" })',
|
|
37
|
+
create_epic: `create_epic({
|
|
38
|
+
specificationId: "spec_def456",
|
|
39
|
+
title: "Database Setup",
|
|
40
|
+
orderIndex: 1
|
|
41
|
+
})`,
|
|
42
|
+
update_epic: `update_epic({
|
|
43
|
+
epicId: "epic_ghi789",
|
|
44
|
+
status: "in_progress"
|
|
45
|
+
})`,
|
|
46
|
+
// Tickets
|
|
47
|
+
list_tickets: `list_tickets({
|
|
48
|
+
specificationId: "spec_def456",
|
|
49
|
+
status: "pending",
|
|
50
|
+
limit: 20
|
|
51
|
+
})`,
|
|
52
|
+
get_ticket: 'get_ticket({ ticketId: "ticket_xyz123" })',
|
|
53
|
+
create_ticket: `create_ticket({
|
|
54
|
+
epicId: "epic_ghi789",
|
|
55
|
+
title: "Create user table",
|
|
56
|
+
description: "Set up PostgreSQL user table",
|
|
57
|
+
acceptanceCriteria: ["Table created", "Indexes added"]
|
|
58
|
+
})`,
|
|
59
|
+
update_ticket: `update_ticket({
|
|
60
|
+
ticketId: "ticket_xyz123",
|
|
61
|
+
status: "done"
|
|
62
|
+
})`,
|
|
63
|
+
search_tickets: `search_tickets({
|
|
64
|
+
specificationId: "spec_def456",
|
|
65
|
+
query: "authentication"
|
|
66
|
+
})`,
|
|
67
|
+
// Implementation
|
|
68
|
+
get_implementation_context: 'get_implementation_context({ ticketId: "ticket_xyz123" })',
|
|
69
|
+
get_full_context: 'get_full_context({ ticketId: "ticket_xyz123" })',
|
|
70
|
+
get_pattern_chain: 'get_pattern_chain({ ticketId: "ticket_xyz123" })',
|
|
71
|
+
// Sessions
|
|
72
|
+
start_work_session: 'start_work_session({ ticketId: "ticket_xyz123" })',
|
|
73
|
+
complete_work_session: `complete_work_session({
|
|
74
|
+
ticketId: "ticket_xyz123",
|
|
75
|
+
summary: "Implemented user table with indexes",
|
|
76
|
+
actualHours: 2.5
|
|
77
|
+
})`,
|
|
78
|
+
report_progress: `report_progress({
|
|
79
|
+
ticketId: "ticket_xyz123",
|
|
80
|
+
progress: 75,
|
|
81
|
+
notes: "Schema complete, working on indexes"
|
|
82
|
+
})`,
|
|
83
|
+
// Autonomous
|
|
84
|
+
start_implementation_session: `start_implementation_session({
|
|
85
|
+
specificationId: "spec_def456",
|
|
86
|
+
mode: "autonomous"
|
|
87
|
+
})`,
|
|
88
|
+
end_session: `end_session({
|
|
89
|
+
sessionId: "session_abc",
|
|
90
|
+
status: "completed"
|
|
91
|
+
})`,
|
|
92
|
+
get_next_actionable_tickets: `get_next_actionable_tickets({
|
|
93
|
+
specificationId: "spec_def456",
|
|
94
|
+
limit: 5
|
|
95
|
+
})`,
|
|
96
|
+
// Dependencies
|
|
97
|
+
get_dependency_tree: 'get_dependency_tree({ ticketId: "ticket_xyz123" })',
|
|
98
|
+
add_dependency: `add_dependency({
|
|
99
|
+
ticketId: "ticket_xyz123",
|
|
100
|
+
dependsOn: "ticket_abc456"
|
|
101
|
+
})`,
|
|
102
|
+
remove_dependency: `remove_dependency({
|
|
103
|
+
ticketId: "ticket_xyz123",
|
|
104
|
+
dependsOn: "ticket_abc456"
|
|
105
|
+
})`,
|
|
106
|
+
// Validation
|
|
107
|
+
validate_ticket: 'validate_ticket({ ticketId: "ticket_xyz123" })',
|
|
108
|
+
validate_acceptance_criteria: `validate_acceptance_criteria({
|
|
109
|
+
ticketId: "ticket_xyz123",
|
|
110
|
+
results: [
|
|
111
|
+
{ criterion: "Table created", passed: true },
|
|
112
|
+
{ criterion: "Indexes added", passed: true }
|
|
113
|
+
]
|
|
114
|
+
})`,
|
|
115
|
+
// Reports
|
|
116
|
+
get_report: `get_report({
|
|
117
|
+
specificationId: "spec_def456",
|
|
118
|
+
type: "progress"
|
|
119
|
+
})`,
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Get example for a tool
|
|
123
|
+
*/
|
|
124
|
+
export function getToolExample(toolName) {
|
|
125
|
+
return TOOL_EXAMPLES[toolName] || `${toolName}({ ... })`;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=tool-examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-examples.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/tool-examples.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,UAAU;IACV,mBAAmB,EAAE,uBAAuB;IAC5C,mBAAmB,EAAE;;;GAGpB;IAED,WAAW;IACX,aAAa,EAAE,8BAA8B;IAC7C,WAAW,EAAE,2CAA2C;IAExD,iBAAiB;IACjB,mBAAmB,EAAE;;;GAGpB;IACD,iBAAiB,EAAE,uDAAuD;IAC1E,oBAAoB,EAAE;;;;GAIrB;IACD,oBAAoB,EAAE;;;GAGrB;IAED,QAAQ;IACR,UAAU,EAAE,gDAAgD;IAC5D,QAAQ,EAAE,qCAAqC;IAC/C,WAAW,EAAE;;;;GAIZ;IACD,WAAW,EAAE;;;GAGZ;IAED,UAAU;IACV,YAAY,EAAE;;;;GAIb;IACD,UAAU,EAAE,2CAA2C;IACvD,aAAa,EAAE;;;;;GAKd;IACD,aAAa,EAAE;;;GAGd;IACD,cAAc,EAAE;;;GAGf;IAED,iBAAiB;IACjB,0BAA0B,EAAE,2DAA2D;IACvF,gBAAgB,EAAE,iDAAiD;IACnE,iBAAiB,EAAE,kDAAkD;IAErE,WAAW;IACX,kBAAkB,EAAE,mDAAmD;IACvE,qBAAqB,EAAE;;;;GAItB;IACD,eAAe,EAAE;;;;GAIhB;IAED,aAAa;IACb,4BAA4B,EAAE;;;GAG7B;IACD,WAAW,EAAE;;;GAGZ;IACD,2BAA2B,EAAE;;;GAG5B;IAED,eAAe;IACf,mBAAmB,EAAE,oDAAoD;IACzE,cAAc,EAAE;;;GAGf;IACD,iBAAiB,EAAE;;;GAGlB;IAED,aAAa;IACb,eAAe,EAAE,gDAAgD;IACjE,4BAA4B,EAAE;;;;;;GAM7B;IAED,UAAU;IACV,UAAU,EAAE;;;GAGX;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,WAAW,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs Command Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the documentation command including options,
|
|
5
|
+
* topics, and tool documentation structures.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Options for the docs command
|
|
9
|
+
*/
|
|
10
|
+
export interface DocsOptions {
|
|
11
|
+
/** Show specific tool documentation */
|
|
12
|
+
tool?: string;
|
|
13
|
+
/** Search documentation */
|
|
14
|
+
search?: string;
|
|
15
|
+
/** Output as JSON */
|
|
16
|
+
json?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for the tools detail command
|
|
20
|
+
*/
|
|
21
|
+
export interface ToolsDetailOptions {
|
|
22
|
+
/** Filter by category */
|
|
23
|
+
category?: string;
|
|
24
|
+
/** Search tools */
|
|
25
|
+
search?: string;
|
|
26
|
+
/** Show parameter details */
|
|
27
|
+
params?: boolean;
|
|
28
|
+
/** Show usage examples */
|
|
29
|
+
examples?: boolean;
|
|
30
|
+
/** Output as JSON */
|
|
31
|
+
json?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Available documentation topics
|
|
35
|
+
*/
|
|
36
|
+
export type DocsTopic = 'workflow' | 'concepts' | 'api' | 'examples' | 'tools';
|
|
37
|
+
/**
|
|
38
|
+
* Documentation content map
|
|
39
|
+
*/
|
|
40
|
+
export type DocsContent = Record<DocsTopic, string>;
|
|
41
|
+
/**
|
|
42
|
+
* Tool category names
|
|
43
|
+
*/
|
|
44
|
+
export type ToolCategory = 'Context' | 'Projects' | 'Specifications' | 'Epics' | 'Tickets' | 'Implementation' | 'Sessions' | 'Autonomous' | 'Dependencies' | 'Validation' | 'Reports';
|
|
45
|
+
/**
|
|
46
|
+
* Tool categories mapping
|
|
47
|
+
*/
|
|
48
|
+
export type ToolCategoryMap = Record<ToolCategory, string[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Tool documentation info
|
|
51
|
+
*/
|
|
52
|
+
export interface ToolDocInfo {
|
|
53
|
+
/** Tool name */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Tool description */
|
|
56
|
+
description: string;
|
|
57
|
+
/** Tool category */
|
|
58
|
+
category: ToolCategory;
|
|
59
|
+
/** Parameter schema */
|
|
60
|
+
parameters?: ToolParameterSchema;
|
|
61
|
+
/** Usage example */
|
|
62
|
+
example?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Tool parameter schema
|
|
66
|
+
*/
|
|
67
|
+
export interface ToolParameterSchema {
|
|
68
|
+
/** Parameter properties */
|
|
69
|
+
properties: Record<string, ToolParameterProperty>;
|
|
70
|
+
/** Required parameter names */
|
|
71
|
+
required?: string[];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Tool parameter property
|
|
75
|
+
*/
|
|
76
|
+
export interface ToolParameterProperty {
|
|
77
|
+
/** Parameter type */
|
|
78
|
+
type: string;
|
|
79
|
+
/** Parameter description */
|
|
80
|
+
description?: string;
|
|
81
|
+
/** Enum values if applicable */
|
|
82
|
+
enum?: string[];
|
|
83
|
+
/** Default value */
|
|
84
|
+
default?: unknown;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Tool documentation output (for JSON)
|
|
88
|
+
*/
|
|
89
|
+
export interface ToolDocOutput {
|
|
90
|
+
/** Tool info */
|
|
91
|
+
tool: {
|
|
92
|
+
name: string;
|
|
93
|
+
description: string;
|
|
94
|
+
};
|
|
95
|
+
/** Tool schema */
|
|
96
|
+
schema: ToolParameterSchema | null;
|
|
97
|
+
/** Usage example */
|
|
98
|
+
example: string;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Available topics with descriptions
|
|
102
|
+
*/
|
|
103
|
+
export declare const DOCS_TOPICS: Record<DocsTopic, string>;
|
|
104
|
+
/**
|
|
105
|
+
* Tool categories with their tools
|
|
106
|
+
*/
|
|
107
|
+
export declare const TOOL_CATEGORIES: ToolCategoryMap;
|
|
108
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/docs/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,gBAAgB,GAChB,OAAO,GACP,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,uBAAuB;IACvB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,kBAAkB;IAClB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,eAY7B,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docs Command Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the documentation command including options,
|
|
5
|
+
* topics, and tool documentation structures.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Available topics with descriptions
|
|
9
|
+
*/
|
|
10
|
+
export const DOCS_TOPICS = {
|
|
11
|
+
workflow: 'Implementation workflow guide',
|
|
12
|
+
concepts: 'Core concepts (specs, epics, tickets)',
|
|
13
|
+
api: 'API reference and authentication',
|
|
14
|
+
examples: 'Usage examples',
|
|
15
|
+
tools: 'MCP tool reference',
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Tool categories with their tools
|
|
19
|
+
*/
|
|
20
|
+
export const TOOL_CATEGORIES = {
|
|
21
|
+
'Context': ['get_working_context', 'set_working_context'],
|
|
22
|
+
'Projects': ['list_projects', 'get_project'],
|
|
23
|
+
'Specifications': ['list_specifications', 'get_specification', 'create_specification', 'update_specification'],
|
|
24
|
+
'Epics': ['list_epics', 'get_epic', 'create_epic', 'update_epic'],
|
|
25
|
+
'Tickets': ['list_tickets', 'get_ticket', 'create_ticket', 'update_ticket', 'search_tickets'],
|
|
26
|
+
'Implementation': ['get_implementation_context', 'get_full_context', 'get_pattern_chain'],
|
|
27
|
+
'Sessions': ['start_work_session', 'complete_work_session', 'report_progress'],
|
|
28
|
+
'Autonomous': ['start_implementation_session', 'end_session', 'get_next_actionable_tickets'],
|
|
29
|
+
'Dependencies': ['get_dependency_tree', 'add_dependency', 'remove_dependency'],
|
|
30
|
+
'Validation': ['validate_ticket', 'validate_acceptance_criteria'],
|
|
31
|
+
'Reports': ['get_report'],
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoHH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,QAAQ,EAAE,+BAA+B;IACzC,QAAQ,EAAE,uCAAuC;IACjD,GAAG,EAAE,kCAAkC;IACvC,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,oBAAoB;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,SAAS,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACzD,UAAU,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;IAC5C,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;IAC9G,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC;IACjE,SAAS,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAC7F,gBAAgB,EAAE,CAAC,4BAA4B,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;IACzF,UAAU,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC;IAC9E,YAAY,EAAE,CAAC,8BAA8B,EAAE,aAAa,EAAE,6BAA6B,CAAC;IAC5F,cAAc,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;IAC9E,YAAY,EAAE,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;IACjE,SAAS,EAAE,CAAC,YAAY,CAAC;CAC1B,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command
|
|
3
|
+
*
|
|
4
|
+
* Diagnoses configuration and connection issues for SpecForge MCP.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { DoctorOptions } from './doctor.types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Doctor command action handler
|
|
10
|
+
*/
|
|
11
|
+
export declare function doctorAction(options: DoctorOptions): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Register doctor command with Commander
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerDoctorCommand(program: Command): void;
|
|
16
|
+
//# sourceMappingURL=doctor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,OAAO,EACL,aAAa,EAkBd,MAAM,mBAAmB,CAAC;AAwX3B;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsB5D"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor Command
|
|
3
|
+
*
|
|
4
|
+
* Diagnoses configuration and connection issues for SpecForge MCP.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'node:fs';
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { resolveConfig, loadGlobalConfig, loadProjectConfig, getConfigPaths, } from '../config/index.js';
|
|
9
|
+
import { withErrorHandler } from '../middleware/error-handler.js';
|
|
10
|
+
import { printBlank, printHeader } from '../ui/output.js';
|
|
11
|
+
import { colors } from '../ui/colors.js';
|
|
12
|
+
import { ApiClient } from '../../client/api-client.js';
|
|
13
|
+
import { createPassResult, createFailResult, createWarnResult, calculateSummary, hasFailures, getStatusIcon, CHECK_CATEGORIES, CONFIG_CHECK_NAMES, AUTH_CHECK_NAMES, CONNECTION_CHECK_NAMES, PROJECT_CHECK_NAMES, PERFORMANCE_THRESHOLDS, API_KEY_VALIDATION, FIX_SUGGESTIONS, } from './doctor.types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Mask an API key for display (show only last N characters)
|
|
16
|
+
*/
|
|
17
|
+
function maskApiKey(apiKey, visibleChars = 8) {
|
|
18
|
+
if (apiKey.length <= visibleChars) {
|
|
19
|
+
return '***';
|
|
20
|
+
}
|
|
21
|
+
return `${API_KEY_VALIDATION.PREFIX}...${apiKey.slice(-visibleChars)}`;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Run configuration checks
|
|
25
|
+
*/
|
|
26
|
+
function runConfigurationChecks() {
|
|
27
|
+
const results = [];
|
|
28
|
+
const paths = getConfigPaths();
|
|
29
|
+
const globalConfig = loadGlobalConfig();
|
|
30
|
+
const projectConfig = loadProjectConfig();
|
|
31
|
+
// Check .mcp.json
|
|
32
|
+
if (fs.existsSync(paths.mcpConfig)) {
|
|
33
|
+
results.push(createPassResult(CONFIG_CHECK_NAMES.MCP_CONFIG_FOUND, paths.mcpConfig));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
results.push(createFailResult(CONFIG_CHECK_NAMES.MCP_CONFIG_FOUND, 'File not found', FIX_SUGGESTIONS.MISSING_MCP_CONFIG));
|
|
37
|
+
}
|
|
38
|
+
// Check .specforge.json (optional)
|
|
39
|
+
if (projectConfig) {
|
|
40
|
+
results.push(createPassResult(CONFIG_CHECK_NAMES.PROJECT_CONFIG_FOUND, paths.projectConfig));
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
results.push(createWarnResult(CONFIG_CHECK_NAMES.PROJECT_CONFIG_FOUND, 'File not found (optional)', FIX_SUGGESTIONS.MISSING_PROJECT_CONFIG));
|
|
44
|
+
}
|
|
45
|
+
// Check API key configured
|
|
46
|
+
const apiKeySource = process.env.SPECFORGE_API_KEY
|
|
47
|
+
? 'From environment variable'
|
|
48
|
+
: globalConfig.apiKey
|
|
49
|
+
? 'From ~/.specforge/config.json'
|
|
50
|
+
: undefined;
|
|
51
|
+
if (apiKeySource) {
|
|
52
|
+
results.push(createPassResult(CONFIG_CHECK_NAMES.API_KEY_CONFIGURED, apiKeySource));
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
results.push(createFailResult(CONFIG_CHECK_NAMES.API_KEY_CONFIGURED, 'No API key found', FIX_SUGGESTIONS.MISSING_API_KEY));
|
|
56
|
+
}
|
|
57
|
+
return results;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Run authentication checks
|
|
61
|
+
*/
|
|
62
|
+
async function runAuthenticationChecks(apiKey) {
|
|
63
|
+
const results = [];
|
|
64
|
+
if (!apiKey) {
|
|
65
|
+
results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, 'No API key to validate'));
|
|
66
|
+
return results;
|
|
67
|
+
}
|
|
68
|
+
// Check format
|
|
69
|
+
const hasValidPrefix = apiKey.startsWith(API_KEY_VALIDATION.PREFIX);
|
|
70
|
+
const hasValidLength = apiKey.length >= API_KEY_VALIDATION.MIN_LENGTH;
|
|
71
|
+
if (hasValidPrefix && hasValidLength) {
|
|
72
|
+
results.push(createPassResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, maskApiKey(apiKey)));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const issues = [];
|
|
76
|
+
if (!hasValidPrefix)
|
|
77
|
+
issues.push(`should start with ${API_KEY_VALIDATION.PREFIX}`);
|
|
78
|
+
if (!hasValidLength)
|
|
79
|
+
issues.push(`minimum ${API_KEY_VALIDATION.MIN_LENGTH} characters`);
|
|
80
|
+
results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, `Invalid format (${issues.join(', ')})`, FIX_SUGGESTIONS.INVALID_API_KEY_FORMAT));
|
|
81
|
+
return results; // Don't test against backend if format is invalid
|
|
82
|
+
}
|
|
83
|
+
// Validate against backend
|
|
84
|
+
const config = resolveConfig();
|
|
85
|
+
const client = new ApiClient({
|
|
86
|
+
apiKey,
|
|
87
|
+
apiUrl: config.apiUrl,
|
|
88
|
+
debug: config.debug,
|
|
89
|
+
});
|
|
90
|
+
try {
|
|
91
|
+
const response = await client.call('list_projects', {});
|
|
92
|
+
results.push(createPassResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, 'Successfully authenticated'));
|
|
93
|
+
const email = response.userEmail || 'Unknown';
|
|
94
|
+
results.push(createPassResult(AUTH_CHECK_NAMES.USER_INFO, email));
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
98
|
+
if (message.includes('401') || message.includes('Unauthorized')) {
|
|
99
|
+
results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, 'Invalid or expired API key', FIX_SUGGESTIONS.EXPIRED_API_KEY));
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, `Authentication failed: ${message}`));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return results;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Run connection checks
|
|
109
|
+
*/
|
|
110
|
+
async function runConnectionChecks() {
|
|
111
|
+
const results = [];
|
|
112
|
+
const config = resolveConfig();
|
|
113
|
+
const apiUrl = config.apiUrl;
|
|
114
|
+
const healthUrl = apiUrl.replace(/\/mcp\/?$/, '/health');
|
|
115
|
+
try {
|
|
116
|
+
const start = Date.now();
|
|
117
|
+
const response = await fetch(healthUrl, {
|
|
118
|
+
method: 'GET',
|
|
119
|
+
signal: AbortSignal.timeout(PERFORMANCE_THRESHOLDS.CONNECTION_TIMEOUT),
|
|
120
|
+
});
|
|
121
|
+
const elapsed = Date.now() - start;
|
|
122
|
+
if (response.ok) {
|
|
123
|
+
results.push(createPassResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, apiUrl, { healthUrl }));
|
|
124
|
+
// Response time check
|
|
125
|
+
if (elapsed < PERFORMANCE_THRESHOLDS.RESPONSE_TIME_WARNING) {
|
|
126
|
+
results.push(createPassResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms`, { elapsed }));
|
|
127
|
+
}
|
|
128
|
+
else if (elapsed < PERFORMANCE_THRESHOLDS.RESPONSE_TIME_ERROR) {
|
|
129
|
+
results.push(createWarnResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms (slow)`, undefined, { elapsed }));
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
results.push(createFailResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms (very slow)`, FIX_SUGGESTIONS.CONNECTION_TIMEOUT, { elapsed }));
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, `HTTP ${response.status} ${response.statusText}`, undefined, { status: response.status }));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
141
|
+
if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED') || message.includes('getaddrinfo')) {
|
|
142
|
+
results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, 'Could not connect to API', FIX_SUGGESTIONS.CONNECTION_FAILED));
|
|
143
|
+
}
|
|
144
|
+
else if (message.includes('timeout') || message.includes('TimeoutError')) {
|
|
145
|
+
results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, 'Connection timed out', FIX_SUGGESTIONS.CONNECTION_TIMEOUT));
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, message));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return results;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Run project access checks
|
|
155
|
+
*/
|
|
156
|
+
async function runProjectAccessChecks() {
|
|
157
|
+
const results = [];
|
|
158
|
+
const config = resolveConfig();
|
|
159
|
+
if (!config.apiKey) {
|
|
160
|
+
// Skip if no API key (auth checks already failed)
|
|
161
|
+
return results;
|
|
162
|
+
}
|
|
163
|
+
const client = new ApiClient({
|
|
164
|
+
apiKey: config.apiKey,
|
|
165
|
+
apiUrl: config.apiUrl,
|
|
166
|
+
debug: config.debug,
|
|
167
|
+
});
|
|
168
|
+
// Check project access
|
|
169
|
+
if (config.projectId) {
|
|
170
|
+
try {
|
|
171
|
+
await client.call('get_project', { projectId: config.projectId });
|
|
172
|
+
results.push(createPassResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, config.projectId));
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
176
|
+
results.push(createFailResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, `Cannot access: ${message}`, FIX_SUGGESTIONS.PROJECT_NOT_ACCESSIBLE));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
results.push(createWarnResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, 'No default project configured', FIX_SUGGESTIONS.NO_PROJECT_CONFIGURED));
|
|
181
|
+
}
|
|
182
|
+
// Check specification access
|
|
183
|
+
if (config.specificationId) {
|
|
184
|
+
try {
|
|
185
|
+
await client.call('get_specification', { specificationId: config.specificationId });
|
|
186
|
+
results.push(createPassResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, config.specificationId));
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
190
|
+
results.push(createFailResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, `Cannot access: ${message}`, FIX_SUGGESTIONS.SPEC_NOT_ACCESSIBLE));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
results.push(createWarnResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, 'No default specification configured'));
|
|
195
|
+
}
|
|
196
|
+
// Check for active implementation session
|
|
197
|
+
try {
|
|
198
|
+
const context = await client.call('get_working_context', {});
|
|
199
|
+
if (context.implementationSession) {
|
|
200
|
+
const sessionInfo = context.implementationSession.ticketId
|
|
201
|
+
? `Active (ticket: ${context.implementationSession.ticketId})`
|
|
202
|
+
: 'Active session exists';
|
|
203
|
+
results.push(createPassResult(PROJECT_CHECK_NAMES.IMPLEMENTATION_SESSION, sessionInfo));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
results.push(createWarnResult(PROJECT_CHECK_NAMES.IMPLEMENTATION_SESSION, 'No active implementation session'));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// Ignore session check errors - not critical
|
|
211
|
+
}
|
|
212
|
+
return results;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Display the report in formatted console output
|
|
216
|
+
*/
|
|
217
|
+
function displayReport(report) {
|
|
218
|
+
printBlank();
|
|
219
|
+
printHeader('SpecForge MCP Health Check');
|
|
220
|
+
printBlank();
|
|
221
|
+
for (const category of CHECK_CATEGORIES) {
|
|
222
|
+
const checks = report.checks[category.id];
|
|
223
|
+
if (checks.length === 0)
|
|
224
|
+
continue;
|
|
225
|
+
console.log(colors.bold(category.name));
|
|
226
|
+
for (const check of checks) {
|
|
227
|
+
const icon = check.status === 'pass'
|
|
228
|
+
? colors.success(getStatusIcon('pass'))
|
|
229
|
+
: check.status === 'warn'
|
|
230
|
+
? colors.warning(getStatusIcon('warn'))
|
|
231
|
+
: colors.error(getStatusIcon('fail'));
|
|
232
|
+
console.log(` ${icon} ${check.name}: ${check.message}`);
|
|
233
|
+
if (check.fix && check.status !== 'pass') {
|
|
234
|
+
console.log(colors.muted(` → ${check.fix}`));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
printBlank();
|
|
238
|
+
}
|
|
239
|
+
// Summary
|
|
240
|
+
const { passed, failed, warnings, total } = report.summary;
|
|
241
|
+
if (failed === 0 && warnings === 0) {
|
|
242
|
+
console.log(colors.success(`All ${total} checks passed!`));
|
|
243
|
+
}
|
|
244
|
+
else if (failed === 0) {
|
|
245
|
+
console.log(colors.success('All checks passed!') +
|
|
246
|
+
colors.warning(` (${warnings} warning${warnings > 1 ? 's' : ''})`));
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
const failMsg = `${failed} check${failed > 1 ? 's' : ''} failed`;
|
|
250
|
+
const warnMsg = warnings > 0
|
|
251
|
+
? `, ${warnings} warning${warnings > 1 ? 's' : ''}`
|
|
252
|
+
: '';
|
|
253
|
+
console.log(colors.error(failMsg) + colors.warning(warnMsg));
|
|
254
|
+
}
|
|
255
|
+
printBlank();
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Doctor command action handler
|
|
259
|
+
*/
|
|
260
|
+
export async function doctorAction(options) {
|
|
261
|
+
const config = resolveConfig();
|
|
262
|
+
const spinner = ora({
|
|
263
|
+
text: 'Running health checks...',
|
|
264
|
+
color: 'cyan',
|
|
265
|
+
}).start();
|
|
266
|
+
// Run all checks
|
|
267
|
+
const configChecks = runConfigurationChecks();
|
|
268
|
+
const authChecks = await runAuthenticationChecks(config.apiKey);
|
|
269
|
+
const connectionChecks = await runConnectionChecks();
|
|
270
|
+
const projectChecks = await runProjectAccessChecks();
|
|
271
|
+
spinner.stop();
|
|
272
|
+
// Compile report
|
|
273
|
+
const checks = {
|
|
274
|
+
configuration: configChecks,
|
|
275
|
+
authentication: authChecks,
|
|
276
|
+
connection: connectionChecks,
|
|
277
|
+
projectAccess: projectChecks,
|
|
278
|
+
};
|
|
279
|
+
const report = {
|
|
280
|
+
checks,
|
|
281
|
+
summary: calculateSummary(checks),
|
|
282
|
+
timestamp: new Date().toISOString(),
|
|
283
|
+
};
|
|
284
|
+
// Output
|
|
285
|
+
if (options.json) {
|
|
286
|
+
console.log(JSON.stringify(report, null, 2));
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
displayReport(report);
|
|
290
|
+
}
|
|
291
|
+
// Exit with error if any checks failed
|
|
292
|
+
if (hasFailures(report)) {
|
|
293
|
+
process.exit(1);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Register doctor command with Commander
|
|
298
|
+
*/
|
|
299
|
+
export function registerDoctorCommand(program) {
|
|
300
|
+
program
|
|
301
|
+
.command('doctor')
|
|
302
|
+
.description('Diagnose configuration and connection issues')
|
|
303
|
+
.option('--json', 'Output as JSON for scripting')
|
|
304
|
+
.option('--fix', 'Attempt to fix issues automatically (future)')
|
|
305
|
+
.addHelpText('after', `
|
|
306
|
+
Examples:
|
|
307
|
+
$ specforge-mcp doctor # Run health checks
|
|
308
|
+
$ specforge-mcp doctor --json # Output as JSON
|
|
309
|
+
|
|
310
|
+
Check Categories:
|
|
311
|
+
Configuration - Config files presence and validity
|
|
312
|
+
Authentication - API key format and authentication
|
|
313
|
+
Connection - API connectivity and response time
|
|
314
|
+
Project Access - Access to configured project/specification
|
|
315
|
+
|
|
316
|
+
Exit Codes:
|
|
317
|
+
0 - All checks passed (warnings OK)
|
|
318
|
+
1 - One or more checks failed
|
|
319
|
+
`)
|
|
320
|
+
.action(withErrorHandler(doctorAction));
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}
|