@specforge/cli 0.1.0 → 0.2.4
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/dist/cli/commands/debug/register.js +1 -1
- package/dist/cli/commands/debug/register.js.map +1 -1
- package/dist/cli/commands/debug/types.d.ts.map +1 -1
- package/dist/cli/commands/debug/types.js +4 -2
- package/dist/cli/commands/debug/types.js.map +1 -1
- package/dist/cli/commands/init.types.d.ts +4 -4
- package/dist/cli/commands/init.types.d.ts.map +1 -1
- package/dist/cli/commands/init.types.js.map +1 -1
- package/dist/cli/commands/scaffold/agent-types.js +1 -1
- package/dist/cli/commands/scaffold/agent-types.js.map +1 -1
- package/dist/cli/config/agent-teams.types.d.ts +35 -12
- package/dist/cli/config/agent-teams.types.d.ts.map +1 -1
- package/dist/cli/config/agent-teams.types.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts +21 -3
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js +114 -48
- package/dist/cli/templates/agents/content/core/sfag-orchestrator.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +124 -83
- package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts +22 -3
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js +225 -160
- package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js.map +1 -1
- package/dist/cli/templates/agents/content/core/sfag-work-resolver.d.ts +16 -0
- package/dist/cli/templates/agents/content/core/sfag-work-resolver.d.ts.map +1 -0
- package/dist/cli/templates/agents/content/core/sfag-work-resolver.js +199 -0
- package/dist/cli/templates/agents/content/core/sfag-work-resolver.js.map +1 -0
- package/dist/cli/templates/agents/index.d.ts.map +1 -1
- package/dist/cli/templates/agents/index.js +2 -0
- package/dist/cli/templates/agents/index.js.map +1 -1
- package/dist/cli/templates/content/sf-commit.d.ts +1 -1
- package/dist/cli/templates/content/sf-commit.d.ts.map +1 -1
- package/dist/cli/templates/content/sf-commit.js +2 -2
- package/dist/cli/templates/content/sf-commit.js.map +1 -1
- package/dist/cli/templates/content/sf-reset.d.ts +5 -2
- package/dist/cli/templates/content/sf-reset.d.ts.map +1 -1
- package/dist/cli/templates/content/sf-reset.js +41 -27
- package/dist/cli/templates/content/sf-reset.js.map +1 -1
- package/dist/lib/prompt-generator.d.ts +15 -3
- package/dist/lib/prompt-generator.d.ts.map +1 -1
- package/dist/lib/prompt-generator.js +14 -6
- package/dist/lib/prompt-generator.js.map +1 -1
- package/dist/lib/workflow-definitions.js +2 -2
- package/dist/lib/workflow-definitions.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/__tests__/complete-planning-double-call.test.d.ts +2 -0
- package/dist/tools/__tests__/complete-planning-double-call.test.d.ts.map +1 -0
- package/dist/tools/core/__tests__/file-existence-injection.test.d.ts +2 -0
- package/dist/tools/core/__tests__/file-existence-injection.test.d.ts.map +1 -0
- package/dist/tools/core/__tests__/git-injection.test.d.ts +2 -0
- package/dist/tools/core/__tests__/git-injection.test.d.ts.map +1 -0
- package/dist/tools/core/file-existence-injection.d.ts +22 -0
- package/dist/tools/core/file-existence-injection.d.ts.map +1 -0
- package/dist/tools/core/file-existence-injection.js +49 -0
- package/dist/tools/core/file-existence-injection.js.map +1 -0
- package/dist/tools/core/git-injection.d.ts +58 -0
- package/dist/tools/core/git-injection.d.ts.map +1 -0
- package/dist/tools/core/git-injection.js +79 -0
- package/dist/tools/core/git-injection.js.map +1 -0
- package/dist/tools/core/index.d.ts +1 -0
- package/dist/tools/core/index.d.ts.map +1 -1
- package/dist/tools/core/index.js +1 -0
- package/dist/tools/core/index.js.map +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +358 -440
- package/dist/tools/index.js.map +1 -1
- package/dist/types/index.d.ts +12 -32
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/validation/index.d.ts.map +1 -1
- package/dist/validation/index.js +0 -15
- package/dist/validation/index.js.map +1 -1
- package/node_modules/@specforge/api-types/README.md +38 -0
- package/node_modules/@specforge/api-types/dist/client/appsync-client.d.ts +21 -0
- package/node_modules/@specforge/api-types/dist/client/appsync-client.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/client/appsync-client.js +2 -0
- package/node_modules/@specforge/api-types/dist/client/appsync-client.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/client/index.d.ts +2 -0
- package/node_modules/@specforge/api-types/dist/client/index.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/client/index.js +2 -0
- package/node_modules/@specforge/api-types/dist/client/index.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/index.d.ts +5 -0
- package/node_modules/@specforge/api-types/dist/index.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/index.js +9 -0
- package/node_modules/@specforge/api-types/dist/index.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/error-guidance.d.ts +74 -0
- package/node_modules/@specforge/api-types/dist/mcp/error-guidance.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/error-guidance.js +21 -0
- package/node_modules/@specforge/api-types/dist/mcp/error-guidance.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/index.d.ts +4 -0
- package/node_modules/@specforge/api-types/dist/mcp/index.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/index.js +8 -0
- package/node_modules/@specforge/api-types/dist/mcp/index.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts +18 -0
- package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.js +2 -0
- package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.d.ts +39 -0
- package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.js +2 -0
- package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/billing-record.d.ts +18 -0
- package/node_modules/@specforge/api-types/dist/runtime/billing-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/billing-record.js +7 -0
- package/node_modules/@specforge/api-types/dist/runtime/billing-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.d.ts +40 -0
- package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.js +19 -0
- package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.d.ts +96 -0
- package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.js +23 -0
- package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts +117 -0
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.js +13 -0
- package/node_modules/@specforge/api-types/dist/runtime/epic-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/feedback-record.d.ts +27 -0
- package/node_modules/@specforge/api-types/dist/runtime/feedback-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/feedback-record.js +7 -0
- package/node_modules/@specforge/api-types/dist/runtime/feedback-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/fields.d.ts +31 -0
- package/node_modules/@specforge/api-types/dist/runtime/fields.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/fields.js +156 -0
- package/node_modules/@specforge/api-types/dist/runtime/fields.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/index.d.ts +18 -0
- package/node_modules/@specforge/api-types/dist/runtime/index.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/index.js +18 -0
- package/node_modules/@specforge/api-types/dist/runtime/index.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/pagination.d.ts +38 -0
- package/node_modules/@specforge/api-types/dist/runtime/pagination.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/pagination.js +54 -0
- package/node_modules/@specforge/api-types/dist/runtime/pagination.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-invitation.d.ts +14 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-invitation.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-invitation.js +2 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-invitation.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-member.d.ts +13 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-member.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-member.js +2 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-member.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-validation.d.ts +26 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-validation.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-validation.js +5 -0
- package/node_modules/@specforge/api-types/dist/runtime/project-validation.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project.d.ts +55 -0
- package/node_modules/@specforge/api-types/dist/runtime/project.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/project.js +10 -0
- package/node_modules/@specforge/api-types/dist/runtime/project.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/response.d.ts +22 -0
- package/node_modules/@specforge/api-types/dist/runtime/response.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/response.js +14 -0
- package/node_modules/@specforge/api-types/dist/runtime/response.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/specification-record.d.ts +90 -0
- package/node_modules/@specforge/api-types/dist/runtime/specification-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/specification-record.js +11 -0
- package/node_modules/@specforge/api-types/dist/runtime/specification-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/status.d.ts +26 -0
- package/node_modules/@specforge/api-types/dist/runtime/status.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/status.js +56 -0
- package/node_modules/@specforge/api-types/dist/runtime/status.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/summary.d.ts +58 -0
- package/node_modules/@specforge/api-types/dist/runtime/summary.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/summary.js +42 -0
- package/node_modules/@specforge/api-types/dist/runtime/summary.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts +212 -0
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.js +18 -0
- package/node_modules/@specforge/api-types/dist/runtime/ticket-record.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/user.d.ts +13 -0
- package/node_modules/@specforge/api-types/dist/runtime/user.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/runtime/user.js +9 -0
- package/node_modules/@specforge/api-types/dist/runtime/user.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-billing-store.d.ts +17 -0
- package/node_modules/@specforge/api-types/dist/stores/i-billing-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-billing-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-billing-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.d.ts +59 -0
- package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-epic-store.d.ts +120 -0
- package/node_modules/@specforge/api-types/dist/stores/i-epic-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-epic-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-epic-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.d.ts +13 -0
- package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-project-store.d.ts +48 -0
- package/node_modules/@specforge/api-types/dist/stores/i-project-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-project-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-project-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.d.ts +37 -0
- package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-spec-store.d.ts +159 -0
- package/node_modules/@specforge/api-types/dist/stores/i-spec-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-spec-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-spec-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.d.ts +87 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.d.ts +347 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-user-store.d.ts +5 -0
- package/node_modules/@specforge/api-types/dist/stores/i-user-store.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/i-user-store.js +2 -0
- package/node_modules/@specforge/api-types/dist/stores/i-user-store.js.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/index.d.ts +11 -0
- package/node_modules/@specforge/api-types/dist/stores/index.d.ts.map +1 -0
- package/node_modules/@specforge/api-types/dist/stores/index.js +11 -0
- package/node_modules/@specforge/api-types/dist/stores/index.js.map +1 -0
- package/node_modules/@specforge/api-types/package.json +43 -0
- package/node_modules/@specforge/report-types/README.md +11 -0
- package/node_modules/@specforge/report-types/dist/index.d.ts +2 -0
- package/node_modules/@specforge/report-types/dist/index.d.ts.map +1 -0
- package/node_modules/@specforge/report-types/dist/index.js +2 -0
- package/node_modules/@specforge/report-types/dist/index.js.map +1 -0
- package/node_modules/@specforge/report-types/dist/reports.d.ts +90 -0
- package/node_modules/@specforge/report-types/dist/reports.d.ts.map +1 -0
- package/node_modules/@specforge/report-types/dist/reports.js +15 -0
- package/node_modules/@specforge/report-types/dist/reports.js.map +1 -0
- package/node_modules/@specforge/report-types/package.json +40 -0
- package/node_modules/@specforge/session-types/CHANGELOG.md +56 -0
- package/node_modules/@specforge/session-types/README.md +18 -0
- package/node_modules/@specforge/session-types/dist/index.d.ts +47 -0
- package/node_modules/@specforge/session-types/dist/index.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/index.js +47 -0
- package/node_modules/@specforge/session-types/dist/index.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.d.ts +46 -0
- package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.js +41 -0
- package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/discovery.d.ts +9 -0
- package/node_modules/@specforge/session-types/dist/runtime/discovery.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/discovery.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/discovery.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/enums.d.ts +51 -0
- package/node_modules/@specforge/session-types/dist/runtime/enums.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/enums.js +161 -0
- package/node_modules/@specforge/session-types/dist/runtime/enums.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-config.d.ts +177 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-config.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-config.js +96 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-config.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.d.ts +8 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts +489 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js +152 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session.d.ts +8 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/implementation-session.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts +319 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.d.ts +128 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.js +30 -0
- package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-config.d.ts +82 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-config.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-config.js +61 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-config.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.d.ts +34 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.js +14 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts +6 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js +65 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.d.ts +34 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.js +22 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts +73 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js +61 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts +249 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js +96 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session.d.ts +574 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session.js +40 -0
- package/node_modules/@specforge/session-types/dist/runtime/planning-session.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/process-guidance.d.ts +221 -0
- package/node_modules/@specforge/session-types/dist/runtime/process-guidance.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/process-guidance.js +41 -0
- package/node_modules/@specforge/session-types/dist/runtime/process-guidance.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-action.d.ts +9 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-action.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-action.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-action.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session.d.ts +4 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/work-session.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/working-context.d.ts +43 -0
- package/node_modules/@specforge/session-types/dist/runtime/working-context.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/working-context.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/working-context.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/write-plan.d.ts +146 -0
- package/node_modules/@specforge/session-types/dist/runtime/write-plan.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/runtime/write-plan.js +2 -0
- package/node_modules/@specforge/session-types/dist/runtime/write-plan.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/discovery.d.ts +76 -0
- package/node_modules/@specforge/session-types/dist/schema/discovery.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/discovery.js +42 -0
- package/node_modules/@specforge/session-types/dist/schema/discovery.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.d.ts +48 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.js +28 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-session.d.ts +37 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-session.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-session.js +24 -0
- package/node_modules/@specforge/session-types/dist/schema/implementation-session.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/index.d.ts +12 -0
- package/node_modules/@specforge/session-types/dist/schema/index.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/index.js +12 -0
- package/node_modules/@specforge/session-types/dist/schema/index.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.d.ts +74 -0
- package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.js +31 -0
- package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.d.ts +27 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.js +11 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts +94 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.js +76 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-action.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.d.ts +42 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.js +25 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.d.ts +27 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.js +11 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.d.ts +42 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.js +28 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.d.ts +72 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js +43 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts +203 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.js +86 -0
- package/node_modules/@specforge/session-types/dist/schema/work-session.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/config-store-interface.d.ts +17 -0
- package/node_modules/@specforge/session-types/dist/stores/config-store-interface.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/config-store-interface.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/config-store-interface.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/discovery-store.d.ts +31 -0
- package/node_modules/@specforge/session-types/dist/stores/discovery-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/discovery-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/discovery-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.d.ts +19 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.d.ts +16 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.d.ts +28 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.d.ts +12 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.d.ts +10 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.d.ts +13 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.d.ts +10 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-store.d.ts +20 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/planning-session-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.d.ts +15 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.d.ts +29 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.d.ts +9 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.d.ts +9 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.d.ts +10 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts +23 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.d.ts +8 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.js.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/working-context-store.d.ts +27 -0
- package/node_modules/@specforge/session-types/dist/stores/working-context-store.d.ts.map +1 -0
- package/node_modules/@specforge/session-types/dist/stores/working-context-store.js +2 -0
- package/node_modules/@specforge/session-types/dist/stores/working-context-store.js.map +1 -0
- package/node_modules/@specforge/session-types/package.json +43 -0
- package/node_modules/@specforge/spec-types/README.md +28 -0
- package/node_modules/@specforge/spec-types/dist/index.d.ts +4 -0
- package/node_modules/@specforge/spec-types/dist/index.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/index.js +6 -0
- package/node_modules/@specforge/spec-types/dist/index.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/json-schema/v1.1/openspec.schema.json +1129 -0
- package/node_modules/@specforge/spec-types/dist/openspec-schema.d.ts +4 -0
- package/node_modules/@specforge/spec-types/dist/openspec-schema.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/openspec-schema.js +77 -0
- package/node_modules/@specforge/spec-types/dist/openspec-schema.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.d.ts +14 -0
- package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/blueprint.d.ts +7 -0
- package/node_modules/@specforge/spec-types/dist/runtime/blueprint.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/blueprint.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/blueprint.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/epic.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/epic.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/epic.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/epic.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/index.d.ts +7 -0
- package/node_modules/@specforge/spec-types/dist/runtime/index.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/index.js +7 -0
- package/node_modules/@specforge/spec-types/dist/runtime/index.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/index.d.ts +10 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/index.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/index.js +10 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/index.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/specification.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/specification.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/specification.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/specification.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/ticket.d.ts +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/ticket.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/runtime/ticket.js +2 -0
- package/node_modules/@specforge/spec-types/dist/runtime/ticket.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/auxiliary.d.ts +266 -0
- package/node_modules/@specforge/spec-types/dist/schema/auxiliary.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/auxiliary.js +143 -0
- package/node_modules/@specforge/spec-types/dist/schema/auxiliary.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/blueprint.d.ts +47 -0
- package/node_modules/@specforge/spec-types/dist/schema/blueprint.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/blueprint.js +33 -0
- package/node_modules/@specforge/spec-types/dist/schema/blueprint.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.d.ts +33 -0
- package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.js +181 -0
- package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/epic.d.ts +955 -0
- package/node_modules/@specforge/spec-types/dist/schema/epic.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/epic.js +33 -0
- package/node_modules/@specforge/spec-types/dist/schema/epic.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/index.d.ts +12 -0
- package/node_modules/@specforge/spec-types/dist/schema/index.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/index.js +25 -0
- package/node_modules/@specforge/spec-types/dist/schema/index.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.d.ts +174 -0
- package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.js +317 -0
- package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/patterns.d.ts +274 -0
- package/node_modules/@specforge/spec-types/dist/schema/patterns.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/patterns.js +106 -0
- package/node_modules/@specforge/spec-types/dist/schema/patterns.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.d.ts +44 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.js +13 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.d.ts +21 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.js +14 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/goal.d.ts +27 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/goal.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/goal.js +13 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/goal.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.d.ts +29 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.js +14 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/index.d.ts +12 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/index.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/index.js +12 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/index.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.d.ts +27 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.js +15 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts +17 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js +16 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.d.ts +63 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.js +16 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/scope.d.ts +19 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/scope.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/scope.js +8 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/scope.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.d.ts +51 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.js +16 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.d.ts +19 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.js +8 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.d.ts +27 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.js +14 -0
- package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/specification.d.ts +1839 -0
- package/node_modules/@specforge/spec-types/dist/schema/specification.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/specification.js +43 -0
- package/node_modules/@specforge/spec-types/dist/schema/specification.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.d.ts +58 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.js +73 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.d.ts +71 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.js +96 -0
- package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.js.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/ticket.d.ts +444 -0
- package/node_modules/@specforge/spec-types/dist/schema/ticket.d.ts.map +1 -0
- package/node_modules/@specforge/spec-types/dist/schema/ticket.js +49 -0
- package/node_modules/@specforge/spec-types/dist/schema/ticket.js.map +1 -0
- package/node_modules/@specforge/spec-types/package.json +41 -0
- package/package.json +40 -25
- package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +135 -51
- package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +124 -83
- package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +247 -163
- package/src/cli/templates/agents/content/core/sfag-work-resolver.ts +211 -0
- package/src/cli/templates/agents/index.ts +2 -0
- package/src/cli/templates/content/sf-commit.ts +2 -2
- package/src/cli/templates/content/sf-reset.ts +45 -28
- package/src/cli/templates/skills/specforge-orchestrator.md +15 -10
- package/src/cli/templates/skills/specforge-worker.md +4 -3
package/dist/tools/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { appendFileSync } from "node:fs";
|
|
1
2
|
import {
|
|
2
3
|
ValidationError,
|
|
3
4
|
ApiError,
|
|
@@ -6,6 +7,8 @@ import {
|
|
|
6
7
|
transformError
|
|
7
8
|
} from "../validation/index.js";
|
|
8
9
|
import { injectContext, injectContextRequired } from "./core/context-helper.js";
|
|
10
|
+
import { probeExistingFiles } from "./core/file-existence-injection.js";
|
|
11
|
+
import { readWorktreeGitEvidence, readHeadCommitSha } from "./core/git-injection.js";
|
|
9
12
|
import { tryLoadProjectConfig, saveProjectConfig } from "../cli/config/index.js";
|
|
10
13
|
import {
|
|
11
14
|
appendPlanningSessionRegistry,
|
|
@@ -24,19 +27,15 @@ function getTools() {
|
|
|
24
27
|
properties: {
|
|
25
28
|
type: {
|
|
26
29
|
type: "string",
|
|
27
|
-
enum: ["project", "specification", "epic", "ticket", "
|
|
30
|
+
enum: ["project", "specification", "epic", "ticket", "blueprint"],
|
|
28
31
|
description: "Entity type to retrieve"
|
|
29
32
|
},
|
|
30
33
|
id: {
|
|
31
34
|
type: "string",
|
|
32
|
-
description: "Entity ID
|
|
33
|
-
},
|
|
34
|
-
specificationId: {
|
|
35
|
-
type: "string",
|
|
36
|
-
description: "Specification ID (for implementation_session)"
|
|
35
|
+
description: "Entity ID"
|
|
37
36
|
}
|
|
38
37
|
},
|
|
39
|
-
required: ["type"]
|
|
38
|
+
required: ["type", "id"]
|
|
40
39
|
}
|
|
41
40
|
},
|
|
42
41
|
{
|
|
@@ -47,7 +46,7 @@ function getTools() {
|
|
|
47
46
|
properties: {
|
|
48
47
|
type: {
|
|
49
48
|
type: "string",
|
|
50
|
-
enum: ["projects", "specifications", "epics", "tickets"],
|
|
49
|
+
enum: ["projects", "specifications", "epics", "tickets", "blueprints"],
|
|
51
50
|
description: "Entity type to list"
|
|
52
51
|
},
|
|
53
52
|
projectId: {
|
|
@@ -108,7 +107,7 @@ At least one scope filter (projectId, specificationId, or epicId) is required.`,
|
|
|
108
107
|
type: "array",
|
|
109
108
|
items: {
|
|
110
109
|
type: "string",
|
|
111
|
-
enum: ["pending", "ready", "active", "done"]
|
|
110
|
+
enum: ["pending", "ready", "active", "done", "blocked"]
|
|
112
111
|
},
|
|
113
112
|
description: "Filter by status"
|
|
114
113
|
},
|
|
@@ -120,14 +119,6 @@ At least one scope filter (projectId, specificationId, or epicId) is required.`,
|
|
|
120
119
|
},
|
|
121
120
|
description: "Filter by complexity"
|
|
122
121
|
},
|
|
123
|
-
priority: {
|
|
124
|
-
type: "array",
|
|
125
|
-
items: {
|
|
126
|
-
type: "string",
|
|
127
|
-
enum: ["low", "medium", "high", "critical"]
|
|
128
|
-
},
|
|
129
|
-
description: "Filter by priority"
|
|
130
|
-
},
|
|
131
122
|
projectId: {
|
|
132
123
|
type: "string",
|
|
133
124
|
description: "Limit search to project"
|
|
@@ -168,7 +159,6 @@ At least one scope filter (projectId, specificationId, or epicId) is required.`,
|
|
|
168
159
|
"technicalDetails",
|
|
169
160
|
"notes",
|
|
170
161
|
"tags",
|
|
171
|
-
"blockReason",
|
|
172
162
|
"progress",
|
|
173
163
|
"testsPassed",
|
|
174
164
|
"order",
|
|
@@ -206,7 +196,7 @@ At least one scope filter (projectId, specificationId, or epicId) is required.`,
|
|
|
206
196
|
},
|
|
207
197
|
{
|
|
208
198
|
name: "get_blocked_tickets",
|
|
209
|
-
description: 'Get tickets with status "pending"
|
|
199
|
+
description: 'Get tickets with status "pending", each with the `blockedBy` list of unsatisfied dependency tickets computed from the dependency tree.',
|
|
210
200
|
inputSchema: {
|
|
211
201
|
type: "object",
|
|
212
202
|
properties: {
|
|
@@ -227,7 +217,6 @@ Report types:
|
|
|
227
217
|
- 'time': Estimated vs actual hours (replaces get_time_report)
|
|
228
218
|
- 'blockers': Blocked tickets with reasons (replaces get_blockers_report)
|
|
229
219
|
- 'work': Completed work summary from WorkSession records (replaces get_work_summary)
|
|
230
|
-
- 'implementation_analysis': Deeper implementation insights
|
|
231
220
|
- 'sessions': Live planning/work/review sessions for a project (requires scope='project')
|
|
232
221
|
|
|
233
222
|
Format options:
|
|
@@ -238,7 +227,7 @@ Format options:
|
|
|
238
227
|
properties: {
|
|
239
228
|
type: {
|
|
240
229
|
type: "string",
|
|
241
|
-
enum: ["implementation", "time", "blockers", "work", "
|
|
230
|
+
enum: ["implementation", "time", "blockers", "work", "sessions"],
|
|
242
231
|
description: "Type of report to generate"
|
|
243
232
|
},
|
|
244
233
|
scope: {
|
|
@@ -257,6 +246,11 @@ Format options:
|
|
|
257
246
|
endDate: {
|
|
258
247
|
type: "string",
|
|
259
248
|
description: "End date for work report (ISO 8601)"
|
|
249
|
+
},
|
|
250
|
+
format: {
|
|
251
|
+
type: "string",
|
|
252
|
+
enum: ["json", "summary"],
|
|
253
|
+
description: "Response format: 'json' (default) or 'summary'."
|
|
260
254
|
}
|
|
261
255
|
},
|
|
262
256
|
required: ["type", "scope", "scopeId"]
|
|
@@ -267,23 +261,27 @@ Format options:
|
|
|
267
261
|
// ========================================================================
|
|
268
262
|
{
|
|
269
263
|
name: "start_planning_session",
|
|
270
|
-
description: "Start or resume a guided planning session for a specification. Project-scoped lock: only one active planning session per project
|
|
264
|
+
description: "Start or resume a guided planning session for a specification. Project-scoped lock: only one active planning session per project. Calling with the same spec resumes the existing session (idempotent). Calling with a different spec while one is active returns a rejection with the active session details. Planning is independent of implementation and review \u2014 they can run concurrently.",
|
|
271
265
|
inputSchema: {
|
|
272
266
|
type: "object",
|
|
273
267
|
properties: {
|
|
274
268
|
specificationId: {
|
|
275
269
|
type: "string",
|
|
276
|
-
description: "The specification to plan. Optional \u2014 defaults to the active spec in the local config (.specforge/config.json), so you normally omit it.
|
|
270
|
+
description: "The specification to plan. Optional \u2014 defaults to the active spec in the local config (.specforge/config.json), so you normally omit it."
|
|
271
|
+
},
|
|
272
|
+
projectId: {
|
|
273
|
+
type: "string",
|
|
274
|
+
description: "The owning project. Optional \u2014 defaults to the active project in the local config (.specforge/config.json); injected automatically, so you normally omit it."
|
|
277
275
|
}
|
|
278
276
|
},
|
|
279
|
-
// Nothing is required: specificationId
|
|
280
|
-
// returned sessionId is persisted + injected into subsequent calls.
|
|
277
|
+
// Nothing is required: specificationId/projectId fall back to local config, and
|
|
278
|
+
// the returned sessionId is persisted + injected into subsequent calls.
|
|
281
279
|
required: []
|
|
282
280
|
}
|
|
283
281
|
},
|
|
284
282
|
{
|
|
285
283
|
name: "action_planning_session",
|
|
286
|
-
description: "Execute a planning action within an active session. Wraps
|
|
284
|
+
description: "Execute a planning action within an active session. Wraps the planning write operations (create/update/delete for epics, tickets and blueprints; plus the dependency, blueprint-link, step-link, justify and creator-election operations) and the read operation get_planning_status. The operation.type IS the backend PlanningOperationName; the remaining fields are the operation payload. To read a single ticket, use the `get` tool (type:'ticket').",
|
|
287
285
|
inputSchema: {
|
|
288
286
|
type: "object",
|
|
289
287
|
properties: {
|
|
@@ -294,104 +292,188 @@ Format options:
|
|
|
294
292
|
type: {
|
|
295
293
|
type: "string",
|
|
296
294
|
enum: [
|
|
297
|
-
"
|
|
295
|
+
"update_spec",
|
|
298
296
|
"create_epic",
|
|
299
297
|
"update_epic",
|
|
300
|
-
"create_ticket",
|
|
301
|
-
"update_ticket",
|
|
302
298
|
"delete_epic",
|
|
299
|
+
"create_ticket",
|
|
300
|
+
"ticket_general_actions",
|
|
301
|
+
"ticket_step_actions",
|
|
302
|
+
"ticket_criteria_actions",
|
|
303
|
+
"ticket_test_actions",
|
|
303
304
|
"delete_ticket",
|
|
304
|
-
"add_dependencies",
|
|
305
|
-
"remove_dependency",
|
|
306
305
|
"create_blueprint",
|
|
307
|
-
"link_blueprint",
|
|
308
306
|
"update_blueprint",
|
|
309
307
|
"delete_blueprint",
|
|
310
|
-
"
|
|
311
|
-
"
|
|
312
|
-
"
|
|
313
|
-
"
|
|
308
|
+
"link_blueprint_to_tickets",
|
|
309
|
+
"unlink_blueprint_to_tickets",
|
|
310
|
+
"link_step_file",
|
|
311
|
+
"unlink_step_file",
|
|
312
|
+
"link_step_snippet",
|
|
313
|
+
"unlink_step_snippet",
|
|
314
|
+
"create_dependencies",
|
|
315
|
+
"delete_dependencies",
|
|
316
|
+
"apply_creator_election",
|
|
317
|
+
"justify",
|
|
318
|
+
"unjustify",
|
|
319
|
+
"get_planning_status"
|
|
314
320
|
],
|
|
315
|
-
description: "The
|
|
321
|
+
description: "The planning operation to perform (lifecycle vocabulary). The type IS the backend PlanningOperationName; remaining fields are the operation payload."
|
|
316
322
|
}
|
|
317
323
|
},
|
|
318
324
|
required: ["type"],
|
|
319
325
|
oneOf: [
|
|
320
326
|
{
|
|
321
|
-
properties: {
|
|
322
|
-
|
|
327
|
+
properties: {
|
|
328
|
+
type: { const: "update_spec" },
|
|
329
|
+
fields: { type: "object", description: "Partial spec update \u2014 only the keys you send are changed (e.g. background, goals, nonGoals, constraints, successCriteria). Fields that do not apply are declared with the `justify` op (undo with `unjustify`), never by writing values here." }
|
|
330
|
+
},
|
|
331
|
+
required: ["type", "fields"]
|
|
323
332
|
},
|
|
333
|
+
// create_epic — SHELL only (epic_decomposition). Body fields are authored
|
|
334
|
+
// by update_epic in epic_expansion; only title/description/objective are
|
|
335
|
+
// persisted on create, so only those are advertised.
|
|
324
336
|
{
|
|
325
337
|
properties: {
|
|
326
338
|
type: { const: "create_epic" },
|
|
327
339
|
title: { type: "string", minLength: 1, description: "Epic title (non-empty)" },
|
|
328
|
-
description: { type: "string",
|
|
329
|
-
objective: { type: "string",
|
|
330
|
-
goals: { type: "array", items: { type: "string" } },
|
|
331
|
-
acceptanceCriteria: { type: "array", items: { type: "string" } },
|
|
332
|
-
tickets: { type: "array", description: "Optional bulk-create tickets within the epic" }
|
|
340
|
+
description: { type: "string", description: "What this epic delivers" },
|
|
341
|
+
objective: { type: "string", description: "Goal achieved for the user" }
|
|
333
342
|
},
|
|
334
|
-
required: ["type", "title"
|
|
343
|
+
required: ["type", "title"]
|
|
335
344
|
},
|
|
336
345
|
{
|
|
337
346
|
properties: {
|
|
338
347
|
type: { const: "update_epic" },
|
|
339
|
-
|
|
348
|
+
id: { type: "string", description: "Epic id (use list_epics / lookup_epic to find)." },
|
|
349
|
+
fields: {
|
|
350
|
+
type: "object",
|
|
351
|
+
description: "Partial epic update \u2014 only the keys you send are changed. Fields that do not apply are declared with the `justify` op (undo with `unjustify`), never by writing values here.",
|
|
352
|
+
properties: {
|
|
353
|
+
title: { type: "string" },
|
|
354
|
+
description: { type: "string" },
|
|
355
|
+
objective: { type: "string", description: "Goal achieved for the user." },
|
|
356
|
+
architecture: { type: "string", description: "Structural approach specific to this epic." },
|
|
357
|
+
scope: { type: "object", description: "Epic scope.", properties: { inScope: { type: "array", items: { type: "string" } }, outOfScope: { type: "array", items: { type: "string" } }, assumptions: { type: "array", items: { type: "string" } }, externalDependencies: { type: "array", items: { type: "string" } } } },
|
|
358
|
+
goals: { type: "array", description: "Epic goals as objects (Epic.goals is a json object[], not string[]).", items: { type: "object", properties: { title: { type: "string" }, description: { type: "string" }, type: { type: "string", enum: ["business", "technical", "user", "operational"] }, successCriteria: { type: "array", items: { type: "string" } } }, required: ["title", "description"] } },
|
|
359
|
+
acceptanceCriteria: { type: "array", description: "BDD criteria objects (Epic.acceptanceCriteria is a json object[], not string[]).", items: { type: "object", properties: { given: { type: "string" }, when: { type: "string" }, then: { type: "string" } }, required: ["given", "when", "then"] } },
|
|
360
|
+
validationCommands: { type: "array", items: { type: "string" }, description: "Commands that verify this epic end-to-end." },
|
|
361
|
+
apiContracts: { type: "array", description: "API contracts this epic exposes.", items: { type: "object", properties: { id: { type: "string" }, name: { type: "string" }, type: { type: "string" }, description: { type: "string" } } } },
|
|
362
|
+
sharedPatterns: { type: "array", description: "Reusable patterns the epic's tickets should follow.", items: { type: "object" } },
|
|
363
|
+
fileStructures: { type: "array", description: "Concrete files this epic creates/modifies.", items: { type: "object", properties: { id: { type: "string" }, scope: { type: "string" }, description: { type: "string" }, content: { type: "string" } } } },
|
|
364
|
+
requirementsCovered: { type: "array", items: { type: "string" }, description: "Spec requirement ids this epic covers." },
|
|
365
|
+
nfrsCovered: { type: "array", items: { type: "string" }, description: "Spec NFR ids this epic covers." },
|
|
366
|
+
goalsCovered: { type: "array", items: { type: "string" }, description: "Spec goal ids this epic advances." }
|
|
367
|
+
}
|
|
368
|
+
}
|
|
340
369
|
},
|
|
341
|
-
required: ["type", "
|
|
370
|
+
required: ["type", "id", "fields"]
|
|
342
371
|
},
|
|
372
|
+
// create_ticket — SHELL (ticket_decomposition): epicId/title/description
|
|
373
|
+
// + ticketType (the impl/verification decision, set HERE). The remaining body
|
|
374
|
+
// fields are authored by the ticket node verbs in ticket_expansion;
|
|
375
|
+
// dependencies via create_dependencies in cross_validation.
|
|
343
376
|
{
|
|
344
377
|
properties: {
|
|
345
378
|
type: { const: "create_ticket" },
|
|
346
379
|
epicId: { type: "string", description: "Parent epic id" },
|
|
347
380
|
title: { type: "string", minLength: 1, description: "Ticket title (non-empty)" },
|
|
348
381
|
description: { type: "string" },
|
|
349
|
-
ticketType: { type: "string", enum: ["implementation", "verification"], description: "Ticket type \u2014
|
|
350
|
-
priority: { type: "string", enum: ["high", "medium", "low"] },
|
|
351
|
-
complexity: { type: "string", enum: ["small", "medium", "large", "xlarge"] },
|
|
352
|
-
acceptanceCriteria: { type: "array", items: { type: "string" } },
|
|
353
|
-
implementationSteps: { type: "array", items: { type: "string" }, description: "Implementation steps; persisted as TicketImplementationStep rows" },
|
|
354
|
-
dependsOn: { type: "array", items: { type: "string" }, description: "Other ticket ids this depends on; created post-insert" }
|
|
382
|
+
ticketType: { type: "string", enum: ["implementation", "verification"], description: "Ticket type \u2014 set here (decomposition); defaults to implementation. Editing it later via ticket_general_actions rolls the session back to ticket_decomposition." }
|
|
355
383
|
},
|
|
356
384
|
required: ["type", "epicId", "title"]
|
|
357
385
|
},
|
|
386
|
+
// ME.19.1 (D8/D20) — the four ticket NODE VERBS replace the retired free-form
|
|
387
|
+
// `update_ticket`. Each targets ONE scope with a TYPED payload (no `fields`
|
|
388
|
+
// bag); complexity/planningType/ticketType are enums, so an out-of-enum value
|
|
389
|
+
// is denied at the schema gate before persistence. `status` is NOT settable
|
|
390
|
+
// (system/event-driven). Blueprint links are NOT settable here — use
|
|
391
|
+
// link_blueprint_to_tickets.
|
|
392
|
+
// ticket_general_actions — shell/general fields (partial edit).
|
|
358
393
|
{
|
|
394
|
+
description: "Edit a ticket's shell/general fields. Only the keys you send are changed. Fields that do not apply are declared with the `justify` op (undo with `unjustify`), never by writing values here.",
|
|
359
395
|
properties: {
|
|
360
|
-
type: { const: "
|
|
361
|
-
ticketId: { type: "string", description: "Ticket id
|
|
396
|
+
type: { const: "ticket_general_actions" },
|
|
397
|
+
ticketId: { type: "string", description: "Ticket id (use list_tickets / lookup_ticket to find)." },
|
|
398
|
+
title: { type: "string", description: "Concise imperative title." },
|
|
399
|
+
description: { type: "string", description: "What this ticket delivers and why." },
|
|
400
|
+
complexity: { type: "string", enum: ["small", "medium", "large", "xlarge"] },
|
|
401
|
+
planningType: { type: "string", enum: ["planning", "on_flight"], description: "Changing this rolls the session back to ticket_decomposition to re-score." },
|
|
402
|
+
ticketType: { type: "string", enum: ["implementation", "verification"], description: "Changing this rolls the session back to ticket_decomposition to re-score." },
|
|
403
|
+
epicId: { type: "string", description: "Re-parent the ticket to another epic." },
|
|
404
|
+
order: { type: "integer", description: "Rank hint within the epic." },
|
|
405
|
+
guardrails: { type: "array", items: { type: "string" }, description: "Per-ticket guardrail ids or descriptions." },
|
|
406
|
+
estimatedMinutes: { type: "integer", minimum: 0 }
|
|
362
407
|
},
|
|
363
408
|
required: ["type", "ticketId"]
|
|
364
409
|
},
|
|
410
|
+
// ticket_step_actions — batch add/edit/remove/reorder of implementation steps.
|
|
411
|
+
{
|
|
412
|
+
description: "Batch-edit a ticket's implementation steps (add/edit/remove/reorder in one call). A step is a unit of FUNCTIONAL WORK \u2014 describe the functions/components/adjustments it makes AND what each does, never a bare filename. Declare the file(s) each step touches INLINE via `files: [{path, role}]`, role one of creates|modifies|deletes|imports|reads (imports couples to a build/run dependency; reads is a context-only glance). Fields that do not apply are declared with the `justify` op, never by writing empty values here.",
|
|
413
|
+
properties: {
|
|
414
|
+
type: { const: "ticket_step_actions" },
|
|
415
|
+
ticketId: { type: "string", description: "Ticket id (use list_tickets / lookup_ticket to find)." },
|
|
416
|
+
add: { type: "array", description: "New steps to append.", items: { type: "object", properties: { text: { type: "string" }, files: { type: "array", description: "Files this step touches, by role \u2014 derives the step\u2194file link + the TicketFileChange row.", items: { type: "object", properties: { path: { type: "string" }, role: { type: "string", enum: ["creates", "modifies", "deletes", "imports", "reads"] }, symbol: { type: "string" }, why: { type: "string" } }, required: ["path", "role"] } } }, required: ["text"] } },
|
|
417
|
+
edit: { type: "array", description: "Existing steps to edit (by stepId).", items: { type: "object", properties: { stepId: { type: "string" }, text: { type: "string" }, files: { type: "array", items: { type: "object", properties: { path: { type: "string" }, role: { type: "string", enum: ["creates", "modifies", "deletes", "imports", "reads"] }, symbol: { type: "string" }, why: { type: "string" } }, required: ["path", "role"] } } }, required: ["stepId"] } },
|
|
418
|
+
remove: { type: "array", items: { type: "string" }, description: "Step ids to remove." },
|
|
419
|
+
reorder: { type: "array", items: { type: "string" }, description: "Step ids in the desired order." }
|
|
420
|
+
},
|
|
421
|
+
required: ["type", "ticketId"]
|
|
422
|
+
},
|
|
423
|
+
// ticket_criteria_actions — batch add/edit/remove/reorder of acceptance criteria.
|
|
424
|
+
{
|
|
425
|
+
description: "Batch-edit a ticket's acceptance criteria (given/when/then; add/edit/remove/reorder in one call). Fields that do not apply are declared with the `justify` op, never by writing empty values here.",
|
|
426
|
+
properties: {
|
|
427
|
+
type: { const: "ticket_criteria_actions" },
|
|
428
|
+
ticketId: { type: "string", description: "Ticket id (use list_tickets / lookup_ticket to find)." },
|
|
429
|
+
add: { type: "array", description: "New acceptance criteria to append.", items: { type: "object", properties: { given: { type: "string" }, when: { type: "string" }, then: { type: "string" } }, required: ["given", "when", "then"] } },
|
|
430
|
+
edit: { type: "array", description: "Existing criteria to edit (by criterionId).", items: { type: "object", properties: { criterionId: { type: "string" }, given: { type: "string" }, when: { type: "string" }, then: { type: "string" } }, required: ["criterionId"] } },
|
|
431
|
+
remove: { type: "array", items: { type: "string" }, description: "Criterion ids to remove." },
|
|
432
|
+
reorder: { type: "array", items: { type: "string" }, description: "Criterion ids in the desired order." }
|
|
433
|
+
},
|
|
434
|
+
required: ["type", "ticketId"]
|
|
435
|
+
},
|
|
436
|
+
// ticket_test_actions — author the existing single-object testSpecification.
|
|
437
|
+
{
|
|
438
|
+
description: "Author a ticket's testSpecification (testTypes, qualityGates, testCommands, coverageTarget). Fields that do not apply are declared with the `justify` op, never by writing empty values here.",
|
|
439
|
+
properties: {
|
|
440
|
+
type: { const: "ticket_test_actions" },
|
|
441
|
+
ticketId: { type: "string", description: "Ticket id (use list_tickets / lookup_ticket to find)." },
|
|
442
|
+
testSpecification: { type: "object", properties: { testTypes: { type: "array", items: { type: "string", enum: ["unit", "integration", "e2e", "typecheck", "lint", "build", "contract", "structural", "layout", "a11y", "performance"] } }, qualityGates: { type: "array", items: { type: "string" } }, testCommands: { type: "array", items: { type: "string" } }, coverageTarget: { type: "integer", minimum: 0, maximum: 100 } } }
|
|
443
|
+
},
|
|
444
|
+
required: ["type", "ticketId", "testSpecification"]
|
|
445
|
+
},
|
|
365
446
|
{
|
|
366
447
|
properties: {
|
|
367
448
|
type: { const: "delete_epic" },
|
|
368
|
-
|
|
449
|
+
id: { type: "string", description: "Epic id; cascades to all tickets in the epic." },
|
|
450
|
+
cascadeRemoveDependencies: { type: "boolean", description: "Confirm removing dependency edges pointing at this epic's tickets from outside the epic. Required (true) when such referrers exist, else the delete is denied." }
|
|
369
451
|
},
|
|
370
|
-
required: ["type", "
|
|
452
|
+
required: ["type", "id"]
|
|
371
453
|
},
|
|
372
454
|
{
|
|
373
455
|
properties: {
|
|
374
456
|
type: { const: "delete_ticket" },
|
|
375
|
-
|
|
457
|
+
id: { type: "string", description: "Ticket id (use list_tickets / lookup_ticket to find)." },
|
|
458
|
+
cascadeRemoveDependencies: { type: "boolean", description: "Confirm removing dependency edges from other tickets that point at this ticket. Required (true) when such referrers exist, else the delete is denied." }
|
|
376
459
|
},
|
|
377
|
-
required: ["type", "
|
|
460
|
+
required: ["type", "id"]
|
|
378
461
|
},
|
|
379
462
|
{
|
|
380
463
|
properties: {
|
|
381
|
-
type: { const: "
|
|
464
|
+
type: { const: "create_dependencies" },
|
|
382
465
|
dependencies: {
|
|
383
466
|
type: "array",
|
|
384
467
|
minItems: 1,
|
|
385
|
-
maxItems:
|
|
386
|
-
description:
|
|
468
|
+
maxItems: 5e3,
|
|
469
|
+
description: 'Up to 5000 dependency pairs, each a "requires" edge (fromTicketId depends on toTicketId). The batch is validated atomically: a cycle or an all-duplicate batch is rejected with guidance; already-existing edges are skipped.',
|
|
387
470
|
items: {
|
|
388
471
|
type: "object",
|
|
389
472
|
properties: {
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
type: { type: "string", enum: ["requires", "blocks"], description: 'Defaults to "requires"' }
|
|
473
|
+
fromTicketId: { type: "string", description: "The dependent ticket (this one depends on the other)." },
|
|
474
|
+
toTicketId: { type: "string", description: "The blocker ticket it depends on." }
|
|
393
475
|
},
|
|
394
|
-
required: ["
|
|
476
|
+
required: ["fromTicketId", "toTicketId"]
|
|
395
477
|
}
|
|
396
478
|
}
|
|
397
479
|
},
|
|
@@ -399,95 +481,178 @@ Format options:
|
|
|
399
481
|
},
|
|
400
482
|
{
|
|
401
483
|
properties: {
|
|
402
|
-
type: { const: "
|
|
403
|
-
|
|
484
|
+
type: { const: "delete_dependencies" },
|
|
485
|
+
dependencyIds: { type: "array", minItems: 1, items: { type: "string" }, description: "TicketDependency ids to remove (use lookup/list to find)." }
|
|
404
486
|
},
|
|
405
|
-
required: ["type", "
|
|
487
|
+
required: ["type", "dependencyIds"]
|
|
406
488
|
},
|
|
489
|
+
// apply_creator_election (MB.16.1) — the atomic creator-election batch: file
|
|
490
|
+
// moves + producing steps + ordering deps in ONE cross-phase op. Only the
|
|
491
|
+
// status:'clean' partition is applied; conflicts are excluded + surfaced to
|
|
492
|
+
// get_ticket. `dependencies` may be empty (single-toucher flips).
|
|
407
493
|
{
|
|
408
494
|
properties: {
|
|
409
|
-
type: { const: "
|
|
410
|
-
|
|
411
|
-
|
|
495
|
+
type: { const: "apply_creator_election" },
|
|
496
|
+
elections: {
|
|
497
|
+
type: "array",
|
|
498
|
+
minItems: 1,
|
|
499
|
+
maxItems: 5e3,
|
|
500
|
+
description: "The per-file creator elections. Each moves an orphan shared file to filesToBeCreated on its elected creator ticket + declares the producing step so the moved file is not a new orphan.",
|
|
501
|
+
items: {
|
|
502
|
+
type: "object",
|
|
503
|
+
properties: {
|
|
504
|
+
path: { type: "string", description: "The orphan shared file path to resolve." },
|
|
505
|
+
kind: { type: "string", enum: ["creates", "modifies", "deletes", "imports", "reads"], description: "The step-file role the elected ticket takes for this path (normally creates)." },
|
|
506
|
+
creatorTicketId: { type: "string", description: "The elected creator ticket (topologically-earliest toucher)." },
|
|
507
|
+
producingStep: {
|
|
508
|
+
type: "object",
|
|
509
|
+
description: "The step that produces the moved file: pass an existing step id to link it, OR text to create-and-link a new step.",
|
|
510
|
+
properties: {
|
|
511
|
+
text: { type: "string", description: "Text of a NEW producing step to create + link." },
|
|
512
|
+
stepId: { type: "string", description: "Id of an EXISTING step to link to the moved file." }
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
},
|
|
516
|
+
required: ["path", "kind", "creatorTicketId", "producingStep"]
|
|
517
|
+
}
|
|
518
|
+
},
|
|
519
|
+
dependencies: {
|
|
520
|
+
type: "array",
|
|
521
|
+
maxItems: 5e3,
|
|
522
|
+
description: `The ordering deps (each a "requires" edge). May be empty. Only the CLEAN partition's deps are persisted (recomputed + cycle-checked server-side).`,
|
|
523
|
+
items: {
|
|
524
|
+
type: "object",
|
|
525
|
+
properties: {
|
|
526
|
+
fromTicketId: { type: "string", description: "The dependent ticket (a non-elected toucher)." },
|
|
527
|
+
toTicketId: { type: "string", description: "The elected creator it depends on." }
|
|
528
|
+
},
|
|
529
|
+
required: ["fromTicketId", "toTicketId"]
|
|
530
|
+
}
|
|
531
|
+
}
|
|
412
532
|
},
|
|
413
|
-
required: ["type", "
|
|
533
|
+
required: ["type", "elections", "dependencies"]
|
|
414
534
|
},
|
|
415
535
|
{
|
|
416
536
|
properties: {
|
|
417
537
|
type: { const: "create_blueprint" },
|
|
418
538
|
title: { type: "string", minLength: 1, description: "Blueprint title (non-empty)" },
|
|
419
|
-
content: { type: "string", description: "Body
|
|
420
|
-
format: { type: "string", description: 'Defaults to "mermaid"' },
|
|
421
|
-
category: { type: "string" },
|
|
539
|
+
content: { type: "string", description: "Body \u2014 diagram source or markdown, persisted as-is on create." },
|
|
540
|
+
format: { type: "string", enum: ["markdown", "mermaid", "ascii", "mixed", "html", "svg", "image"], description: 'Defaults to "mermaid"' },
|
|
541
|
+
category: { type: "string", enum: ["flowchart", "architecture", "state", "sequence", "erd", "mockup", "adr", "component", "deployment", "api", "algorithm", "protocol", "glossary", "design_system"], description: "Blueprint category (SpecificationBlueprint.category model enum)." },
|
|
422
542
|
description: { type: "string" },
|
|
423
543
|
tags: { type: "array", items: { type: "string" } }
|
|
424
544
|
},
|
|
425
|
-
required: ["type", "title"]
|
|
545
|
+
required: ["type", "title", "category"]
|
|
426
546
|
},
|
|
427
547
|
{
|
|
428
548
|
properties: {
|
|
429
549
|
type: { const: "update_blueprint" },
|
|
430
|
-
|
|
550
|
+
id: { type: "string", description: "Blueprint id." },
|
|
551
|
+
fields: {
|
|
552
|
+
type: "object",
|
|
553
|
+
description: "Partial blueprint update \u2014 only the keys you send are changed.",
|
|
554
|
+
properties: {
|
|
555
|
+
title: { type: "string" },
|
|
556
|
+
content: { type: "string" },
|
|
557
|
+
category: { type: "string" },
|
|
558
|
+
description: { type: "string" },
|
|
559
|
+
tags: { type: "array", items: { type: "string" } }
|
|
560
|
+
}
|
|
561
|
+
}
|
|
431
562
|
},
|
|
432
|
-
required: ["type", "
|
|
563
|
+
required: ["type", "id", "fields"]
|
|
433
564
|
},
|
|
434
565
|
{
|
|
435
566
|
properties: {
|
|
436
567
|
type: { const: "delete_blueprint" },
|
|
437
|
-
|
|
568
|
+
id: { type: "string", description: "Blueprint id." }
|
|
438
569
|
},
|
|
439
|
-
required: ["type", "
|
|
570
|
+
required: ["type", "id"]
|
|
440
571
|
},
|
|
441
572
|
{
|
|
442
573
|
properties: {
|
|
443
|
-
type: { const: "
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
context: { type: "string", description: "Optional context annotation" },
|
|
447
|
-
section: { type: "string", description: "Optional section reference" }
|
|
574
|
+
type: { const: "link_blueprint_to_tickets" },
|
|
575
|
+
blueprintId: { type: "string", description: "Blueprint to link." },
|
|
576
|
+
ticketIds: { type: "array", minItems: 1, items: { type: "string" }, description: "Tickets to link the blueprint to." }
|
|
448
577
|
},
|
|
449
|
-
required: ["type", "
|
|
578
|
+
required: ["type", "blueprintId", "ticketIds"]
|
|
450
579
|
},
|
|
451
580
|
{
|
|
452
581
|
properties: {
|
|
453
|
-
type: { const: "
|
|
454
|
-
|
|
582
|
+
type: { const: "unlink_blueprint_to_tickets" },
|
|
583
|
+
blueprintId: { type: "string", description: "Blueprint to unlink." },
|
|
584
|
+
ticketIds: { type: "array", minItems: 1, items: { type: "string" }, description: "Tickets to unlink the blueprint from." }
|
|
455
585
|
},
|
|
456
|
-
required: ["type", "
|
|
586
|
+
required: ["type", "blueprintId", "ticketIds"]
|
|
457
587
|
},
|
|
588
|
+
// MB.14.1 — step↔artifact link verbs (create/delete a join row keyed on
|
|
589
|
+
// stepId + fileChangeId/snippetId). Get the ids from the ticket read-shape.
|
|
458
590
|
{
|
|
459
591
|
properties: {
|
|
460
|
-
type: { const: "
|
|
461
|
-
|
|
462
|
-
|
|
592
|
+
type: { const: "link_step_file" },
|
|
593
|
+
stepId: { type: "string", description: "Implementation step id (the functional unit of work)." },
|
|
594
|
+
fileChangeId: { type: "string", description: "Declared file-change id the step produces (from the ticket read-shape)." }
|
|
463
595
|
},
|
|
464
|
-
required: ["type", "
|
|
596
|
+
required: ["type", "stepId", "fileChangeId"]
|
|
465
597
|
},
|
|
466
598
|
{
|
|
467
599
|
properties: {
|
|
468
|
-
type: { const: "
|
|
469
|
-
|
|
470
|
-
|
|
600
|
+
type: { const: "unlink_step_file" },
|
|
601
|
+
stepId: { type: "string", description: "Implementation step id." },
|
|
602
|
+
fileChangeId: { type: "string", description: "Declared file-change id to unlink from the step." }
|
|
471
603
|
},
|
|
472
|
-
required: ["type", "
|
|
604
|
+
required: ["type", "stepId", "fileChangeId"]
|
|
473
605
|
},
|
|
474
606
|
{
|
|
475
|
-
properties: {
|
|
476
|
-
|
|
607
|
+
properties: {
|
|
608
|
+
type: { const: "link_step_snippet" },
|
|
609
|
+
stepId: { type: "string", description: "Implementation step id." },
|
|
610
|
+
snippetType: { type: "string", enum: ["code", "type"], description: "'code' \u2192 TicketCodeSnippet, 'type' \u2192 TicketTypeSnippet." },
|
|
611
|
+
snippetId: { type: "string", description: "Code/type snippet id the step follows (recommended, not required per step \u2014 but a snippet linking NO step is dangling and blocks the ticket; link or drop it)." }
|
|
612
|
+
},
|
|
613
|
+
required: ["type", "stepId", "snippetType", "snippetId"]
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
properties: {
|
|
617
|
+
type: { const: "unlink_step_snippet" },
|
|
618
|
+
stepId: { type: "string", description: "Implementation step id." },
|
|
619
|
+
snippetType: { type: "string", enum: ["code", "type"], description: "Which snippet table to unlink from." },
|
|
620
|
+
snippetId: { type: "string", description: "Code/type snippet id to unlink from the step." }
|
|
621
|
+
},
|
|
622
|
+
required: ["type", "stepId", "snippetType", "snippetId"]
|
|
623
|
+
},
|
|
624
|
+
// justify — declare a field N/A (the paired declare op; unjustify removes it).
|
|
625
|
+
// Structural-neutral: it writes only the fieldDeclarations[scope] declaration,
|
|
626
|
+
// so it is native in EVERY planning phase and never rolls back. `scope` is the
|
|
627
|
+
// canonical field name the checks read (e.g. dependencies, codeReferences,
|
|
628
|
+
// apiContracts) — NOT a `fieldDeclarations`-shaped payload on update_*.
|
|
629
|
+
{
|
|
630
|
+
properties: {
|
|
631
|
+
type: { const: "justify" },
|
|
632
|
+
scope: { type: "string", description: "Canonical field name to mark not-applicable (e.g. 'dependencies', 'codeReferences', 'apiContracts')." },
|
|
633
|
+
entityId: { type: "string", description: "The spec/epic/ticket id the field belongs to (resolved server-side; ids are unique across the spec)." },
|
|
634
|
+
reason: { type: "string", description: "Why the field does not apply (must be at least 20 characters)." }
|
|
635
|
+
},
|
|
636
|
+
required: ["type", "scope", "entityId", "reason"]
|
|
477
637
|
},
|
|
638
|
+
// unjustify — remove a previously declared N/A (clears fieldDeclarations[scope]).
|
|
639
|
+
// A no-op if the scope was never justified. No reason (a delete is unconditional).
|
|
478
640
|
{
|
|
479
641
|
properties: {
|
|
480
|
-
type: { const: "
|
|
481
|
-
|
|
642
|
+
type: { const: "unjustify" },
|
|
643
|
+
scope: { type: "string", description: "Canonical field name whose not-applicable declaration to remove." },
|
|
644
|
+
entityId: { type: "string", description: "The spec/epic/ticket id the field belongs to." }
|
|
645
|
+
},
|
|
646
|
+
required: ["type", "scope", "entityId"]
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
// Read-only poll/resume. To read a single ticket, use the `get` tool (type:'ticket').
|
|
650
|
+
properties: {
|
|
651
|
+
type: { const: "get_planning_status" }
|
|
482
652
|
},
|
|
483
653
|
required: ["type"]
|
|
484
654
|
}
|
|
485
655
|
]
|
|
486
|
-
},
|
|
487
|
-
responseDetail: {
|
|
488
|
-
type: "string",
|
|
489
|
-
enum: ["minimal", "standard", "full"],
|
|
490
|
-
description: "Response detail level: minimal (~80 tokens), standard (~200, default), full (~500)"
|
|
491
656
|
}
|
|
492
657
|
},
|
|
493
658
|
required: ["operation"]
|
|
@@ -506,7 +671,7 @@ Format options:
|
|
|
506
671
|
},
|
|
507
672
|
{
|
|
508
673
|
name: "start_work_session",
|
|
509
|
-
description: "Start working on a ticket. Returns full ticket details (description, implementation steps, AC, technicalDetails, codeReferences, typeReferences, tags, notes, complexity, priority) alongside checklistState and workSessionId. No need to call
|
|
674
|
+
description: "Start working on a ticket. Returns full ticket details (description, implementation steps, AC, technicalDetails, codeReferences, typeReferences, tags, notes, complexity, priority) alongside checklistState and workSessionId. No need to call the `get` tool (type:'ticket') separately. Returns error with statusReason if ticket is pending.",
|
|
510
675
|
inputSchema: {
|
|
511
676
|
type: "object",
|
|
512
677
|
properties: {
|
|
@@ -522,9 +687,9 @@ Format options:
|
|
|
522
687
|
name: "action_work_session",
|
|
523
688
|
description: `Update checklist state during an active WorkSession. Combines step completion, AC validation, test result reporting, file tracking, reference review confirmation, and discovery reporting into a single atomic operation. All state changes are recorded on the WorkSession and its related validation/completion records.
|
|
524
689
|
|
|
525
|
-
Use this instead of
|
|
526
|
-
- Step completion (individual or bulk via
|
|
527
|
-
- Acceptance criteria validation (individual or bulk via
|
|
690
|
+
Use this instead of reopening the planning session for checklist changes. Provides:
|
|
691
|
+
- Step completion (individual or bulk via WorkSessionImplStepCompletion)
|
|
692
|
+
- Acceptance criteria validation (individual or bulk via WorkSessionAcceptanceCheck)
|
|
528
693
|
- Test result reporting (merged by test type via WorkSessionTestResult)
|
|
529
694
|
- File tracking (created, modified, deleted on WorkSession)
|
|
530
695
|
- Discovery reporting (create discoveries for blockers, bugs, tech debt)
|
|
@@ -545,124 +710,32 @@ Set getTicket: true to fetch full ticket details in the response \u2014 useful f
|
|
|
545
710
|
type: "string",
|
|
546
711
|
description: "The ID of the ticket being worked on (must be in active status)"
|
|
547
712
|
},
|
|
548
|
-
|
|
549
|
-
type: "
|
|
550
|
-
description: "
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
allStepsDone: {
|
|
571
|
-
type: "boolean",
|
|
572
|
-
description: "Shortcut: mark all steps as completed"
|
|
573
|
-
},
|
|
574
|
-
acceptanceCriteria: {
|
|
575
|
-
type: "array",
|
|
576
|
-
description: "Individual AC validation updates",
|
|
577
|
-
items: {
|
|
578
|
-
type: "object",
|
|
579
|
-
properties: {
|
|
580
|
-
index: {
|
|
581
|
-
type: "number",
|
|
582
|
-
description: "Zero-based index of the AC in the acceptanceCriteria array"
|
|
583
|
-
},
|
|
584
|
-
validated: {
|
|
585
|
-
type: "boolean",
|
|
586
|
-
description: "Whether the AC is validated"
|
|
587
|
-
},
|
|
588
|
-
notes: {
|
|
589
|
-
type: "string",
|
|
590
|
-
description: "Optional note about this AC"
|
|
591
|
-
}
|
|
592
|
-
},
|
|
593
|
-
required: ["index", "validated"]
|
|
594
|
-
}
|
|
595
|
-
},
|
|
596
|
-
allACValidated: {
|
|
597
|
-
type: "boolean",
|
|
598
|
-
description: "Shortcut: mark all acceptance criteria as validated"
|
|
599
|
-
},
|
|
600
|
-
testResults: {
|
|
601
|
-
type: "array",
|
|
602
|
-
description: "Test result reports to append (merged by testType)",
|
|
603
|
-
items: {
|
|
604
|
-
type: "object",
|
|
605
|
-
properties: {
|
|
606
|
-
testType: {
|
|
607
|
-
type: "string",
|
|
608
|
-
description: 'Type of test (e.g., "unit", "integration", "e2e", "lint", "typeCheck")'
|
|
609
|
-
},
|
|
610
|
-
passed: {
|
|
611
|
-
type: "number",
|
|
612
|
-
description: "Number of tests that passed"
|
|
613
|
-
},
|
|
614
|
-
failed: {
|
|
615
|
-
type: "number",
|
|
616
|
-
description: "Number of tests that failed"
|
|
617
|
-
},
|
|
618
|
-
skipped: {
|
|
619
|
-
type: "number",
|
|
620
|
-
description: "Number of tests skipped"
|
|
621
|
-
},
|
|
622
|
-
command: {
|
|
623
|
-
type: "string",
|
|
624
|
-
description: "Command used to run the tests"
|
|
625
|
-
},
|
|
626
|
-
output: {
|
|
627
|
-
type: "string",
|
|
628
|
-
description: "Test output (truncated if needed)"
|
|
629
|
-
},
|
|
630
|
-
duration: {
|
|
631
|
-
type: "number",
|
|
632
|
-
description: "Duration in milliseconds"
|
|
633
|
-
},
|
|
634
|
-
suites: {
|
|
635
|
-
type: "array",
|
|
636
|
-
description: "Optional suite-level breakdown",
|
|
637
|
-
items: {
|
|
638
|
-
type: "object",
|
|
639
|
-
properties: {
|
|
640
|
-
name: { type: "string", description: "Suite name" },
|
|
641
|
-
passed: { type: "number", description: "Passed tests in suite" },
|
|
642
|
-
failed: { type: "number", description: "Failed tests in suite" },
|
|
643
|
-
skipped: { type: "number", description: "Skipped tests in suite" },
|
|
644
|
-
duration: { type: "number", description: "Suite duration in ms" }
|
|
645
|
-
},
|
|
646
|
-
required: ["name", "passed", "failed"]
|
|
647
|
-
}
|
|
648
|
-
},
|
|
649
|
-
tests: {
|
|
650
|
-
type: "array",
|
|
651
|
-
description: "Optional individual test breakdown",
|
|
652
|
-
items: {
|
|
653
|
-
type: "object",
|
|
654
|
-
properties: {
|
|
655
|
-
name: { type: "string", description: "Test name" },
|
|
656
|
-
suite: { type: "string", description: "Parent suite name" },
|
|
657
|
-
status: { type: "string", enum: ["passed", "failed", "skipped"], description: "Test result" },
|
|
658
|
-
duration: { type: "number", description: "Test duration in ms" }
|
|
659
|
-
},
|
|
660
|
-
required: ["name", "status"]
|
|
661
|
-
}
|
|
662
|
-
}
|
|
713
|
+
action: {
|
|
714
|
+
type: "object",
|
|
715
|
+
description: "The assay action to record \u2014 the AWS action vocabulary. `action` (the discriminator) is one of: mark_implementation_step_completion, mark_acceptance_check, record_test_result, add_skip_justification, amend_skip_justification, add_failure_justification, amend_failure_justification, record_file_change, add_file_change_justification, amend_file_change_justification, create_discovery (with `blocking`), update_discovery, set_discovery_resolved. Include `workSessionId` and the per-action fields. Forwarded verbatim as the lifecycle inner payload.",
|
|
716
|
+
properties: {
|
|
717
|
+
action: {
|
|
718
|
+
type: "string",
|
|
719
|
+
enum: [
|
|
720
|
+
"mark_implementation_step_completion",
|
|
721
|
+
"mark_acceptance_check",
|
|
722
|
+
"record_test_result",
|
|
723
|
+
"add_skip_justification",
|
|
724
|
+
"amend_skip_justification",
|
|
725
|
+
"add_failure_justification",
|
|
726
|
+
"amend_failure_justification",
|
|
727
|
+
"record_file_change",
|
|
728
|
+
"add_file_change_justification",
|
|
729
|
+
"amend_file_change_justification",
|
|
730
|
+
"create_discovery",
|
|
731
|
+
"update_discovery",
|
|
732
|
+
"set_discovery_resolved"
|
|
733
|
+
],
|
|
734
|
+
description: "The AWS action discriminator."
|
|
663
735
|
},
|
|
664
|
-
|
|
665
|
-
}
|
|
736
|
+
workSessionId: { type: "string", description: "The active WorkSession id (from start_work_session)." }
|
|
737
|
+
},
|
|
738
|
+
required: ["action"]
|
|
666
739
|
},
|
|
667
740
|
notes: {
|
|
668
741
|
type: "string",
|
|
@@ -760,22 +833,22 @@ Set getTicket: true to fetch full ticket details in the response \u2014 useful f
|
|
|
760
833
|
properties: {
|
|
761
834
|
tests: {
|
|
762
835
|
type: "string",
|
|
763
|
-
enum: ["passed", "failed", "
|
|
836
|
+
enum: ["passed", "failed", "partial", "pending"],
|
|
764
837
|
description: "Unit/integration test results"
|
|
765
838
|
},
|
|
766
839
|
lint: {
|
|
767
840
|
type: "string",
|
|
768
|
-
enum: ["passed", "failed", "
|
|
841
|
+
enum: ["passed", "failed", "partial", "pending"],
|
|
769
842
|
description: "Linting results"
|
|
770
843
|
},
|
|
771
844
|
typeCheck: {
|
|
772
845
|
type: "string",
|
|
773
|
-
enum: ["passed", "failed", "
|
|
846
|
+
enum: ["passed", "failed", "partial", "pending"],
|
|
774
847
|
description: "TypeScript type checking results"
|
|
775
848
|
},
|
|
776
849
|
build: {
|
|
777
850
|
type: "string",
|
|
778
|
-
enum: ["passed", "failed", "
|
|
851
|
+
enum: ["passed", "failed", "partial", "pending"],
|
|
779
852
|
description: "Build/compilation results"
|
|
780
853
|
},
|
|
781
854
|
notes: {
|
|
@@ -788,111 +861,9 @@ Set getTicket: true to fetch full ticket details in the response \u2014 useful f
|
|
|
788
861
|
required: ["ticketId", "summary"]
|
|
789
862
|
}
|
|
790
863
|
},
|
|
791
|
-
{
|
|
792
|
-
name: "start_review_session",
|
|
793
|
-
description: 'Start the implementation review lifecycle. Runs the implementation gate and either auto-transitions to "reviewed" (on pass) or transitions to "in_review" with an active ReviewSession (on fail). Creates correction tickets via action_review_session, then call complete_review_session.',
|
|
794
|
-
inputSchema: {
|
|
795
|
-
type: "object",
|
|
796
|
-
properties: {
|
|
797
|
-
specificationId: {
|
|
798
|
-
type: "string",
|
|
799
|
-
description: "The ID of the specification to review (must be in ready_for_review status)"
|
|
800
|
-
}
|
|
801
|
-
},
|
|
802
|
-
required: ["specificationId"]
|
|
803
|
-
}
|
|
804
|
-
},
|
|
805
|
-
{
|
|
806
|
-
name: "action_review_session",
|
|
807
|
-
description: 'Address findings in an active review session. Create correction tickets inline or dismiss findings with justification. Only available when specification is in "in_review" status.',
|
|
808
|
-
inputSchema: {
|
|
809
|
-
type: "object",
|
|
810
|
-
properties: {
|
|
811
|
-
specificationId: {
|
|
812
|
-
type: "string",
|
|
813
|
-
description: "The ID of the specification"
|
|
814
|
-
},
|
|
815
|
-
reviewSessionId: {
|
|
816
|
-
type: "string",
|
|
817
|
-
description: "The review session ID (auto-detected if omitted)"
|
|
818
|
-
},
|
|
819
|
-
findingsAddressed: {
|
|
820
|
-
type: "array",
|
|
821
|
-
description: "Findings to address in this action",
|
|
822
|
-
items: {
|
|
823
|
-
type: "object",
|
|
824
|
-
properties: {
|
|
825
|
-
findingId: {
|
|
826
|
-
type: "string",
|
|
827
|
-
description: "The finding ID to address"
|
|
828
|
-
},
|
|
829
|
-
action: {
|
|
830
|
-
type: "string",
|
|
831
|
-
enum: ["correction_ticket", "dismissed"],
|
|
832
|
-
description: "How to address the finding"
|
|
833
|
-
},
|
|
834
|
-
correctionTicket: {
|
|
835
|
-
type: "object",
|
|
836
|
-
description: "Inline ticket creation params (required for correction_ticket action)",
|
|
837
|
-
properties: {
|
|
838
|
-
epicId: { type: "string", description: "Epic to add the correction ticket to" },
|
|
839
|
-
title: { type: "string", description: "Ticket title" },
|
|
840
|
-
description: { type: "string", description: "Ticket description" },
|
|
841
|
-
ticketType: { type: "string", enum: ["implementation", "verification"], description: "Ticket type \u2014 defaults to implementation." },
|
|
842
|
-
priority: { type: "string", enum: ["low", "medium", "high", "critical"] },
|
|
843
|
-
complexity: { type: "string", enum: ["small", "medium", "large", "xlarge"] },
|
|
844
|
-
estimatedHours: { type: "number" },
|
|
845
|
-
acceptanceCriteria: { type: "array", items: { type: "string" } },
|
|
846
|
-
implementationSteps: { type: "array", items: { type: "string" }, description: "Implementation steps; persisted as TicketImplementationStep rows" },
|
|
847
|
-
tags: { type: "array", items: { type: "string" } }
|
|
848
|
-
},
|
|
849
|
-
required: ["epicId", "title"]
|
|
850
|
-
},
|
|
851
|
-
justification: {
|
|
852
|
-
type: "string",
|
|
853
|
-
description: 'Required justification when action is "dismissed"'
|
|
854
|
-
}
|
|
855
|
-
},
|
|
856
|
-
required: ["findingId", "action"]
|
|
857
|
-
}
|
|
858
|
-
},
|
|
859
|
-
notes: {
|
|
860
|
-
type: "string",
|
|
861
|
-
description: "Optional notes for this review action"
|
|
862
|
-
}
|
|
863
|
-
},
|
|
864
|
-
required: ["specificationId"]
|
|
865
|
-
}
|
|
866
|
-
},
|
|
867
|
-
{
|
|
868
|
-
name: "complete_review_session",
|
|
869
|
-
description: 'Complete an active review session. All error-severity findings must be addressed. If correction tickets exist, transitions to "in_progress". If all findings dismissed, triggers user confirmation flow.',
|
|
870
|
-
inputSchema: {
|
|
871
|
-
type: "object",
|
|
872
|
-
properties: {
|
|
873
|
-
specificationId: {
|
|
874
|
-
type: "string",
|
|
875
|
-
description: "The ID of the specification"
|
|
876
|
-
},
|
|
877
|
-
reviewSessionId: {
|
|
878
|
-
type: "string",
|
|
879
|
-
description: "The review session ID (auto-detected if omitted)"
|
|
880
|
-
},
|
|
881
|
-
summary: {
|
|
882
|
-
type: "string",
|
|
883
|
-
description: "Optional completion summary"
|
|
884
|
-
},
|
|
885
|
-
confirmAllDismissed: {
|
|
886
|
-
type: "boolean",
|
|
887
|
-
description: "Set to true when all findings were dismissed to trigger user confirmation flow"
|
|
888
|
-
}
|
|
889
|
-
},
|
|
890
|
-
required: ["specificationId"]
|
|
891
|
-
}
|
|
892
|
-
},
|
|
893
864
|
{
|
|
894
865
|
name: "reopen_specification",
|
|
895
|
-
description: 'Reopen a specification in "ready" status, regressing to "planning". After reopening, call start_planning_session to begin a new planning session.',
|
|
866
|
+
description: 'Reopen a specification in "ready" status, regressing to "planning". Use when action_planning_session reports the spec is no longer in planning. After reopening, call start_planning_session to begin a new planning session.',
|
|
896
867
|
inputSchema: {
|
|
897
868
|
type: "object",
|
|
898
869
|
properties: {
|
|
@@ -989,53 +960,6 @@ Set getTicket: true to fetch full ticket details in the response \u2014 useful f
|
|
|
989
960
|
required: ["operation"]
|
|
990
961
|
}
|
|
991
962
|
},
|
|
992
|
-
{
|
|
993
|
-
name: "reset_work_session",
|
|
994
|
-
description: "Reset tickets to pending/ready status (calculated from dependencies). Returns statusCalculation showing how many became pending vs ready.",
|
|
995
|
-
inputSchema: {
|
|
996
|
-
type: "object",
|
|
997
|
-
properties: {
|
|
998
|
-
specificationId: {
|
|
999
|
-
type: "string",
|
|
1000
|
-
description: "The specification containing the tickets"
|
|
1001
|
-
},
|
|
1002
|
-
ticketIds: {
|
|
1003
|
-
type: "array",
|
|
1004
|
-
items: { type: "string" },
|
|
1005
|
-
description: "Specific ticket IDs to reset"
|
|
1006
|
-
},
|
|
1007
|
-
fromTicketId: {
|
|
1008
|
-
type: "string",
|
|
1009
|
-
description: "Reset this ticket and all its dependents"
|
|
1010
|
-
},
|
|
1011
|
-
epicId: {
|
|
1012
|
-
type: "string",
|
|
1013
|
-
description: "Reset all tickets in this epic"
|
|
1014
|
-
},
|
|
1015
|
-
allTickets: {
|
|
1016
|
-
type: "boolean",
|
|
1017
|
-
description: "Reset all tickets in the specification"
|
|
1018
|
-
},
|
|
1019
|
-
resetDependents: {
|
|
1020
|
-
type: "boolean",
|
|
1021
|
-
description: "Also reset tickets that depend on the specified tickets (default: false)"
|
|
1022
|
-
},
|
|
1023
|
-
includeCompleted: {
|
|
1024
|
-
type: "boolean",
|
|
1025
|
-
description: "Include tickets with done status in the reset (default: false)"
|
|
1026
|
-
},
|
|
1027
|
-
preserveNotes: {
|
|
1028
|
-
type: "boolean",
|
|
1029
|
-
description: "Keep existing notes on tickets (default: true)"
|
|
1030
|
-
},
|
|
1031
|
-
clearTestResults: {
|
|
1032
|
-
type: "boolean",
|
|
1033
|
-
description: "Clear test result history (default: false)"
|
|
1034
|
-
}
|
|
1035
|
-
},
|
|
1036
|
-
required: ["specificationId"]
|
|
1037
|
-
}
|
|
1038
|
-
},
|
|
1039
963
|
{
|
|
1040
964
|
name: "link_pull_request",
|
|
1041
965
|
description: "Associate a pull request with a ticket",
|
|
@@ -1102,6 +1026,19 @@ Set getTicket: true to fetch full ticket details in the response \u2014 useful f
|
|
|
1102
1026
|
}
|
|
1103
1027
|
}
|
|
1104
1028
|
];
|
|
1029
|
+
const IN_DEVELOPMENT_PLANNED_FOR = {
|
|
1030
|
+
start_work_session: "0.2.0",
|
|
1031
|
+
action_work_session: "0.2.0",
|
|
1032
|
+
complete_work_session: "0.2.0"
|
|
1033
|
+
};
|
|
1034
|
+
for (const t of tools) {
|
|
1035
|
+
const plannedFor = IN_DEVELOPMENT_PLANNED_FOR[t.name];
|
|
1036
|
+
if (plannedFor) {
|
|
1037
|
+
t.description = `**In development \u2014 ships with ${plannedFor}.** Calling returns a typed stub response the client should render as a "coming soon" affordance.
|
|
1038
|
+
|
|
1039
|
+
${t.description}`;
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1105
1042
|
return tools;
|
|
1106
1043
|
}
|
|
1107
1044
|
const RETRY_CONFIG = {
|
|
@@ -1155,7 +1092,22 @@ async function withRetry(fn, toolName, debug) {
|
|
|
1155
1092
|
}
|
|
1156
1093
|
function createToolHandlers(apiClient) {
|
|
1157
1094
|
const callLocal = async (op, args) => {
|
|
1095
|
+
const debug = process.env.SPECFORGE_DEBUG === "true";
|
|
1096
|
+
const debugFile = process.env.SPECFORGE_DEBUG_FILE;
|
|
1097
|
+
const trace = (line) => {
|
|
1098
|
+
if (!debug) return;
|
|
1099
|
+
if (debugFile) {
|
|
1100
|
+
try {
|
|
1101
|
+
appendFileSync(debugFile, line + "\n");
|
|
1102
|
+
return;
|
|
1103
|
+
} catch {
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
process.stderr.write(line + "\n");
|
|
1107
|
+
};
|
|
1108
|
+
trace(`[cli:wire \u2192] ${op} ${JSON.stringify(args)}`);
|
|
1158
1109
|
const body = await apiClient.getTransport().execute(op, args);
|
|
1110
|
+
trace(`[cli:wire \u2190] ${op} ${JSON.stringify(body).slice(0, 800)}`);
|
|
1159
1111
|
if (body && typeof body === "object") {
|
|
1160
1112
|
if (body.kind === "standard_error") {
|
|
1161
1113
|
const guidance = body.guidance;
|
|
@@ -1239,9 +1191,13 @@ function createToolHandlers(apiClient) {
|
|
|
1239
1191
|
if (!specificationId) {
|
|
1240
1192
|
throw new Error("No active specification. Run `specforge switch <spec-id>` or pass specificationId.");
|
|
1241
1193
|
}
|
|
1194
|
+
const projectId = args.projectId ?? cfg?.projectId;
|
|
1195
|
+
if (!projectId) {
|
|
1196
|
+
throw new Error("No active project. Run `specforge switch <spec-id>` or pass projectId.");
|
|
1197
|
+
}
|
|
1242
1198
|
const agentResponse = await callLocal(
|
|
1243
1199
|
"start_planning_session",
|
|
1244
|
-
{ specificationId }
|
|
1200
|
+
{ projectId, specificationId }
|
|
1245
1201
|
);
|
|
1246
1202
|
if (agentResponse?.sessionId) {
|
|
1247
1203
|
saveProjectConfig({ planningSessionId: agentResponse.sessionId });
|
|
@@ -1281,37 +1237,37 @@ function createToolHandlers(apiClient) {
|
|
|
1281
1237
|
if (!sessionId) {
|
|
1282
1238
|
throw new Error("No active planning session. Call start_planning_session first.");
|
|
1283
1239
|
}
|
|
1284
|
-
|
|
1240
|
+
const first = await callLocal(
|
|
1241
|
+
"complete_planning_session",
|
|
1242
|
+
{ sessionId }
|
|
1243
|
+
);
|
|
1244
|
+
if (first?.outcome !== "evidence_required") {
|
|
1245
|
+
return first;
|
|
1246
|
+
}
|
|
1247
|
+
const requested = Array.isArray(first.grepRequest?.paths) ? first.grepRequest.paths : [];
|
|
1248
|
+
const existingFiles = probeExistingFiles(requested);
|
|
1249
|
+
return await callLocal("complete_planning_session", { sessionId, existingFiles });
|
|
1285
1250
|
},
|
|
1286
1251
|
start_work_session: async (_client, args) => {
|
|
1287
1252
|
validateRequired(args, "ticketId");
|
|
1253
|
+
const git = readWorktreeGitEvidence();
|
|
1288
1254
|
return await callLocal("start_work_session", {
|
|
1289
|
-
ticketId: args.ticketId
|
|
1255
|
+
ticketId: args.ticketId,
|
|
1256
|
+
gitClean: git.gitClean,
|
|
1257
|
+
worktreePath: git.worktreePath,
|
|
1258
|
+
branch: git.branch
|
|
1290
1259
|
});
|
|
1291
1260
|
},
|
|
1292
1261
|
action_work_session: async (_client, args) => {
|
|
1293
1262
|
validateRequired(args, "ticketId");
|
|
1294
1263
|
return await callLocal("action_work_session", {
|
|
1295
1264
|
ticketId: args.ticketId,
|
|
1296
|
-
|
|
1297
|
-
allStepsDone: args.allStepsDone,
|
|
1298
|
-
acceptanceCriteria: args.acceptanceCriteria,
|
|
1299
|
-
allACValidated: args.allACValidated,
|
|
1300
|
-
testResults: args.testResults,
|
|
1301
|
-
notes: args.notes,
|
|
1302
|
-
filesCreated: args.filesCreated,
|
|
1303
|
-
filesModified: args.filesModified,
|
|
1304
|
-
filesDeleted: args.filesDeleted,
|
|
1305
|
-
discovery: args.discovery,
|
|
1306
|
-
blockReason: args.blockReason,
|
|
1307
|
-
getTicket: args.getTicket,
|
|
1308
|
-
includeFullContext: args.includeFullContext,
|
|
1309
|
-
codeSnippetsReviewed: args.codeSnippetsReviewed,
|
|
1310
|
-
typeReferencesReviewed: args.typeReferencesReviewed
|
|
1265
|
+
payload: args.action ?? args.payload
|
|
1311
1266
|
});
|
|
1312
1267
|
},
|
|
1313
1268
|
complete_work_session: async (_client, args) => {
|
|
1314
1269
|
validateRequired(args, "ticketId", "summary");
|
|
1270
|
+
const commitSha = readHeadCommitSha();
|
|
1315
1271
|
return await callLocal("complete_work_session", {
|
|
1316
1272
|
ticketId: args.ticketId,
|
|
1317
1273
|
summary: args.summary,
|
|
@@ -1319,31 +1275,8 @@ function createToolHandlers(apiClient) {
|
|
|
1319
1275
|
filesCreated: args.filesCreated,
|
|
1320
1276
|
filesDeleted: args.filesDeleted,
|
|
1321
1277
|
actualHours: args.actualHours,
|
|
1322
|
-
validation: args.validation
|
|
1323
|
-
|
|
1324
|
-
},
|
|
1325
|
-
start_review_session: async (_client, args) => {
|
|
1326
|
-
const argsWithContext = injectContextRequired(args, ["specificationId"]);
|
|
1327
|
-
return await callLocal("start_review_session", {
|
|
1328
|
-
specificationId: argsWithContext.specificationId
|
|
1329
|
-
});
|
|
1330
|
-
},
|
|
1331
|
-
action_review_session: async (_client, args) => {
|
|
1332
|
-
const argsWithContext = injectContextRequired(args, ["specificationId"]);
|
|
1333
|
-
return await callLocal("action_review_session", {
|
|
1334
|
-
specificationId: argsWithContext.specificationId,
|
|
1335
|
-
reviewSessionId: args.reviewSessionId,
|
|
1336
|
-
findingsAddressed: args.findingsAddressed,
|
|
1337
|
-
notes: args.notes
|
|
1338
|
-
});
|
|
1339
|
-
},
|
|
1340
|
-
complete_review_session: async (_client, args) => {
|
|
1341
|
-
const argsWithContext = injectContextRequired(args, ["specificationId"]);
|
|
1342
|
-
return await callLocal("complete_review_session", {
|
|
1343
|
-
specificationId: argsWithContext.specificationId,
|
|
1344
|
-
reviewSessionId: args.reviewSessionId,
|
|
1345
|
-
summary: args.summary,
|
|
1346
|
-
confirmAllDismissed: args.confirmAllDismissed
|
|
1278
|
+
validation: args.validation,
|
|
1279
|
+
...commitSha !== null && { commitSha }
|
|
1347
1280
|
});
|
|
1348
1281
|
},
|
|
1349
1282
|
reopen_specification: async (_client, args) => {
|
|
@@ -1361,21 +1294,6 @@ function createToolHandlers(apiClient) {
|
|
|
1361
1294
|
feedback: async (_client, args) => {
|
|
1362
1295
|
return await callLocal("feedback", args);
|
|
1363
1296
|
},
|
|
1364
|
-
reset_work_session: async (_client, args) => {
|
|
1365
|
-
validateRequired(args, "specificationId");
|
|
1366
|
-
return await callLocal("reset_work_session", {
|
|
1367
|
-
specificationId: args.specificationId,
|
|
1368
|
-
ticketIds: args.ticketIds,
|
|
1369
|
-
fromTicketId: args.fromTicketId,
|
|
1370
|
-
epicId: args.epicId,
|
|
1371
|
-
allTickets: args.allTickets,
|
|
1372
|
-
targetStatus: args.targetStatus,
|
|
1373
|
-
resetDependents: args.resetDependents,
|
|
1374
|
-
includeCompleted: args.includeCompleted,
|
|
1375
|
-
preserveNotes: args.preserveNotes,
|
|
1376
|
-
clearTestResults: args.clearTestResults
|
|
1377
|
-
});
|
|
1378
|
-
},
|
|
1379
1297
|
link_pull_request: async (_client, args) => {
|
|
1380
1298
|
validateRequired(args, "ticketId");
|
|
1381
1299
|
if (!args.prNumber && !args.prUrl) {
|