@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,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scaffold Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Utility functions for file operations and content generation.
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
import { TARGETS } from './targets.js';
|
|
9
|
+
import { SCAFFOLD_VERSION } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Detect which AI CLI tools are installed
|
|
12
|
+
*/
|
|
13
|
+
export function detectInstalledTools() {
|
|
14
|
+
const installed = [];
|
|
15
|
+
for (const [target, config] of Object.entries(TARGETS)) {
|
|
16
|
+
const globalDir = path.dirname(config.globalPath());
|
|
17
|
+
if (fs.existsSync(globalDir)) {
|
|
18
|
+
installed.push(target);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return installed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate command content for a target format
|
|
25
|
+
*/
|
|
26
|
+
export function generateCommandContent(template, needsFrontmatter, target) {
|
|
27
|
+
let content = '';
|
|
28
|
+
// Add version comment
|
|
29
|
+
content += `<!-- SpecForge v${SCAFFOLD_VERSION} -->\n`;
|
|
30
|
+
// Add YAML frontmatter if needed (Claude Code)
|
|
31
|
+
if (needsFrontmatter) {
|
|
32
|
+
content += '---\n';
|
|
33
|
+
if (template.argumentHint) {
|
|
34
|
+
content += `argument-hint: ${template.argumentHint}\n`;
|
|
35
|
+
}
|
|
36
|
+
content += `description: ${template.description}\n`;
|
|
37
|
+
content += '---\n\n';
|
|
38
|
+
}
|
|
39
|
+
// Add main content
|
|
40
|
+
content += template.content;
|
|
41
|
+
// Replace any target-specific placeholders
|
|
42
|
+
content = content.replace(/\{TARGET\}/g, target);
|
|
43
|
+
return content;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Ensure directory exists
|
|
47
|
+
*/
|
|
48
|
+
export function ensureDirectory(dirPath) {
|
|
49
|
+
if (!fs.existsSync(dirPath)) {
|
|
50
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check if file exists
|
|
55
|
+
*/
|
|
56
|
+
export function fileExists(filePath) {
|
|
57
|
+
return fs.existsSync(filePath);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Write content to file
|
|
61
|
+
*/
|
|
62
|
+
export function writeFile(filePath, content) {
|
|
63
|
+
fs.writeFileSync(filePath, content, 'utf-8');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get command filename
|
|
67
|
+
*/
|
|
68
|
+
export function getCommandFilename(commandName, extension) {
|
|
69
|
+
return `${commandName}${extension}`;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/commands/scaffold/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,MAAwB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,gBAAyB,EACzB,MAAc;IAEd,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,sBAAsB;IACtB,OAAO,IAAI,mBAAmB,gBAAgB,QAAQ,CAAC;IAEvD,+CAA+C;IAC/C,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,OAAO,CAAC;QACnB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,IAAI,kBAAkB,QAAQ,CAAC,YAAY,IAAI,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,gBAAgB,QAAQ,CAAC,WAAW,IAAI,CAAC;QACpD,OAAO,IAAI,SAAS,CAAC;IACvB,CAAC;IAED,mBAAmB;IACnB,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;IAE5B,2CAA2C;IAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,SAAiB;IAEjB,OAAO,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Display Utilities
|
|
3
|
+
*
|
|
4
|
+
* Display formatting and rendering for session status information,
|
|
5
|
+
* including session headers, progress bars, and statistics.
|
|
6
|
+
*/
|
|
7
|
+
import type { Session, SessionStatus, ColorFunction } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Get color for session status
|
|
10
|
+
*/
|
|
11
|
+
export declare function getStatusColor(status: SessionStatus): ColorFunction;
|
|
12
|
+
/**
|
|
13
|
+
* Display section header
|
|
14
|
+
*/
|
|
15
|
+
export declare function printSectionHeader(title: string): void;
|
|
16
|
+
/**
|
|
17
|
+
* Display progress bar
|
|
18
|
+
*/
|
|
19
|
+
export declare function displayProgressBar(completed: number, failed: number, skipped: number, total: number, width?: number): void;
|
|
20
|
+
/**
|
|
21
|
+
* Display session header
|
|
22
|
+
*/
|
|
23
|
+
export declare function displaySessionHeader(session: Session): void;
|
|
24
|
+
/**
|
|
25
|
+
* Display session progress
|
|
26
|
+
*/
|
|
27
|
+
export declare function displaySessionProgress(session: Session): void;
|
|
28
|
+
/**
|
|
29
|
+
* Display current ticket
|
|
30
|
+
*/
|
|
31
|
+
export declare function displayCurrentTicket(ticket: Session['currentTicket']): void;
|
|
32
|
+
/**
|
|
33
|
+
* Display full session details
|
|
34
|
+
*/
|
|
35
|
+
export declare function displaySession(session: Session): void;
|
|
36
|
+
/**
|
|
37
|
+
* Display no session message
|
|
38
|
+
*/
|
|
39
|
+
export declare function displayNoSession(): void;
|
|
40
|
+
//# sourceMappingURL=display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/display.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAGtF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAanE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,IAAI,CAmBN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAM3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Display Utilities
|
|
3
|
+
*
|
|
4
|
+
* Display formatting and rendering for session status information,
|
|
5
|
+
* including session headers, progress bars, and statistics.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { formatDuration, calculateSessionStats, formatTicketNumber } from './utils.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get color for session status
|
|
11
|
+
*/
|
|
12
|
+
export function getStatusColor(status) {
|
|
13
|
+
switch (status) {
|
|
14
|
+
case 'active':
|
|
15
|
+
return chalk.green;
|
|
16
|
+
case 'completed':
|
|
17
|
+
return chalk.blue;
|
|
18
|
+
case 'aborted':
|
|
19
|
+
return chalk.red;
|
|
20
|
+
case 'paused':
|
|
21
|
+
return chalk.yellow;
|
|
22
|
+
default:
|
|
23
|
+
return chalk.white;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Display section header
|
|
28
|
+
*/
|
|
29
|
+
export function printSectionHeader(title) {
|
|
30
|
+
console.log(chalk.bold(`\n${title}`));
|
|
31
|
+
console.log('─'.repeat(title.length + 4));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Display progress bar
|
|
35
|
+
*/
|
|
36
|
+
export function displayProgressBar(completed, failed, skipped, total, width = 30) {
|
|
37
|
+
if (total === 0) {
|
|
38
|
+
console.log(chalk.dim('[' + '░'.repeat(width) + '] 0%'));
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const completedWidth = Math.round((completed / total) * width);
|
|
42
|
+
const failedWidth = Math.round((failed / total) * width);
|
|
43
|
+
const skippedWidth = Math.round((skipped / total) * width);
|
|
44
|
+
const remainingWidth = width - completedWidth - failedWidth - skippedWidth;
|
|
45
|
+
const bar = chalk.green('█'.repeat(completedWidth)) +
|
|
46
|
+
chalk.red('█'.repeat(failedWidth)) +
|
|
47
|
+
chalk.yellow('█'.repeat(skippedWidth)) +
|
|
48
|
+
chalk.dim('░'.repeat(Math.max(0, remainingWidth)));
|
|
49
|
+
const percentage = Math.round((completed / total) * 100);
|
|
50
|
+
console.log(`[${bar}] ${percentage}%`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Display session header
|
|
54
|
+
*/
|
|
55
|
+
export function displaySessionHeader(session) {
|
|
56
|
+
const statusColor = getStatusColor(session.status);
|
|
57
|
+
console.log(chalk.bold('\nImplementation Session'));
|
|
58
|
+
console.log('═'.repeat(24));
|
|
59
|
+
console.log(`\n${chalk.dim('ID:')} ${session.id}`);
|
|
60
|
+
console.log(`${chalk.dim('Status:')} ${statusColor(session.status)}`);
|
|
61
|
+
console.log(`${chalk.dim('Started:')} ${new Date(session.startedAt).toLocaleString()} (${formatDuration(session.startedAt)} ago)`);
|
|
62
|
+
if (session.specificationTitle) {
|
|
63
|
+
console.log(`${chalk.dim('Spec:')} ${session.specificationTitle}`);
|
|
64
|
+
}
|
|
65
|
+
if (session.mode) {
|
|
66
|
+
console.log(`${chalk.dim('Mode:')} ${session.mode}`);
|
|
67
|
+
}
|
|
68
|
+
if (session.maxTickets) {
|
|
69
|
+
console.log(`${chalk.dim('Max:')} ${session.maxTickets} tickets`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Display session progress
|
|
74
|
+
*/
|
|
75
|
+
export function displaySessionProgress(session) {
|
|
76
|
+
const stats = calculateSessionStats(session);
|
|
77
|
+
printSectionHeader('Progress');
|
|
78
|
+
console.log(`${chalk.dim('Completed:')} ${chalk.green(stats.completedCount.toString())} tickets`);
|
|
79
|
+
console.log(`${chalk.dim('Failed:')} ${stats.failedCount > 0 ? chalk.red(stats.failedCount.toString()) : '0'} tickets`);
|
|
80
|
+
console.log(`${chalk.dim('Skipped:')} ${stats.skippedCount > 0 ? chalk.yellow(stats.skippedCount.toString()) : '0'} tickets`);
|
|
81
|
+
console.log(`${chalk.dim('Total:')} ${stats.totalProcessed} processed`);
|
|
82
|
+
if (stats.avgMinutesPerTicket) {
|
|
83
|
+
console.log(`${chalk.dim('Avg time:')} ${stats.avgMinutesPerTicket} min/ticket`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Display current ticket
|
|
88
|
+
*/
|
|
89
|
+
export function displayCurrentTicket(ticket) {
|
|
90
|
+
if (!ticket)
|
|
91
|
+
return;
|
|
92
|
+
printSectionHeader('Current Ticket');
|
|
93
|
+
console.log(`${formatTicketNumber(ticket.ticketNumber)}: ${ticket.title}`);
|
|
94
|
+
console.log(`${chalk.dim('Status:')} ${ticket.status}`);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Display full session details
|
|
98
|
+
*/
|
|
99
|
+
export function displaySession(session) {
|
|
100
|
+
displaySessionHeader(session);
|
|
101
|
+
displaySessionProgress(session);
|
|
102
|
+
if (session.currentTicket) {
|
|
103
|
+
displayCurrentTicket(session.currentTicket);
|
|
104
|
+
}
|
|
105
|
+
console.log();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Display no session message
|
|
109
|
+
*/
|
|
110
|
+
export function displayNoSession() {
|
|
111
|
+
console.log(chalk.dim('\nNo active implementation session.'));
|
|
112
|
+
console.log(chalk.dim("Run 'specforge-mcp session start' to begin a new session.\n"));
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session End Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Terminates the current implementation session, displaying a summary of work
|
|
5
|
+
* completed and supporting different end statuses.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionEndOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Session end command implementation
|
|
10
|
+
*/
|
|
11
|
+
export declare function sessionEndCommand(options: SessionEndOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=end.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/end.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,YAAY,CAAC;AAoFpB;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGjF"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session End Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Terminates the current implementation session, displaying a summary of work
|
|
5
|
+
* completed and supporting different end statuses.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
import { resolveConfig } from '../../config/index.js';
|
|
10
|
+
import { colors } from '../../ui/colors.js';
|
|
11
|
+
import { ApiClient } from '../../../client/api-client.js';
|
|
12
|
+
import { calculateSessionStats } from './utils.js';
|
|
13
|
+
/**
|
|
14
|
+
* Validate end status
|
|
15
|
+
*/
|
|
16
|
+
function validateEndStatus(status) {
|
|
17
|
+
if (!status)
|
|
18
|
+
return 'completed';
|
|
19
|
+
const validStatuses = ['completed', 'aborted'];
|
|
20
|
+
if (!validStatuses.includes(status)) {
|
|
21
|
+
throw new Error(`Invalid status "${status}". Valid statuses: ${validStatuses.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
return status;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get status color
|
|
27
|
+
*/
|
|
28
|
+
function getEndStatusColor(status) {
|
|
29
|
+
return status === 'completed' ? chalk.green : chalk.yellow;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Display session summary
|
|
33
|
+
*/
|
|
34
|
+
function displaySessionSummary(session, stats) {
|
|
35
|
+
console.log(chalk.bold('\nSession Summary'));
|
|
36
|
+
console.log('───────────────');
|
|
37
|
+
console.log(`${chalk.dim('Duration:')} ${stats.durationFormatted}`);
|
|
38
|
+
console.log(`${chalk.dim('Completed:')} ${chalk.green(stats.completedCount.toString())} tickets`);
|
|
39
|
+
if (stats.failedCount > 0) {
|
|
40
|
+
console.log(`${chalk.dim('Failed:')} ${chalk.red(stats.failedCount.toString())} tickets`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
console.log(`${chalk.dim('Failed:')} 0 tickets`);
|
|
44
|
+
}
|
|
45
|
+
if (stats.skippedCount > 0) {
|
|
46
|
+
console.log(`${chalk.dim('Skipped:')} ${chalk.yellow(stats.skippedCount.toString())} tickets`);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
console.log(`${chalk.dim('Skipped:')} 0 tickets`);
|
|
50
|
+
}
|
|
51
|
+
console.log(`${chalk.dim('Total:')} ${stats.totalProcessed} processed`);
|
|
52
|
+
if (stats.avgMinutesPerTicket && stats.completedCount > 0) {
|
|
53
|
+
console.log(`${chalk.dim('Avg time:')} ${stats.avgMinutesPerTicket} min/ticket`);
|
|
54
|
+
}
|
|
55
|
+
if (stats.successRate !== undefined && stats.totalProcessed > 0) {
|
|
56
|
+
const rateColor = stats.successRate >= 80 ? chalk.green : stats.successRate >= 50 ? chalk.yellow : chalk.red;
|
|
57
|
+
console.log(`${chalk.dim('Success rate:')} ${rateColor(stats.successRate + '%')}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Display completed tickets list
|
|
62
|
+
*/
|
|
63
|
+
function displayCompletedTickets(ticketIds) {
|
|
64
|
+
if (ticketIds.length === 0)
|
|
65
|
+
return;
|
|
66
|
+
console.log(chalk.dim(`\nCompleted tickets: ${ticketIds.length}`));
|
|
67
|
+
// Note: We only have IDs, not full ticket info
|
|
68
|
+
// Could fetch details if needed, but keeping it simple
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Display failed tickets list
|
|
72
|
+
*/
|
|
73
|
+
function displayFailedTickets(ticketIds) {
|
|
74
|
+
if (ticketIds.length === 0)
|
|
75
|
+
return;
|
|
76
|
+
console.log(chalk.dim(`\nFailed tickets: ${ticketIds.length}`));
|
|
77
|
+
console.log(chalk.dim(' Run `specforge-mcp tickets --status failed` to review'));
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Session end command implementation
|
|
81
|
+
*/
|
|
82
|
+
export async function sessionEndCommand(options) {
|
|
83
|
+
const config = resolveConfig();
|
|
84
|
+
// Validate options
|
|
85
|
+
let endStatus;
|
|
86
|
+
try {
|
|
87
|
+
endStatus = validateEndStatus(options.status);
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
const message = error instanceof Error ? error.message : 'Invalid option';
|
|
91
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
const spinner = ora('Ending session...').start();
|
|
95
|
+
try {
|
|
96
|
+
if (!config.apiKey) {
|
|
97
|
+
spinner.fail('Not authenticated');
|
|
98
|
+
console.error(colors.error('\nError: Not authenticated.'));
|
|
99
|
+
console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
const client = new ApiClient({
|
|
103
|
+
apiKey: config.apiKey,
|
|
104
|
+
apiUrl: config.apiUrl,
|
|
105
|
+
debug: config.debug,
|
|
106
|
+
});
|
|
107
|
+
// Get current session
|
|
108
|
+
const context = (await client.call('get_working_context', {}));
|
|
109
|
+
const session = context.implementationSession;
|
|
110
|
+
if (!session || session.status !== 'active') {
|
|
111
|
+
spinner.fail('No active session');
|
|
112
|
+
console.error(chalk.yellow('\nNo active implementation session to end.'));
|
|
113
|
+
console.error(chalk.dim("Run 'specforge-mcp session start' to begin a new session."));
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
// Build end parameters
|
|
117
|
+
const endParams = {
|
|
118
|
+
sessionId: session.id,
|
|
119
|
+
status: endStatus,
|
|
120
|
+
};
|
|
121
|
+
if (options.summary) {
|
|
122
|
+
endParams.summary = options.summary;
|
|
123
|
+
}
|
|
124
|
+
// End session
|
|
125
|
+
await client.call('end_session', endParams);
|
|
126
|
+
spinner.succeed('Session ended');
|
|
127
|
+
// Calculate stats before displaying
|
|
128
|
+
const stats = calculateSessionStats(session);
|
|
129
|
+
// Display header
|
|
130
|
+
const statusColor = getEndStatusColor(endStatus);
|
|
131
|
+
console.log(chalk.bold(`\nEnding session: ${session.id}`));
|
|
132
|
+
console.log(`${chalk.dim('Status:')} ${statusColor(endStatus)}`);
|
|
133
|
+
// Display summary
|
|
134
|
+
displaySessionSummary(session, stats);
|
|
135
|
+
// Display ticket lists if relevant
|
|
136
|
+
if (session.failedTickets.length > 0) {
|
|
137
|
+
displayFailedTickets(session.failedTickets);
|
|
138
|
+
}
|
|
139
|
+
// Display custom summary if provided
|
|
140
|
+
if (options.summary) {
|
|
141
|
+
console.log(`\n${chalk.dim('Summary:')} ${options.summary}`);
|
|
142
|
+
}
|
|
143
|
+
// Success message
|
|
144
|
+
console.log(chalk.green(`\n✓ Session ended (${endStatus})`));
|
|
145
|
+
// Provide next steps
|
|
146
|
+
if (endStatus === 'completed' && stats.successRate && stats.successRate < 100) {
|
|
147
|
+
console.log(chalk.dim('\nSome tickets were not completed. Review with:'));
|
|
148
|
+
console.log(chalk.dim(' specforge-mcp tickets --status pending'));
|
|
149
|
+
console.log(chalk.dim(' specforge-mcp tickets --status blocked'));
|
|
150
|
+
}
|
|
151
|
+
if (endStatus === 'aborted') {
|
|
152
|
+
console.log(chalk.dim('\nSession was aborted. Progress has been saved.'));
|
|
153
|
+
console.log(chalk.dim('Start a new session when ready:'));
|
|
154
|
+
console.log(chalk.dim(' specforge-mcp session start'));
|
|
155
|
+
}
|
|
156
|
+
console.log();
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
spinner.fail('Failed to end session');
|
|
160
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
161
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
162
|
+
process.exit(1);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=end.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"end.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/end.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all session command types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from './utils.js';
|
|
8
|
+
export * from './display.js';
|
|
9
|
+
export { sessionStatusCommand } from './status.js';
|
|
10
|
+
export { sessionStartCommand } from './start.js';
|
|
11
|
+
export { sessionEndCommand } from './end.js';
|
|
12
|
+
export { registerSessionCommands } from './register.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all session command types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export * from './utils.js';
|
|
8
|
+
export * from './display.js';
|
|
9
|
+
export { sessionStatusCommand } from './status.js';
|
|
10
|
+
export { sessionStartCommand } from './start.js';
|
|
11
|
+
export { sessionEndCommand } from './end.js';
|
|
12
|
+
export { registerSessionCommands } from './register.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers all session commands with the CLI framework, including the parent
|
|
5
|
+
* session command and its subcommands.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* Register all session commands with the CLI
|
|
10
|
+
*/
|
|
11
|
+
export declare function registerSessionCommands(program: Command): void;
|
|
12
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0F9D"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers all session commands with the CLI framework, including the parent
|
|
5
|
+
* session command and its subcommands.
|
|
6
|
+
*/
|
|
7
|
+
import { withErrorHandler } from '../../middleware/error-handler.js';
|
|
8
|
+
import { sessionStatusCommand } from './status.js';
|
|
9
|
+
import { sessionStartCommand } from './start.js';
|
|
10
|
+
import { sessionEndCommand } from './end.js';
|
|
11
|
+
/**
|
|
12
|
+
* Register all session commands with the CLI
|
|
13
|
+
*/
|
|
14
|
+
export function registerSessionCommands(program) {
|
|
15
|
+
// Create parent session command
|
|
16
|
+
const session = program
|
|
17
|
+
.command('session')
|
|
18
|
+
.description('Implementation session management');
|
|
19
|
+
// Default action (no subcommand) - show status
|
|
20
|
+
session
|
|
21
|
+
.option('--json', 'Output as JSON')
|
|
22
|
+
.option('--toon', 'Output as TOON format')
|
|
23
|
+
.addHelpText('after', `
|
|
24
|
+
Examples:
|
|
25
|
+
$ specforge-mcp session # Show session status
|
|
26
|
+
$ specforge-mcp session --json # Status as JSON
|
|
27
|
+
$ specforge-mcp session start # Start new session
|
|
28
|
+
$ specforge-mcp session end # End current session
|
|
29
|
+
|
|
30
|
+
The session command manages implementation sessions that track work on
|
|
31
|
+
a specification. Sessions record which tickets have been completed,
|
|
32
|
+
failed, or skipped, and provide progress tracking.
|
|
33
|
+
`)
|
|
34
|
+
.action(withErrorHandler(async (options) => {
|
|
35
|
+
await sessionStatusCommand(options);
|
|
36
|
+
}));
|
|
37
|
+
// Start subcommand
|
|
38
|
+
session
|
|
39
|
+
.command('start [specId]')
|
|
40
|
+
.description('Start a new implementation session')
|
|
41
|
+
.option('--mode <mode>', 'Session mode (single, autonomous, guided)')
|
|
42
|
+
.option('--max-tickets <n>', 'Maximum tickets to process')
|
|
43
|
+
.option('--stop-on-failure', 'Stop on first failure')
|
|
44
|
+
.option('--force', 'End existing session and start new')
|
|
45
|
+
.addHelpText('after', `
|
|
46
|
+
Examples:
|
|
47
|
+
$ specforge-mcp session start # Start with current spec
|
|
48
|
+
$ specforge-mcp session start spec-123 # Start with specific spec
|
|
49
|
+
$ specforge-mcp session start --mode single # Single ticket mode
|
|
50
|
+
$ specforge-mcp session start --max-tickets 10 # Limit to 10 tickets
|
|
51
|
+
$ specforge-mcp session start --force # Replace existing session
|
|
52
|
+
|
|
53
|
+
Session modes:
|
|
54
|
+
single - Work on one ticket at a time
|
|
55
|
+
autonomous - Autonomous implementation (default)
|
|
56
|
+
guided - Guided implementation with prompts
|
|
57
|
+
|
|
58
|
+
The start command creates a new implementation session. If a session is
|
|
59
|
+
already active, use --force to end it and start a new one.
|
|
60
|
+
`)
|
|
61
|
+
.action(withErrorHandler(async (specId, options) => {
|
|
62
|
+
await sessionStartCommand(specId, options);
|
|
63
|
+
}));
|
|
64
|
+
// End subcommand
|
|
65
|
+
session
|
|
66
|
+
.command('end')
|
|
67
|
+
.description('End the current implementation session')
|
|
68
|
+
.option('--status <status>', 'End status (completed, aborted)', 'completed')
|
|
69
|
+
.option('--summary <summary>', 'Custom session summary')
|
|
70
|
+
.addHelpText('after', `
|
|
71
|
+
Examples:
|
|
72
|
+
$ specforge-mcp session end # End as completed
|
|
73
|
+
$ specforge-mcp session end --status aborted # End as aborted
|
|
74
|
+
$ specforge-mcp session end --summary "..." # With custom summary
|
|
75
|
+
|
|
76
|
+
End statuses:
|
|
77
|
+
completed - Session finished successfully (default)
|
|
78
|
+
aborted - Session terminated early
|
|
79
|
+
|
|
80
|
+
The end command terminates the active session and displays a summary
|
|
81
|
+
of work completed including statistics and success rate.
|
|
82
|
+
`)
|
|
83
|
+
.action(withErrorHandler(async (options) => {
|
|
84
|
+
await sessionEndCommand(options);
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=register.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAO7C;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,gCAAgC;IAChC,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAEpD,+CAA+C;IAC/C,OAAO;SACJ,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QACvD,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;IAEJ,mBAAmB;IACnB,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;SACpD,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;CAeL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA4B,EAAE,EAAE;QAClF,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEJ,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,WAAW,CAAC;SAC3E,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;SACvD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;CAYL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QACpD,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Start Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Initiates a new implementation session for a specification, supporting
|
|
5
|
+
* various configuration options like mode, ticket limits, and failure handling.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionStartOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Session start command implementation
|
|
10
|
+
*/
|
|
11
|
+
export declare function sessionStartCommand(specId: string | undefined, options: SessionStartOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAOpB,MAAM,YAAY,CAAC;AAqEpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuJf"}
|