@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,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specification Review Implementation
|
|
3
|
+
*
|
|
4
|
+
* Reviews all epics within a specification and aggregates
|
|
5
|
+
* the results into an overall specification review status.
|
|
6
|
+
*/
|
|
7
|
+
import { ApiClient } from '../../../client/api-client.js';
|
|
8
|
+
import { ReviewOptions, ReviewResult } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Review a specification by reviewing all epics
|
|
11
|
+
*/
|
|
12
|
+
export declare function reviewSpecification(client: ApiClient, specificationId: string, options: ReviewOptions): Promise<ReviewResult>;
|
|
13
|
+
//# sourceMappingURL=spec-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-review.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/spec-review.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,YAAY,EAOb,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,SAAS,EACjB,eAAe,EAAE,MAAM,EACvB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA4DvB"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Specification Review Implementation
|
|
3
|
+
*
|
|
4
|
+
* Reviews all epics within a specification and aggregates
|
|
5
|
+
* the results into an overall specification review status.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import { CHECK_CATEGORIES, createCheck, calculateSummary, determineOverallStatus, } from './types.js';
|
|
9
|
+
import { reviewEpic } from './epic-review.js';
|
|
10
|
+
/**
|
|
11
|
+
* Review a specification by reviewing all epics
|
|
12
|
+
*/
|
|
13
|
+
export async function reviewSpecification(client, specificationId, options) {
|
|
14
|
+
const checks = [];
|
|
15
|
+
// Get all epics in specification
|
|
16
|
+
const epicsResponse = await client.call('list_epics', {
|
|
17
|
+
specificationId,
|
|
18
|
+
});
|
|
19
|
+
const epics = epicsResponse.epics || [];
|
|
20
|
+
if (!options.json) {
|
|
21
|
+
console.log(chalk.bold(`\nReviewing Specification`));
|
|
22
|
+
console.log('═'.repeat(50));
|
|
23
|
+
console.log(`Total epics: ${epics.length}\n`);
|
|
24
|
+
}
|
|
25
|
+
// Review each epic
|
|
26
|
+
for (const epic of epics) {
|
|
27
|
+
if (!options.json) {
|
|
28
|
+
console.log(chalk.dim(`\nReviewing Epic ${epic.number}: ${epic.title}...`));
|
|
29
|
+
}
|
|
30
|
+
const epicResult = await reviewEpic(client, epic.id, { ...options, json: true });
|
|
31
|
+
// Format epic identifier
|
|
32
|
+
const epicCode = `E${epic.number.toString().padStart(2, '0')}`;
|
|
33
|
+
const epicName = `${epicCode}: ${truncateTitle(epic.title, 35)}`;
|
|
34
|
+
checks.push(createCheck(CHECK_CATEGORIES.EPICS, epicName, epicResult.status === 'pass' ? 'pass' :
|
|
35
|
+
epicResult.status === 'partial' ? 'warn' : 'fail', `${epicResult.summary.passed}/${epicResult.checks.length} checks passed`, epicResult.summary.failed > 0
|
|
36
|
+
? { details: `${epicResult.summary.failed} failed, ${epicResult.summary.warnings} warnings` }
|
|
37
|
+
: undefined));
|
|
38
|
+
}
|
|
39
|
+
// Calculate overall specification status
|
|
40
|
+
const passedEpics = checks.filter(c => c.status === 'pass').length;
|
|
41
|
+
const totalEpics = epics.length;
|
|
42
|
+
if (!options.json && totalEpics > 0) {
|
|
43
|
+
console.log(chalk.dim(`\nSpecification summary: ${passedEpics}/${totalEpics} epics passing`));
|
|
44
|
+
}
|
|
45
|
+
// Compile result
|
|
46
|
+
const summary = calculateSummary(checks);
|
|
47
|
+
const status = determineOverallStatus(summary);
|
|
48
|
+
return {
|
|
49
|
+
scope: 'specification',
|
|
50
|
+
id: specificationId,
|
|
51
|
+
title: 'Specification Review',
|
|
52
|
+
status,
|
|
53
|
+
checks,
|
|
54
|
+
summary,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Truncate title to max length
|
|
59
|
+
*/
|
|
60
|
+
function truncateTitle(title, maxLength) {
|
|
61
|
+
if (title.length <= maxLength)
|
|
62
|
+
return title;
|
|
63
|
+
return title.slice(0, maxLength - 3) + '...';
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=spec-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-review.js","sourceRoot":"","sources":["../../../../src/cli/commands/review/spec-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Review Implementation
|
|
3
|
+
*
|
|
4
|
+
* Reviews a single ticket's implementation against SpecForge documentation,
|
|
5
|
+
* checking acceptance criteria, files, patterns, and validation results.
|
|
6
|
+
*/
|
|
7
|
+
import { ApiClient } from '../../../client/api-client.js';
|
|
8
|
+
import { ReviewOptions, ReviewResult, CheckResult, TicketApiResponse, ImplementationContextApiResponse } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Review a single ticket implementation
|
|
11
|
+
*/
|
|
12
|
+
export declare function reviewTicket(client: ApiClient, ticketId: string, options: ReviewOptions): Promise<ReviewResult>;
|
|
13
|
+
/**
|
|
14
|
+
* Check acceptance criteria validation status
|
|
15
|
+
*/
|
|
16
|
+
export declare function checkAcceptanceCriteria(ticket: TicketApiResponse, options: ReviewOptions): CheckResult[];
|
|
17
|
+
/**
|
|
18
|
+
* Check file existence based on technical details
|
|
19
|
+
*/
|
|
20
|
+
export declare function checkFiles(ticket: TicketApiResponse, options: ReviewOptions): CheckResult[];
|
|
21
|
+
/**
|
|
22
|
+
* Check code patterns in files
|
|
23
|
+
*/
|
|
24
|
+
export declare function checkPatterns(ticket: TicketApiResponse, context: ImplementationContextApiResponse, options: ReviewOptions): Promise<CheckResult[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if a specific pattern is used in files
|
|
27
|
+
*/
|
|
28
|
+
export declare function checkPatternUsage(createFiles: (string | {
|
|
29
|
+
path: string;
|
|
30
|
+
})[] | undefined, modifyFiles: (string | {
|
|
31
|
+
path: string;
|
|
32
|
+
})[] | undefined, pattern: string): Promise<CheckResult>;
|
|
33
|
+
/**
|
|
34
|
+
* Check validation results (tests, lint, build, typecheck)
|
|
35
|
+
*/
|
|
36
|
+
export declare function checkValidation(ticket: TicketApiResponse, options: ReviewOptions): CheckResult[];
|
|
37
|
+
//# sourceMappingURL=ticket-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-review.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/ticket-review.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,gCAAgC,EAOjC,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA0CvB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,WAAW,EAAE,CAmDf;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,WAAW,EAAE,CA2Df;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,gCAAgC,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,WAAW,EAAE,CAAC,CAuCxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,CAAC,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,YAAK,EAC/C,WAAW,EAAE,CAAC,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,YAAK,EAC/C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CA4BtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,aAAa,GACrB,WAAW,EAAE,CA0Df"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket Review Implementation
|
|
3
|
+
*
|
|
4
|
+
* Reviews a single ticket's implementation against SpecForge documentation,
|
|
5
|
+
* checking acceptance criteria, files, patterns, and validation results.
|
|
6
|
+
*/
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
import path from 'path';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
import { CHECK_CATEGORIES, createCheck, calculateSummary, determineOverallStatus, getFilePath, truncateString, } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Maximum length for criterion name display
|
|
13
|
+
*/
|
|
14
|
+
const MAX_CRITERION_LENGTH = 50;
|
|
15
|
+
/**
|
|
16
|
+
* Review a single ticket implementation
|
|
17
|
+
*/
|
|
18
|
+
export async function reviewTicket(client, ticketId, options) {
|
|
19
|
+
const checks = [];
|
|
20
|
+
// Get ticket details
|
|
21
|
+
const ticket = await client.call('get_ticket', { ticketId });
|
|
22
|
+
// Get implementation context for patterns
|
|
23
|
+
const context = await client.call('get_implementation_context', { ticketId });
|
|
24
|
+
if (!options.json) {
|
|
25
|
+
console.log(chalk.bold(`\nReviewing: ${ticket.title}`));
|
|
26
|
+
console.log('═'.repeat(50));
|
|
27
|
+
}
|
|
28
|
+
// 1. Check Acceptance Criteria
|
|
29
|
+
const criteriaChecks = checkAcceptanceCriteria(ticket, options);
|
|
30
|
+
checks.push(...criteriaChecks);
|
|
31
|
+
// 2. Check Files
|
|
32
|
+
const fileChecks = checkFiles(ticket, options);
|
|
33
|
+
checks.push(...fileChecks);
|
|
34
|
+
// 3. Check Patterns
|
|
35
|
+
const patternChecks = await checkPatterns(ticket, context, options);
|
|
36
|
+
checks.push(...patternChecks);
|
|
37
|
+
// 4. Check Validation Results
|
|
38
|
+
const validationChecks = checkValidation(ticket, options);
|
|
39
|
+
checks.push(...validationChecks);
|
|
40
|
+
// Compile result
|
|
41
|
+
const summary = calculateSummary(checks);
|
|
42
|
+
const status = determineOverallStatus(summary);
|
|
43
|
+
return {
|
|
44
|
+
scope: 'ticket',
|
|
45
|
+
id: ticketId,
|
|
46
|
+
title: ticket.title,
|
|
47
|
+
status,
|
|
48
|
+
checks,
|
|
49
|
+
summary,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Check acceptance criteria validation status
|
|
54
|
+
*/
|
|
55
|
+
export function checkAcceptanceCriteria(ticket, options) {
|
|
56
|
+
const checks = [];
|
|
57
|
+
if (!options.json) {
|
|
58
|
+
console.log(chalk.dim('\nChecking acceptance criteria...'));
|
|
59
|
+
}
|
|
60
|
+
if (!ticket.acceptanceCriteria || ticket.acceptanceCriteria.length === 0) {
|
|
61
|
+
checks.push(createCheck(CHECK_CATEGORIES.ACCEPTANCE_CRITERIA, 'Criteria defined', 'warn', 'No acceptance criteria defined for this ticket', { details: 'Consider adding acceptance criteria for better tracking' }));
|
|
62
|
+
return checks;
|
|
63
|
+
}
|
|
64
|
+
const validation = ticket.acceptanceCriteriaValidation || [];
|
|
65
|
+
for (const criterion of ticket.acceptanceCriteria) {
|
|
66
|
+
const criterionName = truncateString(criterion, MAX_CRITERION_LENGTH);
|
|
67
|
+
const v = validation.find(v => v.criterion === criterion);
|
|
68
|
+
if (!v || v.status === 'pending') {
|
|
69
|
+
checks.push(createCheck(CHECK_CATEGORIES.ACCEPTANCE_CRITERIA, criterionName, 'fail', 'Not validated', { fix: 'Verify this criterion is implemented and mark as validated' }));
|
|
70
|
+
}
|
|
71
|
+
else if (v.status === 'passed') {
|
|
72
|
+
checks.push(createCheck(CHECK_CATEGORIES.ACCEPTANCE_CRITERIA, criterionName, 'pass', 'Validated'));
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
checks.push(createCheck(CHECK_CATEGORIES.ACCEPTANCE_CRITERIA, criterionName, 'fail', v.notes || 'Failed validation', { fix: 'Fix the implementation to satisfy this criterion' }));
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return checks;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check file existence based on technical details
|
|
82
|
+
*/
|
|
83
|
+
export function checkFiles(ticket, options) {
|
|
84
|
+
const checks = [];
|
|
85
|
+
if (!options.json) {
|
|
86
|
+
console.log(chalk.dim('Checking file changes...'));
|
|
87
|
+
}
|
|
88
|
+
const technicalDetails = ticket.technicalDetails;
|
|
89
|
+
if (!technicalDetails?.files) {
|
|
90
|
+
// No file specifications, not necessarily an error
|
|
91
|
+
return checks;
|
|
92
|
+
}
|
|
93
|
+
// Check created files
|
|
94
|
+
if (technicalDetails.files.create) {
|
|
95
|
+
for (const file of technicalDetails.files.create) {
|
|
96
|
+
const filePath = getFilePath(file);
|
|
97
|
+
const fullPath = path.resolve(process.cwd(), filePath);
|
|
98
|
+
const exists = fs.existsSync(fullPath);
|
|
99
|
+
checks.push(createCheck(CHECK_CATEGORIES.FILES, `Create: ${filePath}`, exists ? 'pass' : 'fail', exists ? 'File exists' : 'File not found', exists ? undefined : { fix: `Create the file: ${filePath}` }));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Check modified files
|
|
103
|
+
if (technicalDetails.files.modify) {
|
|
104
|
+
for (const file of technicalDetails.files.modify) {
|
|
105
|
+
const filePath = getFilePath(file);
|
|
106
|
+
const fullPath = path.resolve(process.cwd(), filePath);
|
|
107
|
+
const exists = fs.existsSync(fullPath);
|
|
108
|
+
if (!exists) {
|
|
109
|
+
checks.push(createCheck(CHECK_CATEGORIES.FILES, `Modify: ${filePath}`, 'fail', 'File not found'));
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
// File exists - could check git diff for actual modifications
|
|
113
|
+
checks.push(createCheck(CHECK_CATEGORIES.FILES, `Modify: ${filePath}`, 'pass', 'File exists', { details: 'Verify changes are correct' }));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return checks;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check code patterns in files
|
|
121
|
+
*/
|
|
122
|
+
export async function checkPatterns(ticket, context, options) {
|
|
123
|
+
const checks = [];
|
|
124
|
+
if (!options.json) {
|
|
125
|
+
console.log(chalk.dim('Checking code patterns...'));
|
|
126
|
+
}
|
|
127
|
+
const patterns = context.patterns;
|
|
128
|
+
const technicalDetails = ticket.technicalDetails;
|
|
129
|
+
if (!patterns) {
|
|
130
|
+
return checks;
|
|
131
|
+
}
|
|
132
|
+
// Check error handling pattern
|
|
133
|
+
if (patterns.codeStandards?.errorHandling) {
|
|
134
|
+
const createFiles = technicalDetails?.files?.create || [];
|
|
135
|
+
const modifyFiles = technicalDetails?.files?.modify || [];
|
|
136
|
+
const patternCheck = await checkPatternUsage(createFiles, modifyFiles, patterns.codeStandards.errorHandling);
|
|
137
|
+
checks.push(patternCheck);
|
|
138
|
+
}
|
|
139
|
+
// Check return types (manual verification needed)
|
|
140
|
+
if (patterns.returnTypes) {
|
|
141
|
+
const returnTypeKeys = Object.keys(patterns.returnTypes);
|
|
142
|
+
checks.push(createCheck(CHECK_CATEGORIES.PATTERNS, 'Return types', 'warn', 'Manual verification needed', { details: `Expected patterns: ${returnTypeKeys.join(', ')}` }));
|
|
143
|
+
}
|
|
144
|
+
return checks;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Check if a specific pattern is used in files
|
|
148
|
+
*/
|
|
149
|
+
export async function checkPatternUsage(createFiles = [], modifyFiles = [], pattern) {
|
|
150
|
+
const allFiles = [...createFiles, ...modifyFiles];
|
|
151
|
+
let found = false;
|
|
152
|
+
for (const file of allFiles) {
|
|
153
|
+
const filePath = getFilePath(file);
|
|
154
|
+
const fullPath = path.resolve(process.cwd(), filePath);
|
|
155
|
+
if (fs.existsSync(fullPath)) {
|
|
156
|
+
try {
|
|
157
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
158
|
+
if (content.includes(pattern)) {
|
|
159
|
+
found = true;
|
|
160
|
+
break;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
catch {
|
|
164
|
+
// File read error, continue checking other files
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return createCheck(CHECK_CATEGORIES.PATTERNS, `Error handling: ${truncateString(pattern, 30)}`, found ? 'pass' : 'warn', found ? 'Pattern found in code' : 'Pattern not detected', found ? undefined : { details: 'Verify error handling follows specification' });
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check validation results (tests, lint, build, typecheck)
|
|
172
|
+
*/
|
|
173
|
+
export function checkValidation(ticket, options) {
|
|
174
|
+
const checks = [];
|
|
175
|
+
if (!options.json) {
|
|
176
|
+
console.log(chalk.dim('Checking validation results...'));
|
|
177
|
+
}
|
|
178
|
+
const validation = ticket.implementation?.validation;
|
|
179
|
+
if (!validation) {
|
|
180
|
+
checks.push(createCheck(CHECK_CATEGORIES.TESTS, 'Validation results', 'fail', 'No validation results recorded', { fix: 'Run validations and complete the ticket with results' }));
|
|
181
|
+
return checks;
|
|
182
|
+
}
|
|
183
|
+
// Test suite
|
|
184
|
+
checks.push(createCheck(CHECK_CATEGORIES.TESTS, 'Test suite', validation.tests === 'passed' ? 'pass' :
|
|
185
|
+
validation.tests === 'skipped' ? 'warn' : 'fail', `Tests: ${validation.tests || 'not run'}`, validation.tests === 'failed' ? { fix: 'Fix failing tests' } : undefined));
|
|
186
|
+
// Type check
|
|
187
|
+
checks.push(createCheck(CHECK_CATEGORIES.TESTS, 'Type check', validation.typeCheck === 'passed' ? 'pass' : 'fail', `TypeScript: ${validation.typeCheck || 'not run'}`, validation.typeCheck === 'failed' ? { fix: 'Fix TypeScript errors' } : undefined));
|
|
188
|
+
// Lint
|
|
189
|
+
checks.push(createCheck(CHECK_CATEGORIES.TESTS, 'Lint', validation.lint === 'passed' ? 'pass' : 'warn', `Lint: ${validation.lint || 'not run'}`, validation.lint === 'failed' ? { fix: 'Fix linting issues' } : undefined));
|
|
190
|
+
// Build
|
|
191
|
+
checks.push(createCheck(CHECK_CATEGORIES.TESTS, 'Build', validation.build === 'passed' ? 'pass' : 'fail', `Build: ${validation.build || 'not run'}`, validation.build === 'failed' ? { fix: 'Fix build errors' } : undefined));
|
|
192
|
+
return checks;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=ticket-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ticket-review.js","sourceRoot":"","sources":["../../../../src/cli/commands/review/ticket-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review Command Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the review command which validates
|
|
5
|
+
* implementations against SpecForge documentation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Review command options from Commander
|
|
9
|
+
*/
|
|
10
|
+
export interface ReviewOptions {
|
|
11
|
+
/** Fail on any non-compliance */
|
|
12
|
+
strict?: boolean;
|
|
13
|
+
/** Show suggested fixes for issues */
|
|
14
|
+
fix?: boolean;
|
|
15
|
+
/** Generate detailed report file */
|
|
16
|
+
report?: boolean;
|
|
17
|
+
/** Output as JSON */
|
|
18
|
+
json?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Valid scopes for review
|
|
22
|
+
*/
|
|
23
|
+
export type ReviewScope = 'ticket' | 'epic' | 'spec' | 'specification';
|
|
24
|
+
/**
|
|
25
|
+
* Check result status
|
|
26
|
+
*/
|
|
27
|
+
export type CheckStatus = 'pass' | 'fail' | 'warn' | 'skip';
|
|
28
|
+
/**
|
|
29
|
+
* Overall review status
|
|
30
|
+
*/
|
|
31
|
+
export type ReviewStatus = 'pass' | 'fail' | 'partial';
|
|
32
|
+
/**
|
|
33
|
+
* Individual check result
|
|
34
|
+
*/
|
|
35
|
+
export interface CheckResult {
|
|
36
|
+
/** Category of the check (Acceptance Criteria, Files, Patterns, Tests) */
|
|
37
|
+
category: string;
|
|
38
|
+
/** Name/description of the check */
|
|
39
|
+
name: string;
|
|
40
|
+
/** Result status */
|
|
41
|
+
status: CheckStatus;
|
|
42
|
+
/** Human-readable message */
|
|
43
|
+
message: string;
|
|
44
|
+
/** Additional details (optional) */
|
|
45
|
+
details?: string;
|
|
46
|
+
/** Suggested fix (optional, shown with --fix) */
|
|
47
|
+
fix?: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Review summary statistics
|
|
51
|
+
*/
|
|
52
|
+
export interface ReviewSummary {
|
|
53
|
+
/** Number of passed checks */
|
|
54
|
+
passed: number;
|
|
55
|
+
/** Number of failed checks */
|
|
56
|
+
failed: number;
|
|
57
|
+
/** Number of warnings */
|
|
58
|
+
warnings: number;
|
|
59
|
+
/** Number of suggestions (checks with fixes) */
|
|
60
|
+
suggestions: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Complete review result
|
|
64
|
+
*/
|
|
65
|
+
export interface ReviewResult {
|
|
66
|
+
/** Scope that was reviewed (ticket, epic, spec) */
|
|
67
|
+
scope: string;
|
|
68
|
+
/** ID of the reviewed item */
|
|
69
|
+
id: string;
|
|
70
|
+
/** Title of the reviewed item */
|
|
71
|
+
title: string;
|
|
72
|
+
/** Overall status */
|
|
73
|
+
status: ReviewStatus;
|
|
74
|
+
/** Individual check results */
|
|
75
|
+
checks: CheckResult[];
|
|
76
|
+
/** Summary statistics */
|
|
77
|
+
summary: ReviewSummary;
|
|
78
|
+
/** Report file path (if generated) */
|
|
79
|
+
report?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Acceptance criteria validation from API
|
|
83
|
+
*/
|
|
84
|
+
export interface AcceptanceCriteriaValidation {
|
|
85
|
+
/** The criterion text */
|
|
86
|
+
criterion: string;
|
|
87
|
+
/** Validation status */
|
|
88
|
+
status: 'pending' | 'passed' | 'failed';
|
|
89
|
+
/** Optional notes */
|
|
90
|
+
notes?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* File specification from technical details
|
|
94
|
+
*/
|
|
95
|
+
export interface FileSpec {
|
|
96
|
+
/** File path */
|
|
97
|
+
path: string;
|
|
98
|
+
/** Optional description */
|
|
99
|
+
description?: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Technical details from ticket
|
|
103
|
+
*/
|
|
104
|
+
export interface TechnicalDetails {
|
|
105
|
+
/** Files to create */
|
|
106
|
+
files?: {
|
|
107
|
+
create?: (FileSpec | string)[];
|
|
108
|
+
modify?: (FileSpec | string)[];
|
|
109
|
+
};
|
|
110
|
+
/** Additional patterns or requirements */
|
|
111
|
+
patterns?: Record<string, unknown>;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Implementation validation results
|
|
115
|
+
*/
|
|
116
|
+
export interface ImplementationValidation {
|
|
117
|
+
/** Test suite result */
|
|
118
|
+
tests?: 'passed' | 'failed' | 'skipped';
|
|
119
|
+
/** Type check result */
|
|
120
|
+
typeCheck?: 'passed' | 'failed';
|
|
121
|
+
/** Lint result */
|
|
122
|
+
lint?: 'passed' | 'failed' | 'skipped';
|
|
123
|
+
/** Build result */
|
|
124
|
+
build?: 'passed' | 'failed';
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Ticket API response structure
|
|
128
|
+
*/
|
|
129
|
+
export interface TicketApiResponse {
|
|
130
|
+
id: string;
|
|
131
|
+
title: string;
|
|
132
|
+
ticketNumber: number;
|
|
133
|
+
status: string;
|
|
134
|
+
acceptanceCriteria?: string[];
|
|
135
|
+
acceptanceCriteriaValidation?: AcceptanceCriteriaValidation[];
|
|
136
|
+
technicalDetails?: TechnicalDetails;
|
|
137
|
+
implementation?: {
|
|
138
|
+
validation?: ImplementationValidation;
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Epic API response structure
|
|
143
|
+
*/
|
|
144
|
+
export interface EpicApiResponse {
|
|
145
|
+
id: string;
|
|
146
|
+
title: string;
|
|
147
|
+
number: number;
|
|
148
|
+
status: string;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Implementation context API response
|
|
152
|
+
*/
|
|
153
|
+
export interface ImplementationContextApiResponse {
|
|
154
|
+
patterns?: {
|
|
155
|
+
codeStandards?: {
|
|
156
|
+
errorHandling?: string;
|
|
157
|
+
};
|
|
158
|
+
returnTypes?: Record<string, string>;
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* List tickets API response
|
|
163
|
+
*/
|
|
164
|
+
export interface ListTicketsApiResponse {
|
|
165
|
+
tickets: Array<{
|
|
166
|
+
id: string;
|
|
167
|
+
title: string;
|
|
168
|
+
ticketNumber: number;
|
|
169
|
+
status: string;
|
|
170
|
+
}>;
|
|
171
|
+
total: number;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* List epics API response
|
|
175
|
+
*/
|
|
176
|
+
export interface ListEpicsApiResponse {
|
|
177
|
+
epics: Array<{
|
|
178
|
+
id: string;
|
|
179
|
+
title: string;
|
|
180
|
+
number: number;
|
|
181
|
+
status: string;
|
|
182
|
+
}>;
|
|
183
|
+
total: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Check categories
|
|
187
|
+
*/
|
|
188
|
+
export declare const CHECK_CATEGORIES: {
|
|
189
|
+
readonly ACCEPTANCE_CRITERIA: "Acceptance Criteria";
|
|
190
|
+
readonly FILES: "Files";
|
|
191
|
+
readonly PATTERNS: "Patterns";
|
|
192
|
+
readonly TESTS: "Tests";
|
|
193
|
+
readonly TICKETS: "Tickets";
|
|
194
|
+
readonly COMPLETION: "Completion";
|
|
195
|
+
readonly EPICS: "Epics";
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Valid review scopes
|
|
199
|
+
*/
|
|
200
|
+
export declare const VALID_SCOPES: ReviewScope[];
|
|
201
|
+
/**
|
|
202
|
+
* Check if scope is valid
|
|
203
|
+
*/
|
|
204
|
+
export declare function isValidScope(scope: string): scope is ReviewScope;
|
|
205
|
+
/**
|
|
206
|
+
* Normalize scope (spec -> specification)
|
|
207
|
+
*/
|
|
208
|
+
export declare function normalizeScope(scope: ReviewScope): 'ticket' | 'epic' | 'specification';
|
|
209
|
+
/**
|
|
210
|
+
* Get file path from FileSpec or string
|
|
211
|
+
*/
|
|
212
|
+
export declare function getFilePath(file: FileSpec | string): string;
|
|
213
|
+
/**
|
|
214
|
+
* Truncate string with ellipsis
|
|
215
|
+
*/
|
|
216
|
+
export declare function truncateString(str: string, maxLength: number): string;
|
|
217
|
+
/**
|
|
218
|
+
* Calculate review summary from checks
|
|
219
|
+
*/
|
|
220
|
+
export declare function calculateSummary(checks: CheckResult[]): ReviewSummary;
|
|
221
|
+
/**
|
|
222
|
+
* Determine overall status from summary
|
|
223
|
+
*/
|
|
224
|
+
export declare function determineOverallStatus(summary: ReviewSummary): ReviewStatus;
|
|
225
|
+
/**
|
|
226
|
+
* Create a check result
|
|
227
|
+
*/
|
|
228
|
+
export declare function createCheck(category: string, name: string, status: CheckStatus, message: string, options?: {
|
|
229
|
+
details?: string;
|
|
230
|
+
fix?: string;
|
|
231
|
+
}): CheckResult;
|
|
232
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/review/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review Command Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the review command which validates
|
|
5
|
+
* implementations against SpecForge documentation.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check categories
|
|
9
|
+
*/
|
|
10
|
+
export const CHECK_CATEGORIES = {
|
|
11
|
+
ACCEPTANCE_CRITERIA: 'Acceptance Criteria',
|
|
12
|
+
FILES: 'Files',
|
|
13
|
+
PATTERNS: 'Patterns',
|
|
14
|
+
TESTS: 'Tests',
|
|
15
|
+
TICKETS: 'Tickets',
|
|
16
|
+
COMPLETION: 'Completion',
|
|
17
|
+
EPICS: 'Epics',
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Valid review scopes
|
|
21
|
+
*/
|
|
22
|
+
export const VALID_SCOPES = ['ticket', 'epic', 'spec', 'specification'];
|
|
23
|
+
/**
|
|
24
|
+
* Check if scope is valid
|
|
25
|
+
*/
|
|
26
|
+
export function isValidScope(scope) {
|
|
27
|
+
return VALID_SCOPES.includes(scope);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Normalize scope (spec -> specification)
|
|
31
|
+
*/
|
|
32
|
+
export function normalizeScope(scope) {
|
|
33
|
+
if (scope === 'spec')
|
|
34
|
+
return 'specification';
|
|
35
|
+
return scope;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get file path from FileSpec or string
|
|
39
|
+
*/
|
|
40
|
+
export function getFilePath(file) {
|
|
41
|
+
return typeof file === 'string' ? file : file.path;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Truncate string with ellipsis
|
|
45
|
+
*/
|
|
46
|
+
export function truncateString(str, maxLength) {
|
|
47
|
+
if (str.length <= maxLength)
|
|
48
|
+
return str;
|
|
49
|
+
return str.slice(0, maxLength) + '...';
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Calculate review summary from checks
|
|
53
|
+
*/
|
|
54
|
+
export function calculateSummary(checks) {
|
|
55
|
+
return {
|
|
56
|
+
passed: checks.filter(c => c.status === 'pass').length,
|
|
57
|
+
failed: checks.filter(c => c.status === 'fail').length,
|
|
58
|
+
warnings: checks.filter(c => c.status === 'warn').length,
|
|
59
|
+
suggestions: checks.filter(c => c.fix).length,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Determine overall status from summary
|
|
64
|
+
*/
|
|
65
|
+
export function determineOverallStatus(summary) {
|
|
66
|
+
if (summary.failed > 0)
|
|
67
|
+
return 'fail';
|
|
68
|
+
if (summary.warnings > 0)
|
|
69
|
+
return 'partial';
|
|
70
|
+
return 'pass';
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a check result
|
|
74
|
+
*/
|
|
75
|
+
export function createCheck(category, name, status, message, options) {
|
|
76
|
+
return {
|
|
77
|
+
category,
|
|
78
|
+
name,
|
|
79
|
+
status,
|
|
80
|
+
message,
|
|
81
|
+
details: options?.details,
|
|
82
|
+
fix: options?.fix,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=types.js.map
|