@opengsd/gsd-pi 1.2.0-dev.955e4da0 → 1.2.0-dev.fb12b103
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-style.d.ts +17 -0
- package/dist/cli-style.js +28 -0
- package/dist/cli.js +1 -1
- package/dist/headless-events.d.ts +4 -2
- package/dist/headless-events.js +7 -29
- package/dist/models-resolver.d.ts +3 -13
- package/dist/models-resolver.js +3 -22
- package/dist/resource-loader.js +2 -14
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/async-jobs/async-bash-tool.js +30 -64
- package/dist/resources/extensions/async-jobs/await-tool.js +80 -12
- package/dist/resources/extensions/async-jobs/index.js +65 -0
- package/dist/resources/extensions/async-jobs/job-manager.js +12 -1
- package/dist/resources/extensions/bg-shell/bg-shell-command.js +6 -6
- package/dist/resources/extensions/bg-shell/bg-shell-tool.js +10 -7
- package/dist/resources/extensions/bg-shell/overlay.js +9 -6
- package/dist/resources/extensions/bg-shell/process-manager.js +54 -25
- package/dist/resources/extensions/bg-shell/readiness-detector.js +11 -0
- package/dist/resources/extensions/bg-shell/utilities.js +3 -0
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +209 -88
- package/dist/resources/extensions/browser-tools/engine/selection.js +73 -5
- package/dist/resources/extensions/browser-tools/index.js +69 -12
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +30 -4
- package/dist/resources/extensions/gsd/auto/orchestrator.js +7 -5
- package/dist/resources/extensions/gsd/auto-dispatch.js +12 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +25 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +11 -2
- package/dist/resources/extensions/gsd/auto-prompts.js +15 -10
- package/dist/resources/extensions/gsd/auto-start.js +15 -10
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +7 -16
- package/dist/resources/extensions/gsd/auto-worktree.js +30 -90
- package/dist/resources/extensions/gsd/auto.js +4 -13
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +3 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +23 -6
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +122 -20
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +6 -2
- package/dist/resources/extensions/gsd/branch-patterns.js +2 -0
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/browser-evidence.js +8 -2
- package/dist/resources/extensions/gsd/captures.js +4 -6
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +4 -12
- package/dist/resources/extensions/gsd/doctor-environment.js +2 -6
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +13 -15
- package/dist/resources/extensions/gsd/error-classifier.js +9 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/guidance.js +98 -0
- package/dist/resources/extensions/gsd/guided-flow.js +17 -2
- package/dist/resources/extensions/gsd/mcp-filter.js +2 -19
- package/dist/resources/extensions/gsd/mcp-tool-name.js +5 -13
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +1 -1
- package/dist/resources/extensions/gsd/migrate/safety.js +4 -1
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +6 -4
- package/dist/resources/extensions/gsd/paths.js +27 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +91 -3
- package/dist/resources/extensions/gsd/preferences-models.js +14 -48
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +1 -1
- package/dist/resources/extensions/gsd/prompts/system.md +5 -2
- package/dist/resources/extensions/gsd/provider-error-guidance.js +1 -5
- package/dist/resources/extensions/gsd/provider-switch-observer.js +1 -1
- package/dist/resources/extensions/gsd/publication.js +87 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +37 -94
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/state.js +1 -20
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +9 -7
- package/dist/resources/extensions/gsd/tools/plan-slice.js +12 -6
- package/dist/resources/extensions/gsd/uat-policy.js +2 -1
- package/dist/resources/extensions/gsd/unit-closeout.js +138 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +74 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +4 -27
- package/dist/resources/extensions/gsd/unit-registry.js +337 -0
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +9 -182
- package/dist/resources/extensions/gsd/web-app-uat.js +45 -8
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +1 -1
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +15 -9
- package/dist/resources/extensions/gsd/worktree-root.js +11 -0
- package/dist/resources/extensions/gsd/worktree-session-state.js +4 -5
- package/dist/resources/extensions/search-the-web/native-search.js +5 -3
- package/dist/resources/extensions/shared/browser-contract.js +59 -0
- package/dist/resources/extensions/shared/gsd-browser-cli.js +96 -5
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/references/executable-code.md +1 -1
- package/dist/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/dist/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/dist/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/dist/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/dist/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/dist/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
- 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/api/update/route.js.nft.json +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 +13 -13
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- 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/middleware-react-loadable-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/dist/web/standalone/.next/static/chunks/{796.cf859a427a2cb2ac.js → 796.e0bdc932325d7e03.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-fbea77b5f9953368.js → webpack-f0285ce91d4ec9ef.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/container.js +18 -26
- package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +14 -47
- package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
- package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
- package/dist/web/standalone/node_modules/postcss/lib/input.js +29 -54
- package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +37 -47
- package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +9 -26
- package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +55 -57
- package/dist/web/standalone/node_modules/postcss/lib/node.js +31 -99
- package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/parser.js +9 -10
- package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +11 -30
- package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
- package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
- package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
- package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +28 -69
- package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +2 -6
- package/dist/web/standalone/node_modules/postcss/package.json +48 -48
- package/dist/web/standalone/package.json +1 -1
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -15
- package/package.json +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/dist/rpc.d.ts +1 -0
- package/packages/contracts/dist/rpc.d.ts.map +1 -1
- package/packages/contracts/dist/rpc.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +4 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- 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/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +5 -0
- 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.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +7 -0
- 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 +8 -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-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +11 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js +4 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-auth.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/cli.js +6 -3
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +8 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +17 -1
- 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/harness/env/nodejs.d.ts +1 -0
- package/packages/pi-agent-core/dist/harness/env/nodejs.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/harness/env/nodejs.js +34 -3
- package/packages/pi-agent-core/dist/harness/env/nodejs.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +3 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +94 -382
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +149 -422
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +2 -2
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +19 -13
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/provider-readiness.js +13 -6
- package/packages/pi-coding-agent/dist/core/provider-readiness.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +53 -11
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -1
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.d.ts +28 -2
- package/packages/pi-coding-agent/dist/utils/shell.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/utils/shell.js +56 -10
- package/packages/pi-coding-agent/dist/utils/shell.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/async-jobs/async-bash-cancel.test.ts +360 -0
- package/src/resources/extensions/async-jobs/async-bash-tool.ts +33 -56
- package/src/resources/extensions/async-jobs/await-tool.test.ts +139 -0
- package/src/resources/extensions/async-jobs/await-tool.ts +82 -12
- package/src/resources/extensions/async-jobs/index.ts +79 -0
- package/src/resources/extensions/async-jobs/job-manager.ts +21 -1
- package/src/resources/extensions/bg-shell/bg-shell-command.ts +6 -6
- package/src/resources/extensions/bg-shell/bg-shell-tool.ts +10 -6
- package/src/resources/extensions/bg-shell/overlay.ts +9 -5
- package/src/resources/extensions/bg-shell/process-manager.ts +50 -25
- package/src/resources/extensions/bg-shell/readiness-detector.ts +12 -0
- package/src/resources/extensions/bg-shell/tests/lifecycle-and-utilities.test.ts +48 -1
- package/src/resources/extensions/bg-shell/utilities.ts +3 -0
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +265 -98
- package/src/resources/extensions/browser-tools/engine/selection.ts +90 -4
- package/src/resources/extensions/browser-tools/index.ts +71 -13
- package/src/resources/extensions/browser-tools/tests/browser-engine-selection.test.mjs +83 -13
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +29 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +34 -4
- package/src/resources/extensions/gsd/auto/orchestrator.ts +7 -5
- package/src/resources/extensions/gsd/auto-dispatch.ts +12 -0
- package/src/resources/extensions/gsd/auto-model-selection.ts +25 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +13 -2
- package/src/resources/extensions/gsd/auto-prompts.ts +40 -26
- package/src/resources/extensions/gsd/auto-start.ts +15 -10
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +10 -17
- package/src/resources/extensions/gsd/auto-worktree.ts +30 -93
- package/src/resources/extensions/gsd/auto.ts +8 -15
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +3 -5
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +23 -6
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +151 -15
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +6 -2
- package/src/resources/extensions/gsd/branch-patterns.ts +3 -0
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/browser-evidence.ts +18 -2
- package/src/resources/extensions/gsd/captures.ts +4 -6
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +3 -9
- package/src/resources/extensions/gsd/doctor-environment.ts +2 -7
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +13 -15
- package/src/resources/extensions/gsd/error-classifier.ts +11 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/guidance.ts +139 -0
- package/src/resources/extensions/gsd/guided-flow.ts +16 -2
- package/src/resources/extensions/gsd/mcp-filter.ts +2 -23
- package/src/resources/extensions/gsd/mcp-tool-name.ts +6 -11
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +1 -1
- package/src/resources/extensions/gsd/migrate/safety.ts +4 -1
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +6 -4
- package/src/resources/extensions/gsd/paths.ts +33 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +109 -3
- package/src/resources/extensions/gsd/preferences-models.ts +12 -47
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/replan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +1 -1
- package/src/resources/extensions/gsd/prompts/system.md +5 -2
- package/src/resources/extensions/gsd/provider-error-guidance.ts +4 -9
- package/src/resources/extensions/gsd/provider-switch-observer.ts +1 -1
- package/src/resources/extensions/gsd/publication.ts +122 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +42 -96
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/state.ts +4 -21
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +16 -19
- package/src/resources/extensions/gsd/tests/browser-automation-contract-fixture.ts +39 -0
- package/src/resources/extensions/gsd/tests/browser-contract.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +66 -1
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +8 -7
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/exec-graceful-kill.test.ts +193 -0
- package/src/resources/extensions/gsd/tests/exec-tool.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +35 -1
- package/src/resources/extensions/gsd/tests/guidance.test.ts +125 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +53 -11
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +73 -58
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/notification-store.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/publication.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/stop-notice.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +155 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +24 -29
- package/src/resources/extensions/gsd/tests/unit-closeout.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +67 -2
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +163 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +44 -1
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +2 -2
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +8 -7
- package/src/resources/extensions/gsd/tools/plan-slice.ts +12 -6
- package/src/resources/extensions/gsd/uat-policy.ts +2 -1
- package/src/resources/extensions/gsd/unit-closeout.ts +201 -0
- package/src/resources/extensions/gsd/unit-context-composer.ts +111 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +4 -28
- package/src/resources/extensions/gsd/unit-registry.ts +412 -0
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +27 -192
- package/src/resources/extensions/gsd/web-app-uat.ts +51 -8
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +4 -1
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +15 -9
- package/src/resources/extensions/gsd/worktree-root.ts +12 -0
- package/src/resources/extensions/gsd/worktree-session-state.ts +3 -5
- package/src/resources/extensions/search-the-web/native-search.ts +5 -3
- package/src/resources/extensions/shared/browser-contract.ts +66 -0
- package/src/resources/extensions/shared/gsd-browser-cli.ts +119 -5
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/references/executable-code.md +1 -1
- package/src/resources/skills/create-skill/workflows/add-reference.md +8 -3
- package/src/resources/skills/create-skill/workflows/add-script.md +4 -2
- package/src/resources/skills/create-skill/workflows/add-template.md +3 -1
- package/src/resources/skills/create-skill/workflows/add-workflow.md +8 -3
- package/src/resources/skills/create-skill/workflows/upgrade-to-router.md +10 -5
- package/src/resources/skills/create-skill/workflows/verify-skill.md +9 -4
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → mU4QIDlpVHDdjDpeEKh5W}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{C24pqUd-aru-l0Dp0gLZP → mU4QIDlpVHDdjDpeEKh5W}/_ssgManifest.js +0 -0
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
// owned by the unit, not in the composer. Reviews must enforce this — it
|
|
37
37
|
// is the difference between an orchestrator and a runaway DSL.
|
|
38
38
|
import { resolveManifest, } from "./unit-context-manifest.js";
|
|
39
|
+
import { getUnitToolSurfaceContract } from "./unit-tool-contracts.js";
|
|
39
40
|
/**
|
|
40
41
|
* Produce the inlined-context portion of a unit's system prompt by
|
|
41
42
|
* walking the manifest's `artifacts.inline` list in order and calling
|
|
@@ -91,6 +92,14 @@ const CONTEXT_MODE_GUIDANCE_BY_LANE = {
|
|
|
91
92
|
orchestration: "Use `gsd_resume` before resuming orchestration, `gsd_exec_search` to reuse prior runs, and `gsd_exec` for noisy coordination checks.",
|
|
92
93
|
docs: "Use `gsd_resume` for prior context, `gsd_exec_search` for saved evidence, and `gsd_exec` for noisy doc validation commands.",
|
|
93
94
|
};
|
|
95
|
+
// Per-unit overrides win over the lane default. run-uat's tool contract
|
|
96
|
+
// forbids `gsd_exec`/`gsd_exec_search` (acceptance evidence must flow through
|
|
97
|
+
// `gsd_uat_exec`) and Claude Code dispatch strips the tools entirely, so the
|
|
98
|
+
// shared verification-lane guidance would steer the agent into calling an
|
|
99
|
+
// unavailable tool.
|
|
100
|
+
const CONTEXT_MODE_GUIDANCE_BY_UNIT = {
|
|
101
|
+
"run-uat": "Use `gsd_uat_exec` for acceptance checks so evidence is typed as UAT-owned, and `gsd_resume` after compaction or resume.",
|
|
102
|
+
};
|
|
94
103
|
/**
|
|
95
104
|
* Render the Context Mode instruction lane for a unit type. Unknown unit
|
|
96
105
|
* types, disabled config, and explicit `contextMode: "none"` all omit the
|
|
@@ -103,7 +112,7 @@ export function composeContextModeInstructions(unitType, opts) {
|
|
|
103
112
|
if (!manifest || manifest.contextMode === "none")
|
|
104
113
|
return "";
|
|
105
114
|
const lane = CONTEXT_MODE_LANE_LABELS[manifest.contextMode];
|
|
106
|
-
const guidance = CONTEXT_MODE_GUIDANCE_BY_LANE[manifest.contextMode];
|
|
115
|
+
const guidance = CONTEXT_MODE_GUIDANCE_BY_UNIT[unitType] ?? CONTEXT_MODE_GUIDANCE_BY_LANE[manifest.contextMode];
|
|
107
116
|
if (opts.renderMode === "nested") {
|
|
108
117
|
return `Context Mode (${lane} lane): ${guidance}`;
|
|
109
118
|
}
|
|
@@ -114,6 +123,70 @@ export function composeContextModeInstructions(unitType, opts) {
|
|
|
114
123
|
guidance,
|
|
115
124
|
].join("\n");
|
|
116
125
|
}
|
|
126
|
+
const TOOL_SURFACE_GUIDANCE_BY_UNIT = {
|
|
127
|
+
"run-uat": "Do not call `gsd_exec`, `Bash`, `Write`, or `Edit` — they are unavailable in this unit. Run every automated check through `gsd_uat_exec` with the appropriate `intent`. For browser UAT modes, use `browser_*` tools when presented; if browser automation fails, record the failure honestly and use `gsd_uat_exec` for the best objective substitute.",
|
|
128
|
+
"complete-slice": "Run slice-level verification through `gsd_exec` (or MCP-scoped `mcp__…__gsd_exec`), not direct `bash`. Do not call `gsd_uat_result_save` — run-uat owns persisted UAT assessment. On verification failure, do not edit user source files in this unit.",
|
|
129
|
+
"gate-evaluate": "Dispatch only **tester** subagents via `subagent`. Persist each gate with `gsd_save_gate_result`. Do not use `ToolSearch` — it is not available.",
|
|
130
|
+
"reactive-execute": "Dispatch only **worker** subagents via `subagent`. Do not call `gsd_task_complete` from this parent batch — each worker owns its task completion. If a failed task left no summary, call `gsd_summary_save` with `blocker_discovered: true`.",
|
|
131
|
+
"execute-task": "Complete only this task via `gsd_task_complete`. Do not call `gsd_slice_complete`, `gsd_validate_milestone`, or `gsd_complete_milestone` — the orchestrator owns phase transitions.",
|
|
132
|
+
"validate-milestone": "Dispatch reviewer subagents in parallel, then persist the verdict via `gsd_validate_milestone`. Do not query `.gsd/gsd.db` directly — use `gsd_milestone_status` and inlined context.",
|
|
133
|
+
"complete-milestone": "Persist completion only through `gsd_complete_milestone` after verification passes. Do not query `.gsd/gsd.db` directly. Do not write `.gsd/PROJECT.md` or `.gsd/REQUIREMENTS.md` by hand — use `gsd_summary_save` and `gsd_requirement_update`.",
|
|
134
|
+
"replan-slice": "Persist replans through `gsd_replan_slice` only. Do not edit `PLAN.md` or task plans directly.",
|
|
135
|
+
"plan-slice": "Persist planning through `gsd_plan_slice` only. Dispatch subagents only to **scout** or **planner** for reconnaissance — not implementation agents. Do not edit user source files outside `.gsd/**`.",
|
|
136
|
+
"refine-slice": "Persist refinements through `gsd_plan_slice` only. Dispatch subagents only to **scout** or **planner**. Do not edit user source files outside `.gsd/**`.",
|
|
137
|
+
"plan-milestone": "Persist milestone planning through `gsd_plan_milestone` / `gsd_plan_slice`. Do not edit user source files outside `.gsd/**`.",
|
|
138
|
+
"research-slice": "Dispatch subagents only to **scout** or **planner** for reconnaissance. Do not edit user source files outside `.gsd/**`.",
|
|
139
|
+
};
|
|
140
|
+
function guidanceForToolsPolicy(policy) {
|
|
141
|
+
switch (policy.mode) {
|
|
142
|
+
case "planning":
|
|
143
|
+
return "Writes are restricted to `.gsd/**` under the working directory — do not edit user source files. `bash` is limited to read-only investigation commands. Do not dispatch subagents. For human elicitation, use workflow MCP `ask_user_questions` when available — not native `AskUserQuestion`.";
|
|
144
|
+
case "planning-dispatch": {
|
|
145
|
+
const agents = policy.allowedSubagents.map((agent) => `**${agent}**`).join(", ");
|
|
146
|
+
return `Writes are restricted to \`.gsd/**\`. Dispatch subagents only to: ${agents}. Do not edit user source files.`;
|
|
147
|
+
}
|
|
148
|
+
case "docs":
|
|
149
|
+
return "Writes are restricted to `.gsd/**` and project documentation paths (`docs/`, `README*`, `CHANGELOG.md`, root `*.md`). Do not edit application source.";
|
|
150
|
+
case "verification": {
|
|
151
|
+
const subagentLine = policy.allowedSubagents?.length
|
|
152
|
+
? ` Dispatch subagents only to: ${policy.allowedSubagents.map((agent) => `**${agent}**`).join(", ")}.`
|
|
153
|
+
: " Do not dispatch subagents.";
|
|
154
|
+
return `\`bash\` is limited to build/test verification commands. Writes restricted to \`.gsd/**\`.${subagentLine}`;
|
|
155
|
+
}
|
|
156
|
+
default:
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function formatForbiddenWorkflowToolsLine(unitType, unitGuidance) {
|
|
161
|
+
const forbidden = getUnitToolSurfaceContract(unitType)?.forbiddenGsdTools;
|
|
162
|
+
if (!forbidden)
|
|
163
|
+
return null;
|
|
164
|
+
const names = Object.keys(forbidden).filter((name) => !unitGuidance?.includes(`\`${name}\``));
|
|
165
|
+
if (names.length === 0)
|
|
166
|
+
return null;
|
|
167
|
+
return `Do not call ${names.map((name) => `\`${name}\``).join(", ")} in this unit.`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Render upfront tool-surface guidance for a unit type. Unknown units and
|
|
171
|
+
* unrestricted (`tools.mode: "all"`) units omit the block unless they have
|
|
172
|
+
* unit-specific closeout guidance registered above.
|
|
173
|
+
*/
|
|
174
|
+
export function composeToolSurfaceInstructions(unitType, opts) {
|
|
175
|
+
const manifest = resolveManifest(unitType);
|
|
176
|
+
if (!manifest)
|
|
177
|
+
return "";
|
|
178
|
+
const unitGuidance = TOOL_SURFACE_GUIDANCE_BY_UNIT[unitType];
|
|
179
|
+
const policyGuidance = unitGuidance ? null : guidanceForToolsPolicy(manifest.tools);
|
|
180
|
+
const forbiddenLine = formatForbiddenWorkflowToolsLine(unitType, unitGuidance);
|
|
181
|
+
const parts = [unitGuidance, policyGuidance, forbiddenLine].filter((part) => typeof part === "string" && part.length > 0);
|
|
182
|
+
if (parts.length === 0)
|
|
183
|
+
return "";
|
|
184
|
+
const body = parts.join(" ");
|
|
185
|
+
if (opts.renderMode === "nested") {
|
|
186
|
+
return `Tool surface: ${body}`;
|
|
187
|
+
}
|
|
188
|
+
return ["## Tool Surface", "", body].join("\n");
|
|
189
|
+
}
|
|
117
190
|
const SECTION_SEPARATOR = "\n\n---\n\n";
|
|
118
191
|
/**
|
|
119
192
|
* Compose all manifest-declared context for a unit type using the v2
|
|
@@ -118,33 +118,10 @@ const TOOLS_DOCS = {
|
|
|
118
118
|
* enumerates these against `UNIT_MANIFESTS` to catch manifest drift when
|
|
119
119
|
* a new unit type lands.
|
|
120
120
|
*/
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
"validate-milestone",
|
|
126
|
-
"complete-milestone",
|
|
127
|
-
"research-slice",
|
|
128
|
-
"plan-slice",
|
|
129
|
-
"refine-slice",
|
|
130
|
-
"replan-slice",
|
|
131
|
-
"complete-slice",
|
|
132
|
-
"reassess-roadmap",
|
|
133
|
-
"execute-task",
|
|
134
|
-
"reactive-execute",
|
|
135
|
-
"run-uat",
|
|
136
|
-
"gate-evaluate",
|
|
137
|
-
"rewrite-docs",
|
|
138
|
-
// Sidecar units (triage, quick-task)
|
|
139
|
-
"triage-captures",
|
|
140
|
-
"quick-task",
|
|
141
|
-
// Deep planning mode (project-level) units
|
|
142
|
-
"workflow-preferences",
|
|
143
|
-
"discuss-project",
|
|
144
|
-
"discuss-requirements",
|
|
145
|
-
"research-decision",
|
|
146
|
-
"research-project",
|
|
147
|
-
];
|
|
121
|
+
// Unit-type vocabulary is owned by the Unit Registry (ADR-033); re-exported
|
|
122
|
+
// here so established import paths keep working.
|
|
123
|
+
import { KNOWN_UNIT_TYPES } from "./unit-registry.js";
|
|
124
|
+
export { KNOWN_UNIT_TYPES };
|
|
148
125
|
export const UNIT_MANIFESTS = {
|
|
149
126
|
// ─── Milestone-scoped ────────────────────────────────────────────────
|
|
150
127
|
"research-milestone": {
|
|
@@ -0,0 +1,337 @@
|
|
|
1
|
+
// Project/App: gsd-pi
|
|
2
|
+
// File Purpose: Unit Registry — the single declaration point for what a Unit type is (ADR-033).
|
|
3
|
+
//
|
|
4
|
+
// One Unit Descriptor per Unit type. The previously independent tables —
|
|
5
|
+
// `KNOWN_UNIT_TYPES`/`UnitType` (unit-context-manifest.ts), `UNIT_TOOL_CONTRACTS`
|
|
6
|
+
// (unit-tool-contracts.ts), the scope-class Sets (auto-unit-tool-scope.ts), and
|
|
7
|
+
// the unit→phase switch (preferences-models.ts) — are derived views over this
|
|
8
|
+
// registry. Import paths stay stable: each former home re-exports its view
|
|
9
|
+
// (the `gsd-db.ts` barrel discipline).
|
|
10
|
+
//
|
|
11
|
+
// Behaviour-neutral by construction. The registry preserves the asymmetries the
|
|
12
|
+
// old tables had drifted into, explicitly instead of accidentally:
|
|
13
|
+
// - `discuss-slice` and `execute-task-simple` had tool contracts and scope-Set
|
|
14
|
+
// membership but were absent from `KNOWN_UNIT_TYPES` → declared here as
|
|
15
|
+
// `kind: "variant"` (excluded from the derived `KNOWN_UNIT_TYPES`/`UnitType`).
|
|
16
|
+
// - `triage-captures` and `quick-task` had manifests but no tool contract and
|
|
17
|
+
// no phase routing → `toolContract: null`, `phaseChain: null`.
|
|
18
|
+
// The parity test (tests/unit-registry.test.ts) pins every derived view to the
|
|
19
|
+
// pre-registry values.
|
|
20
|
+
//
|
|
21
|
+
// Not yet declared here (remaining ADR-033 steps): the manifest data
|
|
22
|
+
// (`UNIT_MANIFESTS` stays in unit-context-manifest.ts, already type-enforced
|
|
23
|
+
// against the registry's `UnitType`) and prompt-template association (still
|
|
24
|
+
// implicit in auto-prompts.ts builders).
|
|
25
|
+
import { BROWSER_CONTRACT_TOOL_NAMES } from "../shared/browser-contract.js";
|
|
26
|
+
// ─── Shared tool-name constants (used by registry rows) ──────────────────
|
|
27
|
+
export const RUN_UAT_WORKFLOW_TOOL_NAMES = [
|
|
28
|
+
"gsd_uat_exec",
|
|
29
|
+
"gsd_uat_result_save",
|
|
30
|
+
"gsd_resume",
|
|
31
|
+
"gsd_milestone_status",
|
|
32
|
+
"gsd_journal_query",
|
|
33
|
+
];
|
|
34
|
+
export const RUN_UAT_READ_ONLY_TOOL_NAMES = [
|
|
35
|
+
"find",
|
|
36
|
+
"glob",
|
|
37
|
+
"grep",
|
|
38
|
+
"ls",
|
|
39
|
+
"read",
|
|
40
|
+
];
|
|
41
|
+
/**
|
|
42
|
+
* Browser tools presented to run-uat. A derived view of the Browser Automation
|
|
43
|
+
* Contract vocabulary (shared/browser-contract.ts) — the contract module is the
|
|
44
|
+
* only place browser tool names are declared.
|
|
45
|
+
*/
|
|
46
|
+
export const RUN_UAT_BROWSER_TOOL_NAMES = BROWSER_CONTRACT_TOOL_NAMES;
|
|
47
|
+
// ─── The registry ─────────────────────────────────────────────────────────
|
|
48
|
+
export const UNIT_REGISTRY = {
|
|
49
|
+
"research-milestone": {
|
|
50
|
+
kind: "primary",
|
|
51
|
+
scopeClass: "standard",
|
|
52
|
+
phaseChain: ["research"],
|
|
53
|
+
toolContract: {
|
|
54
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
55
|
+
requiredWorkflowTools: ["gsd_summary_save"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
"plan-milestone": {
|
|
59
|
+
kind: "primary",
|
|
60
|
+
scopeClass: "standard",
|
|
61
|
+
phaseChain: ["planning"],
|
|
62
|
+
toolContract: {
|
|
63
|
+
allowedGsdTools: [
|
|
64
|
+
"gsd_milestone_status",
|
|
65
|
+
"gsd_plan_milestone",
|
|
66
|
+
"gsd_plan_slice",
|
|
67
|
+
"gsd_decision_save",
|
|
68
|
+
"gsd_requirement_update",
|
|
69
|
+
],
|
|
70
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice"],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
"discuss-milestone": {
|
|
74
|
+
kind: "primary",
|
|
75
|
+
scopeClass: "standard",
|
|
76
|
+
phaseChain: ["discuss", "planning"],
|
|
77
|
+
toolContract: {
|
|
78
|
+
allowedGsdTools: [
|
|
79
|
+
"gsd_summary_save",
|
|
80
|
+
"gsd_decision_save",
|
|
81
|
+
"gsd_requirement_save",
|
|
82
|
+
"gsd_requirement_update",
|
|
83
|
+
"gsd_plan_milestone",
|
|
84
|
+
"gsd_milestone_generate_id",
|
|
85
|
+
],
|
|
86
|
+
requiredWorkflowTools: [
|
|
87
|
+
"ask_user_questions",
|
|
88
|
+
"gsd_summary_save",
|
|
89
|
+
"gsd_requirement_save",
|
|
90
|
+
"gsd_requirement_update",
|
|
91
|
+
"gsd_plan_milestone",
|
|
92
|
+
"gsd_milestone_generate_id",
|
|
93
|
+
],
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
"discuss-slice": {
|
|
97
|
+
kind: "variant",
|
|
98
|
+
scopeClass: "standard",
|
|
99
|
+
phaseChain: ["discuss", "planning"],
|
|
100
|
+
toolContract: {
|
|
101
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
102
|
+
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
"validate-milestone": {
|
|
106
|
+
kind: "primary",
|
|
107
|
+
scopeClass: "section-close",
|
|
108
|
+
phaseChain: ["validation", "planning"],
|
|
109
|
+
toolContract: {
|
|
110
|
+
allowedGsdTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
111
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"],
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
"complete-milestone": {
|
|
115
|
+
kind: "primary",
|
|
116
|
+
scopeClass: "standard",
|
|
117
|
+
phaseChain: ["completion"],
|
|
118
|
+
toolContract: {
|
|
119
|
+
allowedGsdTools: [
|
|
120
|
+
"gsd_milestone_status",
|
|
121
|
+
"gsd_requirement_update",
|
|
122
|
+
"gsd_summary_save",
|
|
123
|
+
"gsd_complete_milestone",
|
|
124
|
+
"subagent",
|
|
125
|
+
],
|
|
126
|
+
requiredWorkflowTools: [
|
|
127
|
+
"gsd_milestone_status",
|
|
128
|
+
"gsd_requirement_update",
|
|
129
|
+
"gsd_summary_save",
|
|
130
|
+
"gsd_complete_milestone",
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
"research-slice": {
|
|
135
|
+
kind: "primary",
|
|
136
|
+
scopeClass: "standard",
|
|
137
|
+
phaseChain: ["research"],
|
|
138
|
+
toolContract: {
|
|
139
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
140
|
+
requiredWorkflowTools: ["gsd_summary_save"],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
"plan-slice": {
|
|
144
|
+
kind: "primary",
|
|
145
|
+
scopeClass: "standard",
|
|
146
|
+
phaseChain: ["planning"],
|
|
147
|
+
toolContract: {
|
|
148
|
+
allowedGsdTools: ["gsd_plan_slice", "gsd_reassess_roadmap", "gsd_decision_save"],
|
|
149
|
+
requiredWorkflowTools: ["gsd_plan_slice", "gsd_reassess_roadmap"],
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
"refine-slice": {
|
|
153
|
+
kind: "primary",
|
|
154
|
+
scopeClass: "standard",
|
|
155
|
+
phaseChain: ["planning"],
|
|
156
|
+
toolContract: {
|
|
157
|
+
allowedGsdTools: ["gsd_plan_slice", "gsd_decision_save"],
|
|
158
|
+
requiredWorkflowTools: ["gsd_plan_slice"],
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
"replan-slice": {
|
|
162
|
+
kind: "primary",
|
|
163
|
+
scopeClass: "standard",
|
|
164
|
+
phaseChain: ["planning"],
|
|
165
|
+
toolContract: {
|
|
166
|
+
allowedGsdTools: ["gsd_replan_slice", "gsd_decision_save"],
|
|
167
|
+
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
"complete-slice": {
|
|
171
|
+
kind: "primary",
|
|
172
|
+
scopeClass: "section-close",
|
|
173
|
+
phaseChain: ["completion"],
|
|
174
|
+
toolContract: {
|
|
175
|
+
allowedGsdTools: [
|
|
176
|
+
"gsd_slice_complete",
|
|
177
|
+
"gsd_task_reopen",
|
|
178
|
+
"gsd_replan_slice",
|
|
179
|
+
"gsd_decision_save",
|
|
180
|
+
"gsd_requirement_update",
|
|
181
|
+
"gsd_summary_save",
|
|
182
|
+
"subagent",
|
|
183
|
+
],
|
|
184
|
+
requiredWorkflowTools: [
|
|
185
|
+
"gsd_slice_complete",
|
|
186
|
+
"gsd_task_reopen",
|
|
187
|
+
"gsd_replan_slice",
|
|
188
|
+
"gsd_requirement_update",
|
|
189
|
+
"gsd_summary_save",
|
|
190
|
+
],
|
|
191
|
+
forbiddenGsdTools: {
|
|
192
|
+
gsd_uat_result_save: "Run UAT owns persisted UAT Assessment.",
|
|
193
|
+
},
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
"reassess-roadmap": {
|
|
197
|
+
kind: "primary",
|
|
198
|
+
scopeClass: "standard",
|
|
199
|
+
phaseChain: ["validation", "planning"],
|
|
200
|
+
toolContract: {
|
|
201
|
+
allowedGsdTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
202
|
+
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
"execute-task": {
|
|
206
|
+
kind: "primary",
|
|
207
|
+
scopeClass: "execute-task",
|
|
208
|
+
phaseChain: ["execution"],
|
|
209
|
+
toolContract: {
|
|
210
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
211
|
+
requiredWorkflowTools: ["gsd_task_complete"],
|
|
212
|
+
},
|
|
213
|
+
},
|
|
214
|
+
"execute-task-simple": {
|
|
215
|
+
kind: "variant",
|
|
216
|
+
scopeClass: "execute-task",
|
|
217
|
+
phaseChain: ["execution_simple", "execution"],
|
|
218
|
+
toolContract: {
|
|
219
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
220
|
+
requiredWorkflowTools: ["gsd_task_complete"],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
"reactive-execute": {
|
|
224
|
+
kind: "primary",
|
|
225
|
+
scopeClass: "execute-task",
|
|
226
|
+
phaseChain: ["execution"],
|
|
227
|
+
toolContract: {
|
|
228
|
+
allowedGsdTools: ["gsd_task_complete", "gsd_summary_save", "gsd_decision_save"],
|
|
229
|
+
requiredWorkflowTools: ["gsd_task_complete", "gsd_summary_save"],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
"run-uat": {
|
|
233
|
+
kind: "primary",
|
|
234
|
+
scopeClass: "standard",
|
|
235
|
+
phaseChain: ["uat", "completion"],
|
|
236
|
+
toolContract: {
|
|
237
|
+
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
238
|
+
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
239
|
+
forbiddenGsdTools: {
|
|
240
|
+
gsd_exec: "Use gsd_uat_exec so acceptance evidence is typed as UAT-owned.",
|
|
241
|
+
gsd_save_gate_result: "gsd_uat_result_save owns the aggregate UAT gate.",
|
|
242
|
+
gsd_summary_save: "gsd_uat_result_save owns persisted UAT Assessment writes.",
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
"gate-evaluate": {
|
|
247
|
+
kind: "primary",
|
|
248
|
+
scopeClass: "standard",
|
|
249
|
+
phaseChain: ["validation", "planning"],
|
|
250
|
+
toolContract: {
|
|
251
|
+
allowedGsdTools: ["gsd_save_gate_result"],
|
|
252
|
+
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
"rewrite-docs": {
|
|
256
|
+
kind: "primary",
|
|
257
|
+
scopeClass: "standard",
|
|
258
|
+
phaseChain: ["validation", "planning"],
|
|
259
|
+
toolContract: {
|
|
260
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
261
|
+
requiredWorkflowTools: [],
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
// Sidecar units (triage, quick-task) — manifests exist, but no scoped tool
|
|
265
|
+
// contract and no phase routing (today's behaviour, preserved explicitly).
|
|
266
|
+
"triage-captures": {
|
|
267
|
+
kind: "primary",
|
|
268
|
+
scopeClass: "standard",
|
|
269
|
+
phaseChain: null,
|
|
270
|
+
toolContract: null,
|
|
271
|
+
},
|
|
272
|
+
"quick-task": {
|
|
273
|
+
kind: "primary",
|
|
274
|
+
scopeClass: "standard",
|
|
275
|
+
phaseChain: null,
|
|
276
|
+
toolContract: null,
|
|
277
|
+
},
|
|
278
|
+
// Deep planning mode (project-level) units
|
|
279
|
+
"workflow-preferences": {
|
|
280
|
+
kind: "primary",
|
|
281
|
+
scopeClass: "standard",
|
|
282
|
+
phaseChain: ["discuss", "planning"],
|
|
283
|
+
toolContract: {
|
|
284
|
+
allowedGsdTools: ["gsd_summary_save"],
|
|
285
|
+
requiredWorkflowTools: [],
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
"discuss-project": {
|
|
289
|
+
kind: "primary",
|
|
290
|
+
scopeClass: "standard",
|
|
291
|
+
phaseChain: ["discuss", "planning"],
|
|
292
|
+
toolContract: {
|
|
293
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
294
|
+
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
295
|
+
},
|
|
296
|
+
},
|
|
297
|
+
"discuss-requirements": {
|
|
298
|
+
kind: "primary",
|
|
299
|
+
scopeClass: "standard",
|
|
300
|
+
phaseChain: ["discuss", "planning"],
|
|
301
|
+
toolContract: {
|
|
302
|
+
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
303
|
+
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
"research-decision": {
|
|
307
|
+
kind: "primary",
|
|
308
|
+
scopeClass: "standard",
|
|
309
|
+
phaseChain: ["discuss", "planning"],
|
|
310
|
+
toolContract: {
|
|
311
|
+
allowedGsdTools: ["gsd_summary_save"],
|
|
312
|
+
requiredWorkflowTools: ["ask_user_questions"],
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
"research-project": {
|
|
316
|
+
kind: "primary",
|
|
317
|
+
scopeClass: "standard",
|
|
318
|
+
phaseChain: ["research"],
|
|
319
|
+
toolContract: {
|
|
320
|
+
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
321
|
+
requiredWorkflowTools: [],
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
};
|
|
325
|
+
const ALL_UNIT_KEYS = Object.keys(UNIT_REGISTRY);
|
|
326
|
+
export const KNOWN_UNIT_TYPES = Object.freeze(ALL_UNIT_KEYS.filter((t) => UNIT_REGISTRY[t].kind === "primary"));
|
|
327
|
+
export const EXECUTE_TASK_UNIT_TYPES = new Set(ALL_UNIT_KEYS.filter((t) => UNIT_REGISTRY[t].scopeClass === "execute-task"));
|
|
328
|
+
// Execute-task units close gates via summary sections too, so the section-close
|
|
329
|
+
// gate Set is every non-"standard" scope class.
|
|
330
|
+
export const SECTION_CLOSE_GATE_UNIT_TYPES = new Set(ALL_UNIT_KEYS.filter((t) => UNIT_REGISTRY[t].scopeClass !== "standard"));
|
|
331
|
+
export function getUnitDescriptor(unitType) {
|
|
332
|
+
return UNIT_REGISTRY[unitType];
|
|
333
|
+
}
|
|
334
|
+
/** Phase-bucket fallback chain for a unit type, or null when the registry has no routing for it. */
|
|
335
|
+
export function getUnitPhaseChain(unitType) {
|
|
336
|
+
return getUnitDescriptor(unitType)?.phaseChain ?? null;
|
|
337
|
+
}
|
|
@@ -1,187 +1,14 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose:
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
export const RUN_UAT_READ_ONLY_TOOL_NAMES = [
|
|
11
|
-
"find",
|
|
12
|
-
"glob",
|
|
13
|
-
"grep",
|
|
14
|
-
"ls",
|
|
15
|
-
"read",
|
|
16
|
-
];
|
|
17
|
-
export const RUN_UAT_BROWSER_TOOL_NAMES = [
|
|
18
|
-
"browser_navigate",
|
|
19
|
-
"browser_click",
|
|
20
|
-
"browser_type",
|
|
21
|
-
"browser_fill_form",
|
|
22
|
-
"browser_click_ref",
|
|
23
|
-
"browser_fill_ref",
|
|
24
|
-
"browser_wait_for",
|
|
25
|
-
"browser_assert",
|
|
26
|
-
"browser_verify",
|
|
27
|
-
"browser_screenshot",
|
|
28
|
-
"browser_snapshot_refs",
|
|
29
|
-
"browser_find",
|
|
30
|
-
"browser_get_console_logs",
|
|
31
|
-
"browser_get_network_logs",
|
|
32
|
-
"browser_evaluate",
|
|
33
|
-
"browser_reload",
|
|
34
|
-
"browser_batch",
|
|
35
|
-
"browser_act",
|
|
36
|
-
];
|
|
2
|
+
// File Purpose: Unit-to-tool contract views derived from the Unit Registry (ADR-033).
|
|
3
|
+
//
|
|
4
|
+
// The contract data lives in unit-registry.ts (one Unit Descriptor per unit
|
|
5
|
+
// type). This file keeps the established import surface: the derived
|
|
6
|
+
// `UNIT_TOOL_CONTRACTS` table and its accessor functions are unchanged for
|
|
7
|
+
// consumers.
|
|
8
|
+
import { UNIT_REGISTRY, } from "./unit-registry.js";
|
|
9
|
+
export { RUN_UAT_WORKFLOW_TOOL_NAMES, RUN_UAT_READ_ONLY_TOOL_NAMES, RUN_UAT_BROWSER_TOOL_NAMES, } from "./unit-registry.js";
|
|
37
10
|
export const RUN_UAT_TOOL_PRESENTATION_PLAN_ID = "run-uat/default-v1";
|
|
38
|
-
export const UNIT_TOOL_CONTRACTS =
|
|
39
|
-
"research-milestone": {
|
|
40
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
41
|
-
requiredWorkflowTools: ["gsd_summary_save"],
|
|
42
|
-
},
|
|
43
|
-
"plan-milestone": {
|
|
44
|
-
allowedGsdTools: [
|
|
45
|
-
"gsd_milestone_status",
|
|
46
|
-
"gsd_plan_milestone",
|
|
47
|
-
"gsd_plan_slice",
|
|
48
|
-
"gsd_decision_save",
|
|
49
|
-
"gsd_requirement_update",
|
|
50
|
-
],
|
|
51
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice"],
|
|
52
|
-
},
|
|
53
|
-
"discuss-milestone": {
|
|
54
|
-
allowedGsdTools: [
|
|
55
|
-
"gsd_summary_save",
|
|
56
|
-
"gsd_decision_save",
|
|
57
|
-
"gsd_requirement_save",
|
|
58
|
-
"gsd_requirement_update",
|
|
59
|
-
"gsd_plan_milestone",
|
|
60
|
-
"gsd_milestone_generate_id",
|
|
61
|
-
],
|
|
62
|
-
requiredWorkflowTools: [
|
|
63
|
-
"ask_user_questions",
|
|
64
|
-
"gsd_summary_save",
|
|
65
|
-
"gsd_requirement_save",
|
|
66
|
-
"gsd_requirement_update",
|
|
67
|
-
"gsd_plan_milestone",
|
|
68
|
-
"gsd_milestone_generate_id",
|
|
69
|
-
],
|
|
70
|
-
},
|
|
71
|
-
"discuss-slice": {
|
|
72
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
73
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
74
|
-
},
|
|
75
|
-
"validate-milestone": {
|
|
76
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
77
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"],
|
|
78
|
-
},
|
|
79
|
-
"complete-milestone": {
|
|
80
|
-
allowedGsdTools: [
|
|
81
|
-
"gsd_milestone_status",
|
|
82
|
-
"gsd_requirement_update",
|
|
83
|
-
"gsd_summary_save",
|
|
84
|
-
"gsd_complete_milestone",
|
|
85
|
-
"subagent",
|
|
86
|
-
],
|
|
87
|
-
requiredWorkflowTools: [
|
|
88
|
-
"gsd_milestone_status",
|
|
89
|
-
"gsd_requirement_update",
|
|
90
|
-
"gsd_summary_save",
|
|
91
|
-
"gsd_complete_milestone",
|
|
92
|
-
],
|
|
93
|
-
},
|
|
94
|
-
"research-slice": {
|
|
95
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
96
|
-
requiredWorkflowTools: ["gsd_summary_save"],
|
|
97
|
-
},
|
|
98
|
-
"plan-slice": {
|
|
99
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_reassess_roadmap", "gsd_decision_save"],
|
|
100
|
-
requiredWorkflowTools: ["gsd_plan_slice", "gsd_reassess_roadmap"],
|
|
101
|
-
},
|
|
102
|
-
"refine-slice": {
|
|
103
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_decision_save"],
|
|
104
|
-
requiredWorkflowTools: ["gsd_plan_slice"],
|
|
105
|
-
},
|
|
106
|
-
"replan-slice": {
|
|
107
|
-
allowedGsdTools: ["gsd_replan_slice", "gsd_decision_save"],
|
|
108
|
-
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
109
|
-
},
|
|
110
|
-
"complete-slice": {
|
|
111
|
-
allowedGsdTools: [
|
|
112
|
-
"gsd_slice_complete",
|
|
113
|
-
"gsd_task_reopen",
|
|
114
|
-
"gsd_replan_slice",
|
|
115
|
-
"gsd_decision_save",
|
|
116
|
-
"gsd_requirement_update",
|
|
117
|
-
"gsd_summary_save",
|
|
118
|
-
"subagent",
|
|
119
|
-
],
|
|
120
|
-
requiredWorkflowTools: [
|
|
121
|
-
"gsd_slice_complete",
|
|
122
|
-
"gsd_task_reopen",
|
|
123
|
-
"gsd_replan_slice",
|
|
124
|
-
"gsd_requirement_update",
|
|
125
|
-
"gsd_summary_save",
|
|
126
|
-
],
|
|
127
|
-
forbiddenGsdTools: {
|
|
128
|
-
gsd_uat_result_save: "Run UAT owns persisted UAT Assessment.",
|
|
129
|
-
},
|
|
130
|
-
},
|
|
131
|
-
"reassess-roadmap": {
|
|
132
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
133
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
134
|
-
},
|
|
135
|
-
"execute-task": {
|
|
136
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
137
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
138
|
-
},
|
|
139
|
-
"execute-task-simple": {
|
|
140
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
141
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
142
|
-
},
|
|
143
|
-
"reactive-execute": {
|
|
144
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_summary_save", "gsd_decision_save"],
|
|
145
|
-
requiredWorkflowTools: ["gsd_task_complete", "gsd_summary_save"],
|
|
146
|
-
},
|
|
147
|
-
"run-uat": {
|
|
148
|
-
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
149
|
-
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
150
|
-
forbiddenGsdTools: {
|
|
151
|
-
gsd_exec: "Use gsd_uat_exec so acceptance evidence is typed as UAT-owned.",
|
|
152
|
-
gsd_save_gate_result: "gsd_uat_result_save owns the aggregate UAT gate.",
|
|
153
|
-
gsd_summary_save: "gsd_uat_result_save owns persisted UAT Assessment writes.",
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
"gate-evaluate": {
|
|
157
|
-
allowedGsdTools: ["gsd_save_gate_result"],
|
|
158
|
-
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
159
|
-
},
|
|
160
|
-
"rewrite-docs": {
|
|
161
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
162
|
-
requiredWorkflowTools: [],
|
|
163
|
-
},
|
|
164
|
-
"workflow-preferences": {
|
|
165
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
166
|
-
requiredWorkflowTools: [],
|
|
167
|
-
},
|
|
168
|
-
"discuss-project": {
|
|
169
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
170
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
171
|
-
},
|
|
172
|
-
"discuss-requirements": {
|
|
173
|
-
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
174
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
175
|
-
},
|
|
176
|
-
"research-decision": {
|
|
177
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
178
|
-
requiredWorkflowTools: ["ask_user_questions"],
|
|
179
|
-
},
|
|
180
|
-
"research-project": {
|
|
181
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
182
|
-
requiredWorkflowTools: [],
|
|
183
|
-
},
|
|
184
|
-
};
|
|
11
|
+
export const UNIT_TOOL_CONTRACTS = Object.fromEntries(Object.entries(UNIT_REGISTRY).flatMap(([unitType, descriptor]) => descriptor.toolContract ? [[unitType, descriptor.toolContract]] : []));
|
|
185
12
|
export const AUTO_UNIT_SCOPED_TOOLS = Object.fromEntries(Object.entries(UNIT_TOOL_CONTRACTS).map(([unitType, contract]) => [unitType, contract.allowedGsdTools]));
|
|
186
13
|
export function getUnitToolSurfaceContract(unitType) {
|
|
187
14
|
return UNIT_TOOL_CONTRACTS[unitType];
|