@opengsd/gsd-pi 1.2.0-dev.b1abb545 → 1.2.0-dev.e8563f58
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 +14 -34
- package/dist/mcp-server.js +2 -1
- 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/GSD-WORKFLOW.md +5 -4
- 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 +5 -2
- 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/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +38 -6
- 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 +105 -0
- package/dist/resources/extensions/gsd/auto/dispatch-key.js +37 -0
- package/dist/resources/extensions/gsd/auto/loop.js +4 -1
- package/dist/resources/extensions/gsd/auto/orchestrator.js +122 -58
- package/dist/resources/extensions/gsd/auto/phases.js +8 -3
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +8 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +40 -57
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -13
- package/dist/resources/extensions/gsd/auto-post-unit.js +31 -14
- package/dist/resources/extensions/gsd/auto-prompts.js +81 -19
- package/dist/resources/extensions/gsd/auto-start.js +24 -26
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +18 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +12 -20
- package/dist/resources/extensions/gsd/auto-verification.js +9 -28
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +35 -352
- package/dist/resources/extensions/gsd/auto.js +15 -20
- package/dist/resources/extensions/gsd/blocked-models.js +28 -0
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +29 -8
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +32 -12
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +19 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +229 -36
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +319 -71
- 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 +5 -15
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/closeout-wizard.js +92 -0
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- package/dist/resources/extensions/gsd/commands-handlers.js +46 -3
- 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 +4 -12
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +398 -0
- package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
- package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
- package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
- package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
- package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
- package/dist/resources/extensions/gsd/dispatch-guard.js +10 -35
- package/dist/resources/extensions/gsd/doctor-environment.js +5 -11
- package/dist/resources/extensions/gsd/doctor-format.js +9 -6
- package/dist/resources/extensions/gsd/doctor-git-checks.js +6 -21
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +21 -16
- package/dist/resources/extensions/gsd/engine-hook-contract.js +70 -0
- 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/files.js +33 -19
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +3 -0
- package/dist/resources/extensions/gsd/gsd-command-home.js +22 -12
- package/dist/resources/extensions/gsd/gsd-db.js +172 -2048
- package/dist/resources/extensions/gsd/guidance.js +158 -0
- package/dist/resources/extensions/gsd/guided-flow.js +51 -5
- package/dist/resources/extensions/gsd/markdown-renderer.js +10 -0
- 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 +20 -9
- package/dist/resources/extensions/gsd/migration-auto-check.js +24 -3
- package/dist/resources/extensions/gsd/milestone-closeout.js +85 -24
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +3 -0
- package/dist/resources/extensions/gsd/notification-store.js +11 -4
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +11 -7
- package/dist/resources/extensions/gsd/parsers-legacy.js +16 -4
- package/dist/resources/extensions/gsd/paths.js +37 -24
- 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/preferences.js +14 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -2
- 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 +6 -4
- 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/reactive-graph.js +8 -1
- package/dist/resources/extensions/gsd/recovery-classification.js +41 -87
- package/dist/resources/extensions/gsd/safety/destructive-confirmation.js +108 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +6 -20
- package/dist/resources/extensions/gsd/status-guards.js +56 -8
- package/dist/resources/extensions/gsd/stop-notice.js +57 -0
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +4 -4
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +56 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +44 -53
- package/dist/resources/extensions/gsd/tools/exec-tool.js +10 -8
- package/dist/resources/extensions/gsd/tools/plan-slice.js +12 -6
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +11 -29
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +14 -33
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +67 -2
- package/dist/resources/extensions/gsd/uat-policy.js +42 -16
- package/dist/resources/extensions/gsd/undo.js +8 -7
- 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/verdict-parser.js +1 -1
- 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 +293 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +12 -3
- package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
- package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
- package/dist/resources/extensions/gsd/worktree-root.js +28 -6
- package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
- package/dist/resources/extensions/gsd/worktree-session-state.js +12 -11
- 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 +116 -6
- 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/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/gsd-browser/SKILL.md +1 -1
- package/dist/resources/skills/spike-wrap-up/SKILL.md +9 -9
- 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 +8 -8
- 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/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +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/api/visualizer/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 +8 -8
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -1
- package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
- 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/package.json +1 -1
- package/dist/worktree-cli.js +3 -6
- package/dist/worktree-status-banner.js +7 -11
- 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 +8 -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/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/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/workflow-tools.d.ts +26 -18
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +145 -59
- 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/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/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 +192 -0
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +166 -0
- 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/capability-patches.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.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/GSD-WORKFLOW.md +5 -4
- 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 +5 -2
- 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 +40 -1
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +136 -0
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +40 -4
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +28 -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 +152 -0
- package/src/resources/extensions/gsd/auto/dispatch-key.ts +39 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +4 -1
- package/src/resources/extensions/gsd/auto/orchestrator.ts +137 -61
- package/src/resources/extensions/gsd/auto/phases.ts +12 -3
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -32
- package/src/resources/extensions/gsd/auto-dispatch.ts +38 -52
- package/src/resources/extensions/gsd/auto-model-selection.ts +41 -12
- package/src/resources/extensions/gsd/auto-post-unit.ts +37 -13
- package/src/resources/extensions/gsd/auto-prompts.ts +118 -35
- package/src/resources/extensions/gsd/auto-start.ts +24 -29
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +19 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +14 -21
- package/src/resources/extensions/gsd/auto-verification.ts +8 -26
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +41 -364
- package/src/resources/extensions/gsd/auto.ts +28 -24
- package/src/resources/extensions/gsd/blocked-models.ts +49 -0
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +33 -12
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +24 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +270 -37
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +368 -78
- 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 +5 -16
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/closeout-wizard.ts +102 -0
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- package/src/resources/extensions/gsd/commands-handlers.ts +46 -3
- 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 +3 -9
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +490 -0
- package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
- package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
- package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
- package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
- package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
- package/src/resources/extensions/gsd/dispatch-guard.ts +8 -31
- package/src/resources/extensions/gsd/doctor-environment.ts +5 -13
- package/src/resources/extensions/gsd/doctor-format.ts +12 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +5 -22
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +22 -17
- package/src/resources/extensions/gsd/engine-hook-contract.ts +79 -0
- 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/files.ts +33 -12
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +3 -0
- package/src/resources/extensions/gsd/gsd-command-home.ts +13 -3
- package/src/resources/extensions/gsd/gsd-db.ts +176 -2375
- package/src/resources/extensions/gsd/guidance.ts +217 -0
- package/src/resources/extensions/gsd/guided-flow.ts +50 -5
- package/src/resources/extensions/gsd/markdown-renderer.ts +11 -0
- 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 +18 -7
- package/src/resources/extensions/gsd/migration-auto-check.ts +28 -3
- package/src/resources/extensions/gsd/milestone-closeout.ts +109 -24
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +3 -0
- package/src/resources/extensions/gsd/notification-store.ts +26 -3
- package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -7
- package/src/resources/extensions/gsd/parsers-legacy.ts +16 -4
- package/src/resources/extensions/gsd/paths.ts +42 -22
- 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/preferences.ts +18 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -2
- 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 +6 -4
- 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/reactive-graph.ts +11 -1
- package/src/resources/extensions/gsd/recovery-classification.ts +47 -88
- package/src/resources/extensions/gsd/safety/destructive-confirmation.ts +134 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +9 -21
- package/src/resources/extensions/gsd/status-guards.ts +59 -8
- package/src/resources/extensions/gsd/stop-notice.ts +75 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +198 -26
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/blocked-models.test.ts +19 -0
- 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 +44 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +8 -7
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +42 -0
- 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/deep-project-auto-loop.test.ts +10 -10
- package/src/resources/extensions/gsd/tests/destructive-confirmation.test.ts +303 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +273 -0
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +2 -1
- 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/evidence-xref-gsd-exec.test.ts +157 -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/file-change-validator.test.ts +33 -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 +148 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +58 -15
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +74 -59
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/integration/gsd-integration-fixture.ts +80 -0
- package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +199 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +85 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +95 -4
- 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/parallel-research-dispatch.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +193 -1
- package/src/resources/extensions/gsd/tests/prompt-db.test.ts +124 -6
- 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/recovery-classification-illegal-transition.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +248 -1
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +43 -6
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -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 +112 -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 +275 -40
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +22 -1
- package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/write-gate-seam.test.ts +358 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +109 -1
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +4 -4
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +76 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +43 -68
- package/src/resources/extensions/gsd/tools/exec-tool.ts +9 -8
- package/src/resources/extensions/gsd/tools/plan-slice.ts +12 -6
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +11 -38
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +14 -42
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +81 -2
- package/src/resources/extensions/gsd/uat-policy.ts +62 -16
- package/src/resources/extensions/gsd/undo.ts +9 -8
- 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/verdict-parser.ts +1 -1
- 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 +314 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +13 -9
- package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
- package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
- package/src/resources/extensions/gsd/worktree-root.ts +29 -6
- package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
- package/src/resources/extensions/gsd/worktree-session-state.ts +11 -11
- 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 +141 -6
- 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/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/gsd-browser/SKILL.md +1 -1
- package/src/resources/skills/spike-wrap-up/SKILL.md +9 -9
- package/dist/resources/extensions/gsd/user-input-boundary.js +0 -218
- 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/dist/web/standalone/.next/static/{3PtrU9qGPEXwNLWkIyiqk → LDHRKiRBIVZmiuMjrL1Vy}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{3PtrU9qGPEXwNLWkIyiqk → LDHRKiRBIVZmiuMjrL1Vy}/_ssgManifest.js +0 -0
|
@@ -20,6 +20,8 @@ import { getUatBrowserToolSupportError, type UatType } from "./uat-policy.js";
|
|
|
20
20
|
import {
|
|
21
21
|
isDbAvailable,
|
|
22
22
|
getMilestoneSlices,
|
|
23
|
+
getMilestoneSliceSummaries,
|
|
24
|
+
getClosedSliceIds,
|
|
23
25
|
getPendingGatesForTurn,
|
|
24
26
|
markPendingGatesOmittedForTurn,
|
|
25
27
|
getMilestone,
|
|
@@ -47,7 +49,6 @@ import {
|
|
|
47
49
|
buildTaskFileName,
|
|
48
50
|
gsdProjectionRoot,
|
|
49
51
|
} from "./paths.js";
|
|
50
|
-
import { parseRoadmap } from "./parsers-legacy.js";
|
|
51
52
|
import { validateArtifact } from "./schemas/validate.js";
|
|
52
53
|
import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
|
|
53
54
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
@@ -84,13 +85,18 @@ import { selectReactiveDispatchBatch } from "./uok/execution-graph.js";
|
|
|
84
85
|
import { getMilestonePipelineVariant } from "./milestone-scope-classifier.js";
|
|
85
86
|
import { EXECUTION_ENTRY_PHASES, hasFinalizedMilestoneContext } from "./uok/plan-v2.js";
|
|
86
87
|
import { isAutoActive } from "./auto.js";
|
|
87
|
-
|
|
88
|
+
// Host adapter explicitly: auto-dispatch runs in the extension host, and the
|
|
89
|
+
// ambient write-gate exports env-sniff the adapter per call (they are reserved
|
|
90
|
+
// for the workflow MCP child's dynamic-import surface).
|
|
91
|
+
import { hostWriteGateAdapter } from "./bootstrap/write-gate.js";
|
|
88
92
|
import { ensureWorkflowPreferencesCaptured } from "./planning-depth.js";
|
|
89
93
|
import { MILESTONE_ID_RE } from "./milestone-ids.js";
|
|
90
94
|
import {
|
|
91
95
|
getWorkflowTransportSupportError,
|
|
92
96
|
getRequiredWorkflowToolsForAutoUnit,
|
|
97
|
+
resolveWorkflowMcpProjectRoot,
|
|
93
98
|
} from "./workflow-mcp.js";
|
|
99
|
+
import { prepareBrowserDaemonForUat } from "./browser-daemon-auto-prep.js";
|
|
94
100
|
import {
|
|
95
101
|
PROJECT_RESEARCH_INFLIGHT_MARKER,
|
|
96
102
|
} from "./project-research-policy.js";
|
|
@@ -490,27 +496,12 @@ function persistSliceAssessmentBackfill(
|
|
|
490
496
|
}
|
|
491
497
|
|
|
492
498
|
function backfillMissingAssessmentsFromSummaries(basePath: string, mid: string): void {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
}
|
|
500
|
-
} else {
|
|
501
|
-
const roadmapFile = resolveMilestoneFile(basePath, mid, "ROADMAP");
|
|
502
|
-
if (!roadmapFile) return;
|
|
503
|
-
try {
|
|
504
|
-
const roadmap = parseRoadmap(readFileSync(roadmapFile, "utf-8"));
|
|
505
|
-
for (const slice of roadmap.slices) {
|
|
506
|
-
if (slice.done) completedSliceIds.add(slice.id);
|
|
507
|
-
}
|
|
508
|
-
} catch {
|
|
509
|
-
return;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
|
|
513
|
-
for (const sliceId of completedSliceIds) {
|
|
499
|
+
// DB-authoritative (ADR-017): no markdown fallback. Without DB rows there
|
|
500
|
+
// is nothing to backfill.
|
|
501
|
+
if (!isDbAvailable()) return;
|
|
502
|
+
// Canonical closed vocabulary (complete/done/skipped/closed) — a skipped or
|
|
503
|
+
// closed slice with a SUMMARY gets the same assessment backfill treatment.
|
|
504
|
+
for (const sliceId of getClosedSliceIds(mid)) {
|
|
514
505
|
const summaryPath = resolveSliceFile(basePath, mid, sliceId, "SUMMARY");
|
|
515
506
|
if (!summaryPath || !existsSync(summaryPath)) continue;
|
|
516
507
|
|
|
@@ -696,7 +687,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
696
687
|
// deadlock. Deep planning is still user-driven even inside auto-mode,
|
|
697
688
|
// so it must wait for explicit approval instead of taking this bypass.
|
|
698
689
|
if (shouldBypassMilestoneDepthGateInAuto(prefs)) {
|
|
699
|
-
markDepthVerified(mid, basePath);
|
|
690
|
+
hostWriteGateAdapter.markDepthVerified(mid, basePath);
|
|
700
691
|
}
|
|
701
692
|
return {
|
|
702
693
|
action: "dispatch",
|
|
@@ -772,6 +763,16 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
772
763
|
if (browserToolError) {
|
|
773
764
|
return { action: "stop" as const, reason: browserToolError, level: "warning" as const };
|
|
774
765
|
}
|
|
766
|
+
const browserDaemonError = prepareBrowserDaemonForUat({
|
|
767
|
+
uatType,
|
|
768
|
+
sessionProvider,
|
|
769
|
+
sessionAuthMode,
|
|
770
|
+
sessionBaseUrl,
|
|
771
|
+
projectRoot: resolveWorkflowMcpProjectRoot(basePath),
|
|
772
|
+
});
|
|
773
|
+
if (browserDaemonError) {
|
|
774
|
+
return { action: "stop" as const, reason: browserDaemonError, level: "warning" as const };
|
|
775
|
+
}
|
|
775
776
|
|
|
776
777
|
// Cap run-uat dispatch attempts to prevent infinite replay (#3624).
|
|
777
778
|
// Check before incrementing so an exhausted counter cannot create a
|
|
@@ -808,23 +809,10 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
808
809
|
// Only applies when UAT dispatch is enabled
|
|
809
810
|
if (!prefs?.uat_dispatch) return null;
|
|
810
811
|
|
|
811
|
-
// DB-
|
|
812
|
-
|
|
813
|
-
if (isDbAvailable())
|
|
814
|
-
|
|
815
|
-
.filter(s => isClosedStatus(s.status))
|
|
816
|
-
.map(s => s.id);
|
|
817
|
-
} else {
|
|
818
|
-
// Filesystem fallback for degraded / unmigrated projects.
|
|
819
|
-
// `slice.done` in the parsed ROADMAP is the disk-level closed signal.
|
|
820
|
-
const roadmapFile = resolveMilestoneFile(basePath, mid, "ROADMAP");
|
|
821
|
-
const roadmapContent = roadmapFile ? await loadFile(roadmapFile) : null;
|
|
822
|
-
if (!roadmapContent) return null;
|
|
823
|
-
const roadmap = parseRoadmap(roadmapContent);
|
|
824
|
-
closedSliceIds = roadmap.slices.filter(s => s.done).map(s => s.id);
|
|
825
|
-
}
|
|
826
|
-
|
|
827
|
-
for (const sliceId of closedSliceIds) {
|
|
812
|
+
// DB-authoritative (ADR-017): closed slices come from the DB only; the
|
|
813
|
+
// ROADMAP projection is never parsed for gate decisions.
|
|
814
|
+
if (!isDbAvailable()) return null;
|
|
815
|
+
for (const sliceId of getClosedSliceIds(mid)) {
|
|
828
816
|
const result = await readUatGateVerdict(basePath, mid, sliceId);
|
|
829
817
|
if (!result) continue;
|
|
830
818
|
const { verdict, uatType } = result;
|
|
@@ -879,7 +867,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
879
867
|
// H6 fix (#4973): keep the non-deep auto-mode bypass, but do not
|
|
880
868
|
// pre-verify deep planning's user-facing milestone approval gate.
|
|
881
869
|
if (shouldBypassMilestoneDepthGateInAuto(prefs)) {
|
|
882
|
-
markDepthVerified(mid, basePath);
|
|
870
|
+
hostWriteGateAdapter.markDepthVerified(mid, basePath);
|
|
883
871
|
}
|
|
884
872
|
return {
|
|
885
873
|
action: "dispatch",
|
|
@@ -1050,7 +1038,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1050
1038
|
// H6 fix (#4973): keep the non-deep auto-mode bypass, but do not
|
|
1051
1039
|
// pre-verify deep planning's user-facing milestone approval gate.
|
|
1052
1040
|
if (shouldBypassMilestoneDepthGateInAuto(prefs)) {
|
|
1053
|
-
markDepthVerified(mid, basePath);
|
|
1041
|
+
hostWriteGateAdapter.markDepthVerified(mid, basePath);
|
|
1054
1042
|
}
|
|
1055
1043
|
return {
|
|
1056
1044
|
action: "dispatch",
|
|
@@ -1128,13 +1116,11 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1128
1116
|
// behavior.
|
|
1129
1117
|
if (await getMilestonePipelineVariant(mid) === "trivial") return null;
|
|
1130
1118
|
|
|
1131
|
-
//
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
if (!roadmapContent) return null;
|
|
1137
|
-
const roadmap = parseRoadmap(roadmapContent);
|
|
1119
|
+
// DB-authoritative slice list (ADR-017): the ROADMAP projection is
|
|
1120
|
+
// never parsed for dispatch decisions. No DB / no rows → skip this rule.
|
|
1121
|
+
if (!isDbAvailable()) return null;
|
|
1122
|
+
const dbSlices = getMilestoneSliceSummaries(mid);
|
|
1123
|
+
if (dbSlices.length === 0) return null;
|
|
1138
1124
|
|
|
1139
1125
|
// Find slices that need research (no RESEARCH file, dependencies done)
|
|
1140
1126
|
const milestoneResearchFile =
|
|
@@ -1142,14 +1128,14 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1142
1128
|
resolveMilestoneFile(basePath, mid, "RESEARCH");
|
|
1143
1129
|
const researchReadySlices: Array<{ id: string; title: string }> = [];
|
|
1144
1130
|
|
|
1145
|
-
for (const slice of
|
|
1131
|
+
for (const slice of dbSlices) {
|
|
1146
1132
|
if (slice.done) continue;
|
|
1147
1133
|
// Skip S01 when milestone research exists
|
|
1148
1134
|
if (milestoneResearchFile && slice.id === "S01") continue;
|
|
1149
1135
|
// Skip if already has research
|
|
1150
1136
|
if (resolveExistingExpectedArtifact("research-slice", `${mid}/${slice.id}`, basePath)) continue;
|
|
1151
1137
|
// Skip if dependencies aren't done (check for SUMMARY files)
|
|
1152
|
-
const depsComplete =
|
|
1138
|
+
const depsComplete = slice.depends.every((depId) =>
|
|
1153
1139
|
!!resolveExistingExpectedArtifact("complete-slice", `${mid}/${depId}`, basePath),
|
|
1154
1140
|
);
|
|
1155
1141
|
if (!depsComplete) continue;
|
|
@@ -18,7 +18,7 @@ import { getSessionModelOverride } from "./session-model-override.js";
|
|
|
18
18
|
import { logWarning } from "./workflow-logger.js";
|
|
19
19
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
20
20
|
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
21
|
-
import { isModelBlocked } from "./blocked-models.js";
|
|
21
|
+
import { isModelBlocked, isModelTemporarilyUnavailable } from "./blocked-models.js";
|
|
22
22
|
import { getRequiredWorkflowToolsForAutoUnit, isWorkflowMcpSurfaceTool } from "./workflow-mcp.js";
|
|
23
23
|
|
|
24
24
|
/**
|
|
@@ -272,6 +272,15 @@ function buildModelPolicyBlockReasons(
|
|
|
272
272
|
}];
|
|
273
273
|
}
|
|
274
274
|
|
|
275
|
+
function isModelUnavailable(
|
|
276
|
+
basePath: string,
|
|
277
|
+
provider: string | undefined,
|
|
278
|
+
id: string | undefined,
|
|
279
|
+
): boolean {
|
|
280
|
+
return isModelBlocked(basePath, provider, id) ||
|
|
281
|
+
isModelTemporarilyUnavailable(basePath, provider, id);
|
|
282
|
+
}
|
|
283
|
+
|
|
275
284
|
function restoreToolBaseline(pi: ExtensionAPI): void {
|
|
276
285
|
const key = pi as unknown as object;
|
|
277
286
|
const baseline = TOOL_BASELINE.get(key);
|
|
@@ -817,9 +826,9 @@ export async function selectAndApplyModel(
|
|
|
817
826
|
// (issue #4513). The block is persisted in .gsd/runtime/blocked-models.json
|
|
818
827
|
// so it survives /gsd auto restarts — without this, the same dead model
|
|
819
828
|
// gets reselected after every restart.
|
|
820
|
-
if (
|
|
829
|
+
if (isModelUnavailable(basePath, model.provider, model.id)) {
|
|
821
830
|
ctx.ui.notify(
|
|
822
|
-
`Skipping
|
|
831
|
+
`Skipping unavailable model ${model.provider}/${model.id}.`,
|
|
823
832
|
"warning",
|
|
824
833
|
);
|
|
825
834
|
continue;
|
|
@@ -896,7 +905,7 @@ export async function selectAndApplyModel(
|
|
|
896
905
|
for (const model of buildPolicyEligibleFallbackOrder(ctx, routingEligibleModels, autoModeStartModel)) {
|
|
897
906
|
const key = `${model.provider.toLowerCase()}/${model.id.toLowerCase()}`;
|
|
898
907
|
if (!policyAllowedModelKeys.has(key)) continue;
|
|
899
|
-
if (
|
|
908
|
+
if (isModelUnavailable(basePath, model.provider, model.id)) continue;
|
|
900
909
|
const ok = await pi.setModel(model, { persist: false });
|
|
901
910
|
if (!ok) continue;
|
|
902
911
|
appliedModel = model;
|
|
@@ -926,10 +935,10 @@ export async function selectAndApplyModel(
|
|
|
926
935
|
autoModeStartModel,
|
|
927
936
|
effectiveSessionModelOverride,
|
|
928
937
|
);
|
|
929
|
-
const startBlocked =
|
|
938
|
+
const startBlocked = isModelUnavailable(basePath, autoModeStartModel.provider, autoModeStartModel.id);
|
|
930
939
|
if (startBlocked) {
|
|
931
940
|
ctx.ui.notify(
|
|
932
|
-
`Auto-mode start model ${autoModeStartModel.provider}/${autoModeStartModel.id} is
|
|
941
|
+
`Auto-mode start model ${autoModeStartModel.provider}/${autoModeStartModel.id} is unavailable. Using current session model instead.`,
|
|
933
942
|
"warning",
|
|
934
943
|
);
|
|
935
944
|
} else {
|
|
@@ -940,7 +949,7 @@ export async function selectAndApplyModel(
|
|
|
940
949
|
const ok = await pi.setModel(startModel, { persist: false });
|
|
941
950
|
if (!ok) {
|
|
942
951
|
const byId = availableModels.find(
|
|
943
|
-
m => m.id === autoModeStartModel.id && !
|
|
952
|
+
m => m.id === autoModeStartModel.id && !isModelUnavailable(basePath, m.provider, m.id),
|
|
944
953
|
);
|
|
945
954
|
if (byId) {
|
|
946
955
|
const fallbackOk = await pi.setModel(byId, { persist: false });
|
|
@@ -1041,16 +1050,36 @@ export function resolveModelId<T extends { id: string; provider: string }>(
|
|
|
1041
1050
|
if (providerMatch) return providerMatch;
|
|
1042
1051
|
}
|
|
1043
1052
|
|
|
1044
|
-
//
|
|
1045
|
-
//
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1053
|
+
// Subscription/OAuth routes beat pay-per-token API when the same model ID
|
|
1054
|
+
// exists on multiple providers. Order matters — first match wins.
|
|
1055
|
+
for (const provider of BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE) {
|
|
1056
|
+
const match = candidates.find(m => m.provider === provider);
|
|
1057
|
+
if (match) return match;
|
|
1058
|
+
}
|
|
1049
1059
|
|
|
1050
1060
|
// Fall back to first non-extension candidate, or any candidate
|
|
1051
1061
|
return candidates.find(m => !EXTENSION_PROVIDERS.has(m.provider)) ?? candidates[0];
|
|
1052
1062
|
}
|
|
1053
1063
|
|
|
1064
|
+
/**
|
|
1065
|
+
* When a bare model ID exists on multiple providers, prefer subscription/OAuth
|
|
1066
|
+
* routes over pay-per-token API keys. Matches PROVIDER_ROUTES in doctor-providers
|
|
1067
|
+
* but applies when *both* sides are authenticated.
|
|
1068
|
+
*
|
|
1069
|
+
* Order rationale:
|
|
1070
|
+
* - openai-codex before github-copilot: ChatGPT-native for shared GPT IDs
|
|
1071
|
+
* - google-gemini-cli before github-copilot: first-party Gemini CLI
|
|
1072
|
+
* - anthropic before github-copilot: first-party Claude API/OAuth over Copilot
|
|
1073
|
+
* - github-copilot before openai/google: Copilot OAuth over platform API keys
|
|
1074
|
+
*/
|
|
1075
|
+
export const BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE = [
|
|
1076
|
+
"openai-codex",
|
|
1077
|
+
"google-gemini-cli",
|
|
1078
|
+
"anthropic",
|
|
1079
|
+
"github-copilot",
|
|
1080
|
+
"google-antigravity",
|
|
1081
|
+
] as const;
|
|
1082
|
+
|
|
1054
1083
|
/**
|
|
1055
1084
|
* Flat-rate providers charge the same per request regardless of model.
|
|
1056
1085
|
* Dynamic routing provides no cost benefit — it only degrades quality (#3453).
|
|
@@ -18,7 +18,7 @@ import { deriveState } from "./state.js";
|
|
|
18
18
|
import { logWarning, logError } from "./workflow-logger.js";
|
|
19
19
|
import { loadFile, parseSummary, resolveAllOverrides } from "./files.js";
|
|
20
20
|
import { loadPrompt } from "./prompt-loader.js";
|
|
21
|
-
import { isAwaitingUserInput } from "./
|
|
21
|
+
import { isAwaitingUserInput } from "./consent-question.js";
|
|
22
22
|
import {
|
|
23
23
|
resolveMilestonePath,
|
|
24
24
|
resolveSliceFile,
|
|
@@ -51,8 +51,7 @@ import { createWorkspace, scopeMilestone } from "./workspace.js";
|
|
|
51
51
|
import { normalizeWorktreePathForCompare } from "./worktree-root.js";
|
|
52
52
|
import { isDbAvailable, getTask, getSlice, getMilestone, getMilestoneSlices, updateTaskStatus, _getAdapter, getVerificationEvidence } from "./gsd-db.js";
|
|
53
53
|
import { getWorkflowDatabasePath, refreshWorkflowDatabaseFromDisk } from "./db-workspace.js";
|
|
54
|
-
import { renderPlanCheckboxes, renderRoadmapFromDb } from "./markdown-renderer.js";
|
|
55
|
-
import { parseRoadmap as parseLegacyRoadmap } from "./parsers-legacy.js";
|
|
54
|
+
import { renderPlanCheckboxes, renderRoadmapFromDb, roadmapRenderMarksSliceDone } from "./markdown-renderer.js";
|
|
56
55
|
import { consumeSignal } from "./session-status-io.js";
|
|
57
56
|
import {
|
|
58
57
|
checkPostUnitHooks,
|
|
@@ -72,7 +71,7 @@ import {
|
|
|
72
71
|
} from "./milestone-closeout.js";
|
|
73
72
|
import type { AutoSession, SidecarItem } from "./auto/session.js";
|
|
74
73
|
import { getEvidence, clearEvidenceFromDisk, isExecutionToolName } from "./safety/evidence-collector.js";
|
|
75
|
-
import { validateFileChanges } from "./safety/file-change-validator.js";
|
|
74
|
+
import { validateFileChanges, effectiveFileChangeAllowlist } from "./safety/file-change-validator.js";
|
|
76
75
|
import { crossReferenceEvidence, type ClaimedEvidence } from "./safety/evidence-cross-ref.js";
|
|
77
76
|
import { validateContent } from "./safety/content-validator.js";
|
|
78
77
|
import { resolveSafetyHarnessConfig } from "./safety/safety-harness.js";
|
|
@@ -88,7 +87,7 @@ import { writeTurnGitTransaction } from "./uok/gitops.js";
|
|
|
88
87
|
import { isClosedStatus } from "./status-guards.js";
|
|
89
88
|
import { detectAbandonMilestone } from "./abandon-detect.js";
|
|
90
89
|
import { getPendingGate } from "./bootstrap/write-gate.js";
|
|
91
|
-
import { isDeterministicPolicyError } from "./auto-tool-tracking.js";
|
|
90
|
+
import { isDeterministicPolicyError, isToolUnavailableError } from "./auto-tool-tracking.js";
|
|
92
91
|
import { formatConnectedStepStack, formatPostUnitStatusCard } from "./auto-status-message.js";
|
|
93
92
|
import {
|
|
94
93
|
clearProjectResearchInflightMarker,
|
|
@@ -96,6 +95,7 @@ import {
|
|
|
96
95
|
} from "./project-research-policy.js";
|
|
97
96
|
import { validateArtifact } from "./schemas/validate.js";
|
|
98
97
|
import { verificationRetryKey } from "./auto/verification-retry-policy.js";
|
|
98
|
+
import { saveCustomVerifyRetryCounts } from "./auto/custom-verify-retry-store.js";
|
|
99
99
|
import { getLedger } from "./metrics.js";
|
|
100
100
|
import { getUnitCostSpikeAction, resolveUnitCostSpikeMultiplier } from "./auto-budget.js";
|
|
101
101
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
@@ -619,8 +619,10 @@ export function _hasExecutionToolCallsInSessionForTest(entries: readonly unknown
|
|
|
619
619
|
return true;
|
|
620
620
|
}
|
|
621
621
|
|
|
622
|
-
|
|
623
|
-
|
|
622
|
+
// Accept both session-manager entries ({type: "message", message}) and
|
|
623
|
+
// bare agent-end messages ({role, content}) — the auto loop passes the
|
|
624
|
+
// latter via opts.agentEndMessages.
|
|
625
|
+
const msg = e?.type === "message" ? e?.message : e;
|
|
624
626
|
if (!msg || msg.role !== "assistant" || !Array.isArray(msg.content)) continue;
|
|
625
627
|
for (const block of msg.content) {
|
|
626
628
|
if (block?.type !== "toolCall") continue;
|
|
@@ -899,7 +901,7 @@ export const USER_DRIVEN_DEEP_UNITS = new Set([
|
|
|
899
901
|
"discuss-milestone",
|
|
900
902
|
"research-decision",
|
|
901
903
|
]);
|
|
902
|
-
export { isAwaitingUserInput } from "./
|
|
904
|
+
export { isAwaitingUserInput } from "./consent-question.js";
|
|
903
905
|
|
|
904
906
|
function artifactValidationKind(unitType: string): "project" | "requirements" | null {
|
|
905
907
|
if (unitType === "discuss-project") return "project";
|
|
@@ -988,11 +990,13 @@ async function repairCompleteSliceRoadmapProjection(
|
|
|
988
990
|
return false;
|
|
989
991
|
}
|
|
990
992
|
|
|
993
|
+
// Stale-render detection (ADR-017): the DB already says the slice is closed;
|
|
994
|
+
// this only checks whether the rendered ROADMAP projection reflects it, to
|
|
995
|
+
// decide whether a repair re-render is needed.
|
|
991
996
|
const roadmapPath = resolveMilestoneFile(artifactBase, mid, "ROADMAP");
|
|
992
997
|
if (roadmapPath && existsSync(roadmapPath)) {
|
|
993
998
|
try {
|
|
994
|
-
|
|
995
|
-
if (roadmap.slices.find((roadmapSlice) => roadmapSlice.id === sid)?.done) {
|
|
999
|
+
if (roadmapRenderMarksSliceDone(readFileSync(roadmapPath, "utf-8"), sid)) {
|
|
996
1000
|
return false;
|
|
997
1001
|
}
|
|
998
1002
|
} catch (err) {
|
|
@@ -1535,6 +1539,11 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1535
1539
|
if (safetyConfig.enabled) {
|
|
1536
1540
|
const { milestone: sMid, slice: sSid, task: sTid } = parseUnitId(s.currentUnit.id);
|
|
1537
1541
|
|
|
1542
|
+
const fileChangeAllowlist = effectiveFileChangeAllowlist(
|
|
1543
|
+
safetyConfig.file_change_allowlist,
|
|
1544
|
+
(prefs?.git as { manage_gitignore?: boolean } | undefined)?.manage_gitignore,
|
|
1545
|
+
);
|
|
1546
|
+
|
|
1538
1547
|
// File change validation (execute-task only, after unit execution)
|
|
1539
1548
|
if (safetyConfig.file_change_validation && s.currentUnit.type === "execute-task" && sMid && sSid && sTid) {
|
|
1540
1549
|
try {
|
|
@@ -1554,7 +1563,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1554
1563
|
files: taskRow.files,
|
|
1555
1564
|
})),
|
|
1556
1565
|
);
|
|
1557
|
-
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles,
|
|
1566
|
+
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles, fileChangeAllowlist);
|
|
1558
1567
|
if (audit && audit.violations.length > 0) {
|
|
1559
1568
|
const warnings = audit.violations.filter(v => v.severity === "warning");
|
|
1560
1569
|
for (const v of warnings) {
|
|
@@ -1576,7 +1585,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1576
1585
|
s.basePath,
|
|
1577
1586
|
expectedOutput,
|
|
1578
1587
|
plannedFiles,
|
|
1579
|
-
|
|
1588
|
+
fileChangeAllowlist,
|
|
1580
1589
|
);
|
|
1581
1590
|
if (audit && audit.violations.length > 0) {
|
|
1582
1591
|
const warnings = audit.violations.filter(v => v.severity === "warning");
|
|
@@ -2015,7 +2024,18 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2015
2024
|
"error",
|
|
2016
2025
|
);
|
|
2017
2026
|
} else if (!triggerArtifactVerified) {
|
|
2018
|
-
if (s.lastToolInvocationError) {
|
|
2027
|
+
if (s.lastToolInvocationError && isToolUnavailableError(s.lastToolInvocationError)) {
|
|
2028
|
+
// Tool-unavailable is the one transient invocation error: the
|
|
2029
|
+
// workflow MCP server registers its surface asynchronously, so a
|
|
2030
|
+
// Unit's first call can race the registration. Fall through to the
|
|
2031
|
+
// bounded verification retry instead of pausing.
|
|
2032
|
+
debugLog("postUnit", { phase: "tool-unavailable-retry", unitType: s.currentUnit.type, unitId: s.currentUnit.id, error: s.lastToolInvocationError });
|
|
2033
|
+
ctx.ui.notify(
|
|
2034
|
+
`Tool unavailable for ${s.currentUnit.type}: ${s.lastToolInvocationError}. The tool surface may still be registering — retrying.`,
|
|
2035
|
+
"warning",
|
|
2036
|
+
);
|
|
2037
|
+
s.lastToolInvocationError = null;
|
|
2038
|
+
} else if (s.lastToolInvocationError) {
|
|
2019
2039
|
const isUserSkip = /queued user message/i.test(s.lastToolInvocationError);
|
|
2020
2040
|
const errMsg = isUserSkip
|
|
2021
2041
|
? `Tool skipped for ${s.currentUnit.type}: ${s.lastToolInvocationError}. Queued user message interrupted the turn — pausing auto-mode.`
|
|
@@ -2141,6 +2161,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2141
2161
|
}
|
|
2142
2162
|
}
|
|
2143
2163
|
s.exhaustedVerificationUnits.add(retryKey);
|
|
2164
|
+
saveCustomVerifyRetryCounts(s, { logFailure: err => debugLog("postUnit", { phase: "save-verify-retries-failed", error: err instanceof Error ? err.message : String(err) }) });
|
|
2144
2165
|
debugLog("postUnit", { phase: "artifact-verify-exhausted", unitType: s.currentUnit.type, unitId: s.currentUnit.id, attempt });
|
|
2145
2166
|
ctx.ui.notify(
|
|
2146
2167
|
`${failureDetails} Pausing auto-mode after ${MAX_ARTIFACT_VERIFICATION_RETRIES} retries.`,
|
|
@@ -2150,6 +2171,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2150
2171
|
return "dispatched";
|
|
2151
2172
|
}
|
|
2152
2173
|
s.verificationRetryCount.set(retryKey, attempt);
|
|
2174
|
+
saveCustomVerifyRetryCounts(s, { logFailure: err => debugLog("postUnit", { phase: "save-verify-retries-failed", error: err instanceof Error ? err.message : String(err) }) });
|
|
2153
2175
|
s.pendingVerificationRetry = {
|
|
2154
2176
|
unitId: s.currentUnit.id,
|
|
2155
2177
|
failureContext: `${failureDetails} (attempt ${attempt}/${MAX_ARTIFACT_VERIFICATION_RETRIES}).`,
|
|
@@ -2173,6 +2195,8 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2173
2195
|
}
|
|
2174
2196
|
s.verificationRetryCount.delete(retryKey);
|
|
2175
2197
|
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2198
|
+
s.exhaustedVerificationUnits.delete(retryKey);
|
|
2199
|
+
saveCustomVerifyRetryCounts(s, { logFailure: err => debugLog("postUnit", { phase: "save-verify-retries-failed", error: err instanceof Error ? err.message : String(err) }) });
|
|
2176
2200
|
|
|
2177
2201
|
if (s.currentUnit.type === "complete-milestone") {
|
|
2178
2202
|
const { milestone: mid } = parseUnitId(s.currentUnit.id);
|