@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
|
@@ -1,198 +1,33 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose:
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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;
|
|
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
|
+
|
|
9
|
+
import {
|
|
10
|
+
UNIT_REGISTRY,
|
|
11
|
+
type UnitToolSurfaceContract,
|
|
12
|
+
type UnitWorkflowToolName,
|
|
13
|
+
} from "./unit-registry.js";
|
|
14
|
+
|
|
15
|
+
export {
|
|
16
|
+
RUN_UAT_WORKFLOW_TOOL_NAMES,
|
|
17
|
+
RUN_UAT_READ_ONLY_TOOL_NAMES,
|
|
18
|
+
RUN_UAT_BROWSER_TOOL_NAMES,
|
|
19
|
+
type UnitToolSurfaceContract,
|
|
20
|
+
type UnitWorkflowToolName,
|
|
21
|
+
type UnitGsdToolName,
|
|
22
|
+
} from "./unit-registry.js";
|
|
46
23
|
|
|
47
24
|
export const RUN_UAT_TOOL_PRESENTATION_PLAN_ID = "run-uat/default-v1";
|
|
48
25
|
|
|
49
|
-
export const UNIT_TOOL_CONTRACTS: Record<string, UnitToolSurfaceContract> =
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
"plan-milestone": {
|
|
55
|
-
allowedGsdTools: [
|
|
56
|
-
"gsd_milestone_status",
|
|
57
|
-
"gsd_plan_milestone",
|
|
58
|
-
"gsd_plan_slice",
|
|
59
|
-
"gsd_decision_save",
|
|
60
|
-
"gsd_requirement_update",
|
|
61
|
-
],
|
|
62
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_plan_milestone", "gsd_plan_slice"],
|
|
63
|
-
},
|
|
64
|
-
"discuss-milestone": {
|
|
65
|
-
allowedGsdTools: [
|
|
66
|
-
"gsd_summary_save",
|
|
67
|
-
"gsd_decision_save",
|
|
68
|
-
"gsd_requirement_save",
|
|
69
|
-
"gsd_requirement_update",
|
|
70
|
-
"gsd_plan_milestone",
|
|
71
|
-
"gsd_milestone_generate_id",
|
|
72
|
-
],
|
|
73
|
-
requiredWorkflowTools: [
|
|
74
|
-
"ask_user_questions",
|
|
75
|
-
"gsd_summary_save",
|
|
76
|
-
"gsd_requirement_save",
|
|
77
|
-
"gsd_requirement_update",
|
|
78
|
-
"gsd_plan_milestone",
|
|
79
|
-
"gsd_milestone_generate_id",
|
|
80
|
-
],
|
|
81
|
-
},
|
|
82
|
-
"discuss-slice": {
|
|
83
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
84
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
85
|
-
},
|
|
86
|
-
"validate-milestone": {
|
|
87
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap", "subagent"],
|
|
88
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_validate_milestone", "gsd_reassess_roadmap"],
|
|
89
|
-
},
|
|
90
|
-
"complete-milestone": {
|
|
91
|
-
allowedGsdTools: [
|
|
92
|
-
"gsd_milestone_status",
|
|
93
|
-
"gsd_requirement_update",
|
|
94
|
-
"gsd_summary_save",
|
|
95
|
-
"gsd_complete_milestone",
|
|
96
|
-
"subagent",
|
|
97
|
-
],
|
|
98
|
-
requiredWorkflowTools: [
|
|
99
|
-
"gsd_milestone_status",
|
|
100
|
-
"gsd_requirement_update",
|
|
101
|
-
"gsd_summary_save",
|
|
102
|
-
"gsd_complete_milestone",
|
|
103
|
-
],
|
|
104
|
-
},
|
|
105
|
-
"research-slice": {
|
|
106
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
107
|
-
requiredWorkflowTools: ["gsd_summary_save"],
|
|
108
|
-
},
|
|
109
|
-
"plan-slice": {
|
|
110
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_reassess_roadmap", "gsd_decision_save"],
|
|
111
|
-
requiredWorkflowTools: ["gsd_plan_slice", "gsd_reassess_roadmap"],
|
|
112
|
-
},
|
|
113
|
-
"refine-slice": {
|
|
114
|
-
allowedGsdTools: ["gsd_plan_slice", "gsd_decision_save"],
|
|
115
|
-
requiredWorkflowTools: ["gsd_plan_slice"],
|
|
116
|
-
},
|
|
117
|
-
"replan-slice": {
|
|
118
|
-
allowedGsdTools: ["gsd_replan_slice", "gsd_decision_save"],
|
|
119
|
-
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
120
|
-
},
|
|
121
|
-
"complete-slice": {
|
|
122
|
-
allowedGsdTools: [
|
|
123
|
-
"gsd_slice_complete",
|
|
124
|
-
"gsd_task_reopen",
|
|
125
|
-
"gsd_replan_slice",
|
|
126
|
-
"gsd_decision_save",
|
|
127
|
-
"gsd_requirement_update",
|
|
128
|
-
"gsd_summary_save",
|
|
129
|
-
"subagent",
|
|
130
|
-
],
|
|
131
|
-
requiredWorkflowTools: [
|
|
132
|
-
"gsd_slice_complete",
|
|
133
|
-
"gsd_task_reopen",
|
|
134
|
-
"gsd_replan_slice",
|
|
135
|
-
"gsd_requirement_update",
|
|
136
|
-
"gsd_summary_save",
|
|
137
|
-
],
|
|
138
|
-
forbiddenGsdTools: {
|
|
139
|
-
gsd_uat_result_save: "Run UAT owns persisted UAT Assessment.",
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
"reassess-roadmap": {
|
|
143
|
-
allowedGsdTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
144
|
-
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
145
|
-
},
|
|
146
|
-
"execute-task": {
|
|
147
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
148
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
149
|
-
},
|
|
150
|
-
"execute-task-simple": {
|
|
151
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_decision_save"],
|
|
152
|
-
requiredWorkflowTools: ["gsd_task_complete"],
|
|
153
|
-
},
|
|
154
|
-
"reactive-execute": {
|
|
155
|
-
allowedGsdTools: ["gsd_task_complete", "gsd_summary_save", "gsd_decision_save"],
|
|
156
|
-
requiredWorkflowTools: ["gsd_task_complete", "gsd_summary_save"],
|
|
157
|
-
},
|
|
158
|
-
"run-uat": {
|
|
159
|
-
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
160
|
-
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
161
|
-
forbiddenGsdTools: {
|
|
162
|
-
gsd_exec: "Use gsd_uat_exec so acceptance evidence is typed as UAT-owned.",
|
|
163
|
-
gsd_save_gate_result: "gsd_uat_result_save owns the aggregate UAT gate.",
|
|
164
|
-
gsd_summary_save: "gsd_uat_result_save owns persisted UAT Assessment writes.",
|
|
165
|
-
},
|
|
166
|
-
},
|
|
167
|
-
"gate-evaluate": {
|
|
168
|
-
allowedGsdTools: ["gsd_save_gate_result"],
|
|
169
|
-
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
170
|
-
},
|
|
171
|
-
"rewrite-docs": {
|
|
172
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
173
|
-
requiredWorkflowTools: [],
|
|
174
|
-
},
|
|
175
|
-
"workflow-preferences": {
|
|
176
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
177
|
-
requiredWorkflowTools: [],
|
|
178
|
-
},
|
|
179
|
-
"discuss-project": {
|
|
180
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
181
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
182
|
-
},
|
|
183
|
-
"discuss-requirements": {
|
|
184
|
-
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
185
|
-
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
186
|
-
},
|
|
187
|
-
"research-decision": {
|
|
188
|
-
allowedGsdTools: ["gsd_summary_save"],
|
|
189
|
-
requiredWorkflowTools: ["ask_user_questions"],
|
|
190
|
-
},
|
|
191
|
-
"research-project": {
|
|
192
|
-
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
193
|
-
requiredWorkflowTools: [],
|
|
194
|
-
},
|
|
195
|
-
};
|
|
26
|
+
export const UNIT_TOOL_CONTRACTS: Record<string, UnitToolSurfaceContract> = Object.fromEntries(
|
|
27
|
+
Object.entries(UNIT_REGISTRY).flatMap(([unitType, descriptor]) =>
|
|
28
|
+
descriptor.toolContract ? [[unitType, descriptor.toolContract]] : [],
|
|
29
|
+
),
|
|
30
|
+
);
|
|
196
31
|
|
|
197
32
|
export const AUTO_UNIT_SCOPED_TOOLS: Record<string, readonly string[]> = Object.fromEntries(
|
|
198
33
|
Object.entries(UNIT_TOOL_CONTRACTS).map(([unitType, contract]) => [unitType, contract.allowedGsdTools]),
|
|
@@ -202,7 +37,7 @@ export function getUnitToolSurfaceContract(unitType: string): UnitToolSurfaceCon
|
|
|
202
37
|
return UNIT_TOOL_CONTRACTS[unitType];
|
|
203
38
|
}
|
|
204
39
|
|
|
205
|
-
export function getRequiredWorkflowToolsForUnit(unitType: string):
|
|
40
|
+
export function getRequiredWorkflowToolsForUnit(unitType: string): UnitWorkflowToolName[] {
|
|
206
41
|
return [...(UNIT_TOOL_CONTRACTS[unitType]?.requiredWorkflowTools ?? [])];
|
|
207
42
|
}
|
|
208
43
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose: Web-app detection and
|
|
2
|
+
// File Purpose: Web-app detection and browser-UAT guidance for planning and slice closeout.
|
|
3
3
|
|
|
4
4
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
5
|
import { resolve } from "node:path";
|
|
6
6
|
|
|
7
|
+
import { resolveAmbientBrowserEngineResolution, type BrowserEngineResolution } from "../browser-tools/engine/selection.js";
|
|
7
8
|
import { detectWebApp } from "../browser-tools/web-app-detect.js";
|
|
9
|
+
import { UAT_MODE_POLICIES, type UatType } from "./uat-policy.js";
|
|
8
10
|
|
|
9
11
|
export { detectWebApp };
|
|
10
12
|
|
|
@@ -47,24 +49,61 @@ export function findPlaywrightTestScript(projectRoot: string): string | null {
|
|
|
47
49
|
return null;
|
|
48
50
|
}
|
|
49
51
|
|
|
52
|
+
function describeBrowserToolBacking(engineResolution: BrowserEngineResolution): string {
|
|
53
|
+
switch (engineResolution.engine) {
|
|
54
|
+
case "gsd-browser":
|
|
55
|
+
return "This project looks browser-facing. GSD exposes `browser_*` tools backed by the managed gsd-browser engine for run-uat.";
|
|
56
|
+
case "legacy":
|
|
57
|
+
return "This project looks browser-facing. GSD exposes Playwright-backed `browser_*` tools for run-uat.";
|
|
58
|
+
case "off":
|
|
59
|
+
return "This project looks browser-facing, but Pi browser tools are disabled (GSD_BROWSER_ENGINE=off) — prefer `runtime-executable` UAT with automated browser test commands.";
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// One bullet per recommended UAT mode; `mode` keys into UAT_MODE_POLICIES so
|
|
64
|
+
// modes that require browser tools drop out of the guidance when the resolved
|
|
65
|
+
// engine provides none (mixed/live-runtime share one bullet and one policy bit).
|
|
66
|
+
const UAT_MODE_GUIDANCE: ReadonlyArray<{ mode: UatType; bullet: string }> = [
|
|
67
|
+
{
|
|
68
|
+
mode: "browser-executable",
|
|
69
|
+
bullet: "- `browser-executable` — navigate to `http://localhost:…`, click, screenshot, assert via `browser_*` tools during run-uat",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
mode: "runtime-executable",
|
|
73
|
+
bullet: "- `runtime-executable` — run an automated browser test command via `gsd_uat_exec` (for example `npx playwright test`)",
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
mode: "mixed",
|
|
77
|
+
bullet: "- `mixed` / `live-runtime` — combine runtime startup checks with interactive browser verification",
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
|
|
50
81
|
/**
|
|
51
82
|
* Markdown block injected into plan/complete-slice prompts when the project
|
|
52
|
-
* looks browser-facing. Returns null for CLI/library-only repos.
|
|
83
|
+
* looks browser-facing. Returns null for CLI/library-only repos. Guidance is
|
|
84
|
+
* composed from the resolved Browser Automation Engine so prompts never claim
|
|
85
|
+
* an engine the runtime is not using; `engineResolution` is injectable for
|
|
86
|
+
* tests and defaults to the ambient resolution.
|
|
53
87
|
*/
|
|
54
|
-
export function buildWebAppUatGuidanceBlock(
|
|
88
|
+
export function buildWebAppUatGuidanceBlock(
|
|
89
|
+
projectRoot: string,
|
|
90
|
+
engineResolution?: BrowserEngineResolution,
|
|
91
|
+
): string | null {
|
|
55
92
|
if (!detectWebApp(projectRoot)) return null;
|
|
56
93
|
|
|
94
|
+
const resolvedEngine = engineResolution ?? resolveAmbientBrowserEngineResolution(projectRoot);
|
|
95
|
+
const browserToolsAvailable = resolvedEngine.engine !== "off";
|
|
57
96
|
const playwrightScript = findPlaywrightTestScript(projectRoot);
|
|
58
97
|
const hasPlaywright = hasPlaywrightTestDependency(projectRoot) || playwrightScript !== null;
|
|
59
98
|
const lines = [
|
|
60
99
|
"### Web App UAT (detected)",
|
|
61
100
|
"",
|
|
62
|
-
|
|
101
|
+
describeBrowserToolBacking(resolvedEngine),
|
|
63
102
|
"",
|
|
64
103
|
"**UAT modes (pick one per slice — do not use `artifact-driven` for browser steps):**",
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
104
|
+
...UAT_MODE_GUIDANCE
|
|
105
|
+
.filter(({ mode }) => browserToolsAvailable || !UAT_MODE_POLICIES[mode].browserTools)
|
|
106
|
+
.map(({ bullet }) => bullet),
|
|
68
107
|
"",
|
|
69
108
|
"**Planning / closeout rules:**",
|
|
70
109
|
"- Preconditions must name the dev-server command and URL (for example `npm run dev` → `http://localhost:3000`)",
|
|
@@ -93,8 +132,12 @@ export function buildWebAppUatGuidanceBlock(projectRoot: string): string | null
|
|
|
93
132
|
"**Playwright scaffolding (first UI slice):** no `playwright` / `@playwright/test` dependency yet.",
|
|
94
133
|
"- Add a planning task that installs Playwright, adds `playwright.config.ts`, and creates a minimal smoke spec (for example `e2e/smoke.spec.ts`)",
|
|
95
134
|
"- Task `verify` should run `npx playwright test` (or the focused spec) with a safe, simple command",
|
|
96
|
-
"- Until specs exist, use `browser-executable` UAT with localhost preconditions and interactive `browser_*` checks at slice closeout",
|
|
97
135
|
);
|
|
136
|
+
if (browserToolsAvailable) {
|
|
137
|
+
lines.push(
|
|
138
|
+
"- Until specs exist, use `browser-executable` UAT with localhost preconditions and interactive `browser_*` checks at slice closeout",
|
|
139
|
+
);
|
|
140
|
+
}
|
|
98
141
|
}
|
|
99
142
|
|
|
100
143
|
return lines.join("\n");
|
|
@@ -28,7 +28,7 @@ export const WORKFLOW_TOOL_ALIAS_PAIRS: readonly WorkflowToolAliasPair[] =
|
|
|
28
28
|
export const WORKFLOW_TOOL_ALIAS_TO_CANONICAL: Readonly<Record<string, string>> =
|
|
29
29
|
Object.fromEntries(WORKFLOW_TOOL_ALIAS_PAIRS.map(({ alias, canonical }) => [alias, canonical]));
|
|
30
30
|
|
|
31
|
-
const WORKFLOW_MCP_ADAPTER_TOOL_NAMES = [
|
|
31
|
+
export const WORKFLOW_MCP_ADAPTER_TOOL_NAMES = [
|
|
32
32
|
"gsd_cancel",
|
|
33
33
|
"gsd_captures",
|
|
34
34
|
"ask_user_questions",
|
|
@@ -45,6 +45,9 @@ const WORKFLOW_MCP_ADAPTER_TOOL_NAMES = [
|
|
|
45
45
|
"gsd_status",
|
|
46
46
|
] as const;
|
|
47
47
|
|
|
48
|
+
/** Session-orchestration tools exposed by the workflow MCP adapter alongside the contract tools. */
|
|
49
|
+
export type WorkflowMcpAdapterToolName = (typeof WORKFLOW_MCP_ADAPTER_TOOL_NAMES)[number];
|
|
50
|
+
|
|
48
51
|
export const WORKFLOW_TOOL_SURFACE_NAMES = [
|
|
49
52
|
...WORKFLOW_MCP_ADAPTER_TOOL_NAMES,
|
|
50
53
|
...DB_WORKFLOW_TOOL_NAMES,
|
|
@@ -8,8 +8,9 @@
|
|
|
8
8
|
* git operations during worktree transitions:
|
|
9
9
|
*
|
|
10
10
|
* - `checkoutBranchWithStashGuard` — branch switch with stash protection,
|
|
11
|
-
* including the stash-pop EEXIST collision recovery for
|
|
12
|
-
*
|
|
11
|
+
* including the stash-pop EEXIST collision recovery for untracked files
|
|
12
|
+
* (force-checkout + targeted stash drop; #645 broadened it beyond `.gsd/`,
|
|
13
|
+
* guarded by "no non-.gsd unmerged entries remain").
|
|
13
14
|
* - `removeMergeStateFiles` — clears SQUASH_MSG / MERGE_HEAD / etc. left by
|
|
14
15
|
* a failed merge so subsequent merges don't fail on stale state.
|
|
15
16
|
* - `cleanupConflictState` — merge-abort + index reset + state-file cleanup
|
|
@@ -257,23 +258,28 @@ export function checkoutBranchWithStashGuard(
|
|
|
257
258
|
: "";
|
|
258
259
|
const stashPopMessage = `${stderrText}\n${msg}`.trim();
|
|
259
260
|
const alreadyExists = stashAlreadyExistsFilesFromError(popErr);
|
|
260
|
-
const gsdAlreadyExists = alreadyExists.filter((f) => f.startsWith(".gsd/"));
|
|
261
|
-
const nonGsdAlreadyExists = alreadyExists.filter((f) => !f.startsWith(".gsd/"));
|
|
262
261
|
const isUntrackedRestoreFailure = stashPopMessage.includes("could not restore untracked files from stash");
|
|
263
262
|
const stashRefForDrop = stashRefFromError(popErr);
|
|
264
|
-
const
|
|
263
|
+
const allConflictFiles = nativeConflictFiles(basePath);
|
|
264
|
+
const nonGsdUnmerged = allConflictFiles.filter((f) => !f.startsWith(".gsd/"));
|
|
265
|
+
const gsdUnmerged = allConflictFiles.filter((f) => f.startsWith(".gsd/"));
|
|
265
266
|
const gsdContentConflicts = isUntrackedRestoreFailure
|
|
266
267
|
? gsdJsonlFilesWithConflictMarkers(basePath)
|
|
267
268
|
: [];
|
|
268
|
-
|
|
269
|
+
// Resolve ALL untracked-collision files by accepting HEAD — files in
|
|
270
|
+
// alreadyExists were untracked on the source branch by definition of the
|
|
271
|
+
// "already exists, no checkout" failure, so target HEAD is authoritative.
|
|
272
|
+
// gsdUnmerged: .gsd/ index conflicts left by the partial stash pop are
|
|
273
|
+
// also resolved via HEAD — .gsd/ runtime state is always authoritative
|
|
274
|
+
// on the target branch, so accepting HEAD is safe here too.
|
|
275
|
+
const resolvable = [...new Set([...alreadyExists, ...gsdContentConflicts, ...gsdUnmerged])];
|
|
269
276
|
|
|
270
277
|
if (
|
|
271
278
|
isUntrackedRestoreFailure &&
|
|
272
|
-
|
|
273
|
-
nonGsdAlreadyExists.length === 0 &&
|
|
279
|
+
resolvable.length > 0 &&
|
|
274
280
|
nonGsdUnmerged.length === 0
|
|
275
281
|
) {
|
|
276
|
-
for (const f of
|
|
282
|
+
for (const f of resolvable) {
|
|
277
283
|
execFileSync("git", ["checkout", "HEAD", "--", f], {
|
|
278
284
|
cwd: basePath,
|
|
279
285
|
stdio: ["ignore", "pipe", "pipe"],
|
|
@@ -69,6 +69,18 @@ export function isGsdWorktreePath(path: string): boolean {
|
|
|
69
69
|
return findWorktreeSegment(path.replaceAll("\\", "/")) !== null;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Project-root prefix of a GSD worktree path, or null when the path is not
|
|
74
|
+
* inside a recognized worktree layout. Pure string split — no env handling,
|
|
75
|
+
* HOME guard, or filesystem fallbacks (resolveWorktreeProjectRoot adds
|
|
76
|
+
* those). Separator normalization is 1:1 on characters, so the prefix is
|
|
77
|
+
* sliced from the ORIGINAL string and keeps its separators.
|
|
78
|
+
*/
|
|
79
|
+
export function projectRootFromWorktreePath(path: string): string | null {
|
|
80
|
+
const segment = findWorktreeSegment(path.replaceAll("\\", "/"));
|
|
81
|
+
return segment ? path.slice(0, segment.gsdIdx) : null;
|
|
82
|
+
}
|
|
83
|
+
|
|
72
84
|
/**
|
|
73
85
|
* When a milestone worktree lives under the external-state layout
|
|
74
86
|
* (`<gsdHome>/projects/<hash>/worktrees/<MID>/`, or the `GSD_STATE_DIR`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// GSD worktree session state
|
|
2
|
-
import { findWorktreeSegment } from "./worktree-root.js";
|
|
2
|
+
import { findWorktreeSegment, projectRootFromWorktreePath } from "./worktree-root.js";
|
|
3
3
|
|
|
4
4
|
let originalCwd: string | null = null;
|
|
5
5
|
|
|
@@ -17,10 +17,8 @@ export function clearWorktreeOriginalCwd(): void {
|
|
|
17
17
|
|
|
18
18
|
export function ensureWorktreeOriginalCwdFromPath(cwd: string = process.cwd()): string | null {
|
|
19
19
|
if (originalCwd) return originalCwd;
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
22
|
-
originalCwd = cwd.slice(0, segment.gsdIdx);
|
|
23
|
-
}
|
|
20
|
+
const root = projectRootFromWorktreePath(cwd);
|
|
21
|
+
if (root) originalCwd = root;
|
|
24
22
|
return originalCwd;
|
|
25
23
|
}
|
|
26
24
|
|
|
@@ -243,9 +243,11 @@ export function registerNativeSearchHooks(pi: NativeSearchPI): { getIsAnthropic:
|
|
|
243
243
|
// Anthropic-only tool never leaks into OpenAI Responses requests.
|
|
244
244
|
isAnthropic = isAnthropicProvider && payloadLooksAnthropic !== false;
|
|
245
245
|
} else {
|
|
246
|
-
//
|
|
247
|
-
//
|
|
248
|
-
|
|
246
|
+
// No authoritative provider info available (no event.model, no model_select).
|
|
247
|
+
// Do NOT inject native web_search — guessing on model name alone causes 400
|
|
248
|
+
// "unsupported_value" errors when the actual provider (copilot, openrouter,
|
|
249
|
+
// proxy, etc.) doesn't expose the server-side search tool (#648).
|
|
250
|
+
isAnthropic = false;
|
|
249
251
|
}
|
|
250
252
|
if (!isAnthropic) return;
|
|
251
253
|
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// Project/App: gsd-pi
|
|
2
|
+
// File Purpose: Browser Automation Contract — the single source for the canonical
|
|
3
|
+
// Pi-facing browser tool vocabulary. Engine adapters (legacy Playwright, managed
|
|
4
|
+
// gsd-browser), UAT policy, dispatch preflight, and evidence detection all derive
|
|
5
|
+
// their browser tool knowledge from this module instead of re-listing names.
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Canonical `browser_*` tool names of the Browser Automation Contract.
|
|
9
|
+
*
|
|
10
|
+
* These are the product-level names Units see regardless of which Browser
|
|
11
|
+
* Automation Engine serves them (ADR-024). Adding a capability here is the
|
|
12
|
+
* one-line vocabulary change; the engine adapters and presentation surfaces
|
|
13
|
+
* are typed against this list, so missing coverage fails typecheck.
|
|
14
|
+
*/
|
|
15
|
+
export const BROWSER_CONTRACT_TOOL_NAMES = [
|
|
16
|
+
"browser_navigate",
|
|
17
|
+
"browser_click",
|
|
18
|
+
"browser_type",
|
|
19
|
+
"browser_fill_form",
|
|
20
|
+
"browser_click_ref",
|
|
21
|
+
"browser_fill_ref",
|
|
22
|
+
"browser_wait_for",
|
|
23
|
+
"browser_assert",
|
|
24
|
+
"browser_verify",
|
|
25
|
+
"browser_screenshot",
|
|
26
|
+
"browser_snapshot_refs",
|
|
27
|
+
"browser_find",
|
|
28
|
+
"browser_get_console_logs",
|
|
29
|
+
"browser_get_network_logs",
|
|
30
|
+
"browser_evaluate",
|
|
31
|
+
"browser_reload",
|
|
32
|
+
"browser_batch",
|
|
33
|
+
"browser_act",
|
|
34
|
+
] as const;
|
|
35
|
+
|
|
36
|
+
export type BrowserContractToolName = (typeof BROWSER_CONTRACT_TOOL_NAMES)[number];
|
|
37
|
+
|
|
38
|
+
const BROWSER_CONTRACT_TOOL_NAME_SET: ReadonlySet<string> = new Set(BROWSER_CONTRACT_TOOL_NAMES);
|
|
39
|
+
|
|
40
|
+
export function isBrowserContractToolName(name: string): name is BrowserContractToolName {
|
|
41
|
+
return BROWSER_CONTRACT_TOOL_NAME_SET.has(name);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Whether a canonical (non-MCP-prefixed) tool name belongs to the browser tool
|
|
46
|
+
* family. Broader than the contract list on purpose: an External MCP Client or
|
|
47
|
+
* host integration may supply additional `browser_*` tools that still satisfy
|
|
48
|
+
* browser-backed UAT.
|
|
49
|
+
*/
|
|
50
|
+
export function hasBrowserContractPrefix(canonicalToolName: string): boolean {
|
|
51
|
+
return canonicalToolName.startsWith("browser_");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Contract tool names whose appearance in prose marks browser-backed UAT
|
|
56
|
+
* activity (requirement or evidence language). Consumed by the
|
|
57
|
+
* browser-evidence regexes so textual detection stays derived from the
|
|
58
|
+
* contract vocabulary.
|
|
59
|
+
*/
|
|
60
|
+
export const BROWSER_EVIDENCE_SIGNAL_TOOL_NAMES = [
|
|
61
|
+
"browser_assert",
|
|
62
|
+
"browser_batch",
|
|
63
|
+
"browser_find",
|
|
64
|
+
"browser_verify",
|
|
65
|
+
"browser_snapshot_refs",
|
|
66
|
+
] as const satisfies readonly BrowserContractToolName[];
|