@specforge/mcp 2.0.10 → 2.1.1
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/index.js +3 -3
- package/dist/tools/index.js.map +1 -1
- package/package.json +9 -2
|
@@ -0,0 +1,189 @@
|
|
|
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 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 { formatTicketNumber } from './utils.js';
|
|
13
|
+
/**
|
|
14
|
+
* Validate session mode
|
|
15
|
+
*/
|
|
16
|
+
function validateMode(mode) {
|
|
17
|
+
if (!mode)
|
|
18
|
+
return undefined;
|
|
19
|
+
const validModes = ['single', 'autonomous', 'guided'];
|
|
20
|
+
if (!validModes.includes(mode)) {
|
|
21
|
+
throw new Error(`Invalid mode "${mode}". Valid modes: ${validModes.join(', ')}`);
|
|
22
|
+
}
|
|
23
|
+
return mode;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Validate max tickets
|
|
27
|
+
*/
|
|
28
|
+
function validateMaxTickets(maxTickets) {
|
|
29
|
+
if (!maxTickets)
|
|
30
|
+
return undefined;
|
|
31
|
+
const num = parseInt(maxTickets, 10);
|
|
32
|
+
if (isNaN(num) || num < 1) {
|
|
33
|
+
throw new Error('Max tickets must be a positive integer');
|
|
34
|
+
}
|
|
35
|
+
return num;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Display session configuration
|
|
39
|
+
*/
|
|
40
|
+
function displayConfiguration(mode, maxTickets, stopOnFailure) {
|
|
41
|
+
console.log('\nConfiguration:');
|
|
42
|
+
console.log(` ${chalk.dim('Mode:')} ${mode || 'autonomous'}`);
|
|
43
|
+
console.log(` ${chalk.dim('Max tickets:')} ${maxTickets || 'unlimited'}`);
|
|
44
|
+
console.log(` ${chalk.dim('Stop on failure:')} ${stopOnFailure ? 'yes' : 'no'}`);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Display actionable tickets
|
|
48
|
+
*/
|
|
49
|
+
function displayActionableTickets(tickets) {
|
|
50
|
+
if (tickets.length === 0) {
|
|
51
|
+
console.log(chalk.dim('\nNo pending tickets found.'));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
console.log('\nNext actionable tickets:');
|
|
55
|
+
for (let i = 0; i < tickets.length; i++) {
|
|
56
|
+
const t = tickets[i];
|
|
57
|
+
const priorityColor = t.priority === 'critical'
|
|
58
|
+
? chalk.red
|
|
59
|
+
: t.priority === 'high'
|
|
60
|
+
? chalk.yellow
|
|
61
|
+
: chalk.white;
|
|
62
|
+
console.log(` ${i + 1}. ${formatTicketNumber(t.ticketNumber)} - ${t.title} ` +
|
|
63
|
+
`(${priorityColor(t.priority)})`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Session start command implementation
|
|
68
|
+
*/
|
|
69
|
+
export async function sessionStartCommand(specId, options) {
|
|
70
|
+
const config = resolveConfig();
|
|
71
|
+
// Validate options
|
|
72
|
+
let mode;
|
|
73
|
+
let maxTickets;
|
|
74
|
+
try {
|
|
75
|
+
mode = validateMode(options.mode);
|
|
76
|
+
maxTickets = validateMaxTickets(options.maxTickets);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const message = error instanceof Error ? error.message : 'Invalid option';
|
|
80
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
// Determine specification ID
|
|
84
|
+
const targetSpecId = specId || config.specificationId;
|
|
85
|
+
if (!targetSpecId) {
|
|
86
|
+
console.error(colors.error('\nError: No specification specified.'));
|
|
87
|
+
console.error(colors.muted('Provide a specification ID or run:'));
|
|
88
|
+
console.error(colors.muted(' specforge-mcp init # to initialize project'));
|
|
89
|
+
console.error(colors.muted(' specforge-mcp switch # to select specification'));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
const spinner = ora('Starting implementation session...').start();
|
|
93
|
+
try {
|
|
94
|
+
if (!config.apiKey) {
|
|
95
|
+
spinner.fail('Not authenticated');
|
|
96
|
+
console.error(colors.error('\nError: Not authenticated.'));
|
|
97
|
+
console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
const client = new ApiClient({
|
|
101
|
+
apiKey: config.apiKey,
|
|
102
|
+
apiUrl: config.apiUrl,
|
|
103
|
+
debug: config.debug,
|
|
104
|
+
});
|
|
105
|
+
// Check for existing session
|
|
106
|
+
const context = (await client.call('get_working_context', {}));
|
|
107
|
+
const existingSession = context.implementationSession;
|
|
108
|
+
if (existingSession && existingSession.status === 'active') {
|
|
109
|
+
if (!options.force) {
|
|
110
|
+
spinner.fail('Session already active');
|
|
111
|
+
console.error(chalk.yellow('\nAn implementation session is already active.'));
|
|
112
|
+
console.error(`${chalk.dim('Session ID:')} ${existingSession.id}`);
|
|
113
|
+
console.error(`${chalk.dim('Started:')} ${new Date(existingSession.startedAt).toLocaleString()}`);
|
|
114
|
+
console.error(`\nUse ${chalk.cyan('--force')} to end the existing session and start a new one.`);
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
// End existing session with --force
|
|
118
|
+
spinner.text = 'Ending existing session...';
|
|
119
|
+
await client.call('end_session', {
|
|
120
|
+
sessionId: existingSession.id,
|
|
121
|
+
status: 'aborted',
|
|
122
|
+
summary: 'Aborted to start new session (--force)',
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
// Get specification info
|
|
126
|
+
spinner.text = 'Validating specification...';
|
|
127
|
+
const specResponse = (await client.call('get_specification', {
|
|
128
|
+
specificationId: targetSpecId,
|
|
129
|
+
}));
|
|
130
|
+
// Validate specification status
|
|
131
|
+
const validStatuses = ['ready', 'in_progress'];
|
|
132
|
+
if (!validStatuses.includes(specResponse.status)) {
|
|
133
|
+
spinner.fail('Cannot start session');
|
|
134
|
+
console.error(colors.error(`\nError: Specification is in "${specResponse.status}" status.`));
|
|
135
|
+
console.error(colors.muted('Sessions can only be started for specifications in "ready" or "in_progress" status.'));
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
// Build session parameters
|
|
139
|
+
const sessionParams = {
|
|
140
|
+
specificationId: targetSpecId,
|
|
141
|
+
};
|
|
142
|
+
if (mode)
|
|
143
|
+
sessionParams.mode = mode;
|
|
144
|
+
if (maxTickets)
|
|
145
|
+
sessionParams.maxTickets = maxTickets;
|
|
146
|
+
if (options.stopOnFailure)
|
|
147
|
+
sessionParams.stopOnFailure = true;
|
|
148
|
+
// Start session
|
|
149
|
+
spinner.text = 'Creating session...';
|
|
150
|
+
const session = (await client.call('start_implementation_session', sessionParams));
|
|
151
|
+
spinner.succeed('Session started');
|
|
152
|
+
// Display success
|
|
153
|
+
console.log(chalk.bold(`\nStarting implementation session for:`));
|
|
154
|
+
console.log(` ${chalk.cyan(specResponse.title)}`);
|
|
155
|
+
displayConfiguration(mode, maxTickets, options.stopOnFailure || false);
|
|
156
|
+
console.log(chalk.green(`\n✓ Session created (ID: ${session.id})`));
|
|
157
|
+
console.log(chalk.green('✓ Working context set'));
|
|
158
|
+
// Fetch and display actionable tickets
|
|
159
|
+
spinner.start('Fetching actionable tickets...');
|
|
160
|
+
const ticketsResponse = (await client.call('list_tickets', {
|
|
161
|
+
specificationId: targetSpecId,
|
|
162
|
+
status: 'pending',
|
|
163
|
+
limit: 5,
|
|
164
|
+
}));
|
|
165
|
+
spinner.stop();
|
|
166
|
+
displayActionableTickets(ticketsResponse.tickets || []);
|
|
167
|
+
// Provide next steps
|
|
168
|
+
console.log(colors.muted('\nNext steps:'));
|
|
169
|
+
console.log(colors.muted(' specforge-mcp next # Start working on next ticket'));
|
|
170
|
+
console.log(colors.muted(' specforge-mcp tickets # View all tickets'));
|
|
171
|
+
console.log(colors.muted(' specforge-mcp session # Check session status'));
|
|
172
|
+
console.log();
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
spinner.fail('Failed to start session');
|
|
176
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
177
|
+
if (message.includes('404') || message.includes('not found')) {
|
|
178
|
+
console.error(colors.error(`\nError: Specification "${targetSpecId}" not found.`));
|
|
179
|
+
}
|
|
180
|
+
else if (message.includes('403') || message.includes('Forbidden')) {
|
|
181
|
+
console.error(colors.error(`\nError: You do not have access to this specification.`));
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
185
|
+
}
|
|
186
|
+
process.exit(1);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Status Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Main command for displaying the current implementation session status,
|
|
5
|
+
* including progress, duration, and current ticket information.
|
|
6
|
+
*/
|
|
7
|
+
import type { SessionStatusOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Session status command implementation
|
|
10
|
+
*/
|
|
11
|
+
export declare function sessionStatusCommand(options: SessionStatusOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,oBAAoB,EAA2B,MAAM,YAAY,CAAC;AA0ChF;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Status Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Main command for displaying the current implementation session status,
|
|
5
|
+
* including progress, duration, and current ticket information.
|
|
6
|
+
*/
|
|
7
|
+
import ora from 'ora';
|
|
8
|
+
import { resolveConfig } from '../../config/index.js';
|
|
9
|
+
import { colors } from '../../ui/colors.js';
|
|
10
|
+
import { ApiClient } from '../../../client/api-client.js';
|
|
11
|
+
import { displaySession, displayNoSession } from './display.js';
|
|
12
|
+
/**
|
|
13
|
+
* Format session as TOON
|
|
14
|
+
*/
|
|
15
|
+
function formatToon(session) {
|
|
16
|
+
const lines = ['@session'];
|
|
17
|
+
lines.push(` id: ${session.id}`);
|
|
18
|
+
lines.push(` status: ${session.status}`);
|
|
19
|
+
lines.push(` startedAt: ${session.startedAt}`);
|
|
20
|
+
if (session.endedAt) {
|
|
21
|
+
lines.push(` endedAt: ${session.endedAt}`);
|
|
22
|
+
}
|
|
23
|
+
if (session.specificationTitle) {
|
|
24
|
+
lines.push(` specification: ${session.specificationTitle}`);
|
|
25
|
+
}
|
|
26
|
+
if (session.mode) {
|
|
27
|
+
lines.push(` mode: ${session.mode}`);
|
|
28
|
+
}
|
|
29
|
+
if (session.maxTickets) {
|
|
30
|
+
lines.push(` maxTickets: ${session.maxTickets}`);
|
|
31
|
+
}
|
|
32
|
+
if (session.stopOnFailure !== undefined) {
|
|
33
|
+
lines.push(` stopOnFailure: ${session.stopOnFailure}`);
|
|
34
|
+
}
|
|
35
|
+
lines.push(` completed: ${session.completedTickets.length}`);
|
|
36
|
+
lines.push(` failed: ${session.failedTickets.length}`);
|
|
37
|
+
lines.push(` skipped: ${session.skippedTickets.length}`);
|
|
38
|
+
if (session.currentTicket) {
|
|
39
|
+
lines.push(` currentTicket: TKT-${session.currentTicket.ticketNumber.toString().padStart(3, '0')} - ${session.currentTicket.title}`);
|
|
40
|
+
}
|
|
41
|
+
if (session.summary) {
|
|
42
|
+
const summary = session.summary.slice(0, 100);
|
|
43
|
+
lines.push(` summary: ${summary}${session.summary.length > 100 ? '...' : ''}`);
|
|
44
|
+
}
|
|
45
|
+
return lines.join('\n');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Session status command implementation
|
|
49
|
+
*/
|
|
50
|
+
export async function sessionStatusCommand(options) {
|
|
51
|
+
const config = resolveConfig();
|
|
52
|
+
const spinner = ora('Fetching session status...').start();
|
|
53
|
+
try {
|
|
54
|
+
if (!config.apiKey) {
|
|
55
|
+
spinner.fail('Not authenticated');
|
|
56
|
+
console.error(colors.error('\nError: Not authenticated.'));
|
|
57
|
+
console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
|
|
58
|
+
process.exit(1);
|
|
59
|
+
}
|
|
60
|
+
const client = new ApiClient({
|
|
61
|
+
apiKey: config.apiKey,
|
|
62
|
+
apiUrl: config.apiUrl,
|
|
63
|
+
debug: config.debug,
|
|
64
|
+
});
|
|
65
|
+
// Get working context which includes implementation session
|
|
66
|
+
const context = (await client.call('get_working_context', {}));
|
|
67
|
+
const session = context.implementationSession;
|
|
68
|
+
spinner.stop();
|
|
69
|
+
// No active session
|
|
70
|
+
if (!session) {
|
|
71
|
+
displayNoSession();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Output based on format
|
|
75
|
+
if (options.json) {
|
|
76
|
+
console.log(JSON.stringify(session, null, 2));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (options.toon) {
|
|
80
|
+
console.log(formatToon(session));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// Human-readable display
|
|
84
|
+
displaySession(session);
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
spinner.fail('Failed to fetch session status');
|
|
88
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
89
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Command Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for session management commands, including session data structures,
|
|
5
|
+
* command options, and session modes.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Session status values
|
|
9
|
+
*/
|
|
10
|
+
export type SessionStatus = 'active' | 'completed' | 'aborted' | 'paused';
|
|
11
|
+
/**
|
|
12
|
+
* Session mode values
|
|
13
|
+
*/
|
|
14
|
+
export type SessionMode = 'single' | 'autonomous' | 'guided';
|
|
15
|
+
/**
|
|
16
|
+
* End status for session termination
|
|
17
|
+
*/
|
|
18
|
+
export type SessionEndStatus = 'completed' | 'aborted';
|
|
19
|
+
/**
|
|
20
|
+
* Command options for session status display
|
|
21
|
+
*/
|
|
22
|
+
export interface SessionStatusOptions {
|
|
23
|
+
json?: boolean;
|
|
24
|
+
toon?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Command options for session start
|
|
28
|
+
*/
|
|
29
|
+
export interface SessionStartOptions {
|
|
30
|
+
/** Session mode */
|
|
31
|
+
mode?: SessionMode;
|
|
32
|
+
/** Maximum tickets to process */
|
|
33
|
+
maxTickets?: string;
|
|
34
|
+
/** Stop processing on first failure */
|
|
35
|
+
stopOnFailure?: boolean;
|
|
36
|
+
/** Force end existing session and start new */
|
|
37
|
+
force?: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Command options for session end
|
|
41
|
+
*/
|
|
42
|
+
export interface SessionEndOptions {
|
|
43
|
+
/** End status */
|
|
44
|
+
status?: SessionEndStatus;
|
|
45
|
+
/** Custom session summary */
|
|
46
|
+
summary?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Current ticket being worked on
|
|
50
|
+
*/
|
|
51
|
+
export interface CurrentTicket {
|
|
52
|
+
id: string;
|
|
53
|
+
ticketNumber: number;
|
|
54
|
+
title: string;
|
|
55
|
+
status: string;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Implementation session data from API
|
|
59
|
+
*/
|
|
60
|
+
export interface Session {
|
|
61
|
+
/** Unique session ID */
|
|
62
|
+
id: string;
|
|
63
|
+
/** Current session status */
|
|
64
|
+
status: SessionStatus;
|
|
65
|
+
/** Session start timestamp (ISO) */
|
|
66
|
+
startedAt: string;
|
|
67
|
+
/** Session end timestamp (ISO) if ended */
|
|
68
|
+
endedAt?: string;
|
|
69
|
+
/** Associated specification ID */
|
|
70
|
+
specificationId: string;
|
|
71
|
+
/** Specification title for display */
|
|
72
|
+
specificationTitle?: string;
|
|
73
|
+
/** Session mode */
|
|
74
|
+
mode?: SessionMode;
|
|
75
|
+
/** Maximum tickets limit */
|
|
76
|
+
maxTickets?: number;
|
|
77
|
+
/** Stop on failure flag */
|
|
78
|
+
stopOnFailure?: boolean;
|
|
79
|
+
/** IDs of completed tickets */
|
|
80
|
+
completedTickets: string[];
|
|
81
|
+
/** IDs of failed tickets */
|
|
82
|
+
failedTickets: string[];
|
|
83
|
+
/** IDs of skipped tickets */
|
|
84
|
+
skippedTickets: string[];
|
|
85
|
+
/** Current ticket being worked on */
|
|
86
|
+
currentTicket?: CurrentTicket;
|
|
87
|
+
/** Session summary/notes */
|
|
88
|
+
summary?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Specification info for session context
|
|
92
|
+
*/
|
|
93
|
+
export interface SpecificationInfo {
|
|
94
|
+
id: string;
|
|
95
|
+
title: string;
|
|
96
|
+
status: string;
|
|
97
|
+
progress?: number;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Ticket summary for actionable list
|
|
101
|
+
*/
|
|
102
|
+
export interface ActionableTicket {
|
|
103
|
+
id: string;
|
|
104
|
+
ticketNumber: number;
|
|
105
|
+
title: string;
|
|
106
|
+
priority: string;
|
|
107
|
+
status: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Working context from API
|
|
111
|
+
*/
|
|
112
|
+
export interface WorkingContext {
|
|
113
|
+
projectId?: string;
|
|
114
|
+
specificationId?: string;
|
|
115
|
+
epicId?: string;
|
|
116
|
+
ticketId?: string;
|
|
117
|
+
implementationSession?: Session;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Session start request parameters
|
|
121
|
+
*/
|
|
122
|
+
export interface SessionStartParams {
|
|
123
|
+
specificationId: string;
|
|
124
|
+
mode?: SessionMode;
|
|
125
|
+
maxTickets?: number;
|
|
126
|
+
stopOnFailure?: boolean;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Session end request parameters
|
|
130
|
+
*/
|
|
131
|
+
export interface SessionEndParams {
|
|
132
|
+
sessionId: string;
|
|
133
|
+
status: SessionEndStatus;
|
|
134
|
+
summary?: string;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Session statistics for summary
|
|
138
|
+
*/
|
|
139
|
+
export interface SessionStats {
|
|
140
|
+
/** Total duration in milliseconds */
|
|
141
|
+
durationMs: number;
|
|
142
|
+
/** Formatted duration string */
|
|
143
|
+
durationFormatted: string;
|
|
144
|
+
/** Number of completed tickets */
|
|
145
|
+
completedCount: number;
|
|
146
|
+
/** Number of failed tickets */
|
|
147
|
+
failedCount: number;
|
|
148
|
+
/** Number of skipped tickets */
|
|
149
|
+
skippedCount: number;
|
|
150
|
+
/** Total processed tickets */
|
|
151
|
+
totalProcessed: number;
|
|
152
|
+
/** Average time per ticket in minutes */
|
|
153
|
+
avgMinutesPerTicket?: number;
|
|
154
|
+
/** Success rate percentage */
|
|
155
|
+
successRate?: number;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Color function type for chalk styling
|
|
159
|
+
*/
|
|
160
|
+
export type ColorFunction = (text: string) => string;
|
|
161
|
+
/**
|
|
162
|
+
* Session display section configuration
|
|
163
|
+
*/
|
|
164
|
+
export interface SessionSection {
|
|
165
|
+
title: string;
|
|
166
|
+
icon: string;
|
|
167
|
+
render: () => void;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Progress bar configuration
|
|
171
|
+
*/
|
|
172
|
+
export interface ProgressConfig {
|
|
173
|
+
completed: number;
|
|
174
|
+
failed: number;
|
|
175
|
+
skipped: number;
|
|
176
|
+
total: number;
|
|
177
|
+
width?: number;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,QAAQ,CAAC;AAE7D;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,SAAS,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iBAAiB;IACjB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,6BAA6B;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,6BAA6B;IAC7B,MAAM,EAAE,aAAa,CAAC;IACtB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,eAAe,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB;IACnB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,4BAA4B;IAC5B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,6BAA6B;IAC7B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,qCAAqC;IACrC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Helper utilities for session commands including duration formatting,
|
|
5
|
+
* statistics calculation, and ticket number formatting.
|
|
6
|
+
*/
|
|
7
|
+
import type { Session, SessionStats } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Format duration from ISO timestamp to human readable
|
|
10
|
+
*/
|
|
11
|
+
export declare function formatDuration(startedAt: string, endedAt?: string): string;
|
|
12
|
+
/**
|
|
13
|
+
* Format duration from milliseconds
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatDurationMs(ms: number): string;
|
|
16
|
+
/**
|
|
17
|
+
* Calculate session statistics
|
|
18
|
+
*/
|
|
19
|
+
export declare function calculateSessionStats(session: Session): SessionStats;
|
|
20
|
+
/**
|
|
21
|
+
* Format ticket number as TKT-XXX
|
|
22
|
+
*/
|
|
23
|
+
export declare function formatTicketNumber(num: number): string;
|
|
24
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAExD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB1E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CA+BpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* Helper utilities for session commands including duration formatting,
|
|
5
|
+
* statistics calculation, and ticket number formatting.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Format duration from ISO timestamp to human readable
|
|
9
|
+
*/
|
|
10
|
+
export function formatDuration(startedAt, endedAt) {
|
|
11
|
+
const start = new Date(startedAt);
|
|
12
|
+
const end = endedAt ? new Date(endedAt) : new Date();
|
|
13
|
+
const diffMs = end.getTime() - start.getTime();
|
|
14
|
+
const hours = Math.floor(diffMs / (1000 * 60 * 60));
|
|
15
|
+
const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60));
|
|
16
|
+
const seconds = Math.floor((diffMs % (1000 * 60)) / 1000);
|
|
17
|
+
if (hours > 0) {
|
|
18
|
+
return `${hours}h ${minutes}m`;
|
|
19
|
+
}
|
|
20
|
+
if (minutes > 0) {
|
|
21
|
+
return `${minutes}m ${seconds}s`;
|
|
22
|
+
}
|
|
23
|
+
return `${seconds}s`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format duration from milliseconds
|
|
27
|
+
*/
|
|
28
|
+
export function formatDurationMs(ms) {
|
|
29
|
+
const hours = Math.floor(ms / (1000 * 60 * 60));
|
|
30
|
+
const minutes = Math.floor((ms % (1000 * 60 * 60)) / (1000 * 60));
|
|
31
|
+
if (hours > 0) {
|
|
32
|
+
return `${hours}h ${minutes}m`;
|
|
33
|
+
}
|
|
34
|
+
return `${minutes}m`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Calculate session statistics
|
|
38
|
+
*/
|
|
39
|
+
export function calculateSessionStats(session) {
|
|
40
|
+
const start = new Date(session.startedAt);
|
|
41
|
+
const end = session.endedAt ? new Date(session.endedAt) : new Date();
|
|
42
|
+
const durationMs = end.getTime() - start.getTime();
|
|
43
|
+
const completedCount = session.completedTickets.length;
|
|
44
|
+
const failedCount = session.failedTickets.length;
|
|
45
|
+
const skippedCount = session.skippedTickets.length;
|
|
46
|
+
const totalProcessed = completedCount + failedCount + skippedCount;
|
|
47
|
+
let avgMinutesPerTicket;
|
|
48
|
+
let successRate;
|
|
49
|
+
if (completedCount > 0) {
|
|
50
|
+
avgMinutesPerTicket = Math.round(durationMs / (1000 * 60 * completedCount));
|
|
51
|
+
}
|
|
52
|
+
if (totalProcessed > 0) {
|
|
53
|
+
successRate = Math.round((completedCount / totalProcessed) * 100);
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
durationMs,
|
|
57
|
+
durationFormatted: formatDurationMs(durationMs),
|
|
58
|
+
completedCount,
|
|
59
|
+
failedCount,
|
|
60
|
+
skippedCount,
|
|
61
|
+
totalProcessed,
|
|
62
|
+
avgMinutesPerTicket,
|
|
63
|
+
successRate,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format ticket number as TKT-XXX
|
|
68
|
+
*/
|
|
69
|
+
export function formatTicketNumber(num) {
|
|
70
|
+
return `TKT-${num.toString().padStart(3, '0')}`;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specs Command
|
|
3
|
+
*
|
|
4
|
+
* Lists specifications within a project.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { SpecsOptions } from './specs.types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Specs command action handler
|
|
10
|
+
*/
|
|
11
|
+
export declare function specsAction(projectId: string | undefined, options: SpecsOptions): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Register specs command with Commander
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerSpecsCommand(program: Command): void;
|
|
16
|
+
//# sourceMappingURL=specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/specs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EACL,YAAY,EAYb,MAAM,kBAAkB,CAAC;AA6G1B;;GAEG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,YAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAoHf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B3D"}
|