@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,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Command
|
|
3
|
+
*
|
|
4
|
+
* View and modify configuration values for global and project settings.
|
|
5
|
+
*/
|
|
6
|
+
import { resolveConfig, loadGlobalConfig, loadProjectConfig, saveGlobalConfig, saveProjectConfig, getConfigPaths, } from '../config/index.js';
|
|
7
|
+
import { withErrorHandler, CliError, ValidationError } from '../middleware/error-handler.js';
|
|
8
|
+
import { printSuccess, printBlank, printHeader, } from '../ui/output.js';
|
|
9
|
+
import { colors } from '../ui/colors.js';
|
|
10
|
+
import { VALID_KEYS, CONFIG_KEY_META, isValidKeyForScope, parseConfigValue, } from './configure.types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Mask a sensitive value (show only last N characters)
|
|
13
|
+
*/
|
|
14
|
+
function maskValue(value, visibleChars = 8) {
|
|
15
|
+
if (value.length <= visibleChars) {
|
|
16
|
+
return '***';
|
|
17
|
+
}
|
|
18
|
+
return '***' + value.slice(-visibleChars);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Format a value for display
|
|
22
|
+
*/
|
|
23
|
+
function formatDisplayValue(key, value) {
|
|
24
|
+
if (value === undefined || value === null || value === '') {
|
|
25
|
+
return colors.muted('(not set)');
|
|
26
|
+
}
|
|
27
|
+
// Mask API key
|
|
28
|
+
if (key === 'apiKey' && typeof value === 'string') {
|
|
29
|
+
return colors.muted(maskValue(value));
|
|
30
|
+
}
|
|
31
|
+
// Boolean values
|
|
32
|
+
if (typeof value === 'boolean') {
|
|
33
|
+
return value ? colors.success('true') : colors.muted('false');
|
|
34
|
+
}
|
|
35
|
+
return String(value);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Display all configuration values with sources
|
|
39
|
+
*/
|
|
40
|
+
function displayAllConfig() {
|
|
41
|
+
const config = resolveConfig();
|
|
42
|
+
const paths = getConfigPaths();
|
|
43
|
+
printBlank();
|
|
44
|
+
printHeader('Configuration');
|
|
45
|
+
printBlank();
|
|
46
|
+
console.log(colors.muted('# Resolved values (from all sources)'));
|
|
47
|
+
printBlank();
|
|
48
|
+
// API Key (always masked)
|
|
49
|
+
const apiKeyDisplay = config.apiKey
|
|
50
|
+
? colors.muted(maskValue(config.apiKey))
|
|
51
|
+
: colors.error('(not set)');
|
|
52
|
+
const apiKeySource = config.sources.apiKey
|
|
53
|
+
? colors.muted(` (from ${config.sources.apiKey})`)
|
|
54
|
+
: '';
|
|
55
|
+
console.log(` apiKey: ${apiKeyDisplay}${apiKeySource}`);
|
|
56
|
+
// Format
|
|
57
|
+
const formatSource = config.sources.format
|
|
58
|
+
? colors.muted(` (from ${config.sources.format})`)
|
|
59
|
+
: '';
|
|
60
|
+
console.log(` format: ${config.format}${formatSource}`);
|
|
61
|
+
// Project ID
|
|
62
|
+
const projectIdDisplay = formatDisplayValue('projectId', config.projectId);
|
|
63
|
+
const projectIdSource = config.sources.projectId
|
|
64
|
+
? colors.muted(` (from ${config.sources.projectId})`)
|
|
65
|
+
: '';
|
|
66
|
+
console.log(` projectId: ${projectIdDisplay}${projectIdSource}`);
|
|
67
|
+
// Specification ID
|
|
68
|
+
const specIdDisplay = formatDisplayValue('specificationId', config.specificationId);
|
|
69
|
+
const specIdSource = config.sources.specificationId
|
|
70
|
+
? colors.muted(` (from ${config.sources.specificationId})`)
|
|
71
|
+
: '';
|
|
72
|
+
console.log(` specificationId: ${specIdDisplay}${specIdSource}`);
|
|
73
|
+
// Auto Set Context
|
|
74
|
+
const autoSetDisplay = formatDisplayValue('autoSetContext', config.autoSetContext);
|
|
75
|
+
// Note: autoSetContext source tracking not yet implemented in ConfigSources
|
|
76
|
+
console.log(` autoSetContext: ${autoSetDisplay}`);
|
|
77
|
+
printBlank();
|
|
78
|
+
console.log(colors.muted('# File locations'));
|
|
79
|
+
console.log(` global: ${paths.globalConfig}`);
|
|
80
|
+
console.log(` project: ${paths.projectConfig}`);
|
|
81
|
+
printBlank();
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Display a specific configuration key value
|
|
85
|
+
*/
|
|
86
|
+
function displayKey(key) {
|
|
87
|
+
const config = resolveConfig();
|
|
88
|
+
const value = config[key];
|
|
89
|
+
if (key === 'apiKey' && typeof value === 'string') {
|
|
90
|
+
console.log(maskValue(value));
|
|
91
|
+
}
|
|
92
|
+
else if (value === undefined || value === null || value === '') {
|
|
93
|
+
console.log(colors.muted('(not set)'));
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
console.log(String(value));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Set a configuration value
|
|
101
|
+
*/
|
|
102
|
+
function setConfigValue(key, value, global) {
|
|
103
|
+
const scope = global ? 'global' : 'project';
|
|
104
|
+
// Validate key for scope
|
|
105
|
+
if (!isValidKeyForScope(key, scope)) {
|
|
106
|
+
const validKeys = VALID_KEYS[scope];
|
|
107
|
+
throw new ValidationError(`Invalid key "${key}" for ${scope} config`, `Valid keys: ${validKeys.join(', ')}`);
|
|
108
|
+
}
|
|
109
|
+
// Parse and validate value
|
|
110
|
+
const parseResult = parseConfigValue(key, value);
|
|
111
|
+
if (!parseResult.valid) {
|
|
112
|
+
const meta = CONFIG_KEY_META[key];
|
|
113
|
+
throw new ValidationError(`Invalid value "${value}" for key "${key}"`, meta?.validValues ? `Valid values: ${meta.validValues.join(', ')}` : undefined);
|
|
114
|
+
}
|
|
115
|
+
// Save to appropriate config file
|
|
116
|
+
if (global) {
|
|
117
|
+
const currentConfig = loadGlobalConfig();
|
|
118
|
+
saveGlobalConfig({
|
|
119
|
+
...currentConfig,
|
|
120
|
+
[key]: parseResult.parsed,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
const currentConfig = loadProjectConfig() || {};
|
|
125
|
+
saveProjectConfig({
|
|
126
|
+
...currentConfig,
|
|
127
|
+
[key]: parseResult.parsed,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
printSuccess(`Set ${key} = ${value}`);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Remove a configuration key
|
|
134
|
+
*/
|
|
135
|
+
function unsetConfigKey(key, global) {
|
|
136
|
+
const scope = global ? 'global' : 'project';
|
|
137
|
+
// Validate key for scope
|
|
138
|
+
if (!isValidKeyForScope(key, scope)) {
|
|
139
|
+
const validKeys = VALID_KEYS[scope];
|
|
140
|
+
throw new ValidationError(`Invalid key "${key}" for ${scope} config`, `Valid keys: ${validKeys.join(', ')}`);
|
|
141
|
+
}
|
|
142
|
+
if (global) {
|
|
143
|
+
const config = loadGlobalConfig();
|
|
144
|
+
delete config[key];
|
|
145
|
+
saveGlobalConfig(config);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
const config = loadProjectConfig() || {};
|
|
149
|
+
delete config[key];
|
|
150
|
+
saveProjectConfig(config);
|
|
151
|
+
}
|
|
152
|
+
printSuccess(`Removed ${key} from ${scope} config`);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Configure command action handler
|
|
156
|
+
*/
|
|
157
|
+
export async function configureAction(key, value, options) {
|
|
158
|
+
// Handle --unset
|
|
159
|
+
if (options.unset) {
|
|
160
|
+
unsetConfigKey(options.unset, !!options.global);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
// No key = show all config
|
|
164
|
+
if (!key) {
|
|
165
|
+
displayAllConfig();
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// Validate key exists in at least one scope
|
|
169
|
+
const isValidGlobal = isValidKeyForScope(key, 'global');
|
|
170
|
+
const isValidProject = isValidKeyForScope(key, 'project');
|
|
171
|
+
if (!isValidGlobal && !isValidProject && key !== 'apiKey') {
|
|
172
|
+
const allKeys = [...new Set([...VALID_KEYS.global, ...VALID_KEYS.project])];
|
|
173
|
+
throw new ValidationError(`Unknown configuration key "${key}"`, `Valid keys: ${allKeys.join(', ')}`);
|
|
174
|
+
}
|
|
175
|
+
// Key only = show value
|
|
176
|
+
if (value === undefined) {
|
|
177
|
+
displayKey(key);
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Key + value = set value
|
|
181
|
+
// Prevent setting apiKey via configure
|
|
182
|
+
if (key === 'apiKey') {
|
|
183
|
+
throw new CliError('Cannot set API key via configure command', 1, 'Use `specforge-mcp login` to set your API key');
|
|
184
|
+
}
|
|
185
|
+
setConfigValue(key, value, !!options.global);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Register configure command with Commander
|
|
189
|
+
*/
|
|
190
|
+
export function registerConfigureCommand(program) {
|
|
191
|
+
program
|
|
192
|
+
.command('configure [key] [value]')
|
|
193
|
+
.alias('config')
|
|
194
|
+
.description('View or modify configuration')
|
|
195
|
+
.option('--global', 'Read/write global config (~/.specforge/config.json)')
|
|
196
|
+
.option('--unset <key>', 'Remove a configuration key')
|
|
197
|
+
.addHelpText('after', `
|
|
198
|
+
Examples:
|
|
199
|
+
$ specforge-mcp configure # Show all configuration
|
|
200
|
+
$ specforge-mcp configure format # Show format value
|
|
201
|
+
$ specforge-mcp configure format toon # Set project format to toon
|
|
202
|
+
$ specforge-mcp configure --global format json # Set global format to json
|
|
203
|
+
$ specforge-mcp configure --unset projectId # Remove projectId from project config
|
|
204
|
+
|
|
205
|
+
Valid keys:
|
|
206
|
+
Global: ${VALID_KEYS.global.join(', ')}
|
|
207
|
+
Project: ${VALID_KEYS.project.join(', ')}
|
|
208
|
+
|
|
209
|
+
Key descriptions:
|
|
210
|
+
format - Output format: json or toon (44% smaller)
|
|
211
|
+
projectId - Default project ID for this directory
|
|
212
|
+
specificationId - Default specification ID for this directory
|
|
213
|
+
autoSetContext - Auto-set working context on start (true/false)
|
|
214
|
+
defaultProjectId - Global default project ID
|
|
215
|
+
`)
|
|
216
|
+
.action(withErrorHandler(configureAction));
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=configure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Command Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions and constants for the configure command.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Configure command options from Commander
|
|
8
|
+
*/
|
|
9
|
+
export interface ConfigureOptions {
|
|
10
|
+
/** Read/write global config (~/.specforge/config.json) */
|
|
11
|
+
global?: boolean;
|
|
12
|
+
/** Remove a configuration key */
|
|
13
|
+
unset?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Configuration scope
|
|
17
|
+
*/
|
|
18
|
+
export type ConfigScope = 'global' | 'project';
|
|
19
|
+
/**
|
|
20
|
+
* Valid configuration keys by scope
|
|
21
|
+
*/
|
|
22
|
+
export declare const VALID_KEYS: Record<ConfigScope, string[]>;
|
|
23
|
+
/**
|
|
24
|
+
* All valid configuration keys (union of both scopes)
|
|
25
|
+
*/
|
|
26
|
+
export declare const ALL_VALID_KEYS: readonly ["format", "projectId", "specificationId", "autoSetContext", "defaultProjectId"];
|
|
27
|
+
/**
|
|
28
|
+
* Valid configuration key type
|
|
29
|
+
*/
|
|
30
|
+
export type ValidConfigKey = (typeof ALL_VALID_KEYS)[number];
|
|
31
|
+
/**
|
|
32
|
+
* Configuration key metadata
|
|
33
|
+
*/
|
|
34
|
+
export interface ConfigKeyMeta {
|
|
35
|
+
/** Human-readable description */
|
|
36
|
+
description: string;
|
|
37
|
+
/** Valid scopes for this key */
|
|
38
|
+
scopes: ConfigScope[];
|
|
39
|
+
/** Valid values (if restricted) */
|
|
40
|
+
validValues?: string[];
|
|
41
|
+
/** Whether the value should be masked in output */
|
|
42
|
+
masked?: boolean;
|
|
43
|
+
/** Value type after parsing */
|
|
44
|
+
type: 'string' | 'boolean';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Configuration key metadata map
|
|
48
|
+
*/
|
|
49
|
+
export declare const CONFIG_KEY_META: Record<ValidConfigKey, ConfigKeyMeta>;
|
|
50
|
+
/**
|
|
51
|
+
* Key validator function type
|
|
52
|
+
*/
|
|
53
|
+
export type KeyValidator = (value: string) => boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Key validators for values that need validation
|
|
56
|
+
*/
|
|
57
|
+
export declare const KEY_VALIDATORS: Partial<Record<ValidConfigKey, KeyValidator>>;
|
|
58
|
+
/**
|
|
59
|
+
* Value parser function type
|
|
60
|
+
*/
|
|
61
|
+
export type ValueParser = (value: string) => unknown;
|
|
62
|
+
/**
|
|
63
|
+
* Value parsers for converting string input to proper types
|
|
64
|
+
*/
|
|
65
|
+
export declare const VALUE_PARSERS: Partial<Record<ValidConfigKey, ValueParser>>;
|
|
66
|
+
/**
|
|
67
|
+
* Configuration display entry
|
|
68
|
+
*/
|
|
69
|
+
export interface ConfigDisplayEntry {
|
|
70
|
+
/** Configuration key */
|
|
71
|
+
key: string;
|
|
72
|
+
/** Resolved value */
|
|
73
|
+
value: unknown;
|
|
74
|
+
/** Source of the value */
|
|
75
|
+
source: string;
|
|
76
|
+
/** Whether to mask the value */
|
|
77
|
+
masked?: boolean;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Validation result
|
|
81
|
+
*/
|
|
82
|
+
export interface ValidationResult {
|
|
83
|
+
/** Whether the validation passed */
|
|
84
|
+
valid: boolean;
|
|
85
|
+
/** Error message if validation failed */
|
|
86
|
+
error?: string;
|
|
87
|
+
/** Hint for valid values */
|
|
88
|
+
hint?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Check if a key is valid for the given scope
|
|
92
|
+
*/
|
|
93
|
+
export declare function isValidKeyForScope(key: string, scope: ConfigScope): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Get validator for a key
|
|
96
|
+
*/
|
|
97
|
+
export declare function getValidator(key: string): KeyValidator | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Get parser for a key
|
|
100
|
+
*/
|
|
101
|
+
export declare function getParser(key: string): ValueParser | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Parse and validate a configuration value
|
|
104
|
+
*/
|
|
105
|
+
export declare function parseConfigValue(key: string, value: string): {
|
|
106
|
+
parsed: unknown;
|
|
107
|
+
valid: boolean;
|
|
108
|
+
error?: string;
|
|
109
|
+
};
|
|
110
|
+
//# sourceMappingURL=configure.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/configure.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAGpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,2FAMjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,aAAa,CA4BjE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAGxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAEtE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBrD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configure Command Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions and constants for the configure command.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Valid configuration keys by scope
|
|
8
|
+
*/
|
|
9
|
+
export const VALID_KEYS = {
|
|
10
|
+
global: ['format', 'defaultProjectId'],
|
|
11
|
+
project: ['format', 'projectId', 'specificationId', 'autoSetContext'],
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* All valid configuration keys (union of both scopes)
|
|
15
|
+
*/
|
|
16
|
+
export const ALL_VALID_KEYS = [
|
|
17
|
+
'format',
|
|
18
|
+
'projectId',
|
|
19
|
+
'specificationId',
|
|
20
|
+
'autoSetContext',
|
|
21
|
+
'defaultProjectId',
|
|
22
|
+
];
|
|
23
|
+
/**
|
|
24
|
+
* Configuration key metadata map
|
|
25
|
+
*/
|
|
26
|
+
export const CONFIG_KEY_META = {
|
|
27
|
+
format: {
|
|
28
|
+
description: 'Output format',
|
|
29
|
+
scopes: ['global', 'project'],
|
|
30
|
+
validValues: ['json', 'toon'],
|
|
31
|
+
type: 'string',
|
|
32
|
+
},
|
|
33
|
+
projectId: {
|
|
34
|
+
description: 'Default project ID',
|
|
35
|
+
scopes: ['project'],
|
|
36
|
+
type: 'string',
|
|
37
|
+
},
|
|
38
|
+
specificationId: {
|
|
39
|
+
description: 'Default specification ID',
|
|
40
|
+
scopes: ['project'],
|
|
41
|
+
type: 'string',
|
|
42
|
+
},
|
|
43
|
+
autoSetContext: {
|
|
44
|
+
description: 'Auto-set working context on MCP server start',
|
|
45
|
+
scopes: ['project'],
|
|
46
|
+
validValues: ['true', 'false'],
|
|
47
|
+
type: 'boolean',
|
|
48
|
+
},
|
|
49
|
+
defaultProjectId: {
|
|
50
|
+
description: 'Global default project ID',
|
|
51
|
+
scopes: ['global'],
|
|
52
|
+
type: 'string',
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Key validators for values that need validation
|
|
57
|
+
*/
|
|
58
|
+
export const KEY_VALIDATORS = {
|
|
59
|
+
format: (v) => ['json', 'toon'].includes(v),
|
|
60
|
+
autoSetContext: (v) => ['true', 'false'].includes(v.toLowerCase()),
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Value parsers for converting string input to proper types
|
|
64
|
+
*/
|
|
65
|
+
export const VALUE_PARSERS = {
|
|
66
|
+
autoSetContext: (v) => v.toLowerCase() === 'true',
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Check if a key is valid for the given scope
|
|
70
|
+
*/
|
|
71
|
+
export function isValidKeyForScope(key, scope) {
|
|
72
|
+
return VALID_KEYS[scope].includes(key);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get validator for a key
|
|
76
|
+
*/
|
|
77
|
+
export function getValidator(key) {
|
|
78
|
+
return KEY_VALIDATORS[key];
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get parser for a key
|
|
82
|
+
*/
|
|
83
|
+
export function getParser(key) {
|
|
84
|
+
return VALUE_PARSERS[key];
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Parse and validate a configuration value
|
|
88
|
+
*/
|
|
89
|
+
export function parseConfigValue(key, value) {
|
|
90
|
+
// Validate if validator exists
|
|
91
|
+
const validator = getValidator(key);
|
|
92
|
+
if (validator && !validator(value)) {
|
|
93
|
+
const meta = CONFIG_KEY_META[key];
|
|
94
|
+
return {
|
|
95
|
+
parsed: value,
|
|
96
|
+
valid: false,
|
|
97
|
+
error: `Invalid value "${value}" for key "${key}". Valid values: ${meta?.validValues?.join(', ')}`,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Parse the value
|
|
101
|
+
const parser = getParser(key);
|
|
102
|
+
const parsed = parser ? parser(value) : value;
|
|
103
|
+
return { parsed, valid: true };
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=configure.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configure.types.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Allows directly calling MCP tools with JSON arguments, useful for testing
|
|
5
|
+
* and debugging.
|
|
6
|
+
*/
|
|
7
|
+
import type { CallOptions } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Call command implementation
|
|
10
|
+
*
|
|
11
|
+
* Directly calls an MCP tool with optional JSON arguments.
|
|
12
|
+
*/
|
|
13
|
+
export declare function callCommand(tool: string, options: CallOptions): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsD9C;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DnF"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Call Command Implementation
|
|
3
|
+
*
|
|
4
|
+
* Allows directly calling MCP tools with JSON arguments, useful for testing
|
|
5
|
+
* and debugging.
|
|
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
|
+
/**
|
|
12
|
+
* Parse JSON arguments safely
|
|
13
|
+
*/
|
|
14
|
+
function parseArgs(argsString) {
|
|
15
|
+
if (!argsString) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return JSON.parse(argsString);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
throw new Error(`Invalid JSON in --args. Example: --args='{"ticketId": "abc123"}'`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format response as TOON
|
|
27
|
+
*/
|
|
28
|
+
function formatToon(response) {
|
|
29
|
+
if (typeof response === 'object' && response !== null) {
|
|
30
|
+
const lines = ['@response'];
|
|
31
|
+
const entries = Object.entries(response);
|
|
32
|
+
for (const [key, value] of entries) {
|
|
33
|
+
if (typeof value === 'object' && value !== null) {
|
|
34
|
+
lines.push(` ${key}: ${JSON.stringify(value)}`);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
lines.push(` ${key}: ${value}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return lines.join('\n');
|
|
41
|
+
}
|
|
42
|
+
return String(response);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Format output based on options
|
|
46
|
+
*/
|
|
47
|
+
function formatOutput(response, options) {
|
|
48
|
+
if (options.raw) {
|
|
49
|
+
return typeof response === 'string' ? response : JSON.stringify(response);
|
|
50
|
+
}
|
|
51
|
+
if (options.format === 'toon') {
|
|
52
|
+
return formatToon(response);
|
|
53
|
+
}
|
|
54
|
+
// Default to formatted JSON
|
|
55
|
+
return JSON.stringify(response, null, 2);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Call command implementation
|
|
59
|
+
*
|
|
60
|
+
* Directly calls an MCP tool with optional JSON arguments.
|
|
61
|
+
*/
|
|
62
|
+
export async function callCommand(tool, options) {
|
|
63
|
+
// Validate tool name
|
|
64
|
+
if (!tool) {
|
|
65
|
+
console.error(colors.error('\nError: Tool name is required.'));
|
|
66
|
+
console.error("Usage: specforge-mcp call <tool> --args='{\"key\": \"value\"}'");
|
|
67
|
+
process.exit(1);
|
|
68
|
+
}
|
|
69
|
+
const config = resolveConfig();
|
|
70
|
+
// Parse arguments
|
|
71
|
+
let args;
|
|
72
|
+
try {
|
|
73
|
+
args = parseArgs(options.args);
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
const message = error instanceof Error ? error.message : 'Invalid JSON';
|
|
77
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const spinner = ora(`Calling ${tool}...`).start();
|
|
81
|
+
try {
|
|
82
|
+
if (!config.apiKey) {
|
|
83
|
+
spinner.fail('Not authenticated');
|
|
84
|
+
console.error(colors.error('\nError: Not authenticated.'));
|
|
85
|
+
console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
const client = new ApiClient({
|
|
89
|
+
apiKey: config.apiKey,
|
|
90
|
+
apiUrl: config.apiUrl,
|
|
91
|
+
debug: config.debug,
|
|
92
|
+
});
|
|
93
|
+
const response = await client.call(tool, args);
|
|
94
|
+
spinner.stop();
|
|
95
|
+
// Format and display output
|
|
96
|
+
const output = formatOutput(response, options);
|
|
97
|
+
console.log(output);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
spinner.fail(`Failed to call ${tool}`);
|
|
101
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
102
|
+
// Provide helpful error messages
|
|
103
|
+
if (message.includes('Unknown tool') || message.includes('not found')) {
|
|
104
|
+
console.error(colors.error(`\nError: Unknown tool "${tool}".`));
|
|
105
|
+
console.error(colors.muted("Run 'specforge-mcp tools' to see available tools."));
|
|
106
|
+
}
|
|
107
|
+
else if (message.includes('required')) {
|
|
108
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
109
|
+
console.error(colors.muted('Check the tool requires specific arguments.'));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.error(colors.error(`\nError: ${message}`));
|
|
113
|
+
}
|
|
114
|
+
process.exit(1);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=call.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.js","sourceRoot":"","sources":["../../../../src/cli/commands/debug/call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG1D;;GAEG;AACH,SAAS,SAAS,CAAC,UAA8B;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,QAAiB;IACnC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,KAAK,GAAa,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAiB,EAAE,OAAoB;IAC3D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB;IAClE,qBAAqB;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,kBAAkB;IAClB,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,4BAA4B;QAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAEzE,iCAAiC;QACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,IAAI,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Command Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all debug command types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { callCommand } from './call.js';
|
|
8
|
+
export { toolsCommand } from './tools.js';
|
|
9
|
+
export { testCommand } from './test.js';
|
|
10
|
+
export { whoamiCommand } from './whoami.js';
|
|
11
|
+
export { registerDebugCommands } from './register.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Command Module
|
|
3
|
+
*
|
|
4
|
+
* Exports all debug command types and utilities.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { callCommand } from './call.js';
|
|
8
|
+
export { toolsCommand } from './tools.js';
|
|
9
|
+
export { testCommand } from './test.js';
|
|
10
|
+
export { whoamiCommand } from './whoami.js';
|
|
11
|
+
export { registerDebugCommands } from './register.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug Command Registration
|
|
3
|
+
*
|
|
4
|
+
* Registers all debug commands with the CLI framework.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
/**
|
|
8
|
+
* Register all debug commands with the CLI
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerDebugCommands(program: Command): void;
|
|
11
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkG5D"}
|