@opengsd/gsd-pi 1.2.0-dev.84c56d87 → 1.2.0-dev.8e6112e9
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-model-override.d.ts +15 -0
- package/dist/cli-model-override.js +21 -0
- package/dist/cli.js +1 -18
- package/dist/headless-events.js +7 -5
- package/dist/loader.js +6 -4
- package/dist/mcp-server.js +2 -1
- package/dist/register-agent-bundles.d.ts +11 -2
- package/dist/register-agent-bundles.js +18 -4
- package/dist/resource-loader.d.ts +10 -5
- package/dist/resource-loader.js +121 -6
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +5 -4
- package/dist/resources/extensions/ask-user-questions.js +3 -2
- 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/claude-code-cli/stream-adapter.js +447 -215
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +33 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
- package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +17 -2
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +33 -13
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +120 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- package/dist/resources/extensions/gsd/auto/dispatch.js +365 -0
- package/dist/resources/extensions/gsd/auto/finalize.js +347 -0
- package/dist/resources/extensions/gsd/auto/loop.js +7 -1
- package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +174 -69
- package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +17 -2329
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +534 -0
- package/dist/resources/extensions/gsd/auto/session.js +3 -0
- package/dist/resources/extensions/gsd/auto/unit-phase.js +694 -0
- package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto/worktree-safety-phase.js +125 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -34
- package/dist/resources/extensions/gsd/auto-dispatch.js +50 -58
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +30 -12
- package/dist/resources/extensions/gsd/auto-prompts.js +78 -19
- package/dist/resources/extensions/gsd/auto-start.js +35 -15
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +45 -21
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +5 -4
- package/dist/resources/extensions/gsd/auto-verification.js +23 -30
- package/dist/resources/extensions/gsd/auto-worktree.js +15 -2
- package/dist/resources/extensions/gsd/auto.js +52 -2
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +26 -6
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +60 -13
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +145 -50
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +302 -80
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +83 -0
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/commands/context.js +16 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +46 -3
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
- package/dist/resources/extensions/gsd/consent-question.js +353 -0
- package/dist/resources/extensions/gsd/consent-verdict.js +63 -0
- package/dist/resources/extensions/gsd/constants.js +0 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +8 -3
- package/dist/resources/extensions/gsd/db/engine.js +5 -3
- package/dist/resources/extensions/gsd/db/queries.js +56 -0
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +5 -5
- package/dist/resources/extensions/gsd/doctor-environment.js +256 -125
- package/dist/resources/extensions/gsd/doctor-git-checks.js +2 -18
- package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
- package/dist/resources/extensions/gsd/exec-sandbox.js +30 -10
- package/dist/resources/extensions/gsd/files.js +33 -19
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +11 -8
- package/dist/resources/extensions/gsd/guidance.js +60 -0
- package/dist/resources/extensions/gsd/guided-flow.js +93 -4
- package/dist/resources/extensions/gsd/health-widget.js +87 -28
- package/dist/resources/extensions/gsd/markdown-renderer.js +10 -0
- package/dist/resources/extensions/gsd/mcp-bridge.js +10 -0
- package/dist/resources/extensions/gsd/memory-relations.js +1 -1
- package/dist/resources/extensions/gsd/milestone-closeout.js +85 -24
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +2 -2
- package/dist/resources/extensions/gsd/milestone-reopen-events.js +3 -5
- package/dist/resources/extensions/gsd/milestone-settlement.js +2 -2
- package/dist/resources/extensions/gsd/notifications.js +12 -7
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/preferences-models.js +2 -2
- package/dist/resources/extensions/gsd/projection-flush.js +7 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +4 -4
- package/dist/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reassess-roadmap.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/research-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/dist/resources/extensions/gsd/prompts/run-uat.md +9 -5
- package/dist/resources/extensions/gsd/prompts/system.md +5 -2
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/dist/resources/extensions/gsd/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/roadmap-slices.js +25 -3
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/session-lock.js +1 -1
- package/dist/resources/extensions/gsd/skill-activation.js +3 -6
- package/dist/resources/extensions/gsd/state.js +11 -2
- package/dist/resources/extensions/gsd/tool-contract.js +14 -3
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +4 -4
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +83 -31
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +22 -12
- package/dist/resources/extensions/gsd/tools/complete-task.js +65 -2
- package/dist/resources/extensions/gsd/tools/exec-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/plan-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/reopen-task.js +2 -2
- package/dist/resources/extensions/gsd/tools/replan-slice.js +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
- package/dist/resources/extensions/gsd/uat-policy.js +40 -15
- package/dist/resources/extensions/gsd/unit-context-composer.js +65 -0
- package/dist/resources/extensions/gsd/unit-registry.js +34 -4
- package/dist/resources/extensions/gsd/verdict-parser.js +1 -1
- package/dist/resources/extensions/gsd/verification-verdict.js +2 -1
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +91 -0
- package/dist/resources/extensions/gsd/workflow-event-vocabulary.js +46 -0
- package/dist/resources/extensions/gsd/workflow-events.js +6 -18
- package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp-readiness-cache.js +105 -0
- package/dist/resources/extensions/gsd/workflow-reconcile.js +21 -56
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +3 -2
- package/dist/resources/extensions/gsd/worktree-manager.js +7 -1
- package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
- package/dist/resources/extensions/gsd/worktree.js +8 -1
- package/dist/resources/extensions/mcp-client/manager.js +6 -1
- package/dist/resources/extensions/shared/gsd-browser-cli.js +45 -3
- package/dist/resources/shared/gsd-browser-path-sync.js +214 -0
- package/dist/resources/shared/package-manager-detection.js +1 -1
- package/dist/resources/shared/package.json +3 -0
- package/dist/resources/skills/create-skill/SKILL.md +3 -0
- package/dist/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/runtime-checks.d.ts +10 -0
- package/dist/runtime-checks.js +27 -0
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-check.d.ts +2 -0
- package/dist/update-check.js +24 -1
- package/dist/update-cmd.js +20 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- 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 +6 -6
- package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
- 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 +26 -18
- package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
- 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 +54 -29
- package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
- package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
- package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
- package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
- package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
- package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
- package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
- package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
- 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 +69 -28
- package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
- package/dist/web/standalone/node_modules/postcss/package.json +48 -48
- package/package.json +3 -3
- 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/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/sdk.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/sdk.js +6 -4
- package/packages/gsd-agent-core/dist/sdk.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js +10 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +13 -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 +55 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +34 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.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-mode.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +12 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-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/interactive/interactive-selectors-settings.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.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/README.md +12 -3
- package/packages/mcp-server/dist/cli-runner.d.ts +40 -0
- package/packages/mcp-server/dist/cli-runner.d.ts.map +1 -0
- package/packages/mcp-server/dist/cli-runner.js +137 -0
- package/packages/mcp-server/dist/cli-runner.js.map +1 -0
- package/packages/mcp-server/dist/cli.js +2 -53
- package/packages/mcp-server/dist/cli.js.map +1 -1
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts +29 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js +50 -0
- package/packages/mcp-server/dist/moonshot-tool-schema.js.map +1 -0
- package/packages/mcp-server/dist/pid-registry.d.ts +46 -0
- package/packages/mcp-server/dist/pid-registry.d.ts.map +1 -0
- package/packages/mcp-server/dist/pid-registry.js +452 -0
- package/packages/mcp-server/dist/pid-registry.js.map +1 -0
- package/packages/mcp-server/dist/probe-mode.d.ts +4 -0
- package/packages/mcp-server/dist/probe-mode.d.ts.map +1 -0
- package/packages/mcp-server/dist/probe-mode.js +10 -0
- package/packages/mcp-server/dist/probe-mode.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +4 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/stdio-watchdog.d.ts +8 -0
- package/packages/mcp-server/dist/stdio-watchdog.d.ts.map +1 -0
- package/packages/mcp-server/dist/stdio-watchdog.js +40 -0
- package/packages/mcp-server/dist/stdio-watchdog.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts +18 -18
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +161 -81
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +43 -2
- package/packages/pi-agent-core/dist/agent-loop.js.map +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/README.md +1 -0
- package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
- package/packages/pi-ai/dist/image-models.generated.js +6 -6
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +419 -221
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +460 -261
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +12 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.d.ts +5 -0
- package/packages/pi-ai/dist/providers/google-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-shared.js +12 -3
- package/packages/pi-ai/dist/providers/google-shared.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-completions.js +7 -3
- package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts +9 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js +34 -0
- package/packages/pi-ai/dist/utils/moonshot-tool-schema.js.map +1 -0
- package/packages/pi-ai/dist/utils/oauth/github-copilot.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js +6 -2
- package/packages/pi-ai/dist/utils/oauth/github-copilot.js.map +1 -1
- package/packages/pi-ai/package.json +3 -2
- 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/settings-manager.d.ts +3 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +11 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.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/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +45 -17
- package/packages/pi-coding-agent/dist/theme/theme.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/index.d.ts +1 -1
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +1 -1
- package/packages/pi-tui/dist/index.js.map +1 -1
- package/packages/pi-tui/dist/terminal-image.d.ts +33 -0
- package/packages/pi-tui/dist/terminal-image.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal-image.js +54 -2
- package/packages/pi-tui/dist/terminal-image.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +8 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +63 -18
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/dist/utils.d.ts.map +1 -1
- package/packages/pi-tui/dist/utils.js +110 -36
- package/packages/pi-tui/dist/utils.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +45 -17
- package/pkg/dist/theme/theme.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +5 -4
- package/src/resources/extensions/ask-user-questions.ts +7 -2
- 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/browser-tools/tests/gsd-browser-launch-config.test.mjs +40 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +531 -226
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +672 -7
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +38 -1
- package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
- package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +21 -3
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +32 -9
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +168 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- package/src/resources/extensions/gsd/auto/dispatch.ts +449 -0
- package/src/resources/extensions/gsd/auto/finalize.ts +445 -0
- package/src/resources/extensions/gsd/auto/loop.ts +7 -1
- package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +193 -71
- package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
- package/src/resources/extensions/gsd/auto/phases.ts +58 -3022
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +704 -0
- package/src/resources/extensions/gsd/auto/session.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-phase.ts +910 -0
- package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto/worktree-safety-phase.ts +149 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +18 -48
- package/src/resources/extensions/gsd/auto-dispatch.ts +48 -61
- package/src/resources/extensions/gsd/auto-model-selection.ts +41 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +33 -12
- package/src/resources/extensions/gsd/auto-prompts.ts +115 -35
- package/src/resources/extensions/gsd/auto-start.ts +36 -18
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +83 -28
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +4 -4
- package/src/resources/extensions/gsd/auto-verification.ts +26 -28
- package/src/resources/extensions/gsd/auto-worktree.ts +15 -2
- package/src/resources/extensions/gsd/auto.ts +64 -2
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +34 -5
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +79 -12
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +163 -55
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +350 -86
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +108 -0
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/commands/context.ts +16 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +46 -3
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
- package/src/resources/extensions/gsd/consent-question.ts +431 -0
- package/src/resources/extensions/gsd/consent-verdict.ts +86 -0
- package/src/resources/extensions/gsd/constants.ts +0 -3
- package/src/resources/extensions/gsd/crash-recovery.ts +10 -2
- package/src/resources/extensions/gsd/db/engine.ts +5 -3
- package/src/resources/extensions/gsd/db/queries.ts +66 -0
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +5 -4
- package/src/resources/extensions/gsd/doctor-environment.ts +267 -142
- package/src/resources/extensions/gsd/doctor-git-checks.ts +2 -19
- package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
- package/src/resources/extensions/gsd/exec-sandbox.ts +49 -9
- package/src/resources/extensions/gsd/files.ts +33 -12
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +13 -10
- package/src/resources/extensions/gsd/guidance.ts +78 -0
- package/src/resources/extensions/gsd/guided-flow.ts +145 -24
- package/src/resources/extensions/gsd/health-widget.ts +91 -27
- package/src/resources/extensions/gsd/markdown-renderer.ts +11 -0
- package/src/resources/extensions/gsd/mcp-bridge.ts +39 -0
- package/src/resources/extensions/gsd/memory-relations.ts +1 -1
- package/src/resources/extensions/gsd/milestone-closeout.ts +109 -24
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +2 -2
- package/src/resources/extensions/gsd/milestone-reopen-events.ts +3 -6
- package/src/resources/extensions/gsd/milestone-settlement.ts +2 -2
- package/src/resources/extensions/gsd/notifications.ts +13 -6
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/preferences-models.ts +2 -1
- package/src/resources/extensions/gsd/projection-flush.ts +20 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +4 -4
- package/src/resources/extensions/gsd/prompts/execute-task.md +3 -2
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reassess-roadmap.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/research-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/research-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- package/src/resources/extensions/gsd/prompts/run-uat.md +9 -5
- package/src/resources/extensions/gsd/prompts/system.md +5 -2
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/src/resources/extensions/gsd/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/roadmap-slices.ts +28 -3
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/session-lock.ts +1 -1
- package/src/resources/extensions/gsd/skill-activation.ts +3 -6
- package/src/resources/extensions/gsd/state.ts +12 -1
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-blocked-remediation-message.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +206 -22
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +97 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +273 -37
- package/src/resources/extensions/gsd/tests/auto-pause-double-entry-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +77 -1
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +65 -3
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +236 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +169 -1
- package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
- package/src/resources/extensions/gsd/tests/consent-question.test.ts +351 -0
- package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +12 -11
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +328 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
- package/src/resources/extensions/gsd/tests/doctor-git-checks-terminal.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/dynamic-bash-no-cap.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/engine-hook-contract.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/engine-interfaces-contract.test.ts +117 -91
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +113 -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/gsd-command-home.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/guidance.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +18 -6
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-environment-async.test.ts +104 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +217 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/mcp-readiness-preflight.test.ts +205 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +6 -5
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +95 -4
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/milestone-settlement.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +143 -0
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/phases-terminal-complete-idempotent.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +63 -2
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +10 -2
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
- package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +26 -2
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +170 -48
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +20 -17
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +45 -2
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +184 -10
- package/src/resources/extensions/gsd/tests/tool-unavailable-retry.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/transport-gate-double-complete.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +88 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/workflow-events.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp-readiness-cache.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +65 -2
- package/src/resources/extensions/gsd/tests/workflow-phase-contract-matrix.test.ts +332 -0
- package/src/resources/extensions/gsd/tests/workflow-reconcile.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +273 -38
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety-phase.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +72 -0
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +67 -1
- package/src/resources/extensions/gsd/tool-contract.ts +38 -3
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +4 -4
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +126 -19
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +22 -12
- package/src/resources/extensions/gsd/tools/complete-task.ts +90 -2
- package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/plan-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/reopen-task.ts +2 -2
- package/src/resources/extensions/gsd/tools/replan-slice.ts +2 -2
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
- package/src/resources/extensions/gsd/uat-policy.ts +60 -15
- package/src/resources/extensions/gsd/unit-context-composer.ts +99 -0
- package/src/resources/extensions/gsd/unit-registry.ts +34 -4
- package/src/resources/extensions/gsd/verdict-parser.ts +1 -1
- package/src/resources/extensions/gsd/verification-verdict.ts +4 -2
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +131 -0
- package/src/resources/extensions/gsd/workflow-event-vocabulary.ts +59 -0
- package/src/resources/extensions/gsd/workflow-events.ts +12 -20
- package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +2 -0
- package/src/resources/extensions/gsd/workflow-mcp-readiness-cache.ts +150 -0
- package/src/resources/extensions/gsd/workflow-reconcile.ts +29 -62
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +3 -8
- package/src/resources/extensions/gsd/worktree-manager.ts +6 -1
- package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
- package/src/resources/extensions/gsd/worktree.ts +7 -1
- package/src/resources/extensions/mcp-client/manager.ts +7 -1
- package/src/resources/extensions/shared/gsd-browser-cli.ts +54 -3
- package/src/resources/shared/gsd-browser-path-sync.ts +273 -0
- package/src/resources/shared/package-manager-detection.ts +1 -1
- package/src/resources/shared/package.json +3 -0
- package/src/resources/skills/create-skill/SKILL.md +3 -0
- package/src/resources/skills/create-skill/references/skill-structure.md +1 -0
- package/dist/resources/extensions/gsd/user-input-boundary.js +0 -218
- package/dist/resources/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +0 -173
- package/src/resources/extensions/gsd/user-input-boundary.ts +0 -216
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{AOpDeK_gJHU8OZjRo31gQ → pZbHa49xI-knmKlphIRq0}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{AOpDeK_gJHU8OZjRo31gQ → pZbHa49xI-knmKlphIRq0}/_ssgManifest.js +0 -0
|
@@ -1,18 +1,23 @@
|
|
|
1
|
-
// Structural invariant: gsd-db.ts
|
|
1
|
+
// Structural invariant: gsd-db.ts and the typed writer layer own writes for .gsd/gsd.db.
|
|
2
2
|
//
|
|
3
3
|
// No file under src/resources/extensions/gsd/ may issue raw write SQL
|
|
4
4
|
// (INSERT/UPDATE/DELETE/REPLACE) or raw transaction control (BEGIN/COMMIT/
|
|
5
5
|
// ROLLBACK via `.exec(...)`) against the engine database. Every bypass must
|
|
6
|
-
// route through
|
|
6
|
+
// route through an explicitly allowlisted typed writer.
|
|
7
7
|
//
|
|
8
8
|
// Allowlist:
|
|
9
|
-
// - gsd-db.ts itself —
|
|
9
|
+
// - gsd-db.ts itself — compatibility barrel and remaining mid-migration wrappers
|
|
10
|
+
// - db/engine.ts — schema, migrations, lifecycle, and transaction primitives
|
|
11
|
+
// - db/writers/** — domain writers
|
|
12
|
+
// - typed coordination/runtime writer modules listed in TYPED_DB_WRITER_FILES
|
|
13
|
+
// - schema/migration helper modules listed in SCHEMA_DB_WRITER_FILES
|
|
14
|
+
// - ADR migration/backfill helpers listed in MIGRATION_BACKFILL_WRITER_FILES
|
|
10
15
|
// - unit-ownership.ts — manages a separate .gsd/unit-claims.db for
|
|
11
16
|
// cross-worktree claim races; intentionally outside this invariant
|
|
12
17
|
// - tests/** — fixtures and direct DB inspection are fair game
|
|
13
18
|
//
|
|
14
19
|
// When this test fails, do not add a new suppression. Instead:
|
|
15
|
-
// 1. Add a typed wrapper to
|
|
20
|
+
// 1. Add a typed wrapper to the explicit writer layer that captures the SQL
|
|
16
21
|
// 2. Switch the flagged site to call the wrapper
|
|
17
22
|
//
|
|
18
23
|
// See `.claude/plans/joyful-doodling-pony.md` for the full rationale.
|
|
@@ -29,17 +34,50 @@ const gsdDir = join(process.cwd(), "src/resources/extensions/gsd");
|
|
|
29
34
|
// - db/engine.ts — connection lifecycle, schema/migrations (DDL), and the
|
|
30
35
|
// BEGIN/COMMIT transaction primitives. The shared handle every writer reads.
|
|
31
36
|
// - db/writers/**.ts — the Single Writer Layer: one cohesive write subsystem
|
|
32
|
-
// per file
|
|
33
|
-
// legacy-import, cascades).
|
|
37
|
+
// per file.
|
|
34
38
|
// - gsd-db.ts — the barrel that re-exports the layer (still holds wrappers
|
|
35
39
|
// mid-migration).
|
|
40
|
+
// - typed coordination/runtime writers listed below.
|
|
41
|
+
// - schema/migration helpers listed below.
|
|
42
|
+
// - ADR migration/backfill helpers listed below.
|
|
36
43
|
// - unit-ownership.ts — a separate .gsd/unit-claims.db, intentionally outside.
|
|
37
44
|
// db/queries.ts is explicitly NOT allowed write SQL (asserted separately below).
|
|
45
|
+
const TYPED_DB_WRITER_FILES = new Set([
|
|
46
|
+
"db/auto-workers.ts",
|
|
47
|
+
"db/command-queue.ts",
|
|
48
|
+
"db/milestone-leases.ts",
|
|
49
|
+
"db/runtime-kv.ts",
|
|
50
|
+
"db/unit-dispatches.ts",
|
|
51
|
+
]);
|
|
52
|
+
|
|
53
|
+
const SCHEMA_DB_WRITER_FILES = new Set([
|
|
54
|
+
"db-memory-fts-schema.ts",
|
|
55
|
+
"db-schema-metadata.ts",
|
|
56
|
+
"db-verification-evidence-schema.ts",
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
const MIGRATION_BACKFILL_WRITER_FILES = new Set([
|
|
60
|
+
"memory-backfill.ts",
|
|
61
|
+
]);
|
|
62
|
+
|
|
63
|
+
const DB_WRITER_ALLOWLIST_GUIDANCE = [
|
|
64
|
+
"gsd-db.ts",
|
|
65
|
+
"db/engine.ts",
|
|
66
|
+
"db/writers/**",
|
|
67
|
+
...TYPED_DB_WRITER_FILES,
|
|
68
|
+
...SCHEMA_DB_WRITER_FILES,
|
|
69
|
+
...MIGRATION_BACKFILL_WRITER_FILES,
|
|
70
|
+
"unit-ownership.ts only for .gsd/unit-claims.db",
|
|
71
|
+
].join(", ");
|
|
72
|
+
|
|
38
73
|
function isSingleWriterFile(rel: string): boolean {
|
|
39
74
|
const norm = rel.split("\\").join("/");
|
|
40
75
|
if (norm === "gsd-db.ts" || norm === "unit-ownership.ts") return true;
|
|
41
76
|
if (norm === "db/engine.ts") return true;
|
|
42
77
|
if (norm.startsWith("db/writers/") && norm.endsWith(".ts")) return true;
|
|
78
|
+
if (TYPED_DB_WRITER_FILES.has(norm)) return true;
|
|
79
|
+
if (SCHEMA_DB_WRITER_FILES.has(norm)) return true;
|
|
80
|
+
if (MIGRATION_BACKFILL_WRITER_FILES.has(norm)) return true;
|
|
43
81
|
return false;
|
|
44
82
|
}
|
|
45
83
|
|
|
@@ -83,11 +121,126 @@ interface Violation {
|
|
|
83
121
|
kind: string;
|
|
84
122
|
}
|
|
85
123
|
|
|
86
|
-
|
|
87
|
-
const
|
|
124
|
+
const DB_CALL_RE = /\.(prepare|exec)\s*\(/g;
|
|
125
|
+
const PREPARE_WRITE_SQL_RE = /\b(INSERT|UPDATE|DELETE|REPLACE)\b/i;
|
|
126
|
+
const EXEC_WRITE_SQL_RE = /\b(INSERT|UPDATE|DELETE|REPLACE|BEGIN|COMMIT|ROLLBACK)\b/i;
|
|
127
|
+
|
|
128
|
+
function findRawWriteSqlViolations(file: string, content: string): Violation[] {
|
|
129
|
+
const violations: Violation[] = [];
|
|
130
|
+
DB_CALL_RE.lastIndex = 0;
|
|
131
|
+
|
|
132
|
+
let match: RegExpExecArray | null;
|
|
133
|
+
while ((match = DB_CALL_RE.exec(content)) !== null) {
|
|
134
|
+
const method = match[1] as "prepare" | "exec";
|
|
135
|
+
const sql = readFirstStringArgument(content, DB_CALL_RE.lastIndex);
|
|
136
|
+
if (sql === null) continue;
|
|
137
|
+
|
|
138
|
+
const keywordMatch =
|
|
139
|
+
method === "prepare"
|
|
140
|
+
? PREPARE_WRITE_SQL_RE.exec(sql)
|
|
141
|
+
: EXEC_WRITE_SQL_RE.exec(sql);
|
|
142
|
+
if (keywordMatch === null) continue;
|
|
143
|
+
|
|
144
|
+
violations.push({
|
|
145
|
+
file,
|
|
146
|
+
line: lineNumberAt(content, match.index),
|
|
147
|
+
snippet: lineSnippetAt(content, match.index),
|
|
148
|
+
kind: `${method}(${keywordMatch[1].toUpperCase()})`,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return violations;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function readFirstStringArgument(content: string, index: number): string | null {
|
|
156
|
+
const quoteIndex = skipWhitespace(content, index);
|
|
157
|
+
const quote = content[quoteIndex];
|
|
158
|
+
if (quote !== "`" && quote !== "'" && quote !== '"') return null;
|
|
159
|
+
return readStringLiteral(content, quoteIndex, quote);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function skipWhitespace(content: string, index: number): number {
|
|
163
|
+
let cursor = index;
|
|
164
|
+
while (cursor < content.length && /\s/.test(content[cursor] ?? "")) {
|
|
165
|
+
cursor++;
|
|
166
|
+
}
|
|
167
|
+
return cursor;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function readStringLiteral(content: string, quoteIndex: number, quote: string): string | null {
|
|
171
|
+
let value = "";
|
|
172
|
+
|
|
173
|
+
for (let cursor = quoteIndex + 1; cursor < content.length; cursor++) {
|
|
174
|
+
const char = content[cursor];
|
|
175
|
+
if (char === "\\") {
|
|
176
|
+
value += char;
|
|
177
|
+
cursor++;
|
|
178
|
+
if (cursor < content.length) value += content[cursor];
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (char === quote) return value;
|
|
182
|
+
value += char;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function lineNumberAt(content: string, index: number): number {
|
|
189
|
+
return content.slice(0, index).split("\n").length;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
function lineSnippetAt(content: string, index: number): string {
|
|
193
|
+
const lineStart = content.lastIndexOf("\n", index) + 1;
|
|
194
|
+
const nextNewline = content.indexOf("\n", index);
|
|
195
|
+
const lineEnd = nextNewline === -1 ? content.length : nextNewline;
|
|
196
|
+
return content.slice(lineStart, lineEnd).trim();
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
test("scanner catches multiline template-literal db.prepare write SQL", () => {
|
|
200
|
+
const violations = findRawWriteSqlViolations(
|
|
201
|
+
"fixture.ts",
|
|
202
|
+
[
|
|
203
|
+
"const stmt = db.prepare(",
|
|
204
|
+
" `INSERT INTO tasks (id)",
|
|
205
|
+
" VALUES (?)`",
|
|
206
|
+
");",
|
|
207
|
+
].join("\n"),
|
|
208
|
+
);
|
|
209
|
+
|
|
210
|
+
assert.deepEqual(violations.map(({ line, kind }) => ({ line, kind })), [
|
|
211
|
+
{ line: 1, kind: "prepare(INSERT)" },
|
|
212
|
+
]);
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
test("scanner catches multiline raw transaction control in exec", () => {
|
|
216
|
+
const violations = findRawWriteSqlViolations(
|
|
217
|
+
"fixture.ts",
|
|
218
|
+
[
|
|
219
|
+
"db.exec(",
|
|
220
|
+
" `BEGIN`",
|
|
221
|
+
");",
|
|
222
|
+
].join("\n"),
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
assert.deepEqual(violations.map(({ line, kind }) => ({ line, kind })), [
|
|
226
|
+
{ line: 1, kind: "exec(BEGIN)" },
|
|
227
|
+
]);
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
test("scanner ignores multiline SELECT statements", () => {
|
|
231
|
+
const violations = findRawWriteSqlViolations(
|
|
232
|
+
"fixture.ts",
|
|
233
|
+
[
|
|
234
|
+
"const stmt = db.prepare(",
|
|
235
|
+
" `SELECT id",
|
|
236
|
+
" FROM tasks`",
|
|
237
|
+
");",
|
|
238
|
+
].join("\n"),
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
assert.deepEqual(violations, []);
|
|
242
|
+
});
|
|
88
243
|
|
|
89
|
-
// Match .exec("... INSERT|UPDATE|DELETE|REPLACE ...") or raw BEGIN/COMMIT/ROLLBACK.
|
|
90
|
-
const EXEC_WRITE_RE = /\.exec\s*\(\s*[`'"][^`'"]*\b(INSERT|UPDATE|DELETE|REPLACE|BEGIN|COMMIT|ROLLBACK)\b/i;
|
|
91
244
|
const DB_WORKSPACE_MECHANICS = new Set([
|
|
92
245
|
"backupDatabaseSnapshot",
|
|
93
246
|
"checkpointDatabase",
|
|
@@ -112,7 +265,7 @@ function importNames(specifierBlock: string): string[] {
|
|
|
112
265
|
.filter(Boolean);
|
|
113
266
|
}
|
|
114
267
|
|
|
115
|
-
test("no module outside
|
|
268
|
+
test("no module outside the explicit DB writer allowlist issues raw write SQL", () => {
|
|
116
269
|
const files = walkTsFiles(gsdDir);
|
|
117
270
|
assert.ok(files.length >= 20, `Expected at least 20 .ts files under gsd/, found ${files.length}`);
|
|
118
271
|
|
|
@@ -129,30 +282,7 @@ test("no module outside gsd-db.ts issues raw write SQL against the engine DB", (
|
|
|
129
282
|
continue;
|
|
130
283
|
}
|
|
131
284
|
|
|
132
|
-
|
|
133
|
-
for (let i = 0; i < lines.length; i++) {
|
|
134
|
-
const line = lines[i];
|
|
135
|
-
|
|
136
|
-
const prepareMatch = PREPARE_WRITE_RE.exec(line);
|
|
137
|
-
if (prepareMatch) {
|
|
138
|
-
violations.push({
|
|
139
|
-
file: rel,
|
|
140
|
-
line: i + 1,
|
|
141
|
-
snippet: line.trim(),
|
|
142
|
-
kind: `prepare(${prepareMatch[1].toUpperCase()})`,
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
const execMatch = EXEC_WRITE_RE.exec(line);
|
|
147
|
-
if (execMatch) {
|
|
148
|
-
violations.push({
|
|
149
|
-
file: rel,
|
|
150
|
-
line: i + 1,
|
|
151
|
-
snippet: line.trim(),
|
|
152
|
-
kind: `exec(${execMatch[1].toUpperCase()})`,
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
}
|
|
285
|
+
violations.push(...findRawWriteSqlViolations(rel, content));
|
|
156
286
|
}
|
|
157
287
|
|
|
158
288
|
if (violations.length > 0) {
|
|
@@ -160,9 +290,9 @@ test("no module outside gsd-db.ts issues raw write SQL against the engine DB", (
|
|
|
160
290
|
(v) => ` ${v.file}:${v.line} [${v.kind}] — ${v.snippet}`,
|
|
161
291
|
);
|
|
162
292
|
assert.fail(
|
|
163
|
-
`Found ${violations.length} raw write SQL bypass(es) outside
|
|
293
|
+
`Found ${violations.length} raw write SQL bypass(es) outside the explicit DB writer allowlist:\n` +
|
|
164
294
|
lines.join("\n") +
|
|
165
|
-
|
|
295
|
+
`\n\nMove each write to the appropriate allowlisted owner: ${DB_WRITER_ALLOWLIST_GUIDANCE}.`,
|
|
166
296
|
);
|
|
167
297
|
}
|
|
168
298
|
});
|
|
@@ -174,19 +304,11 @@ test("db/queries.ts (the Query Module) is read-only — contains no write SQL",
|
|
|
174
304
|
// db/writers/ — this is the explicit, positive statement of intent.)
|
|
175
305
|
const queriesPath = join(gsdDir, "db", "queries.ts");
|
|
176
306
|
const content = readFileSync(queriesPath, "utf-8");
|
|
177
|
-
const
|
|
178
|
-
const violations: Violation[] = [];
|
|
179
|
-
for (let i = 0; i < lines.length; i++) {
|
|
180
|
-
const line = lines[i];
|
|
181
|
-
const m = PREPARE_WRITE_RE.exec(line) ?? EXEC_WRITE_RE.exec(line);
|
|
182
|
-
if (m) {
|
|
183
|
-
violations.push({ file: "db/queries.ts", line: i + 1, snippet: line.trim(), kind: m[1].toUpperCase() });
|
|
184
|
-
}
|
|
185
|
-
}
|
|
307
|
+
const violations = findRawWriteSqlViolations("db/queries.ts", content);
|
|
186
308
|
assert.equal(
|
|
187
309
|
violations.length,
|
|
188
310
|
0,
|
|
189
|
-
`db/queries.ts must contain no write SQL — move write wrappers to
|
|
311
|
+
`db/queries.ts must contain no write SQL — move write wrappers to the explicit DB writer allowlist:\n` +
|
|
190
312
|
violations.map((v) => ` db/queries.ts:${v.line} [${v.kind}] — ${v.snippet}`).join("\n"),
|
|
191
313
|
);
|
|
192
314
|
});
|
|
@@ -299,7 +421,7 @@ test("production modules do not import DB open-state mechanics from gsd-db.ts",
|
|
|
299
421
|
assert.fail(
|
|
300
422
|
`Found ${violations.length} DB open-state import(s) from gsd-db.ts:\n` +
|
|
301
423
|
lines.join("\n") +
|
|
302
|
-
"\n\nImport these through db-workspace.ts so gsd-db.ts stays the
|
|
424
|
+
"\n\nImport these through db-workspace.ts so gsd-db.ts stays the writer compatibility barrel, not the caller-facing DB Workspace Interface.",
|
|
303
425
|
);
|
|
304
426
|
}
|
|
305
427
|
});
|
|
@@ -92,14 +92,14 @@ test("buildSkillActivationBlock activates skills via prefer_skills when context
|
|
|
92
92
|
prefer_skills: ["react"],
|
|
93
93
|
});
|
|
94
94
|
|
|
95
|
-
assert.match(result, /
|
|
95
|
+
assert.match(result, /Read the installed 'react' skill file from <available_skills>/);
|
|
96
96
|
assert.doesNotMatch(result, /swiftui/);
|
|
97
97
|
} finally {
|
|
98
98
|
cleanup(base);
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
test("buildSkillActivationBlock includes always_use_skills
|
|
102
|
+
test("buildSkillActivationBlock includes always_use_skills using read-based skill loading", () => {
|
|
103
103
|
const base = makeTempBase();
|
|
104
104
|
try {
|
|
105
105
|
writeSkill(base, "swift-testing", "Use for Swift Testing assertions and verification patterns.");
|
|
@@ -109,7 +109,10 @@ test("buildSkillActivationBlock includes always_use_skills from preferences usin
|
|
|
109
109
|
always_use_skills: ["swift-testing"],
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
-
assert.equal(
|
|
112
|
+
assert.equal(
|
|
113
|
+
result,
|
|
114
|
+
"<skill_activation>Read the installed 'swift-testing' skill file from <available_skills>.</skill_activation>",
|
|
115
|
+
);
|
|
113
116
|
} finally {
|
|
114
117
|
cleanup(base);
|
|
115
118
|
}
|
|
@@ -137,8 +140,8 @@ test("buildSkillActivationBlock includes skill_rules matches and task-plan skill
|
|
|
137
140
|
skill_rules: [{ when: "prisma database schema", use: ["prisma"] }],
|
|
138
141
|
});
|
|
139
142
|
|
|
140
|
-
assert.match(result, /
|
|
141
|
-
assert.match(result, /
|
|
143
|
+
assert.match(result, /Read the installed 'accessibility' skill file from <available_skills>/);
|
|
144
|
+
assert.match(result, /Read the installed 'prisma' skill file from <available_skills>/);
|
|
142
145
|
} finally {
|
|
143
146
|
cleanup(base);
|
|
144
147
|
}
|
|
@@ -160,7 +163,7 @@ test("buildSkillActivationBlock matches skill_rules against exact unit type cont
|
|
|
160
163
|
],
|
|
161
164
|
});
|
|
162
165
|
|
|
163
|
-
assert.match(result, /
|
|
166
|
+
assert.match(result, /Read the installed 'complete-slice-policies' skill file from <available_skills>/);
|
|
164
167
|
assert.doesNotMatch(result, /slice-broad/);
|
|
165
168
|
} finally {
|
|
166
169
|
cleanup(base);
|
|
@@ -264,8 +267,8 @@ test("buildSkillActivationBlock allows valid skill names and rejects invalid one
|
|
|
264
267
|
});
|
|
265
268
|
|
|
266
269
|
assert.match(result, /skill_activation/);
|
|
267
|
-
assert.match(result, /
|
|
268
|
-
assert.match(result, /
|
|
270
|
+
assert.match(result, /Read the installed 'react' skill file from <available_skills>/);
|
|
271
|
+
assert.match(result, /Read the installed 'good-skill-2' skill file from <available_skills>/);
|
|
269
272
|
assert.doesNotMatch(result, /bad'name/);
|
|
270
273
|
} finally {
|
|
271
274
|
cleanup(base);
|
|
@@ -289,8 +292,8 @@ test("buildSkillActivationBlock: explicit always_use_skills bypass the unit-type
|
|
|
289
292
|
always_use_skills: ["write-docs", "swiftui"],
|
|
290
293
|
});
|
|
291
294
|
|
|
292
|
-
assert.match(result, /
|
|
293
|
-
assert.match(result, /
|
|
295
|
+
assert.match(result, /Read the installed 'write-docs' skill file from <available_skills>/);
|
|
296
|
+
assert.match(result, /Read the installed 'swiftui' skill file from <available_skills>/);
|
|
294
297
|
} finally {
|
|
295
298
|
cleanup(base);
|
|
296
299
|
}
|
|
@@ -307,7 +310,7 @@ test("buildSkillActivationBlock falls through to all skills for unknown unit typ
|
|
|
307
310
|
});
|
|
308
311
|
|
|
309
312
|
// Unknown unit type = wildcard fallback (pre-manifest behavior).
|
|
310
|
-
assert.match(result, /
|
|
313
|
+
assert.match(result, /Read the installed 'swiftui' skill file from <available_skills>/);
|
|
311
314
|
} finally {
|
|
312
315
|
cleanup(base);
|
|
313
316
|
}
|
|
@@ -324,7 +327,7 @@ test("buildSkillActivationBlock without unitType preserves pre-manifest behavior
|
|
|
324
327
|
always_use_skills: ["swiftui"],
|
|
325
328
|
});
|
|
326
329
|
|
|
327
|
-
assert.match(result, /
|
|
330
|
+
assert.match(result, /Read the installed 'swiftui' skill file from <available_skills>/);
|
|
328
331
|
} finally {
|
|
329
332
|
cleanup(base);
|
|
330
333
|
}
|
|
@@ -341,12 +344,12 @@ test("milestone prompt builders propagate always_use_skills through buildSkillAc
|
|
|
341
344
|
loadOnlyTestSkills(base);
|
|
342
345
|
|
|
343
346
|
const researchPrompt = await buildResearchMilestonePrompt("M001", "Test", base);
|
|
344
|
-
assert.match(researchPrompt, /
|
|
345
|
-
assert.match(researchPrompt, /
|
|
347
|
+
assert.match(researchPrompt, /Read the installed 'write-docs' skill file from <available_skills>/);
|
|
348
|
+
assert.match(researchPrompt, /Read the installed 'swiftui' skill file from <available_skills>/);
|
|
346
349
|
|
|
347
350
|
const planPrompt = await buildPlanMilestonePrompt("M001", "Test", base);
|
|
348
|
-
assert.match(planPrompt, /
|
|
349
|
-
assert.match(planPrompt, /
|
|
351
|
+
assert.match(planPrompt, /Read the installed 'write-docs' skill file from <available_skills>/);
|
|
352
|
+
assert.match(planPrompt, /Read the installed 'swiftui' skill file from <available_skills>/);
|
|
350
353
|
} finally {
|
|
351
354
|
cleanup(base);
|
|
352
355
|
}
|
|
@@ -377,7 +380,7 @@ test("complete-slice prompt propagates always_use_skills through buildSkillActiv
|
|
|
377
380
|
|
|
378
381
|
const prompt = await buildCompleteSlicePrompt("M001", "Test", "S01", "Slice", base);
|
|
379
382
|
|
|
380
|
-
assert.match(prompt, /
|
|
383
|
+
assert.match(prompt, /Read the installed 'write-docs' skill file from <available_skills>/);
|
|
381
384
|
} finally {
|
|
382
385
|
cleanup(base);
|
|
383
386
|
}
|
|
@@ -339,7 +339,7 @@ test("resume path only hard-exits on blocked stop, not blocked pause (#6154)", (
|
|
|
339
339
|
);
|
|
340
340
|
});
|
|
341
341
|
|
|
342
|
-
test("prepareForUnit
|
|
342
|
+
test("prepareForUnit enforces worktree safety for all isolation modes (#6154)", () => {
|
|
343
343
|
const orchSrc = readGsdFile("auto/orchestrator.ts");
|
|
344
344
|
const prepareForUnitIdx = orchSrc.indexOf("private async prepareWorktreeForUnit(");
|
|
345
345
|
const prepareForUnitBody = orchSrc.slice(prepareForUnitIdx, orchSrc.indexOf("private classifyAndRecover(", prepareForUnitIdx));
|
|
@@ -350,8 +350,12 @@ test("prepareForUnit skips worktree safety when isolation is not worktree (#6154
|
|
|
350
350
|
"prepareForUnit should resolve the effective isolation mode once",
|
|
351
351
|
);
|
|
352
352
|
assert.ok(
|
|
353
|
-
prepareForUnitBody.includes('
|
|
354
|
-
"prepareForUnit should
|
|
353
|
+
prepareForUnitBody.includes('const writeScope ='),
|
|
354
|
+
"prepareForUnit should classify the unit's write scope before validating",
|
|
355
|
+
);
|
|
356
|
+
assert.ok(
|
|
357
|
+
!prepareForUnitBody.includes('if (isolationMode !== "worktree")'),
|
|
358
|
+
"prepareForUnit must not bypass worktree safety outside worktree isolation mode",
|
|
355
359
|
);
|
|
356
360
|
});
|
|
357
361
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import test from "node:test";
|
|
4
4
|
import assert from "node:assert/strict";
|
|
5
5
|
|
|
6
|
-
import { _resolveCurrentUnitStartedAtForTest } from "../auto/
|
|
6
|
+
import { _resolveCurrentUnitStartedAtForTest } from "../auto/phase-helpers.ts";
|
|
7
7
|
|
|
8
8
|
test("unit started-at resolver tolerates stopAuto clearing currentUnit", () => {
|
|
9
9
|
assert.equal(_resolveCurrentUnitStartedAtForTest(null), undefined);
|
|
@@ -159,4 +159,21 @@ describe("teardown chdir failure clears registry", () => {
|
|
|
159
159
|
assert.strictEqual(getAutoWorktreeOriginalBase(), null, "registry null after successful teardown");
|
|
160
160
|
assert.strictEqual(getActiveAutoWorktreeContext(), null, "context null after successful teardown");
|
|
161
161
|
});
|
|
162
|
+
|
|
163
|
+
test("teardown survives when current working directory was deleted", () => {
|
|
164
|
+
repoDir = createTempRepo();
|
|
165
|
+
seedMilestone(repoDir, "M003");
|
|
166
|
+
|
|
167
|
+
const worktreePath = createAutoWorktree(repoDir, "M003");
|
|
168
|
+
process.chdir(worktreePath);
|
|
169
|
+
rmSync(worktreePath, { recursive: true, force: true });
|
|
170
|
+
|
|
171
|
+
assert.doesNotThrow(
|
|
172
|
+
() => teardownAutoWorktree(repoDir, "M003"),
|
|
173
|
+
"teardownAutoWorktree should not call process.cwd() unguarded from a deleted cwd",
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
assert.strictEqual(getAutoWorktreeOriginalBase(), null, "registry null after deleted-cwd teardown");
|
|
177
|
+
assert.strictEqual(getActiveAutoWorktreeContext(), null, "context null after deleted-cwd teardown");
|
|
178
|
+
});
|
|
162
179
|
});
|
|
@@ -18,6 +18,7 @@ test("buildMinimalGsdToolSet preserves non-GSD tools and replaces broad GSD surf
|
|
|
18
18
|
"read",
|
|
19
19
|
"browser_open",
|
|
20
20
|
"gsd_plan_milestone",
|
|
21
|
+
"gsd_plan_slice",
|
|
21
22
|
"gsd_task_complete",
|
|
22
23
|
"gsd_exec",
|
|
23
24
|
"gsd_exec_search",
|
|
@@ -364,13 +365,14 @@ test("buildMinimalAutoGsdToolSet includes closeout tool for complete-slice", ()
|
|
|
364
365
|
"gsd_complete_slice",
|
|
365
366
|
"memory_query",
|
|
366
367
|
"capture_thought",
|
|
368
|
+
"gsd_capture_thought",
|
|
367
369
|
], "complete-slice");
|
|
368
370
|
|
|
369
371
|
assert.ok(result.includes("gsd_slice_complete"));
|
|
370
372
|
assert.ok(result.includes("gsd_task_reopen"));
|
|
371
373
|
assert.ok(result.includes("gsd_replan_slice"));
|
|
372
374
|
assert.ok(result.includes("subagent"));
|
|
373
|
-
assert.ok(result.includes("
|
|
375
|
+
assert.ok(result.includes("gsd_capture_thought"));
|
|
374
376
|
assert.ok(!result.includes("gsd_task_complete"));
|
|
375
377
|
assert.ok(!result.includes("gsd_complete_slice"));
|
|
376
378
|
});
|
|
@@ -386,6 +388,7 @@ test("buildMinimalAutoGsdToolSet preserves workflow MCP-namespaced closeout tool
|
|
|
386
388
|
"mcp__gsd-workflow__gsd_exec",
|
|
387
389
|
"mcp__gsd-workflow__memory_query",
|
|
388
390
|
"mcp__gsd-workflow__capture_thought",
|
|
391
|
+
"mcp__gsd-workflow__gsd_capture_thought",
|
|
389
392
|
], "complete-slice");
|
|
390
393
|
|
|
391
394
|
assert.ok(result.includes("mcp__gsd-workflow__gsd_task_reopen"));
|
|
@@ -394,7 +397,7 @@ test("buildMinimalAutoGsdToolSet preserves workflow MCP-namespaced closeout tool
|
|
|
394
397
|
assert.ok(!result.includes("mcp__gsd-workflow__gsd_complete_slice"));
|
|
395
398
|
assert.ok(result.includes("mcp__gsd-workflow__gsd_exec"));
|
|
396
399
|
assert.ok(result.includes("mcp__gsd-workflow__memory_query"));
|
|
397
|
-
assert.ok(result.includes("mcp__gsd-
|
|
400
|
+
assert.ok(result.includes("mcp__gsd-workflow__gsd_capture_thought"));
|
|
398
401
|
});
|
|
399
402
|
|
|
400
403
|
test("buildMinimalAutoGsdToolSet covers execute-task-simple", () => {
|
|
@@ -648,6 +651,46 @@ test("buildMinimalAutoGsdToolSet resolves MCP-scoped gsd_memory_query and gsd_ca
|
|
|
648
651
|
);
|
|
649
652
|
});
|
|
650
653
|
|
|
654
|
+
// ── Regression #627: auto-mode cannot run plan-milestone because gsd_plan_slice is missing ──
|
|
655
|
+
// gsd_plan_slice is in AUTO_UNIT_SCOPED_TOOLS["plan-milestone"] (via unit-tool-contracts).
|
|
656
|
+
// buildMinimalAutoGsdToolSet must expose it when unitType is "plan-milestone".
|
|
657
|
+
|
|
658
|
+
test("buildMinimalAutoGsdToolSet includes gsd_plan_slice for plan-milestone (regression #627)", () => {
|
|
659
|
+
const result = buildMinimalAutoGsdToolSet([
|
|
660
|
+
"bash",
|
|
661
|
+
"read",
|
|
662
|
+
"gsd_plan_milestone",
|
|
663
|
+
"gsd_plan_slice",
|
|
664
|
+
"gsd_milestone_status",
|
|
665
|
+
"gsd_checkpoint_db",
|
|
666
|
+
"memory_query",
|
|
667
|
+
"capture_thought",
|
|
668
|
+
], "plan-milestone");
|
|
669
|
+
|
|
670
|
+
assert.ok(
|
|
671
|
+
result.includes("gsd_plan_slice"),
|
|
672
|
+
"gsd_plan_slice must be included in plan-milestone auto-mode tool set",
|
|
673
|
+
);
|
|
674
|
+
});
|
|
675
|
+
|
|
676
|
+
test("buildMinimalAutoGsdToolSet resolves MCP-scoped gsd_plan_slice for plan-milestone when subprocess only registers prefixed variant (regression #627)", () => {
|
|
677
|
+
const result = buildMinimalAutoGsdToolSet([
|
|
678
|
+
"bash",
|
|
679
|
+
"read",
|
|
680
|
+
"mcp__gsd-workflow__gsd_plan_milestone",
|
|
681
|
+
"mcp__gsd-workflow__gsd_plan_slice",
|
|
682
|
+
"mcp__gsd-workflow__gsd_milestone_status",
|
|
683
|
+
"mcp__gsd-workflow__gsd_checkpoint_db",
|
|
684
|
+
"mcp__gsd-workflow__memory_query",
|
|
685
|
+
"mcp__gsd-workflow__capture_thought",
|
|
686
|
+
], "plan-milestone");
|
|
687
|
+
|
|
688
|
+
assert.ok(
|
|
689
|
+
result.includes("mcp__gsd-workflow__gsd_plan_slice"),
|
|
690
|
+
"mcp__gsd-workflow__gsd_plan_slice must be included when only the MCP-scoped variant is available",
|
|
691
|
+
);
|
|
692
|
+
});
|
|
693
|
+
|
|
651
694
|
test("applyUnitSkillVisibility sets manifest or clears for wildcard", () => {
|
|
652
695
|
const calls: Array<string[] | undefined> = [];
|
|
653
696
|
applyUnitSkillVisibility({
|