@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,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Command Types & Interfaces
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the ticket detail command, including ticket data structures,
|
|
5
|
+
* display options, and code/type reference formats.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Command options for ticket detail
|
|
9
|
+
*/
|
|
10
|
+
export interface TicketCommandOptions {
|
|
11
|
+
json?: boolean;
|
|
12
|
+
toon?: boolean;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Code reference attached to a ticket
|
|
16
|
+
*/
|
|
17
|
+
export interface CodeReference {
|
|
18
|
+
/** Reference name/title */
|
|
19
|
+
name: string;
|
|
20
|
+
/** Code snippet */
|
|
21
|
+
code: string;
|
|
22
|
+
/** Programming language for syntax highlighting */
|
|
23
|
+
language?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Type definition reference attached to a ticket
|
|
27
|
+
*/
|
|
28
|
+
export interface TypeReference {
|
|
29
|
+
/** Type name */
|
|
30
|
+
name: string;
|
|
31
|
+
/** Type definition (TypeScript code) */
|
|
32
|
+
definition: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Acceptance criteria validation status
|
|
36
|
+
*/
|
|
37
|
+
export interface AcceptanceCriteriaValidation {
|
|
38
|
+
/** The criterion text */
|
|
39
|
+
criterion: string;
|
|
40
|
+
/** Validation status */
|
|
41
|
+
status: 'pending' | 'passed' | 'failed';
|
|
42
|
+
/** Optional notes explaining the status */
|
|
43
|
+
notes?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Ticket implementation details
|
|
47
|
+
*/
|
|
48
|
+
export interface TicketImplementation {
|
|
49
|
+
/** Implementation approach description */
|
|
50
|
+
approach?: string;
|
|
51
|
+
/** Additional implementation notes */
|
|
52
|
+
notes?: string;
|
|
53
|
+
/** Files to be modified/created */
|
|
54
|
+
files?: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Epic summary for ticket context
|
|
58
|
+
*/
|
|
59
|
+
export interface TicketEpicSummary {
|
|
60
|
+
id: string;
|
|
61
|
+
title: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Ticket priority levels
|
|
65
|
+
*/
|
|
66
|
+
export type TicketPriority = 'critical' | 'high' | 'medium' | 'low';
|
|
67
|
+
/**
|
|
68
|
+
* Ticket status values
|
|
69
|
+
*/
|
|
70
|
+
export type TicketStatus = 'pending' | 'in_progress' | 'done' | 'blocked' | 'cancelled';
|
|
71
|
+
/**
|
|
72
|
+
* Ticket complexity levels
|
|
73
|
+
*/
|
|
74
|
+
export type TicketComplexity = 'trivial' | 'low' | 'medium' | 'high' | 'complex';
|
|
75
|
+
/**
|
|
76
|
+
* Complete ticket detail structure
|
|
77
|
+
*/
|
|
78
|
+
export interface Ticket {
|
|
79
|
+
/** Unique ticket ID */
|
|
80
|
+
id: string;
|
|
81
|
+
/** Sequential ticket number within specification */
|
|
82
|
+
ticketNumber: number;
|
|
83
|
+
/** Ticket title */
|
|
84
|
+
title: string;
|
|
85
|
+
/** Detailed description */
|
|
86
|
+
description?: string;
|
|
87
|
+
/** Priority level */
|
|
88
|
+
priority: TicketPriority;
|
|
89
|
+
/** Current status */
|
|
90
|
+
status: TicketStatus;
|
|
91
|
+
/** Complexity estimate */
|
|
92
|
+
complexity?: TicketComplexity;
|
|
93
|
+
/** Estimated hours to complete */
|
|
94
|
+
estimatedHours?: number;
|
|
95
|
+
/** Actual hours spent */
|
|
96
|
+
actualHours?: number;
|
|
97
|
+
/** List of acceptance criteria */
|
|
98
|
+
acceptanceCriteria?: string[];
|
|
99
|
+
/** Validation status for each criterion */
|
|
100
|
+
acceptanceCriteriaValidation?: AcceptanceCriteriaValidation[];
|
|
101
|
+
/** Technical implementation details */
|
|
102
|
+
technicalDetails?: string;
|
|
103
|
+
/** Implementation notes and approach */
|
|
104
|
+
implementation?: TicketImplementation;
|
|
105
|
+
/** IDs of tickets this ticket blocks */
|
|
106
|
+
dependencies?: string[];
|
|
107
|
+
/** IDs of tickets blocking this ticket */
|
|
108
|
+
blockedBy?: string[];
|
|
109
|
+
/** Code snippets referenced by this ticket */
|
|
110
|
+
codeReferences?: CodeReference[];
|
|
111
|
+
/** Type definitions referenced by this ticket */
|
|
112
|
+
typeReferences?: TypeReference[];
|
|
113
|
+
/** Parent epic information */
|
|
114
|
+
epic?: TicketEpicSummary;
|
|
115
|
+
/** Creation timestamp */
|
|
116
|
+
createdAt?: string;
|
|
117
|
+
/** Last update timestamp */
|
|
118
|
+
updatedAt?: string;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Minimal ticket info for dependency display
|
|
122
|
+
*/
|
|
123
|
+
export interface TicketSummary {
|
|
124
|
+
id: string;
|
|
125
|
+
ticketNumber: number;
|
|
126
|
+
title: string;
|
|
127
|
+
status: TicketStatus;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Color function type for chalk styling
|
|
131
|
+
*/
|
|
132
|
+
export type ColorFunction = (text: string) => string;
|
|
133
|
+
/**
|
|
134
|
+
* Section display configuration
|
|
135
|
+
*/
|
|
136
|
+
export interface TicketSection {
|
|
137
|
+
/** Section title */
|
|
138
|
+
title: string;
|
|
139
|
+
/** Section icon (emoji) */
|
|
140
|
+
icon: string;
|
|
141
|
+
/** Whether the section has content to display */
|
|
142
|
+
hasContent: boolean;
|
|
143
|
+
/** Render function for the section */
|
|
144
|
+
render: () => void;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Ticket formatting options
|
|
148
|
+
*/
|
|
149
|
+
export interface TicketFormatOptions {
|
|
150
|
+
/** Show colors in output */
|
|
151
|
+
colors: boolean;
|
|
152
|
+
/** Show icons/emojis */
|
|
153
|
+
icons: boolean;
|
|
154
|
+
/** Wrap long lines at this width */
|
|
155
|
+
wrapWidth?: number;
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tickets Command
|
|
3
|
+
*
|
|
4
|
+
* Lists tickets for the current specification with filtering options.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { TicketsOptions } from './tickets.types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Tickets command action handler
|
|
10
|
+
*/
|
|
11
|
+
export declare function ticketsAction(options: TicketsOptions): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Register tickets command with Commander
|
|
14
|
+
*/
|
|
15
|
+
export declare function registerTicketsCommand(program: Command): void;
|
|
16
|
+
//# sourceMappingURL=tickets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickets.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/tickets.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EACL,cAAc,EAaf,MAAM,oBAAoB,CAAC;AA8I5B;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuI1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC7D"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tickets Command
|
|
3
|
+
*
|
|
4
|
+
* Lists tickets for the current specification with filtering options.
|
|
5
|
+
*/
|
|
6
|
+
import ora from 'ora';
|
|
7
|
+
import Table from 'cli-table3';
|
|
8
|
+
import { resolveConfig } from '../config/index.js';
|
|
9
|
+
import { withErrorHandler, CliError, NetworkError, ValidationError } from '../middleware/error-handler.js';
|
|
10
|
+
import { printBlank, printHeader } from '../ui/output.js';
|
|
11
|
+
import { colors } from '../ui/colors.js';
|
|
12
|
+
import { ApiClient } from '../../client/api-client.js';
|
|
13
|
+
import { formatTicketNumber, truncateTitle, isTicketBlocked, isValidStatus, isValidPriority, VALID_STATUSES, VALID_PRIORITIES, } from './tickets.types.js';
|
|
14
|
+
/**
|
|
15
|
+
* Get chalk color function for priority
|
|
16
|
+
*/
|
|
17
|
+
function getPriorityColorFn(priority) {
|
|
18
|
+
switch (priority) {
|
|
19
|
+
case 'critical':
|
|
20
|
+
return colors.error;
|
|
21
|
+
case 'high':
|
|
22
|
+
return colors.warning;
|
|
23
|
+
case 'medium':
|
|
24
|
+
return colors.primary;
|
|
25
|
+
case 'low':
|
|
26
|
+
return colors.muted;
|
|
27
|
+
default:
|
|
28
|
+
return (s) => s;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get chalk color function for status
|
|
33
|
+
*/
|
|
34
|
+
function getStatusColorFn(status) {
|
|
35
|
+
switch (status) {
|
|
36
|
+
case 'done':
|
|
37
|
+
return colors.success;
|
|
38
|
+
case 'in_progress':
|
|
39
|
+
return colors.primary;
|
|
40
|
+
case 'pending':
|
|
41
|
+
return colors.warning;
|
|
42
|
+
case 'blocked':
|
|
43
|
+
return colors.error;
|
|
44
|
+
default:
|
|
45
|
+
return (s) => s;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Format tickets as TOON
|
|
50
|
+
*/
|
|
51
|
+
function formatTicketsAsToon(tickets, specTitle) {
|
|
52
|
+
const lines = [`@tickets (${specTitle})`];
|
|
53
|
+
for (const ticket of tickets) {
|
|
54
|
+
const blocked = isTicketBlocked(ticket) ? ' [BLOCKED]' : '';
|
|
55
|
+
lines.push(` ${formatTicketNumber(ticket.ticketNumber)}${blocked}`);
|
|
56
|
+
lines.push(` title: ${ticket.title}`);
|
|
57
|
+
lines.push(` priority: ${ticket.priority}`);
|
|
58
|
+
lines.push(` status: ${ticket.status}`);
|
|
59
|
+
if (ticket.epicId) {
|
|
60
|
+
lines.push(` epic: ${ticket.epicId}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return lines.join('\n');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Display tickets as table
|
|
67
|
+
*/
|
|
68
|
+
function displayTicketsTable(tickets, specTitle) {
|
|
69
|
+
printBlank();
|
|
70
|
+
printHeader(`Tickets (${specTitle})`);
|
|
71
|
+
printBlank();
|
|
72
|
+
const table = new Table({
|
|
73
|
+
head: [
|
|
74
|
+
colors.muted('#'),
|
|
75
|
+
colors.muted('TITLE'),
|
|
76
|
+
colors.muted('PRIORITY'),
|
|
77
|
+
colors.muted('STATUS'),
|
|
78
|
+
colors.muted('BLOCKED'),
|
|
79
|
+
],
|
|
80
|
+
style: {
|
|
81
|
+
head: [],
|
|
82
|
+
border: [],
|
|
83
|
+
},
|
|
84
|
+
chars: {
|
|
85
|
+
'top': '', 'top-mid': '', 'top-left': '', 'top-right': '',
|
|
86
|
+
'bottom': '', 'bottom-mid': '', 'bottom-left': '', 'bottom-right': '',
|
|
87
|
+
'left': '', 'left-mid': '', 'mid': '', 'mid-mid': '',
|
|
88
|
+
'right': '', 'right-mid': '', 'middle': ' ',
|
|
89
|
+
},
|
|
90
|
+
colWidths: [7, 42, 12, 14, 10],
|
|
91
|
+
});
|
|
92
|
+
for (const ticket of tickets) {
|
|
93
|
+
const priorityColor = getPriorityColorFn(ticket.priority);
|
|
94
|
+
const statusColor = getStatusColorFn(ticket.status);
|
|
95
|
+
const blocked = isTicketBlocked(ticket);
|
|
96
|
+
table.push([
|
|
97
|
+
formatTicketNumber(ticket.ticketNumber),
|
|
98
|
+
truncateTitle(ticket.title),
|
|
99
|
+
priorityColor(ticket.priority),
|
|
100
|
+
statusColor(ticket.status),
|
|
101
|
+
blocked ? colors.error('Yes') : colors.muted('No'),
|
|
102
|
+
]);
|
|
103
|
+
}
|
|
104
|
+
console.log(table.toString());
|
|
105
|
+
printBlank();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Display empty state
|
|
109
|
+
*/
|
|
110
|
+
function displayEmptyState(specTitle, hasFilters) {
|
|
111
|
+
printBlank();
|
|
112
|
+
console.log(colors.muted(`No tickets found in "${specTitle}".`));
|
|
113
|
+
if (hasFilters) {
|
|
114
|
+
console.log(colors.muted('Try adjusting your filters.'));
|
|
115
|
+
}
|
|
116
|
+
printBlank();
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Display summary footer
|
|
120
|
+
*/
|
|
121
|
+
function displaySummary(tickets, limit) {
|
|
122
|
+
const blockedCount = tickets.filter(isTicketBlocked).length;
|
|
123
|
+
const parts = [`${tickets.length} ticket${tickets.length !== 1 ? 's' : ''}`];
|
|
124
|
+
if (limit) {
|
|
125
|
+
parts.push(`(limited to ${limit})`);
|
|
126
|
+
}
|
|
127
|
+
if (blockedCount > 0) {
|
|
128
|
+
parts.push(`${blockedCount} blocked`);
|
|
129
|
+
}
|
|
130
|
+
console.log(colors.muted(parts.join(' | ')));
|
|
131
|
+
printBlank();
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Tickets command action handler
|
|
135
|
+
*/
|
|
136
|
+
export async function ticketsAction(options) {
|
|
137
|
+
const config = resolveConfig();
|
|
138
|
+
if (!config.apiKey) {
|
|
139
|
+
throw new CliError('Not authenticated', 1, 'Run `specforge-mcp login` to authenticate first');
|
|
140
|
+
}
|
|
141
|
+
if (!config.specificationId) {
|
|
142
|
+
throw new CliError('No specification configured', 1, "Run 'specforge-mcp init' or 'specforge-mcp switch <spec-id>' to set a specification");
|
|
143
|
+
}
|
|
144
|
+
// Validate filters
|
|
145
|
+
if (options.status && !isValidStatus(options.status)) {
|
|
146
|
+
throw new ValidationError(`Invalid status: ${options.status}`, `Valid statuses: ${VALID_STATUSES.join(', ')}`);
|
|
147
|
+
}
|
|
148
|
+
if (options.priority && !isValidPriority(options.priority)) {
|
|
149
|
+
throw new ValidationError(`Invalid priority: ${options.priority}`, `Valid priorities: ${VALID_PRIORITIES.join(', ')}`);
|
|
150
|
+
}
|
|
151
|
+
const spinner = ora({
|
|
152
|
+
text: 'Fetching tickets...',
|
|
153
|
+
color: 'cyan',
|
|
154
|
+
}).start();
|
|
155
|
+
try {
|
|
156
|
+
const client = new ApiClient({
|
|
157
|
+
apiKey: config.apiKey,
|
|
158
|
+
apiUrl: config.apiUrl,
|
|
159
|
+
debug: config.debug,
|
|
160
|
+
});
|
|
161
|
+
// Get specification info for header
|
|
162
|
+
let specTitle = config.specificationId;
|
|
163
|
+
try {
|
|
164
|
+
const specResponse = await client.call('get_specification', {
|
|
165
|
+
specificationId: config.specificationId,
|
|
166
|
+
});
|
|
167
|
+
specTitle = specResponse.title || config.specificationId;
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
// Use spec ID if name fetch fails
|
|
171
|
+
}
|
|
172
|
+
// Build query parameters
|
|
173
|
+
const queryParams = {
|
|
174
|
+
specificationId: config.specificationId,
|
|
175
|
+
};
|
|
176
|
+
if (options.epic) {
|
|
177
|
+
queryParams.epicId = options.epic;
|
|
178
|
+
}
|
|
179
|
+
if (options.status) {
|
|
180
|
+
queryParams.status = options.status;
|
|
181
|
+
}
|
|
182
|
+
if (options.priority) {
|
|
183
|
+
queryParams.priority = options.priority;
|
|
184
|
+
}
|
|
185
|
+
if (options.limit) {
|
|
186
|
+
queryParams.limit = parseInt(options.limit, 10);
|
|
187
|
+
}
|
|
188
|
+
// Fetch tickets
|
|
189
|
+
const response = await client.call('list_tickets', queryParams);
|
|
190
|
+
spinner.stop();
|
|
191
|
+
const tickets = response.tickets || [];
|
|
192
|
+
const hasFilters = !!(options.epic || options.status || options.priority);
|
|
193
|
+
// Handle empty state
|
|
194
|
+
if (tickets.length === 0) {
|
|
195
|
+
displayEmptyState(specTitle, hasFilters);
|
|
196
|
+
return;
|
|
197
|
+
}
|
|
198
|
+
// Output based on format
|
|
199
|
+
if (options.json) {
|
|
200
|
+
console.log(JSON.stringify({
|
|
201
|
+
specification: specTitle,
|
|
202
|
+
tickets,
|
|
203
|
+
filters: hasFilters ? {
|
|
204
|
+
epic: options.epic,
|
|
205
|
+
status: options.status,
|
|
206
|
+
priority: options.priority,
|
|
207
|
+
} : undefined,
|
|
208
|
+
}, null, 2));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (options.toon) {
|
|
212
|
+
console.log(formatTicketsAsToon(tickets, specTitle));
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
// Default: table format
|
|
216
|
+
displayTicketsTable(tickets, specTitle);
|
|
217
|
+
displaySummary(tickets, options.limit);
|
|
218
|
+
}
|
|
219
|
+
catch (error) {
|
|
220
|
+
spinner.fail('Failed to fetch tickets');
|
|
221
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
222
|
+
if (message.includes('404') || message.includes('not found')) {
|
|
223
|
+
throw new CliError('Specification not found', 1, 'The configured specification may have been deleted. Run `specforge-mcp init` to select a new one.');
|
|
224
|
+
}
|
|
225
|
+
if (message.includes('401') || message.includes('Unauthorized')) {
|
|
226
|
+
throw new CliError('Authentication failed', 1, 'Your API key may be invalid. Run `specforge-mcp login` to re-authenticate');
|
|
227
|
+
}
|
|
228
|
+
throw new NetworkError(`Failed to fetch tickets: ${message}`);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Register tickets command with Commander
|
|
233
|
+
*/
|
|
234
|
+
export function registerTicketsCommand(program) {
|
|
235
|
+
program
|
|
236
|
+
.command('tickets')
|
|
237
|
+
.description('List tickets in the current specification')
|
|
238
|
+
.option('--epic <id>', 'Filter by epic ID')
|
|
239
|
+
.option('--status <status>', 'Filter by status (pending, in_progress, done, blocked)')
|
|
240
|
+
.option('--priority <priority>', 'Filter by priority (critical, high, medium, low)')
|
|
241
|
+
.option('--limit <n>', 'Limit number of results')
|
|
242
|
+
.option('--json', 'Output as JSON')
|
|
243
|
+
.option('--toon', 'Output as TOON format')
|
|
244
|
+
.addHelpText('after', `
|
|
245
|
+
Examples:
|
|
246
|
+
$ specforge-mcp tickets # List all tickets
|
|
247
|
+
$ specforge-mcp tickets --status pending # Filter by status
|
|
248
|
+
$ specforge-mcp tickets --priority high # Filter by priority
|
|
249
|
+
$ specforge-mcp tickets --epic epic_abc123 # Filter by epic
|
|
250
|
+
$ specforge-mcp tickets --status pending --priority high # Combine filters
|
|
251
|
+
$ specforge-mcp tickets --limit 10 # Limit results
|
|
252
|
+
$ specforge-mcp tickets --json # Output as JSON
|
|
253
|
+
|
|
254
|
+
Valid statuses: pending, in_progress, done, blocked
|
|
255
|
+
Valid priorities: critical, high, medium, low
|
|
256
|
+
|
|
257
|
+
Priority colors:
|
|
258
|
+
${colors.error('critical')} - Immediate attention needed
|
|
259
|
+
${colors.warning('high')} - Important, address soon
|
|
260
|
+
${colors.primary('medium')} - Normal priority
|
|
261
|
+
${colors.muted('low')} - Can wait
|
|
262
|
+
|
|
263
|
+
Status colors:
|
|
264
|
+
${colors.success('done')} - Completed
|
|
265
|
+
${colors.primary('in_progress')} - Currently being worked on
|
|
266
|
+
${colors.warning('pending')} - Not yet started
|
|
267
|
+
${colors.error('blocked')} - Blocked by dependencies
|
|
268
|
+
`)
|
|
269
|
+
.action(withErrorHandler(ticketsAction));
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=tickets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickets.js","sourceRoot":"","sources":["../../../src/cli/commands/tickets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tickets Command Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the tickets list command.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Tickets command options from Commander
|
|
8
|
+
*/
|
|
9
|
+
export interface TicketsOptions {
|
|
10
|
+
/** Filter by epic ID */
|
|
11
|
+
epic?: string;
|
|
12
|
+
/** Filter by status */
|
|
13
|
+
status?: TicketStatus;
|
|
14
|
+
/** Filter by priority */
|
|
15
|
+
priority?: TicketPriority;
|
|
16
|
+
/** Limit number of results */
|
|
17
|
+
limit?: string;
|
|
18
|
+
/** Output as JSON */
|
|
19
|
+
json?: boolean;
|
|
20
|
+
/** Output as TOON format */
|
|
21
|
+
toon?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Valid ticket statuses
|
|
25
|
+
*/
|
|
26
|
+
export type TicketStatus = 'pending' | 'in_progress' | 'done' | 'blocked';
|
|
27
|
+
/**
|
|
28
|
+
* All valid ticket statuses
|
|
29
|
+
*/
|
|
30
|
+
export declare const VALID_STATUSES: TicketStatus[];
|
|
31
|
+
/**
|
|
32
|
+
* Valid ticket priorities
|
|
33
|
+
*/
|
|
34
|
+
export type TicketPriority = 'critical' | 'high' | 'medium' | 'low';
|
|
35
|
+
/**
|
|
36
|
+
* All valid ticket priorities
|
|
37
|
+
*/
|
|
38
|
+
export declare const VALID_PRIORITIES: TicketPriority[];
|
|
39
|
+
/**
|
|
40
|
+
* Ticket data from API
|
|
41
|
+
*/
|
|
42
|
+
export interface Ticket {
|
|
43
|
+
/** Ticket ID */
|
|
44
|
+
id: string;
|
|
45
|
+
/** Sequential ticket number within specification */
|
|
46
|
+
ticketNumber: number;
|
|
47
|
+
/** Ticket title */
|
|
48
|
+
title: string;
|
|
49
|
+
/** Ticket priority */
|
|
50
|
+
priority: TicketPriority;
|
|
51
|
+
/** Ticket status */
|
|
52
|
+
status: TicketStatus;
|
|
53
|
+
/** Epic ID this ticket belongs to (optional) */
|
|
54
|
+
epicId?: string;
|
|
55
|
+
/** List of ticket IDs that block this ticket */
|
|
56
|
+
blockedBy?: string[];
|
|
57
|
+
/** Ticket description (optional) */
|
|
58
|
+
description?: string;
|
|
59
|
+
/** Estimated complexity (optional) */
|
|
60
|
+
complexity?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* API request for list_tickets
|
|
64
|
+
*/
|
|
65
|
+
export interface ListTicketsRequest {
|
|
66
|
+
/** Specification ID */
|
|
67
|
+
specificationId: string;
|
|
68
|
+
/** Filter by epic ID */
|
|
69
|
+
epicId?: string;
|
|
70
|
+
/** Filter by status */
|
|
71
|
+
status?: TicketStatus;
|
|
72
|
+
/** Filter by priority */
|
|
73
|
+
priority?: TicketPriority;
|
|
74
|
+
/** Limit number of results */
|
|
75
|
+
limit?: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* API response for list_tickets
|
|
79
|
+
*/
|
|
80
|
+
export interface ListTicketsApiResponse {
|
|
81
|
+
/** Array of tickets */
|
|
82
|
+
tickets: Ticket[];
|
|
83
|
+
/** Total count (for pagination) */
|
|
84
|
+
total?: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* API response for get_specification (used for header)
|
|
88
|
+
*/
|
|
89
|
+
export interface GetSpecificationApiResponse {
|
|
90
|
+
/** Specification ID */
|
|
91
|
+
id: string;
|
|
92
|
+
/** Specification title */
|
|
93
|
+
title: string;
|
|
94
|
+
/** Project ID */
|
|
95
|
+
projectId: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Tickets list response for output
|
|
99
|
+
*/
|
|
100
|
+
export interface TicketsListResponse {
|
|
101
|
+
/** Specification title for display */
|
|
102
|
+
specification: string;
|
|
103
|
+
/** Array of tickets */
|
|
104
|
+
tickets: Ticket[];
|
|
105
|
+
/** Applied filters (for display) */
|
|
106
|
+
filters?: {
|
|
107
|
+
epic?: string;
|
|
108
|
+
status?: string;
|
|
109
|
+
priority?: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Table column configuration
|
|
114
|
+
*/
|
|
115
|
+
export interface TicketTableColumn {
|
|
116
|
+
/** Column header */
|
|
117
|
+
header: string;
|
|
118
|
+
/** Column width */
|
|
119
|
+
width?: number;
|
|
120
|
+
/** Alignment */
|
|
121
|
+
align?: 'left' | 'right' | 'center';
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Default table columns for tickets
|
|
125
|
+
*/
|
|
126
|
+
export declare const TICKET_TABLE_COLUMNS: TicketTableColumn[];
|
|
127
|
+
/**
|
|
128
|
+
* Priority display colors (chalk color names)
|
|
129
|
+
*/
|
|
130
|
+
export declare const PRIORITY_COLORS: Record<TicketPriority, string>;
|
|
131
|
+
/**
|
|
132
|
+
* Status display colors (chalk color names)
|
|
133
|
+
*/
|
|
134
|
+
export declare const STATUS_COLORS: Record<TicketStatus, string>;
|
|
135
|
+
/**
|
|
136
|
+
* Maximum title length for table display
|
|
137
|
+
*/
|
|
138
|
+
export declare const MAX_TITLE_LENGTH = 38;
|
|
139
|
+
/**
|
|
140
|
+
* Ticket number padding width
|
|
141
|
+
*/
|
|
142
|
+
export declare const TICKET_NUMBER_WIDTH = 3;
|
|
143
|
+
/**
|
|
144
|
+
* Format ticket number with leading zeros
|
|
145
|
+
*
|
|
146
|
+
* @param num Ticket number
|
|
147
|
+
* @returns Formatted ticket number (e.g., "001", "042")
|
|
148
|
+
*/
|
|
149
|
+
export declare function formatTicketNumber(num: number): string;
|
|
150
|
+
/**
|
|
151
|
+
* Truncate title if too long for display
|
|
152
|
+
*
|
|
153
|
+
* @param title Ticket title
|
|
154
|
+
* @param maxLength Maximum length (default: MAX_TITLE_LENGTH)
|
|
155
|
+
* @returns Truncated title with ellipsis if needed
|
|
156
|
+
*/
|
|
157
|
+
export declare function truncateTitle(title: string, maxLength?: number): string;
|
|
158
|
+
/**
|
|
159
|
+
* Check if a ticket is blocked
|
|
160
|
+
*
|
|
161
|
+
* @param ticket Ticket to check
|
|
162
|
+
* @returns True if ticket has blockers
|
|
163
|
+
*/
|
|
164
|
+
export declare function isTicketBlocked(ticket: Ticket): boolean;
|
|
165
|
+
/**
|
|
166
|
+
* Validate status filter
|
|
167
|
+
*
|
|
168
|
+
* @param status Status to validate
|
|
169
|
+
* @returns True if valid status
|
|
170
|
+
*/
|
|
171
|
+
export declare function isValidStatus(status: string): status is TicketStatus;
|
|
172
|
+
/**
|
|
173
|
+
* Validate priority filter
|
|
174
|
+
*
|
|
175
|
+
* @param priority Priority to validate
|
|
176
|
+
* @returns True if valid priority
|
|
177
|
+
*/
|
|
178
|
+
export declare function isValidPriority(priority: string): priority is TicketPriority;
|
|
179
|
+
/**
|
|
180
|
+
* Get count of blocked tickets
|
|
181
|
+
*
|
|
182
|
+
* @param tickets Array of tickets
|
|
183
|
+
* @returns Number of blocked tickets
|
|
184
|
+
*/
|
|
185
|
+
export declare function countBlockedTickets(tickets: Ticket[]): number;
|
|
186
|
+
/**
|
|
187
|
+
* Get tickets by status
|
|
188
|
+
*
|
|
189
|
+
* @param tickets Array of tickets
|
|
190
|
+
* @param status Status to filter by
|
|
191
|
+
* @returns Filtered tickets
|
|
192
|
+
*/
|
|
193
|
+
export declare function getTicketsByStatus(tickets: Ticket[], status: TicketStatus): Ticket[];
|
|
194
|
+
/**
|
|
195
|
+
* Get tickets by priority
|
|
196
|
+
*
|
|
197
|
+
* @param tickets Array of tickets
|
|
198
|
+
* @param priority Priority to filter by
|
|
199
|
+
* @returns Filtered tickets
|
|
200
|
+
*/
|
|
201
|
+
export declare function getTicketsByPriority(tickets: Ticket[], priority: TicketPriority): Ticket[];
|
|
202
|
+
//# sourceMappingURL=tickets.types.d.ts.map
|