@opengsd/gsd-pi 1.1.1-dev.616a1a1 → 1.1.1-dev.75048e7
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.js +3 -2
- package/dist/help-text.js +10 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +495 -0
- package/dist/resources/extensions/browser-tools/engine/selection.js +16 -0
- package/dist/resources/extensions/browser-tools/extension-manifest.json +2 -2
- package/dist/resources/extensions/browser-tools/index.js +57 -9
- package/dist/resources/extensions/browser-tools/package.json +5 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +167 -16
- package/dist/resources/extensions/gsd/auto/orchestrator.js +0 -1
- package/dist/resources/extensions/gsd/auto/phases.js +4 -3
- package/dist/resources/extensions/gsd/auto-dashboard.js +92 -17
- package/dist/resources/extensions/gsd/auto-dispatch.js +55 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +134 -10
- package/dist/resources/extensions/gsd/auto-prompts.js +72 -22
- package/dist/resources/extensions/gsd/auto-recovery.js +7 -8
- package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
- package/dist/resources/extensions/gsd/auto-start.js +94 -15
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +1 -1
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +18 -65
- package/dist/resources/extensions/gsd/auto-worktree.js +18 -5
- package/dist/resources/extensions/gsd/auto.js +31 -6
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +89 -4
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +43 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +56 -20
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +33 -38
- package/dist/resources/extensions/gsd/browser-evidence.js +29 -2
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +61 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +6 -2
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +9 -5
- package/dist/resources/extensions/gsd/commands-handlers.js +76 -11
- package/dist/resources/extensions/gsd/commands-maintenance.js +172 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +109 -60
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +3 -1
- package/dist/resources/extensions/gsd/commands-verdict.js +1 -1
- package/dist/resources/extensions/gsd/config-overlay.js +2 -1
- package/dist/resources/extensions/gsd/dashboard-overlay.js +21 -7
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +8 -0
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +2 -2
- package/dist/resources/extensions/gsd/error-classifier.js +2 -1
- package/dist/resources/extensions/gsd/escalation.js +4 -4
- package/dist/resources/extensions/gsd/exec-sandbox.js +2 -0
- package/dist/resources/extensions/gsd/forensics.js +74 -2
- package/dist/resources/extensions/gsd/gsd-db.js +42 -6
- package/dist/resources/extensions/gsd/guided-flow.js +119 -176
- package/dist/resources/extensions/gsd/mcp-filter.js +3 -0
- package/dist/resources/extensions/gsd/mcp-project-config.js +76 -84
- package/dist/resources/extensions/gsd/memory-store.js +4 -1
- package/dist/resources/extensions/gsd/migration-auto-check.js +2 -2
- package/dist/resources/extensions/gsd/milestone-closeout.js +3 -1
- package/dist/resources/extensions/gsd/pending-auto-start.js +0 -1
- package/dist/resources/extensions/gsd/post-unit-hooks.js +9 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +39 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +7 -0
- package/dist/resources/extensions/gsd/prompts/forensics.md +61 -1
- package/dist/resources/extensions/gsd/prompts/gate-evaluate.md +3 -1
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +33 -23
- package/dist/resources/extensions/gsd/prompts/system.md +3 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +3 -3
- package/dist/resources/extensions/gsd/recovery-classification.js +20 -0
- package/dist/resources/extensions/gsd/rule-registry.js +428 -52
- package/dist/resources/extensions/gsd/safety/destructive-guard.js +3 -0
- package/dist/resources/extensions/gsd/skill-activation.js +20 -3
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +4 -2
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +1 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +18 -1
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +6 -0
- package/dist/resources/extensions/gsd/state.js +17 -14
- package/dist/resources/extensions/gsd/templates/plan.md +3 -1
- package/dist/resources/extensions/gsd/tool-contract.js +5 -0
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +143 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +15 -1
- package/dist/resources/extensions/gsd/tools/complete-task.js +11 -1
- package/dist/resources/extensions/gsd/tools/exec-tool.js +109 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +14 -9
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +2 -2
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +46 -16
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +483 -6
- package/dist/resources/extensions/gsd/unit-context-manifest.js +8 -3
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +169 -0
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
- package/dist/resources/extensions/gsd/verdict-parser.js +59 -15
- package/dist/resources/extensions/gsd/verification-gate.js +72 -1
- package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +3 -1
- package/dist/resources/extensions/gsd/workflow-mcp.js +5 -73
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +24 -0
- package/dist/resources/extensions/mcp-client/manager.js +31 -1
- package/dist/resources/extensions/shared/gsd-browser-cli.js +145 -0
- package/dist/rtk.d.ts +7 -1
- package/dist/rtk.js +27 -11
- package/dist/update-check.d.ts +15 -1
- package/dist/update-check.js +87 -12
- package/dist/update-cmd.d.ts +1 -0
- package/dist/update-cmd.js +53 -2
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +5 -5
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +5 -5
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/package.json +5 -3
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/workflow.d.ts +14 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js +16 -0
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/agent-session.d.ts +9 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/agent-session.js +32 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
- package/packages/gsd-agent-core/dist/index.d.ts +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/index.js +1 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.d.ts +2 -0
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.js +8 -2
- package/packages/gsd-agent-core/dist/session/agent-session-compaction.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +7 -0
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +69 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
- package/packages/gsd-agent-core/dist/turn-latency.d.ts +47 -0
- package/packages/gsd-agent-core/dist/turn-latency.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/turn-latency.js +123 -0
- package/packages/gsd-agent-core/dist/turn-latency.js.map +1 -0
- package/packages/gsd-agent-core/package.json +6 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +21 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +213 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +92 -31
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js +7 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.js +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-command-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-class-constants.d.ts +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-class-constants.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-class-constants.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-class-constants.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/remote-questions.d.ts.map +1 -1
- package/packages/mcp-server/dist/remote-questions.js +23 -9
- package/packages/mcp-server/dist/remote-questions.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +84 -2
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +42 -3
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +5 -1
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +2 -0
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.js +3 -1
- package/packages/pi-agent-core/dist/harness/agent-harness.js.map +1 -1
- package/packages/pi-agent-core/dist/harness/types.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/types.js.map +1 -1
- package/packages/pi-agent-core/dist/types.d.ts +6 -1
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/api-registry.d.ts +2 -0
- package/packages/pi-ai/dist/api-registry.d.ts.map +1 -1
- package/packages/pi-ai/dist/api-registry.js +23 -0
- package/packages/pi-ai/dist/api-registry.js.map +1 -1
- package/packages/pi-ai/dist/image-models.generated.d.ts +15 -0
- package/packages/pi-ai/dist/image-models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/image-models.generated.js +15 -0
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +411 -39
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +504 -153
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/stream.js +6 -6
- package/packages/pi-ai/dist/stream.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +2 -2
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +3 -2
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/render-utils.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/render-utils.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/render-utils.js +6 -0
- package/packages/pi-coding-agent/dist/core/tools/render-utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +3 -2
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/terminal.d.ts +1 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +8 -4
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +579 -0
- package/src/resources/extensions/browser-tools/engine/selection.ts +19 -0
- package/src/resources/extensions/browser-tools/extension-manifest.json +2 -2
- package/src/resources/extensions/browser-tools/index.ts +60 -9
- package/src/resources/extensions/browser-tools/package.json +5 -1
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +35 -0
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +33 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +196 -16
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +239 -63
- package/src/resources/extensions/gsd/auto/orchestrator.ts +0 -1
- package/src/resources/extensions/gsd/auto/phases.ts +5 -3
- package/src/resources/extensions/gsd/auto-dashboard.ts +98 -18
- package/src/resources/extensions/gsd/auto-dispatch.ts +67 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +166 -9
- package/src/resources/extensions/gsd/auto-prompts.ts +106 -15
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -7
- package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -0
- package/src/resources/extensions/gsd/auto-start.ts +112 -17
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +1 -1
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +43 -73
- package/src/resources/extensions/gsd/auto-worktree.ts +23 -5
- package/src/resources/extensions/gsd/auto.ts +47 -5
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +96 -4
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +51 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +81 -25
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +70 -63
- package/src/resources/extensions/gsd/browser-evidence.ts +26 -2
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +137 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +6 -2
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +9 -5
- package/src/resources/extensions/gsd/commands-handlers.ts +76 -11
- package/src/resources/extensions/gsd/commands-maintenance.ts +197 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +136 -58
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +4 -1
- package/src/resources/extensions/gsd/commands-verdict.ts +1 -1
- package/src/resources/extensions/gsd/config-overlay.ts +3 -1
- package/src/resources/extensions/gsd/dashboard-overlay.ts +28 -7
- package/src/resources/extensions/gsd/docs/preferences-reference.md +8 -0
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +2 -2
- package/src/resources/extensions/gsd/error-classifier.ts +2 -1
- package/src/resources/extensions/gsd/escalation.ts +4 -4
- package/src/resources/extensions/gsd/exec-sandbox.ts +4 -0
- package/src/resources/extensions/gsd/forensics.ts +99 -5
- package/src/resources/extensions/gsd/gsd-db.ts +46 -8
- package/src/resources/extensions/gsd/guided-flow.ts +215 -217
- package/src/resources/extensions/gsd/mcp-filter.ts +3 -0
- package/src/resources/extensions/gsd/mcp-project-config.ts +105 -88
- package/src/resources/extensions/gsd/memory-store.ts +4 -1
- package/src/resources/extensions/gsd/migration-auto-check.ts +2 -2
- package/src/resources/extensions/gsd/milestone-closeout.ts +3 -1
- package/src/resources/extensions/gsd/pending-auto-start.ts +0 -2
- package/src/resources/extensions/gsd/post-unit-hooks.ts +14 -1
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +36 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +8 -0
- package/src/resources/extensions/gsd/prompts/forensics.md +61 -1
- package/src/resources/extensions/gsd/prompts/gate-evaluate.md +3 -1
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +33 -23
- package/src/resources/extensions/gsd/prompts/system.md +3 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +3 -3
- package/src/resources/extensions/gsd/recovery-classification.ts +20 -0
- package/src/resources/extensions/gsd/rule-registry.ts +558 -58
- package/src/resources/extensions/gsd/rule-types.ts +2 -0
- package/src/resources/extensions/gsd/safety/destructive-guard.ts +3 -0
- package/src/resources/extensions/gsd/skill-activation.ts +20 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +4 -2
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +1 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +20 -0
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +6 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +1 -0
- package/src/resources/extensions/gsd/state.ts +18 -14
- package/src/resources/extensions/gsd/templates/plan.md +3 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +156 -4
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +10 -2
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +143 -2
- package/src/resources/extensions/gsd/tests/auto-start-project-milestone-reconcile.test.ts +24 -2
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/browser-evidence.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +9 -15
- package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +26 -16
- package/src/resources/extensions/gsd/tests/commands-dispatcher-unmerged-milestone.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-validation-block.test.ts +38 -3
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/dashboard-overlay.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +50 -13
- package/src/resources/extensions/gsd/tests/discuss-milestone-structured-questions.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +60 -0
- package/src/resources/extensions/gsd/tests/doctor-runtime-checks.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/escalation.test.ts +16 -27
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/forensics-issue-routing.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/forensics-tool-scope.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +31 -79
- package/src/resources/extensions/gsd/tests/gsd-rebuild.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +86 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/guided-flow-state-rebuild.test.ts +40 -4
- package/src/resources/extensions/gsd/tests/guided-flow.test.ts +12 -9
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +72 -10
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +13 -6
- package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/memory-maintenance.test.ts +39 -8
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/new-milestone-discuss-routing.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +54 -7
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +39 -1
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/post-unit-retry-on-orchestrator-bridge.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +83 -1
- package/src/resources/extensions/gsd/tests/prompt-loader-extension-dir.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +18 -1
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/reactive-executor.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +191 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +84 -10
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +29 -6
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +29 -6
- package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +133 -0
- package/src/resources/extensions/gsd/tests/validation-block-guard.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-auto-prep.test.ts +17 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +493 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +40 -0
- package/src/resources/extensions/gsd/tool-contract.ts +6 -0
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +223 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +14 -1
- package/src/resources/extensions/gsd/tools/complete-task.ts +20 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +130 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +14 -9
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +2 -2
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +46 -15
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +589 -8
- package/src/resources/extensions/gsd/types.ts +69 -5
- package/src/resources/extensions/gsd/unit-context-manifest.ts +14 -5
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +186 -0
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
- package/src/resources/extensions/gsd/verdict-parser.ts +54 -13
- package/src/resources/extensions/gsd/verification-gate.ts +87 -1
- package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -1
- package/src/resources/extensions/gsd/workflow-mcp.ts +5 -73
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +26 -0
- package/src/resources/extensions/mcp-client/manager.ts +33 -1
- package/src/resources/extensions/mcp-client/tests/manager.test.ts +35 -0
- package/src/resources/extensions/shared/gsd-browser-cli.ts +172 -0
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound-corrections.test.ts +0 -246
- package/src/resources/extensions/gsd/tests/gate-1b-recovery-bound.test.ts +0 -218
- /package/dist/web/standalone/.next/static/{L9N5SPFi7f-Ne4u2uXzCe → h4TGni4xJzlZjGkxaT6uU}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{L9N5SPFi7f-Ne4u2uXzCe → h4TGni4xJzlZjGkxaT6uU}/_ssgManifest.js +0 -0
|
@@ -270,6 +270,29 @@ export interface GSDActiveUnit {
|
|
|
270
270
|
|
|
271
271
|
// ─── Post-Unit Hook Types ─────────────────────────────────────────────────
|
|
272
272
|
|
|
273
|
+
export type PostUnitHookCriticality = "advisory" | "blocking";
|
|
274
|
+
|
|
275
|
+
export type PostUnitHookOutcomeVerdict =
|
|
276
|
+
| "pass"
|
|
277
|
+
| "advisory"
|
|
278
|
+
| "needs-rework"
|
|
279
|
+
| "needs-remediation"
|
|
280
|
+
| "needs-attention";
|
|
281
|
+
|
|
282
|
+
export type PostUnitHookOnBlockAction =
|
|
283
|
+
| "retry-unit"
|
|
284
|
+
| "retry-task"
|
|
285
|
+
| "queue-task"
|
|
286
|
+
| "queue-slice"
|
|
287
|
+
| "pause";
|
|
288
|
+
|
|
289
|
+
export interface PostUnitHookOnBlockConfig {
|
|
290
|
+
/** Routing action for blocking hook findings. */
|
|
291
|
+
action: PostUnitHookOnBlockAction;
|
|
292
|
+
/** Optional artifact used by compatibility retry routing. */
|
|
293
|
+
artifact?: string;
|
|
294
|
+
}
|
|
295
|
+
|
|
273
296
|
export interface PostUnitHookConfig {
|
|
274
297
|
/** Unique hook identifier — used in idempotency keys and logging. */
|
|
275
298
|
name: string;
|
|
@@ -283,8 +306,12 @@ export interface PostUnitHookConfig {
|
|
|
283
306
|
model?: string;
|
|
284
307
|
/** Expected output file name (relative to task/slice dir). Used for idempotency — skip if exists. */
|
|
285
308
|
artifact?: string;
|
|
309
|
+
/** Whether the hook is advisory or blocks unit advancement. Default advisory. */
|
|
310
|
+
criticality?: PostUnitHookCriticality;
|
|
286
311
|
/** If this file is produced instead of artifact, re-run the trigger unit then re-run hooks. */
|
|
287
312
|
retry_on?: string;
|
|
313
|
+
/** Optional routing for blocking findings. */
|
|
314
|
+
on_block?: PostUnitHookOnBlockConfig;
|
|
288
315
|
/** Agent definition file to use. */
|
|
289
316
|
agent?: string;
|
|
290
317
|
/** Set false to disable without removing config. Default true. */
|
|
@@ -317,6 +344,31 @@ export interface HookDispatchResult {
|
|
|
317
344
|
unitId: string;
|
|
318
345
|
}
|
|
319
346
|
|
|
347
|
+
export interface PostUnitGateBlock {
|
|
348
|
+
/** Blocking hook name. */
|
|
349
|
+
hookName: string;
|
|
350
|
+
/** The unit type that triggered the gate. */
|
|
351
|
+
triggerUnitType: string;
|
|
352
|
+
/** The unit ID that triggered the gate. */
|
|
353
|
+
triggerUnitId: string;
|
|
354
|
+
/** Gate artifact name, when configured. */
|
|
355
|
+
artifact?: string;
|
|
356
|
+
/** Absolute path to the gate artifact, when known. */
|
|
357
|
+
artifactPath?: string;
|
|
358
|
+
/** Parsed blocking verdict, when present. */
|
|
359
|
+
verdict?: PostUnitHookOutcomeVerdict | "failed";
|
|
360
|
+
/** Configured routing action that caused the pause. */
|
|
361
|
+
action: PostUnitHookOnBlockAction;
|
|
362
|
+
/** Human-readable pause reason. */
|
|
363
|
+
reason: string;
|
|
364
|
+
/** Current hook cycle count. */
|
|
365
|
+
cycle: number;
|
|
366
|
+
/** Configured max cycle count. */
|
|
367
|
+
maxCycles: number;
|
|
368
|
+
/** Optional compatibility retry artifact. */
|
|
369
|
+
retryArtifact?: string;
|
|
370
|
+
}
|
|
371
|
+
|
|
320
372
|
// ─── Budget & Notification Types ──────────────────────────────────────────
|
|
321
373
|
|
|
322
374
|
export type BudgetEnforcementMode = "warn" | "pause" | "halt";
|
|
@@ -384,10 +436,10 @@ export interface EscalationArtifact {
|
|
|
384
436
|
/** Why the executor recommends that option (1-2 sentences). */
|
|
385
437
|
recommendationRationale: string;
|
|
386
438
|
/**
|
|
387
|
-
* When true, the
|
|
388
|
-
*
|
|
389
|
-
*
|
|
390
|
-
*
|
|
439
|
+
* When true, the recommendation is recorded as the default path but the
|
|
440
|
+
* loop still pauses until the user explicitly resolves the escalation.
|
|
441
|
+
* When false, auto-mode also pauses until the user resolves via
|
|
442
|
+
* `/gsd escalate resolve`.
|
|
391
443
|
*/
|
|
392
444
|
continueWithDefault: boolean;
|
|
393
445
|
createdAt: string;
|
|
@@ -452,6 +504,15 @@ export interface PreDispatchResult {
|
|
|
452
504
|
export interface PersistedHookState {
|
|
453
505
|
/** Cycle counts keyed as "hookName/triggerUnitType/triggerUnitId". */
|
|
454
506
|
cycleCounts: Record<string, number>;
|
|
507
|
+
/** In-flight hook, persisted so blocking gates cannot be skipped after resume. */
|
|
508
|
+
activeHook?: HookExecutionState | null;
|
|
509
|
+
/** Remaining hook queue by hook name and trigger unit. */
|
|
510
|
+
hookQueue?: Array<{
|
|
511
|
+
hookName: string;
|
|
512
|
+
triggerUnitType: string;
|
|
513
|
+
triggerUnitId: string;
|
|
514
|
+
forceRun?: boolean;
|
|
515
|
+
}>;
|
|
455
516
|
/** Timestamp of last state save. */
|
|
456
517
|
savedAt: string;
|
|
457
518
|
}
|
|
@@ -465,6 +526,8 @@ export interface HookStatusEntry {
|
|
|
465
526
|
enabled: boolean;
|
|
466
527
|
/** What unit types it targets. */
|
|
467
528
|
targets: string[];
|
|
529
|
+
/** Whether this post-unit hook is advisory or blocking. */
|
|
530
|
+
criticality?: PostUnitHookCriticality;
|
|
468
531
|
/** Current cycle counts for active triggers. */
|
|
469
532
|
activeCycles: Record<string, number>;
|
|
470
533
|
}
|
|
@@ -644,7 +707,8 @@ export interface CompleteSliceParams {
|
|
|
644
707
|
sliceTitle: string;
|
|
645
708
|
oneLiner: string;
|
|
646
709
|
narrative: string;
|
|
647
|
-
verification
|
|
710
|
+
/** @optional — if omitted, verification section is left blank in summary */
|
|
711
|
+
verification?: string;
|
|
648
712
|
uatContent: string;
|
|
649
713
|
/** @optional — defaults to [] when omitted by models with limited tool-calling */
|
|
650
714
|
keyFiles?: string[];
|
|
@@ -137,7 +137,9 @@ export type ContextModePolicy =
|
|
|
137
137
|
* edits project markdown outside .gsd/.
|
|
138
138
|
* - "verification"
|
|
139
139
|
* — Read tools + Bash for verification commands, writes
|
|
140
|
-
* restricted to .gsd
|
|
140
|
+
* restricted to .gsd/**. Subagent dispatch is denied unless
|
|
141
|
+
* `allowedSubagents` opts a unit into controlled read-only
|
|
142
|
+
* specialist delegation.
|
|
141
143
|
*
|
|
142
144
|
* The allowlist for "docs" is declared per-manifest rather than hardcoded so
|
|
143
145
|
* projects with non-standard doc layouts can extend it without forking the
|
|
@@ -150,7 +152,7 @@ export type ToolsPolicy =
|
|
|
150
152
|
| { readonly mode: "planning" }
|
|
151
153
|
| { readonly mode: "planning-dispatch"; readonly allowedSubagents: readonly string[] }
|
|
152
154
|
| { readonly mode: "docs"; readonly allowedPathGlobs: readonly string[] }
|
|
153
|
-
| { readonly mode: "verification" };
|
|
155
|
+
| { readonly mode: "verification"; readonly allowedSubagents?: readonly string[] };
|
|
154
156
|
|
|
155
157
|
// ─── Computed-artifact registry (#4924 v2 contract) ───────────────────────
|
|
156
158
|
|
|
@@ -305,6 +307,10 @@ const COMMON_BUDGET_SMALL = 250_000; // ~65K tokens
|
|
|
305
307
|
const TOOLS_ALL: ToolsPolicy = { mode: "all" };
|
|
306
308
|
const TOOLS_PLANNING: ToolsPolicy = { mode: "planning" };
|
|
307
309
|
const TOOLS_VERIFICATION: ToolsPolicy = { mode: "verification" };
|
|
310
|
+
const TOOLS_VERIFICATION_DISPATCH_UAT: ToolsPolicy = {
|
|
311
|
+
mode: "verification",
|
|
312
|
+
allowedSubagents: ["mnemo", "scout", "reviewer", "tester"],
|
|
313
|
+
};
|
|
308
314
|
// Like TOOLS_PLANNING but permits dispatch to read-only recon/planning
|
|
309
315
|
// specialists. Runtime-enforced by write-gate.ts before the subagent tool runs.
|
|
310
316
|
const TOOLS_PLANNING_DISPATCH_RECON: ToolsPolicy = {
|
|
@@ -601,7 +607,7 @@ export const UNIT_MANIFESTS: Record<UnitType, UnitContextManifest> = {
|
|
|
601
607
|
codebaseMap: false,
|
|
602
608
|
preferences: "active-only",
|
|
603
609
|
contextMode: "verification",
|
|
604
|
-
tools:
|
|
610
|
+
tools: TOOLS_VERIFICATION_DISPATCH_UAT,
|
|
605
611
|
artifacts: {
|
|
606
612
|
inline: ["slice-uat"],
|
|
607
613
|
excerpt: ["slice-summary"],
|
|
@@ -792,9 +798,12 @@ export function compileSubagentPermissionContract(
|
|
|
792
798
|
if (policy.mode === "all") {
|
|
793
799
|
return { allowed: true, allowedSubagents: ["*"], toolsMode: policy.mode };
|
|
794
800
|
}
|
|
795
|
-
if (
|
|
801
|
+
if (
|
|
802
|
+
(policy.mode === "planning-dispatch" || policy.mode === "verification") &&
|
|
803
|
+
Array.isArray(policy.allowedSubagents)
|
|
804
|
+
) {
|
|
796
805
|
return {
|
|
797
|
-
allowed:
|
|
806
|
+
allowed: policy.allowedSubagents.length > 0,
|
|
798
807
|
allowedSubagents: [...policy.allowedSubagents],
|
|
799
808
|
toolsMode: policy.mode,
|
|
800
809
|
};
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
// Project/App: gsd-pi
|
|
2
|
+
// File Purpose: Central Unit-to-tool contracts for phase-aware GSD tool surfaces.
|
|
3
|
+
|
|
4
|
+
export interface UnitToolSurfaceContract {
|
|
5
|
+
allowedGsdTools: readonly string[];
|
|
6
|
+
requiredWorkflowTools: readonly string[];
|
|
7
|
+
forbiddenGsdTools?: Readonly<Record<string, string>>;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const RUN_UAT_WORKFLOW_TOOL_NAMES = [
|
|
11
|
+
"gsd_uat_exec",
|
|
12
|
+
"gsd_uat_result_save",
|
|
13
|
+
"gsd_resume",
|
|
14
|
+
"gsd_milestone_status",
|
|
15
|
+
"gsd_journal_query",
|
|
16
|
+
] as const;
|
|
17
|
+
|
|
18
|
+
export const RUN_UAT_READ_ONLY_TOOL_NAMES = [
|
|
19
|
+
"find",
|
|
20
|
+
"glob",
|
|
21
|
+
"grep",
|
|
22
|
+
"ls",
|
|
23
|
+
"read",
|
|
24
|
+
] as const;
|
|
25
|
+
|
|
26
|
+
export const RUN_UAT_BROWSER_TOOL_NAMES = [
|
|
27
|
+
"browser_navigate",
|
|
28
|
+
"browser_click",
|
|
29
|
+
"browser_type",
|
|
30
|
+
"browser_fill_form",
|
|
31
|
+
"browser_click_ref",
|
|
32
|
+
"browser_fill_ref",
|
|
33
|
+
"browser_wait_for",
|
|
34
|
+
"browser_assert",
|
|
35
|
+
"browser_verify",
|
|
36
|
+
"browser_screenshot",
|
|
37
|
+
"browser_snapshot_refs",
|
|
38
|
+
"browser_find",
|
|
39
|
+
"browser_get_console_logs",
|
|
40
|
+
"browser_get_network_logs",
|
|
41
|
+
"browser_evaluate",
|
|
42
|
+
"browser_reload",
|
|
43
|
+
"browser_batch",
|
|
44
|
+
"browser_act",
|
|
45
|
+
] as const;
|
|
46
|
+
|
|
47
|
+
export const RUN_UAT_TOOL_PRESENTATION_PLAN_ID = "run-uat/default-v1";
|
|
48
|
+
|
|
49
|
+
export const UNIT_TOOL_CONTRACTS: Record<string, UnitToolSurfaceContract> = {
|
|
50
|
+
"research-milestone": {
|
|
51
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
52
|
+
requiredWorkflowTools: ["gsd_summary_save"],
|
|
53
|
+
},
|
|
54
|
+
"plan-milestone": {
|
|
55
|
+
allowedGsdTools: ["gsd_plan_milestone", "gsd_decision_save", "gsd_requirement_update"],
|
|
56
|
+
requiredWorkflowTools: ["gsd_plan_milestone"],
|
|
57
|
+
},
|
|
58
|
+
"discuss-milestone": {
|
|
59
|
+
allowedGsdTools: [
|
|
60
|
+
"gsd_summary_save",
|
|
61
|
+
"gsd_decision_save",
|
|
62
|
+
"gsd_requirement_save",
|
|
63
|
+
"gsd_requirement_update",
|
|
64
|
+
"gsd_plan_milestone",
|
|
65
|
+
"gsd_milestone_generate_id",
|
|
66
|
+
],
|
|
67
|
+
requiredWorkflowTools: [
|
|
68
|
+
"gsd_summary_save",
|
|
69
|
+
"gsd_requirement_save",
|
|
70
|
+
"gsd_requirement_update",
|
|
71
|
+
"gsd_plan_milestone",
|
|
72
|
+
"gsd_milestone_generate_id",
|
|
73
|
+
],
|
|
74
|
+
},
|
|
75
|
+
"discuss-slice": {
|
|
76
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
77
|
+
requiredWorkflowTools: ["gsd_summary_save"],
|
|
78
|
+
},
|
|
79
|
+
"validate-milestone": {
|
|
80
|
+
allowedGsdTools: ["gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
81
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"],
|
|
82
|
+
},
|
|
83
|
+
"complete-milestone": {
|
|
84
|
+
allowedGsdTools: ["gsd_complete_milestone", "subagent"],
|
|
85
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_complete_milestone"],
|
|
86
|
+
},
|
|
87
|
+
"research-slice": {
|
|
88
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
89
|
+
requiredWorkflowTools: ["gsd_summary_save"],
|
|
90
|
+
},
|
|
91
|
+
"plan-slice": {
|
|
92
|
+
allowedGsdTools: ["gsd_plan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
93
|
+
requiredWorkflowTools: ["gsd_plan_slice"],
|
|
94
|
+
},
|
|
95
|
+
"refine-slice": {
|
|
96
|
+
allowedGsdTools: ["gsd_plan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
97
|
+
requiredWorkflowTools: [],
|
|
98
|
+
},
|
|
99
|
+
"replan-slice": {
|
|
100
|
+
allowedGsdTools: ["gsd_replan_slice", "gsd_plan_task", "gsd_decision_save"],
|
|
101
|
+
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
102
|
+
},
|
|
103
|
+
"complete-slice": {
|
|
104
|
+
allowedGsdTools: [
|
|
105
|
+
"gsd_slice_complete",
|
|
106
|
+
"gsd_task_reopen",
|
|
107
|
+
"gsd_replan_slice",
|
|
108
|
+
"gsd_decision_save",
|
|
109
|
+
"gsd_requirement_update",
|
|
110
|
+
"subagent",
|
|
111
|
+
],
|
|
112
|
+
requiredWorkflowTools: ["gsd_slice_complete", "gsd_task_reopen", "gsd_replan_slice"],
|
|
113
|
+
forbiddenGsdTools: {
|
|
114
|
+
gsd_uat_result_save: "Run UAT owns persisted UAT Assessment.",
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
"reassess-roadmap": {
|
|
118
|
+
allowedGsdTools: ["gsd_reassess_roadmap"],
|
|
119
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
120
|
+
},
|
|
121
|
+
"execute-task": {
|
|
122
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
123
|
+
requiredWorkflowTools: ["gsd_task_complete"],
|
|
124
|
+
},
|
|
125
|
+
"execute-task-simple": {
|
|
126
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
127
|
+
requiredWorkflowTools: ["gsd_task_complete"],
|
|
128
|
+
},
|
|
129
|
+
"reactive-execute": {
|
|
130
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
131
|
+
requiredWorkflowTools: ["gsd_task_complete"],
|
|
132
|
+
},
|
|
133
|
+
"run-uat": {
|
|
134
|
+
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
135
|
+
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
136
|
+
forbiddenGsdTools: {
|
|
137
|
+
gsd_exec: "Use gsd_uat_exec so acceptance evidence is typed as UAT-owned.",
|
|
138
|
+
gsd_save_gate_result: "gsd_uat_result_save owns the aggregate UAT gate.",
|
|
139
|
+
gsd_summary_save: "gsd_uat_result_save owns persisted UAT Assessment writes.",
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
"gate-evaluate": {
|
|
143
|
+
allowedGsdTools: ["gsd_save_gate_result"],
|
|
144
|
+
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
145
|
+
},
|
|
146
|
+
"rewrite-docs": {
|
|
147
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
148
|
+
requiredWorkflowTools: [],
|
|
149
|
+
},
|
|
150
|
+
"workflow-preferences": {
|
|
151
|
+
allowedGsdTools: ["gsd_summary_save"],
|
|
152
|
+
requiredWorkflowTools: [],
|
|
153
|
+
},
|
|
154
|
+
"discuss-project": {
|
|
155
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
156
|
+
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
157
|
+
},
|
|
158
|
+
"discuss-requirements": {
|
|
159
|
+
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
160
|
+
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
161
|
+
},
|
|
162
|
+
"research-decision": {
|
|
163
|
+
allowedGsdTools: ["gsd_summary_save"],
|
|
164
|
+
requiredWorkflowTools: ["ask_user_questions"],
|
|
165
|
+
},
|
|
166
|
+
"research-project": {
|
|
167
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
168
|
+
requiredWorkflowTools: [],
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export const AUTO_UNIT_SCOPED_TOOLS: Record<string, readonly string[]> = Object.fromEntries(
|
|
173
|
+
Object.entries(UNIT_TOOL_CONTRACTS).map(([unitType, contract]) => [unitType, contract.allowedGsdTools]),
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
export function getUnitToolSurfaceContract(unitType: string): UnitToolSurfaceContract | undefined {
|
|
177
|
+
return UNIT_TOOL_CONTRACTS[unitType];
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
export function getRequiredWorkflowToolsForUnit(unitType: string): string[] {
|
|
181
|
+
return [...(UNIT_TOOL_CONTRACTS[unitType]?.requiredWorkflowTools ?? [])];
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
export function getForbiddenGsdToolReason(unitType: string, toolName: string): string | undefined {
|
|
185
|
+
return UNIT_TOOL_CONTRACTS[unitType]?.forbiddenGsdTools?.[toolName];
|
|
186
|
+
}
|
|
@@ -14,6 +14,8 @@ const VALIDATION_BLOCK_RE =
|
|
|
14
14
|
/milestone validation returned needs-(?:attention|remediation)|validation verdict is needs-(?:attention|remediation)/i;
|
|
15
15
|
|
|
16
16
|
const VALIDATION_SAFE_DISPATCH_COMMANDS = new Set([
|
|
17
|
+
"reassess",
|
|
18
|
+
"reassess-roadmap",
|
|
17
19
|
"validate",
|
|
18
20
|
"validate-milestone",
|
|
19
21
|
]);
|
|
@@ -7,9 +7,60 @@
|
|
|
7
7
|
|
|
8
8
|
import { extractUatType } from "./files.js";
|
|
9
9
|
import type { UatType } from "./files.js";
|
|
10
|
+
import { splitFrontmatter, parseFrontmatterMap } from "../shared/frontmatter.js";
|
|
11
|
+
import { parse as parseYaml } from "yaml";
|
|
12
|
+
|
|
13
|
+
function normalizeVerdict(value: unknown): string | undefined {
|
|
14
|
+
if (typeof value !== "string") return undefined;
|
|
15
|
+
let verdict = value.trim().toLowerCase();
|
|
16
|
+
if (!verdict) return undefined;
|
|
17
|
+
if (verdict === "passed") verdict = "pass";
|
|
18
|
+
return verdict;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function getCaseInsensitive(obj: Record<string, unknown>, key: string): unknown {
|
|
22
|
+
const lowerKey = key.toLowerCase();
|
|
23
|
+
for (const [candidate, value] of Object.entries(obj)) {
|
|
24
|
+
if (candidate.toLowerCase() === lowerKey) return value;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
10
28
|
|
|
11
29
|
// ── Verdict extraction ──────────────────────────────────────────────────
|
|
12
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Extract and normalize the frontmatter `verdict` value.
|
|
33
|
+
*
|
|
34
|
+
* Supports both top-level `verdict` and the hook outcome shape
|
|
35
|
+
* `outcome.verdict`. Returns `undefined` when frontmatter is absent or has no
|
|
36
|
+
* verdict field.
|
|
37
|
+
*/
|
|
38
|
+
export function extractFrontmatterVerdict(content: string): string | undefined {
|
|
39
|
+
const [frontmatterLines] = splitFrontmatter(content);
|
|
40
|
+
if (!frontmatterLines) return undefined;
|
|
41
|
+
|
|
42
|
+
try {
|
|
43
|
+
const parsed = parseYaml(frontmatterLines.join("\n")) as unknown;
|
|
44
|
+
if (parsed && typeof parsed === "object") {
|
|
45
|
+
const root = parsed as Record<string, unknown>;
|
|
46
|
+
const topLevel = normalizeVerdict(getCaseInsensitive(root, "verdict"));
|
|
47
|
+
if (topLevel) return topLevel;
|
|
48
|
+
const outcome = getCaseInsensitive(root, "outcome");
|
|
49
|
+
if (outcome && typeof outcome === "object") {
|
|
50
|
+
const nested = normalizeVerdict(getCaseInsensitive(outcome as Record<string, unknown>, "verdict"));
|
|
51
|
+
if (nested) return nested;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
} catch {
|
|
55
|
+
// Fall through to the permissive parser used by legacy frontmatter paths.
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
const frontmatter = parseFrontmatterMap(frontmatterLines);
|
|
59
|
+
const topLevel = normalizeVerdict(getCaseInsensitive(frontmatter, "verdict"));
|
|
60
|
+
if (topLevel) return topLevel;
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
|
|
13
64
|
/**
|
|
14
65
|
* Extract and normalize the `verdict` value from YAML frontmatter.
|
|
15
66
|
*
|
|
@@ -21,24 +72,14 @@ import type { UatType } from "./files.js";
|
|
|
21
72
|
*/
|
|
22
73
|
export function extractVerdict(content: string): string | undefined {
|
|
23
74
|
// Primary: YAML frontmatter verdict (canonical format)
|
|
24
|
-
const
|
|
25
|
-
if (
|
|
26
|
-
const verdictMatch = fmMatch[1].match(/verdict:\s*([\w-]+)/i);
|
|
27
|
-
if (verdictMatch) {
|
|
28
|
-
let v = verdictMatch[1].toLowerCase();
|
|
29
|
-
if (v === "passed") v = "pass";
|
|
30
|
-
return v;
|
|
31
|
-
}
|
|
32
|
-
return undefined;
|
|
33
|
-
}
|
|
75
|
+
const [frontmatterLines] = splitFrontmatter(content);
|
|
76
|
+
if (frontmatterLines) return extractFrontmatterVerdict(content);
|
|
34
77
|
|
|
35
78
|
// Fallback: detect verdict in markdown body (LLM manual writes, #2960).
|
|
36
79
|
// Matches patterns like: **Verdict:** PASS, **Verdict:** ✅ PASS, **Verdict** needs-remediation
|
|
37
80
|
const bodyMatch = content.match(/\*\*Verdict:?\*\*\s*(?:✅\s*)?(\w[\w-]*)/i);
|
|
38
81
|
if (bodyMatch) {
|
|
39
|
-
|
|
40
|
-
if (v === "passed") v = "pass";
|
|
41
|
-
return v;
|
|
82
|
+
return normalizeVerdict(bodyMatch[1]);
|
|
42
83
|
}
|
|
43
84
|
|
|
44
85
|
return undefined;
|
|
@@ -295,6 +295,90 @@ function hasUnsafeShellSyntax(cmd: string): boolean {
|
|
|
295
295
|
return false;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
|
+
function splitLeadingShellWords(cmd: string): string[] {
|
|
299
|
+
const words: string[] = [];
|
|
300
|
+
let current = "";
|
|
301
|
+
let inSingle = false;
|
|
302
|
+
let inDouble = false;
|
|
303
|
+
let escaped = false;
|
|
304
|
+
|
|
305
|
+
for (let i = 0; i < cmd.length; i += 1) {
|
|
306
|
+
const ch = cmd[i];
|
|
307
|
+
|
|
308
|
+
if (escaped) {
|
|
309
|
+
current += ch;
|
|
310
|
+
escaped = false;
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
if (ch === "\\" && !inSingle) {
|
|
315
|
+
escaped = true;
|
|
316
|
+
continue;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (ch === "'" && !inDouble) {
|
|
320
|
+
inSingle = !inSingle;
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
if (ch === "\"" && !inSingle) {
|
|
325
|
+
inDouble = !inDouble;
|
|
326
|
+
continue;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
if (!inSingle && !inDouble) {
|
|
330
|
+
if (/\s/.test(ch)) {
|
|
331
|
+
if (current) {
|
|
332
|
+
words.push(current);
|
|
333
|
+
current = "";
|
|
334
|
+
}
|
|
335
|
+
continue;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
if ([";", "|", "&", "<", ">"].includes(ch)) {
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
current += ch;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
if (current) {
|
|
347
|
+
words.push(current);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return words;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function isCountFlag(token: string): boolean {
|
|
354
|
+
return (
|
|
355
|
+
token === "--count" ||
|
|
356
|
+
token.startsWith("--count=") ||
|
|
357
|
+
token === "--count-matches" ||
|
|
358
|
+
token.startsWith("--count-matches=") ||
|
|
359
|
+
/^-[A-Za-z]*c[A-Za-z]*$/.test(token)
|
|
360
|
+
);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
function countSearchWarning(command: string, exitCode: number): string | null {
|
|
364
|
+
if (exitCode !== 1) return null;
|
|
365
|
+
|
|
366
|
+
const trimmed = command.trim();
|
|
367
|
+
if (trimmed.startsWith("!")) return null;
|
|
368
|
+
|
|
369
|
+
const [tool, ...args] = splitLeadingShellWords(trimmed);
|
|
370
|
+
if (tool !== "grep" && tool !== "rg") return null;
|
|
371
|
+
if (!args.some(isCountFlag)) return null;
|
|
372
|
+
|
|
373
|
+
return `verification-gate: warning: '${tool} -c' returns exit 1 when count=0; for absence checks use '! ${tool} -q ...' instead.`;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
function appendStderrWarning(stderr: string, warning: string | null): string {
|
|
377
|
+
if (!warning) return stderr;
|
|
378
|
+
const trimmed = stderr.trimEnd();
|
|
379
|
+
return trimmed ? `${trimmed}\n${warning}` : warning;
|
|
380
|
+
}
|
|
381
|
+
|
|
298
382
|
/**
|
|
299
383
|
* Known executable first-tokens that are safe to run.
|
|
300
384
|
* Lowercase commands, common build/test tools, and npm/yarn/pnpm invocations.
|
|
@@ -486,11 +570,13 @@ export function runVerificationGate(options: RunVerificationGateOptions): Verifi
|
|
|
486
570
|
stderr = truncate(result.stderr, MAX_OUTPUT_BYTES);
|
|
487
571
|
}
|
|
488
572
|
|
|
573
|
+
const warning = countSearchWarning(command, exitCode);
|
|
574
|
+
|
|
489
575
|
checks.push({
|
|
490
576
|
command,
|
|
491
577
|
exitCode,
|
|
492
578
|
stdout: truncate(result.stdout, MAX_OUTPUT_BYTES),
|
|
493
|
-
stderr,
|
|
579
|
+
stderr: truncate(appendStderrWarning(stderr, warning), MAX_OUTPUT_BYTES),
|
|
494
580
|
durationMs,
|
|
495
581
|
});
|
|
496
582
|
}
|
|
@@ -58,6 +58,7 @@ export function shouldAutoPrepareWorkflowMcp(ctx: WorkflowMcpAutoPrepContext): b
|
|
|
58
58
|
const authMode = getAuthModeSafe(ctx, provider);
|
|
59
59
|
|
|
60
60
|
if (provider !== "claude-code") return false;
|
|
61
|
+
if (authMode === undefined) return true;
|
|
61
62
|
return usesWorkflowMcpTransport(authMode as any, baseUrl) || authMode === "externalCli";
|
|
62
63
|
}
|
|
63
64
|
|
|
@@ -72,7 +73,7 @@ export function prepareWorkflowMcpForProject(
|
|
|
72
73
|
try {
|
|
73
74
|
const result = ensureProjectWorkflowMcpConfig(projectRoot);
|
|
74
75
|
if (result.status !== "unchanged") {
|
|
75
|
-
prepCtx.ui?.notify?.(`
|
|
76
|
+
prepCtx.ui?.notify?.(`GSD MCP Server Prepared at ${result.configPath}`, "info");
|
|
76
77
|
}
|
|
77
78
|
return result;
|
|
78
79
|
} catch (err) {
|
|
@@ -2,6 +2,7 @@ import { execSync } from "node:child_process";
|
|
|
2
2
|
import { existsSync, realpathSync } from "node:fs";
|
|
3
3
|
import { dirname, resolve, sep } from "node:path";
|
|
4
4
|
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
5
|
+
import { getRequiredWorkflowToolsForUnit } from "./unit-tool-contracts.js";
|
|
5
6
|
|
|
6
7
|
type WorkflowExecutorsModule = typeof import("./tools/workflow-tool-executors.js");
|
|
7
8
|
|
|
@@ -100,6 +101,8 @@ const MCP_WORKFLOW_TOOL_SURFACE = new Set([
|
|
|
100
101
|
"gsd_task_complete",
|
|
101
102
|
"gsd_task_reopen",
|
|
102
103
|
"gsd_update_requirement",
|
|
104
|
+
"gsd_uat_exec",
|
|
105
|
+
"gsd_uat_result_save",
|
|
103
106
|
"gsd_validate_milestone",
|
|
104
107
|
]);
|
|
105
108
|
|
|
@@ -411,82 +414,11 @@ export function buildWorkflowMcpServers(
|
|
|
411
414
|
}
|
|
412
415
|
|
|
413
416
|
export function getRequiredWorkflowToolsForGuidedUnit(unitType: string): string[] {
|
|
414
|
-
|
|
415
|
-
case "discuss-project":
|
|
416
|
-
return ["ask_user_questions", "gsd_summary_save"];
|
|
417
|
-
case "discuss-requirements":
|
|
418
|
-
return ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"];
|
|
419
|
-
case "research-decision":
|
|
420
|
-
return ["ask_user_questions"];
|
|
421
|
-
case "discuss-milestone":
|
|
422
|
-
return [
|
|
423
|
-
"gsd_summary_save",
|
|
424
|
-
"gsd_requirement_save",
|
|
425
|
-
"gsd_requirement_update",
|
|
426
|
-
"gsd_plan_milestone",
|
|
427
|
-
"gsd_milestone_generate_id",
|
|
428
|
-
];
|
|
429
|
-
case "discuss-slice":
|
|
430
|
-
return ["gsd_summary_save"];
|
|
431
|
-
case "research-milestone":
|
|
432
|
-
case "research-slice":
|
|
433
|
-
return ["gsd_summary_save"];
|
|
434
|
-
case "plan-milestone":
|
|
435
|
-
return ["gsd_plan_milestone"];
|
|
436
|
-
case "plan-slice":
|
|
437
|
-
return ["gsd_plan_slice"];
|
|
438
|
-
case "execute-task":
|
|
439
|
-
return ["gsd_task_complete"];
|
|
440
|
-
case "complete-slice":
|
|
441
|
-
return ["gsd_slice_complete", "gsd_task_reopen", "gsd_replan_slice"];
|
|
442
|
-
default:
|
|
443
|
-
return [];
|
|
444
|
-
}
|
|
417
|
+
return getRequiredWorkflowToolsForUnit(unitType);
|
|
445
418
|
}
|
|
446
419
|
|
|
447
420
|
export function getRequiredWorkflowToolsForAutoUnit(unitType: string): string[] {
|
|
448
|
-
|
|
449
|
-
case "discuss-project":
|
|
450
|
-
return ["ask_user_questions", "gsd_summary_save"];
|
|
451
|
-
case "discuss-requirements":
|
|
452
|
-
return ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"];
|
|
453
|
-
case "research-decision":
|
|
454
|
-
return ["ask_user_questions"];
|
|
455
|
-
case "discuss-milestone":
|
|
456
|
-
return [
|
|
457
|
-
"gsd_summary_save",
|
|
458
|
-
"gsd_requirement_save",
|
|
459
|
-
"gsd_requirement_update",
|
|
460
|
-
"gsd_plan_milestone",
|
|
461
|
-
"gsd_milestone_generate_id",
|
|
462
|
-
];
|
|
463
|
-
case "research-milestone":
|
|
464
|
-
case "research-slice":
|
|
465
|
-
case "run-uat":
|
|
466
|
-
return ["gsd_summary_save"];
|
|
467
|
-
case "plan-milestone":
|
|
468
|
-
return ["gsd_plan_milestone"];
|
|
469
|
-
case "plan-slice":
|
|
470
|
-
return ["gsd_plan_slice"];
|
|
471
|
-
case "execute-task":
|
|
472
|
-
case "execute-task-simple":
|
|
473
|
-
case "reactive-execute":
|
|
474
|
-
return ["gsd_task_complete"];
|
|
475
|
-
case "complete-slice":
|
|
476
|
-
return ["gsd_slice_complete", "gsd_task_reopen", "gsd_replan_slice"];
|
|
477
|
-
case "replan-slice":
|
|
478
|
-
return ["gsd_replan_slice"];
|
|
479
|
-
case "reassess-roadmap":
|
|
480
|
-
return ["gsd_milestone_status", "gsd_reassess_roadmap"];
|
|
481
|
-
case "gate-evaluate":
|
|
482
|
-
return ["gsd_save_gate_result"];
|
|
483
|
-
case "validate-milestone":
|
|
484
|
-
return ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"];
|
|
485
|
-
case "complete-milestone":
|
|
486
|
-
return ["gsd_milestone_status", "gsd_complete_milestone"];
|
|
487
|
-
default:
|
|
488
|
-
return [];
|
|
489
|
-
}
|
|
421
|
+
return getRequiredWorkflowToolsForUnit(unitType);
|
|
490
422
|
}
|
|
491
423
|
|
|
492
424
|
export function usesWorkflowMcpTransport(
|