@opengsd/gsd-pi 1.2.0-dev.0b870afa → 1.2.0-dev.23d85b63
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 +14 -19
- package/dist/headless-events.d.ts +16 -1
- package/dist/headless-events.js +19 -2
- package/dist/headless.js +8 -1
- package/dist/loader.js +6 -4
- package/dist/onboarding.js +9 -4
- package/dist/provider-migrations.d.ts +23 -0
- package/dist/provider-migrations.js +41 -0
- 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/extensions/ask-user-questions.js +3 -2
- 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/google-cli/stream-adapter.js +16 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +215 -0
- package/dist/resources/extensions/gsd/auto/dispatch-history.js +21 -6
- 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 +4 -1
- package/dist/resources/extensions/gsd/auto/milestone-lease-reclaim.js +56 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +119 -18
- package/dist/resources/extensions/gsd/auto/phase-helpers.js +146 -0
- package/dist/resources/extensions/gsd/auto/phases.js +17 -2372
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +542 -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-closeout-messaging.js +90 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +255 -431
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +15 -3
- package/dist/resources/extensions/gsd/auto-dispatch.js +19 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +9 -6
- package/dist/resources/extensions/gsd/auto-post-unit.js +12 -8
- package/dist/resources/extensions/gsd/auto-prompts.js +5 -1
- package/dist/resources/extensions/gsd/auto-recovery.js +52 -6
- package/dist/resources/extensions/gsd/auto-start.js +28 -7
- package/dist/resources/extensions/gsd/auto-worktree.js +48 -3
- package/dist/resources/extensions/gsd/auto.js +83 -19
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +4 -2
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -7
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +3 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +32 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +56 -16
- package/dist/resources/extensions/gsd/closeout-wizard.js +8 -3
- package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -8
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +2 -2
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +8 -0
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +9 -2
- package/dist/resources/extensions/gsd/config-overlay.js +11 -8
- package/dist/resources/extensions/gsd/db/engine.js +24 -6
- package/dist/resources/extensions/gsd/db/queries.js +30 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +19 -1
- package/dist/resources/extensions/gsd/db-migration-backup.js +51 -8
- package/dist/resources/extensions/gsd/db-transaction.js +27 -23
- package/dist/resources/extensions/gsd/db-writer.js +8 -17
- package/dist/resources/extensions/gsd/doctor-environment.js +256 -125
- package/dist/resources/extensions/gsd/doctor-git-checks.js +5 -1
- package/dist/resources/extensions/gsd/doctor-providers.js +1 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +11 -9
- package/dist/resources/extensions/gsd/gsd-db.js +15 -20
- package/dist/resources/extensions/gsd/guided-flow.js +88 -2
- package/dist/resources/extensions/gsd/health-widget.js +87 -28
- 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-settlement.js +2 -2
- package/dist/resources/extensions/gsd/notifications.js +12 -7
- package/dist/resources/extensions/gsd/preferences-models.js +17 -9
- package/dist/resources/extensions/gsd/preferences.js +91 -5
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/dist/resources/extensions/gsd/prompts/execute-task.md +7 -2
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/dist/resources/extensions/gsd/prompts/run-uat.md +7 -1
- package/dist/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/dist/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/dist/resources/extensions/gsd/provider-error-guidance.js +24 -0
- package/dist/resources/extensions/gsd/session-lock.js +4 -3
- package/dist/resources/extensions/gsd/skill-activation.js +3 -6
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +13 -6
- package/dist/resources/extensions/gsd/state.js +6 -2
- package/dist/resources/extensions/gsd/tool-surface-readiness.js +83 -31
- package/dist/resources/extensions/gsd/tools/complete-task.js +62 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +2 -109
- package/dist/resources/extensions/gsd/tui/render-kit.js +38 -13
- package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
- package/dist/resources/extensions/gsd/unit-registry.js +34 -4
- package/dist/resources/extensions/gsd/workflow-logger.js +4 -0
- 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/worktree-manager.js +101 -2
- package/dist/resources/extensions/gsd/worktree-safety.js +28 -26
- package/dist/resources/extensions/gsd/worktree-shell-guard.js +113 -0
- package/dist/resources/extensions/gsd/worktree.js +8 -1
- package/dist/resources/extensions/mcp-client/manager.js +6 -1
- package/dist/resources/extensions/search-the-web/index.js +41 -9
- package/dist/resources/extensions/search-the-web/native-search.js +18 -4
- package/dist/resources/extensions/shared/gsd-browser-cli.js +40 -2
- package/dist/resources/extensions/subagent/index.js +20 -15
- package/dist/resources/extensions/subagent/worktree-cwd.js +31 -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/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +10 -10
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/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/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 +10 -10
- package/dist/web/standalone/.next/server/chunks/{5942.js → 1128.js} +1 -1
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/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/node_modules/node-pty/build/Makefile +1 -1
- package/package.json +4 -4
- package/packages/cloud-mcp-gateway/package.json +2 -2
- 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 +12 -6
- 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/assistant-message.d.ts +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +12 -24
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js +20 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts +4 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js +5 -54
- package/packages/gsd-agent-modes/dist/modes/interactive/components/chat-turn-connect.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js +2 -4
- package/packages/gsd-agent-modes/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts +9 -12
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js +100 -166
- package/packages/gsd-agent-modes/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-progress-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts +23 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js +178 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/gsd-status-widget.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts +8 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js +21 -9
- package/packages/gsd-agent-modes/dist/modes/interactive/components/login-dialog.js.map +1 -1
- 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/skill-invocation-message.d.ts +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js +2 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +11 -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 +85 -19
- 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 +71 -3
- 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 +257 -37
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts +3 -3
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js +19 -19
- package/packages/gsd-agent-modes/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +26 -10
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-controller.js +12 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/extension-ui-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 +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.js +3 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-autocomplete.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 +3 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js +2 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +25 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-key-handlers.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js +20 -49
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-init.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +10 -2
- 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 +48 -6
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-selectors-settings.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.js +0 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-ui-messaging.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 -0
- 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 -58
- package/packages/mcp-server/dist/cli.js.map +1 -1
- 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 +459 -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/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.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +62 -43
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +5 -5
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +52 -2
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts +28 -2
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/extension-upstream-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +3 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.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/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.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/package.json +8 -8
- package/packages/pi-tui/README.md +15 -0
- package/packages/pi-tui/dist/autocomplete.d.ts.map +1 -1
- package/packages/pi-tui/dist/autocomplete.js +6 -1
- package/packages/pi-tui/dist/autocomplete.js.map +1 -1
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/components/loader.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/loader.js +1 -0
- package/packages/pi-tui/dist/components/loader.js.map +1 -1
- package/packages/pi-tui/dist/components/select-list.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/select-list.js +8 -2
- package/packages/pi-tui/dist/components/select-list.js.map +1 -1
- package/packages/pi-tui/dist/index.d.ts +2 -2
- package/packages/pi-tui/dist/index.d.ts.map +1 -1
- package/packages/pi-tui/dist/index.js +2 -2
- 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/terminal.d.ts +12 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +70 -25
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +15 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +106 -21
- 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/extensions/ask-user-questions.ts +7 -2
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +80 -0
- 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/google-cli/stream-adapter.ts +22 -1
- package/src/resources/extensions/gsd/auto/closeout.ts +309 -0
- package/src/resources/extensions/gsd/auto/dispatch-history.ts +22 -6
- 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 +4 -1
- package/src/resources/extensions/gsd/auto/milestone-lease-reclaim.ts +74 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +140 -18
- package/src/resources/extensions/gsd/auto/phase-helpers.ts +199 -0
- package/src/resources/extensions/gsd/auto/phases.ts +58 -3061
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +716 -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-closeout-messaging.ts +90 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +310 -454
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +15 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +24 -2
- package/src/resources/extensions/gsd/auto-model-selection.ts +20 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -9
- package/src/resources/extensions/gsd/auto-prompts.ts +5 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +62 -8
- package/src/resources/extensions/gsd/auto-start.ts +44 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +51 -3
- package/src/resources/extensions/gsd/auto.ts +118 -18
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +6 -2
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +56 -6
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +36 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +69 -16
- package/src/resources/extensions/gsd/closeout-wizard.ts +11 -2
- package/src/resources/extensions/gsd/commands/handlers/core.ts +27 -8
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +5 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +2 -2
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +7 -0
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +11 -4
- package/src/resources/extensions/gsd/config-overlay.ts +22 -9
- package/src/resources/extensions/gsd/db/engine.ts +26 -6
- package/src/resources/extensions/gsd/db/queries.ts +29 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +24 -1
- package/src/resources/extensions/gsd/db-migration-backup.ts +56 -7
- package/src/resources/extensions/gsd/db-transaction.ts +37 -20
- package/src/resources/extensions/gsd/db-writer.ts +11 -19
- package/src/resources/extensions/gsd/doctor-environment.ts +267 -142
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -1
- package/src/resources/extensions/gsd/doctor-providers.ts +1 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +10 -10
- package/src/resources/extensions/gsd/gsd-db.ts +15 -19
- package/src/resources/extensions/gsd/guided-flow.ts +128 -2
- package/src/resources/extensions/gsd/health-widget.ts +91 -27
- 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-settlement.ts +2 -2
- package/src/resources/extensions/gsd/notifications.ts +13 -6
- package/src/resources/extensions/gsd/preferences-models.ts +26 -8
- package/src/resources/extensions/gsd/preferences.ts +111 -5
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +8 -2
- package/src/resources/extensions/gsd/prompts/complete-slice.md +6 -2
- package/src/resources/extensions/gsd/prompts/execute-task.md +7 -2
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -1
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +2 -2
- package/src/resources/extensions/gsd/prompts/run-uat.md +7 -1
- package/src/resources/extensions/gsd/prompts/triage-captures.md +1 -1
- package/src/resources/extensions/gsd/prompts/workflow-start.md +2 -1
- package/src/resources/extensions/gsd/provider-error-guidance.ts +32 -0
- package/src/resources/extensions/gsd/session-lock.ts +8 -7
- package/src/resources/extensions/gsd/skill-activation.ts +3 -6
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +23 -10
- package/src/resources/extensions/gsd/state.ts +7 -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-closeout-messaging.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +68 -116
- package/src/resources/extensions/gsd/tests/auto-direct-dispatch-parse.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +206 -22
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +7 -2
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +16 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +89 -22
- 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 +97 -4
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +2 -1
- 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/auto-verification.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/blocker-placeholder-logs.test.ts +218 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +141 -5
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/db-engine-logs.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +68 -19
- package/src/resources/extensions/gsd/tests/db-transaction.test.ts +59 -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 +2 -1
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/discuss-routing-fixes.test.ts +12 -2
- package/src/resources/extensions/gsd/tests/dispatch-db-degradation-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dispatch-history.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/dispatch-logs.test.ts +103 -0
- package/src/resources/extensions/gsd/tests/dispatch-reactive-logs.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/dist-redirect.mjs +8 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +6 -4
- 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/flat-rate-routing-guard.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/gsd-command-home.test.ts +40 -7
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +75 -0
- 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 +18 -0
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +47 -16
- package/src/resources/extensions/gsd/tests/loop.test.ts +60 -0
- 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-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-router.test.ts +139 -0
- package/src/resources/extensions/gsd/tests/notifications.test.ts +64 -9
- package/src/resources/extensions/gsd/tests/oauth-api-model-routing.test.ts +13 -1
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/orchestrator-logs.test.ts +335 -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 +5 -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 +1 -1
- package/src/resources/extensions/gsd/tests/plan-gate-failed-doctor-heal-hint.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/prefs-missing-models-crash.test.ts +35 -4
- package/src/resources/extensions/gsd/tests/progress-strip-test-helpers.ts +79 -0
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/provider-error-guidance.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/reconcile-logs.test.ts +244 -0
- package/src/resources/extensions/gsd/tests/recovery-finalize-logs.test.ts +119 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +428 -0
- package/src/resources/extensions/gsd/tests/register-extension-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/remote-notification-from-desktop.test.ts +31 -81
- package/src/resources/extensions/gsd/tests/resume-missing-worktree-warning.test.ts +5 -5
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +3 -0
- 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/state-reconciliation-drift.test.ts +17 -1
- 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/thinking-level-resolution.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/tool-surface-readiness.test.ts +184 -10
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +40 -86
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/uok-audit.test.ts +194 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +1 -1
- 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-templates.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +36 -0
- 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-write-gate.test.ts +75 -3
- package/src/resources/extensions/gsd/tests/worktree.test.ts +18 -0
- package/src/resources/extensions/gsd/tool-surface-readiness.ts +126 -19
- package/src/resources/extensions/gsd/tools/complete-task.ts +87 -0
- package/src/resources/extensions/gsd/tools/exec-tool.ts +2 -118
- package/src/resources/extensions/gsd/tui/render-kit.ts +56 -13
- package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
- package/src/resources/extensions/gsd/unit-registry.ts +34 -4
- package/src/resources/extensions/gsd/workflow-logger.ts +5 -0
- 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/worktree-manager.ts +97 -2
- package/src/resources/extensions/gsd/worktree-safety.ts +41 -39
- package/src/resources/extensions/gsd/worktree-shell-guard.ts +123 -0
- package/src/resources/extensions/gsd/worktree.ts +7 -1
- package/src/resources/extensions/mcp-client/manager.ts +7 -1
- package/src/resources/extensions/search-the-web/index.ts +45 -9
- package/src/resources/extensions/search-the-web/native-search.ts +16 -4
- package/src/resources/extensions/shared/gsd-browser-cli.ts +41 -2
- package/src/resources/extensions/subagent/index.ts +20 -15
- package/src/resources/extensions/subagent/tests/worktree-cwd.test.ts +57 -0
- package/src/resources/extensions/subagent/worktree-cwd.ts +35 -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/skills/gsd-browser/SKILL.md +0 -41
- package/src/resources/skills/gsd-browser/SKILL.md +0 -41
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{T-LTxEw5wir5Lm5T3qEVd → Wn9u2NYq0cyUigB_3Z0_N}/_ssgManifest.js +0 -0
|
@@ -11,9 +11,21 @@ import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
|
11
11
|
import { pauseAuto } from "./auto.js";
|
|
12
12
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
13
13
|
import { getUnitWorkflowDispatchReadinessError } from "./tool-contract.js";
|
|
14
|
-
export
|
|
14
|
+
export function parseDirectDispatchPhase(raw) {
|
|
15
|
+
const tokens = raw.trim().split(/\s+/).filter(Boolean);
|
|
16
|
+
if (tokens.length === 0)
|
|
17
|
+
return { phase: "" };
|
|
18
|
+
const phase = tokens[0].toLowerCase();
|
|
19
|
+
const milestoneToken = tokens.find((token, index) => index > 0 && /^M\d/i.test(token));
|
|
20
|
+
return {
|
|
21
|
+
phase,
|
|
22
|
+
milestoneId: milestoneToken?.replace(/[.,;:!?]+$/, ""),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export async function dispatchDirectPhase(ctx, pi, phase, base, opts = {}) {
|
|
26
|
+
const parsed = parseDirectDispatchPhase(phase);
|
|
15
27
|
const state = await deriveState(base);
|
|
16
|
-
const mid = state.activeMilestone?.id;
|
|
28
|
+
const mid = opts.milestoneId ?? parsed.milestoneId ?? state.activeMilestone?.id;
|
|
17
29
|
const midTitle = state.activeMilestone?.title ?? "";
|
|
18
30
|
if (!mid) {
|
|
19
31
|
ctx.ui.notify("Cannot dispatch: no active milestone.", "warning");
|
|
@@ -25,7 +37,7 @@ export async function dispatchDirectPhase(ctx, pi, phase, base) {
|
|
|
25
37
|
// build prompts and create a session anchored to the project root even
|
|
26
38
|
// though the milestone's actual code lives in the worktree.
|
|
27
39
|
const dispatchBase = resolveCanonicalMilestoneRoot(base, mid);
|
|
28
|
-
const normalized = phase
|
|
40
|
+
const normalized = parsed.phase;
|
|
29
41
|
let unitType;
|
|
30
42
|
let unitId;
|
|
31
43
|
let prompt;
|
|
@@ -48,6 +48,22 @@ function resolveExistingExpectedArtifact(unitType, unitId, basePath) {
|
|
|
48
48
|
}
|
|
49
49
|
let reassessmentChecker = checkNeedsReassessment;
|
|
50
50
|
let researchProjectPromptBuilder = buildResearchProjectPrompt;
|
|
51
|
+
/**
|
|
52
|
+
* Optional override for the reactive graph derivation step inside the
|
|
53
|
+
* "executing → reactive-execute" rule. Production leaves this null so the rule
|
|
54
|
+
* uses the real loadSliceTaskIO + deriveTaskGraph; tests inject a throwing
|
|
55
|
+
* function to deterministically exercise the best-effort failure path
|
|
56
|
+
* (auto-dispatch.ts:1494). The catch is otherwise unreachable because every
|
|
57
|
+
* operation it wraps (loadSliceTaskIO, deriveTaskGraph, saveReactiveState) is
|
|
58
|
+
* internally defensive.
|
|
59
|
+
* @internal
|
|
60
|
+
*/
|
|
61
|
+
let _reactiveGraphDeriveFn = null;
|
|
62
|
+
export function setReactiveGraphDeriveFnForTest(fn) {
|
|
63
|
+
const previous = _reactiveGraphDeriveFn;
|
|
64
|
+
_reactiveGraphDeriveFn = fn;
|
|
65
|
+
return () => { _reactiveGraphDeriveFn = previous; };
|
|
66
|
+
}
|
|
51
67
|
function shouldBypassMilestoneDepthGateInAuto(prefs) {
|
|
52
68
|
return isAutoActive() && prefs?.planning_depth !== "deep";
|
|
53
69
|
}
|
|
@@ -1155,7 +1171,9 @@ export const DISPATCH_RULES = [
|
|
|
1155
1171
|
return null;
|
|
1156
1172
|
try {
|
|
1157
1173
|
const { loadSliceTaskIO, deriveTaskGraph, isGraphAmbiguous, getReadyTasks, chooseNonConflictingSubset, graphMetrics, } = await import("./reactive-graph.js");
|
|
1158
|
-
const taskIO =
|
|
1174
|
+
const taskIO = _reactiveGraphDeriveFn
|
|
1175
|
+
? await _reactiveGraphDeriveFn(basePath, mid, sid)
|
|
1176
|
+
: await loadSliceTaskIO(basePath, mid, sid);
|
|
1159
1177
|
if (taskIO.length < 2)
|
|
1160
1178
|
return null; // single task, no point
|
|
1161
1179
|
const graph = deriveTaskGraph(taskIO);
|
|
@@ -12,6 +12,7 @@ import { unitPhaseLabel } from "./auto-dashboard.js";
|
|
|
12
12
|
import { getSessionModelOverride } from "./session-model-override.js";
|
|
13
13
|
import { logWarning } from "./workflow-logger.js";
|
|
14
14
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
15
|
+
import { modelIdsForProfileResolution, resolveProfileAnchorProvider, resolveDisabledModelProvidersFromPreferences } from "./preferences.js";
|
|
15
16
|
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
16
17
|
import { isModelBlocked, isModelTemporarilyUnavailable } from "./blocked-models.js";
|
|
17
18
|
import { getRequiredWorkflowToolsForAutoUnit, isWorkflowMcpSurfaceTool } from "./workflow-mcp.js";
|
|
@@ -324,8 +325,8 @@ export function floorThinkingLevelForUnit(unitType, level) {
|
|
|
324
325
|
}
|
|
325
326
|
return EXECUTE_TASK_MIN_THINKING_LEVEL;
|
|
326
327
|
}
|
|
327
|
-
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true) {
|
|
328
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
328
|
+
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true, basePath, availableModelIds) {
|
|
329
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds);
|
|
329
330
|
if (explicitConfig) {
|
|
330
331
|
return {
|
|
331
332
|
...explicitConfig,
|
|
@@ -380,7 +381,9 @@ autoModeStartThinkingLevel) {
|
|
|
380
381
|
// With no explicit level, fall back to the auto-start session level and raise
|
|
381
382
|
// the code-writing floor — preserving prior behavior exactly. Recomputed per
|
|
382
383
|
// dispatch so neither the floor nor a phase override leaks to other units.
|
|
383
|
-
const
|
|
384
|
+
const anchorProvider = resolveProfileAnchorProvider(ctx.model?.provider, autoModeStartModel?.provider);
|
|
385
|
+
const profileResolutionIds = modelIdsForProfileResolution(ctx.modelRegistry, anchorProvider, resolveDisabledModelProvidersFromPreferences());
|
|
386
|
+
const explicitThinkingLevel = resolveThinkingLevelForUnit(unitType, basePath, profileResolutionIds);
|
|
384
387
|
const desiredThinkingLevel = explicitThinkingLevel
|
|
385
388
|
?? floorThinkingLevelForUnit(unitType, autoModeStartThinkingLevel);
|
|
386
389
|
if (explicitThinkingLevel) {
|
|
@@ -415,7 +418,7 @@ autoModeStartThinkingLevel) {
|
|
|
415
418
|
}
|
|
416
419
|
const modelConfig = effectiveSessionModelOverride
|
|
417
420
|
? undefined
|
|
418
|
-
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode);
|
|
421
|
+
: resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode, basePath, profileResolutionIds);
|
|
419
422
|
let routing = null;
|
|
420
423
|
let appliedModel = null;
|
|
421
424
|
// ── Restore active-tool baseline before policy evaluation (#4959, #4681, #4850) ──
|
|
@@ -860,16 +863,16 @@ export function resolveModelId(modelId, availableModels, currentProvider) {
|
|
|
860
863
|
*
|
|
861
864
|
* Order rationale:
|
|
862
865
|
* - openai-codex before github-copilot: ChatGPT-native for shared GPT IDs
|
|
863
|
-
* - google-
|
|
866
|
+
* - google-antigravity before google-gemini-cli: Antigravity replaced Gemini CLI for individuals
|
|
864
867
|
* - anthropic before github-copilot: first-party Claude API/OAuth over Copilot
|
|
865
868
|
* - github-copilot before openai/google: Copilot OAuth over platform API keys
|
|
866
869
|
*/
|
|
867
870
|
export const BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE = [
|
|
868
871
|
"openai-codex",
|
|
872
|
+
"google-antigravity",
|
|
869
873
|
"google-gemini-cli",
|
|
870
874
|
"anthropic",
|
|
871
875
|
"github-copilot",
|
|
872
|
-
"google-antigravity",
|
|
873
876
|
];
|
|
874
877
|
/**
|
|
875
878
|
* Flat-rate providers charge the same per request regardless of model.
|
|
@@ -1766,11 +1766,11 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1766
1766
|
return "dispatched";
|
|
1767
1767
|
}
|
|
1768
1768
|
if (getUnitCostSpikeAction(unitCostUsd, rollingAvgUsd, resolveUnitCostSpikeMultiplier(prefs)) === "pause") {
|
|
1769
|
-
s.pendingVerificationRetry = null;
|
|
1770
|
-
s.verificationRetryCount.delete(retryKey);
|
|
1771
|
-
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1772
1769
|
const advancedPastUnit = await hasArtifactCostGuardAdvancedPastUnit(s, ctx, s.currentUnit.type, s.currentUnit.id, prefs);
|
|
1773
1770
|
if (advancedPastUnit) {
|
|
1771
|
+
s.pendingVerificationRetry = null;
|
|
1772
|
+
s.verificationRetryCount.delete(retryKey);
|
|
1773
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1774
1774
|
debugLog("postUnit", {
|
|
1775
1775
|
phase: "artifact-cost-spike-continue-after-advance",
|
|
1776
1776
|
unitType: s.currentUnit.type,
|
|
@@ -1782,11 +1782,15 @@ export async function postUnitPreVerification(pctx, opts) {
|
|
|
1782
1782
|
return "continue";
|
|
1783
1783
|
}
|
|
1784
1784
|
const parallelBlocker = maybeWriteParallelResearchCostSpikeBlocker(s.currentUnit.type, s.currentUnit.id, verificationBasePath, unitCostUsd, rollingAvgUsd);
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1785
|
+
if (parallelBlocker) {
|
|
1786
|
+
s.pendingVerificationRetry = null;
|
|
1787
|
+
s.verificationRetryCount.delete(retryKey);
|
|
1788
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
1789
|
+
ctx.ui.notify(`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — wrote parallel blocker and pausing auto-mode.`, "error");
|
|
1790
|
+
await pauseAuto(ctx, pi);
|
|
1791
|
+
return "dispatched";
|
|
1792
|
+
}
|
|
1793
|
+
ctx.ui.notify(`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) during artifact verification retry; keeping verification failure as the authoritative blocker.`, "warning");
|
|
1790
1794
|
}
|
|
1791
1795
|
const attempt = (s.verificationRetryCount.get(retryKey) ?? 0) + 1;
|
|
1792
1796
|
const failureDetails = describeArtifactVerificationFailure(s.currentUnit.type, s.currentUnit.id, verificationBasePath, s.lastUnitAgentEndMessages);
|
|
@@ -3372,7 +3372,11 @@ opts) {
|
|
|
3372
3372
|
const taskPrompt = [
|
|
3373
3373
|
`## UNIT: Execute Task ${tid} ("${tTitle}")`,
|
|
3374
3374
|
"",
|
|
3375
|
-
"
|
|
3375
|
+
"## Working Directory",
|
|
3376
|
+
"",
|
|
3377
|
+
`Your working directory is \`${base}\`. All file reads, writes, and shell commands MUST operate relative to this directory. Do NOT \`cd\` to any other directory.`,
|
|
3378
|
+
`If any inlined plan names an absolute path outside \`${base}\`, treat it as stale — use the equivalent path under \`${base}\` before reading, writing, or executing.`,
|
|
3379
|
+
"",
|
|
3376
3380
|
"Implement from the inlined task plan below. Verify changes, then call `gsd_task_complete`.",
|
|
3377
3381
|
"Do not run git commands.",
|
|
3378
3382
|
"",
|
|
@@ -38,6 +38,45 @@ import { proveMilestoneCloseout, } from "./milestone-closeout-proof.js";
|
|
|
38
38
|
export { resolveExpectedArtifactPath, diagnoseExpectedArtifact };
|
|
39
39
|
export { classifyMilestoneSummaryContent, } from "./milestone-summary-classifier.js";
|
|
40
40
|
export { hasImplementationArtifacts } from "./milestone-implementation-evidence.js";
|
|
41
|
+
/**
|
|
42
|
+
* Optional override for the legacy roadmap parser used by verifyExpectedArtifact.
|
|
43
|
+
* Production leaves this null so the real parseLegacyRoadmap runs; tests inject
|
|
44
|
+
* a throwing function to deterministically exercise the parse-failure catches
|
|
45
|
+
* (auto-recovery.ts:515 plan-milestone and :622 complete-slice). Those catches
|
|
46
|
+
* are otherwise unreachable because parseLegacyRoadmap is internally defensive
|
|
47
|
+
* against every malformed input.
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
let _roadmapParserFn = null;
|
|
51
|
+
/**
|
|
52
|
+
* Inject an override for the legacy roadmap parser, returning a function that
|
|
53
|
+
* restores the default (real parser) behavior. No production caller.
|
|
54
|
+
* @internal
|
|
55
|
+
*/
|
|
56
|
+
export function _setRoadmapParserFnForTests(fn) {
|
|
57
|
+
const previous = _roadmapParserFn;
|
|
58
|
+
_roadmapParserFn = fn;
|
|
59
|
+
return () => { _roadmapParserFn = previous; };
|
|
60
|
+
}
|
|
61
|
+
function parseRoadmapForRecovery(content) {
|
|
62
|
+
if (_roadmapParserFn)
|
|
63
|
+
return _roadmapParserFn(content);
|
|
64
|
+
return parseLegacyRoadmap(content);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Optional override for the detached GitHub milestone finalize invoked after DB
|
|
68
|
+
* closeout in refreshRecoveryDbForArtifact. Production leaves this null so the
|
|
69
|
+
* real finalizeMilestoneGitHubSync runs; tests inject a throwing function to
|
|
70
|
+
* deterministically exercise the best-effort catch (auto-recovery.ts:232),
|
|
71
|
+
* which otherwise needs a real GitHub remote + network failure.
|
|
72
|
+
* @internal
|
|
73
|
+
*/
|
|
74
|
+
let _githubFinalizeFn = null;
|
|
75
|
+
export function _setGithubFinalizeFnForTests(fn) {
|
|
76
|
+
const previous = _githubFinalizeFn;
|
|
77
|
+
_githubFinalizeFn = fn;
|
|
78
|
+
return () => { _githubFinalizeFn = previous; };
|
|
79
|
+
}
|
|
41
80
|
// ─── Artifact Resolution & Verification ───────────────────────────────────────
|
|
42
81
|
export function diagnoseWorktreeIntegrityFailure(basePath) {
|
|
43
82
|
if (!isGsdWorktreePath(basePath))
|
|
@@ -139,9 +178,16 @@ export function refreshRecoveryDbForArtifact(unitType, unitId, basePath) {
|
|
|
139
178
|
};
|
|
140
179
|
}
|
|
141
180
|
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
181
|
+
// Detached GitHub sync — best-effort. Test seam: when
|
|
182
|
+
// _githubFinalizeFn is injected, route through it so the catch
|
|
183
|
+
// (:232) is deterministically reachable (otherwise it needs a real
|
|
184
|
+
// GitHub remote + network failure). Production leaves it null. The
|
|
185
|
+
// seam is wrapped so a synchronous throw becomes a rejected promise,
|
|
186
|
+
// matching the real import-then-call deferred semantics.
|
|
187
|
+
const finalizePromise = _githubFinalizeFn
|
|
188
|
+
? new Promise((resolve) => { resolve(_githubFinalizeFn(basePath, mid)); })
|
|
189
|
+
: import("../github-sync/sync.js").then(({ finalizeMilestoneGitHubSync }) => finalizeMilestoneGitHubSync(basePath, mid));
|
|
190
|
+
void finalizePromise.catch((err) => {
|
|
145
191
|
logWarning("recovery", `GitHub milestone finalize failed after DB closeout: ${getErrorMessage(err)}`);
|
|
146
192
|
});
|
|
147
193
|
return { ok: true };
|
|
@@ -369,7 +415,7 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
369
415
|
return false;
|
|
370
416
|
}
|
|
371
417
|
try {
|
|
372
|
-
const roadmap =
|
|
418
|
+
const roadmap = parseRoadmapForRecovery(readFileSync(roadmapFile, "utf-8"));
|
|
373
419
|
const milestoneResearchFile = resolveExpectedArtifactPath("research-milestone", mid, base);
|
|
374
420
|
const hasMilestoneResearch = !!milestoneResearchFile && existsSync(milestoneResearchFile);
|
|
375
421
|
for (const slice of roadmap.slices) {
|
|
@@ -429,7 +475,7 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
429
475
|
}
|
|
430
476
|
if (unitType === "plan-milestone") {
|
|
431
477
|
try {
|
|
432
|
-
const roadmap =
|
|
478
|
+
const roadmap = parseRoadmapForRecovery(readFileSync(absPath, "utf-8"));
|
|
433
479
|
if (roadmap.slices.length === 0) {
|
|
434
480
|
logWarning("recovery", `verify-fail ${unitType} ${unitId}: roadmap has zero slices at ${absPath}`);
|
|
435
481
|
return false;
|
|
@@ -542,7 +588,7 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
|
|
|
542
588
|
if (roadmapFile && existsSync(roadmapFile)) {
|
|
543
589
|
try {
|
|
544
590
|
const roadmapContent = readFileSync(roadmapFile, "utf-8");
|
|
545
|
-
const roadmap =
|
|
591
|
+
const roadmap = parseRoadmapForRecovery(roadmapContent);
|
|
546
592
|
const slice = roadmap.slices.find((s) => s.id === sid);
|
|
547
593
|
if (slice && !slice.done)
|
|
548
594
|
return false;
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import { deriveState } from "./state.js";
|
|
14
14
|
import { findWorktreeSegment, isGsdWorktreePath } from "./worktree-root.js";
|
|
15
15
|
import { loadFile, getManifestStatus } from "./files.js";
|
|
16
|
-
import { loadEffectiveGSDPreferences, resolveSkillDiscoveryMode, getIsolationMode, } from "./preferences.js";
|
|
16
|
+
import { loadEffectiveGSDPreferences, loadEffectiveGSDPreferencesWithRegistry, modelIdsForProfileResolution, resolveProfileAnchorProvider, resolveDisabledModelProvidersFromPreferences, resolveSkillDiscoveryMode, getIsolationMode, } from "./preferences.js";
|
|
17
17
|
import { ensureGsdSymlink, isInheritedRepo, validateProjectId } from "./repo-identity.js";
|
|
18
18
|
import { migrateToExternalState, recoverFailedMigration } from "./migrate-external.js";
|
|
19
19
|
import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
|
|
@@ -759,9 +759,10 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
759
759
|
// run /login" before pausing and resetting to claude-code/claude-sonnet-4-6.
|
|
760
760
|
const manualSessionOverride = getSessionModelOverride(ctx.sessionManager.getSessionId());
|
|
761
761
|
const sessionProviderIsCustom = isCustomProvider(ctx.model?.provider);
|
|
762
|
+
const profileModelIds = modelIdsForProfileResolution(ctx.modelRegistry, resolveProfileAnchorProvider(ctx.model?.provider), resolveDisabledModelProvidersFromPreferences());
|
|
762
763
|
const preferredModel = sessionProviderIsCustom
|
|
763
764
|
? null
|
|
764
|
-
: resolveDefaultSessionModel(ctx.model?.provider, base);
|
|
765
|
+
: resolveDefaultSessionModel(ctx.model?.provider, base, profileModelIds);
|
|
765
766
|
// Validate the preferred model against the live registry + provider auth so
|
|
766
767
|
// an unconfigured PREFERENCES.md entry (no API key / OAuth) can't become the
|
|
767
768
|
// start-model snapshot. Without this, every subsequent unit would try to
|
|
@@ -976,9 +977,26 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
976
977
|
state = await deriveState(wtPath);
|
|
977
978
|
}
|
|
978
979
|
}
|
|
979
|
-
const
|
|
980
|
-
|
|
981
|
-
|
|
980
|
+
const requestedMilestoneLock = process.env.GSD_MILESTONE_LOCK?.trim() || null;
|
|
981
|
+
const lockedActiveMilestone = requestedMilestoneLock && state.activeMilestone?.id === requestedMilestoneLock;
|
|
982
|
+
let blockingStrandedRecoveryAction;
|
|
983
|
+
if (lockedActiveMilestone) {
|
|
984
|
+
// Parallel worker or explicit `/gsd auto Mxxx`: sibling milestones'
|
|
985
|
+
// stranded work must not block this milestone's resumption, and the
|
|
986
|
+
// downstream `strandedRecoveryAction` (used for currentMilestoneId,
|
|
987
|
+
// setActiveMilestoneId, and adoptStrandedMilestone) must be scoped to
|
|
988
|
+
// the locked milestone only. Falling back to the first sibling action
|
|
989
|
+
// would mis-target adoption (#742).
|
|
990
|
+
const lockMatch = strandedRecoveryActions.find((action) => action.milestoneId === requestedMilestoneLock) ?? null;
|
|
991
|
+
blockingStrandedRecoveryAction = lockMatch;
|
|
992
|
+
strandedRecoveryAction = lockMatch;
|
|
993
|
+
}
|
|
994
|
+
else if (state.activeMilestone) {
|
|
995
|
+
blockingStrandedRecoveryAction = strandedRecoveryActions.find((action) => action.milestoneId !== state.activeMilestone?.id) ?? strandedRecoveryAction;
|
|
996
|
+
}
|
|
997
|
+
else {
|
|
998
|
+
blockingStrandedRecoveryAction = strandedRecoveryAction;
|
|
999
|
+
}
|
|
982
1000
|
if (blockingStrandedRecoveryAction) {
|
|
983
1001
|
if (!state.activeMilestone) {
|
|
984
1002
|
ctx.ui.notify(formatStrandedWorkBlockerMessage(blockingStrandedRecoveryAction, null), "error");
|
|
@@ -991,6 +1009,9 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
991
1009
|
strandedRecoveryAction = blockingStrandedRecoveryAction;
|
|
992
1010
|
ctx.ui.notify(formatStrandedWorkRecoveryMessage(strandedRecoveryAction), "info");
|
|
993
1011
|
}
|
|
1012
|
+
else if (lockedActiveMilestone) {
|
|
1013
|
+
strandedRecoveryAction = null;
|
|
1014
|
+
}
|
|
994
1015
|
if (process.env.GSD_HEADLESS === "1" &&
|
|
995
1016
|
orphanAuditRecovered &&
|
|
996
1017
|
!state.activeMilestone &&
|
|
@@ -1104,7 +1125,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
1104
1125
|
state = await deriveState(base);
|
|
1105
1126
|
}
|
|
1106
1127
|
}
|
|
1107
|
-
const effectivePrefs =
|
|
1128
|
+
const effectivePrefs = loadEffectiveGSDPreferencesWithRegistry(ctx.modelRegistry, base, resolveProfileAnchorProvider(ctx.model?.provider, startModelSnapshot?.provider))?.preferences;
|
|
1108
1129
|
const { shouldRunDeepProjectSetup } = await import("./auto-dispatch.js");
|
|
1109
1130
|
const deepProjectStagePending = shouldRunDeepProjectSetup(state, effectivePrefs, base, { hasSurvivorBranch });
|
|
1110
1131
|
if (deepProjectStagePending && !strandedRecoveryAction) {
|
|
@@ -1388,7 +1409,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
1388
1409
|
// FlatRateContext used by selectAndApplyModel so user-declared
|
|
1389
1410
|
// flat-rate providers and externalCli auto-detection are respected.
|
|
1390
1411
|
const { isFlatRateProvider, buildFlatRateContext } = await import("./auto-model-selection.js");
|
|
1391
|
-
const bannerPrefs =
|
|
1412
|
+
const bannerPrefs = loadEffectiveGSDPreferencesWithRegistry(ctx.modelRegistry, base, resolveProfileAnchorProvider(ctx.model?.provider, s.autoModeStartModel?.provider))?.preferences;
|
|
1392
1413
|
const effectiveProvider = s.autoModeStartModel?.provider ?? ctx.model?.provider;
|
|
1393
1414
|
const effectivelyEnabled = routingConfig.enabled
|
|
1394
1415
|
&& (routingConfig.allow_flat_rate_providers
|
|
@@ -141,6 +141,16 @@ function stripGsdDisplayPrefix(value, id) {
|
|
|
141
141
|
// ─── Module State ──────────────────────────────────────────────────────────
|
|
142
142
|
/** Active workspace registry — replaces the legacy `originalBase` singleton. */
|
|
143
143
|
let activeWorkspace = null;
|
|
144
|
+
/**
|
|
145
|
+
* Optional override for the shelter restore copy step (milestone merge #2505).
|
|
146
|
+
* Production leaves this null so restoreShelter uses the real cpSync; tests
|
|
147
|
+
* inject a throwing function to deterministically exercise the best-effort
|
|
148
|
+
* failure path (auto-worktree.ts:1809) and the shelter-retention guarantee,
|
|
149
|
+
* which is otherwise unreachable because shelter and restore run synchronously
|
|
150
|
+
* in one mergeMilestoneToMain call (the filesystem cannot change between them).
|
|
151
|
+
* @internal
|
|
152
|
+
*/
|
|
153
|
+
let _restoreEntryFn = null;
|
|
144
154
|
function setActiveWorkspace(ws) {
|
|
145
155
|
activeWorkspace = ws;
|
|
146
156
|
}
|
|
@@ -800,6 +810,14 @@ function _resolveIntegrationBranchForReuse(basePath, milestoneId) {
|
|
|
800
810
|
return null;
|
|
801
811
|
}
|
|
802
812
|
}
|
|
813
|
+
function safeCwd(fallback) {
|
|
814
|
+
try {
|
|
815
|
+
return process.cwd();
|
|
816
|
+
}
|
|
817
|
+
catch {
|
|
818
|
+
return fallback;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
803
821
|
/**
|
|
804
822
|
* When reusing an existing milestone branch, fast-forward it onto the
|
|
805
823
|
* integration branch when that's safe (branch is a strict ancestor of
|
|
@@ -949,7 +967,7 @@ export function teardownAutoWorktree(originalBasePath, milestoneId, opts = {}) {
|
|
|
949
967
|
originalBasePath = resolveWorktreeProjectRoot(originalBasePath);
|
|
950
968
|
const branch = autoWorktreeBranch(milestoneId);
|
|
951
969
|
const { preserveBranch = false, preserveWorktree = false } = opts;
|
|
952
|
-
const previousCwd =
|
|
970
|
+
const previousCwd = safeCwd(originalBasePath);
|
|
953
971
|
// Wrap the entire teardown body in a single try/finally so activeWorkspace
|
|
954
972
|
// is ALWAYS cleared — even if process.chdir throws (e.g. originalBasePath
|
|
955
973
|
// was deleted before teardown ran). Previously the finally only covered
|
|
@@ -1033,7 +1051,7 @@ export function teardownAutoWorktree(originalBasePath, milestoneId, opts = {}) {
|
|
|
1033
1051
|
* still works after process restart when module state has been reset.
|
|
1034
1052
|
*/
|
|
1035
1053
|
export function isInAutoWorktree(basePath) {
|
|
1036
|
-
const targetPath = isGsdWorktreePath(basePath) ? basePath :
|
|
1054
|
+
const targetPath = isGsdWorktreePath(basePath) ? basePath : safeCwd("");
|
|
1037
1055
|
if (!isGsdWorktreePath(targetPath))
|
|
1038
1056
|
return false;
|
|
1039
1057
|
const storedBase = getAutoWorktreeOriginalBase();
|
|
@@ -1140,6 +1158,19 @@ export function getAutoWorktreeOriginalBase() {
|
|
|
1140
1158
|
export function _resetAutoWorktreeOriginalBaseForTests() {
|
|
1141
1159
|
setActiveWorkspace(null);
|
|
1142
1160
|
}
|
|
1161
|
+
/**
|
|
1162
|
+
* Inject an override for the shelter restore copy step, returning a function
|
|
1163
|
+
* that restores the default (real cpSync) behavior. Used by tests to
|
|
1164
|
+
* deterministically exercise the best-effort restore-failure path
|
|
1165
|
+
* (auto-worktree.ts:1809) and the #2505 shelter-retention guarantee — which is
|
|
1166
|
+
* otherwise unreachable because shelter + restore run synchronously in one
|
|
1167
|
+
* mergeMilestoneToMain call. No production caller.
|
|
1168
|
+
* @internal
|
|
1169
|
+
*/
|
|
1170
|
+
export function _setRestoreEntryFnForTests(fn) {
|
|
1171
|
+
_restoreEntryFn = fn;
|
|
1172
|
+
return () => { _restoreEntryFn = null; };
|
|
1173
|
+
}
|
|
1143
1174
|
export function getActiveAutoWorktreeContext() {
|
|
1144
1175
|
const ws = getActiveWorkspace();
|
|
1145
1176
|
if (!ws)
|
|
@@ -1505,7 +1536,16 @@ export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapCont
|
|
|
1505
1536
|
}
|
|
1506
1537
|
try {
|
|
1507
1538
|
mkdirSync(milestonesDir, { recursive: true });
|
|
1508
|
-
|
|
1539
|
+
// Test seam: when _restoreEntryFn is injected, route the copy through it
|
|
1540
|
+
// so the best-effort failure path (and shelter-retention guarantee) can
|
|
1541
|
+
// be exercised deterministically. Production leaves it null → real cpSync.
|
|
1542
|
+
const dest = join(milestonesDir, dirName);
|
|
1543
|
+
if (_restoreEntryFn) {
|
|
1544
|
+
_restoreEntryFn(src, dest);
|
|
1545
|
+
}
|
|
1546
|
+
else {
|
|
1547
|
+
cpSync(src, dest, { recursive: true, force: true });
|
|
1548
|
+
}
|
|
1509
1549
|
}
|
|
1510
1550
|
catch (err) { /* best-effort */
|
|
1511
1551
|
restoreFailed = true;
|
|
@@ -1901,6 +1941,11 @@ export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapCont
|
|
|
1901
1941
|
}
|
|
1902
1942
|
catch (err) {
|
|
1903
1943
|
logWarning("worktree", `chdir to project root after merge failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1944
|
+
debugLog("mergeMilestoneToMain", {
|
|
1945
|
+
phase: "post-merge-chdir-failed",
|
|
1946
|
+
target: originalBasePath_,
|
|
1947
|
+
error: err instanceof Error ? err.message : String(err),
|
|
1948
|
+
});
|
|
1904
1949
|
}
|
|
1905
1950
|
};
|
|
1906
1951
|
let shouldCleanup = false;
|