@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
|
@@ -33,14 +33,27 @@ import { pauseAuto } from "./auto.js";
|
|
|
33
33
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
34
34
|
import { getUnitWorkflowDispatchReadinessError } from "./tool-contract.js";
|
|
35
35
|
|
|
36
|
+
export function parseDirectDispatchPhase(raw: string): { phase: string; milestoneId?: string } {
|
|
37
|
+
const tokens = raw.trim().split(/\s+/).filter(Boolean);
|
|
38
|
+
if (tokens.length === 0) return { phase: "" };
|
|
39
|
+
const phase = tokens[0].toLowerCase();
|
|
40
|
+
const milestoneToken = tokens.find((token, index) => index > 0 && /^M\d/i.test(token));
|
|
41
|
+
return {
|
|
42
|
+
phase,
|
|
43
|
+
milestoneId: milestoneToken?.replace(/[.,;:!?]+$/, ""),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
36
47
|
export async function dispatchDirectPhase(
|
|
37
48
|
ctx: ExtensionCommandContext,
|
|
38
49
|
pi: ExtensionAPI,
|
|
39
50
|
phase: string,
|
|
40
51
|
base: string,
|
|
52
|
+
opts: { milestoneId?: string } = {},
|
|
41
53
|
): Promise<void> {
|
|
54
|
+
const parsed = parseDirectDispatchPhase(phase);
|
|
42
55
|
const state = await deriveState(base);
|
|
43
|
-
const mid = state.activeMilestone?.id;
|
|
56
|
+
const mid = opts.milestoneId ?? parsed.milestoneId ?? state.activeMilestone?.id;
|
|
44
57
|
const midTitle = state.activeMilestone?.title ?? "";
|
|
45
58
|
|
|
46
59
|
if (!mid) {
|
|
@@ -56,7 +69,7 @@ export async function dispatchDirectPhase(
|
|
|
56
69
|
// though the milestone's actual code lives in the worktree.
|
|
57
70
|
const dispatchBase = resolveCanonicalMilestoneRoot(base, mid);
|
|
58
71
|
|
|
59
|
-
const normalized = phase
|
|
72
|
+
const normalized = parsed.phase;
|
|
60
73
|
let unitType: string;
|
|
61
74
|
let unitId: string;
|
|
62
75
|
let prompt: string;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* without modifying orchestration code.
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import type { GSDState } from "./types.js";
|
|
15
|
+
import type { GSDState, TaskIO } from "./types.js";
|
|
16
16
|
import type { GSDPreferences } from "./preferences.js";
|
|
17
17
|
import type { MinimalModelRegistry } from "./context-budget.js";
|
|
18
18
|
import { loadFile, extractUatType, loadActiveOverrides } from "./files.js";
|
|
@@ -179,6 +179,26 @@ type ResearchProjectPromptBuilder = typeof buildResearchProjectPrompt;
|
|
|
179
179
|
let reassessmentChecker: ReassessmentChecker = checkNeedsReassessment;
|
|
180
180
|
let researchProjectPromptBuilder: ResearchProjectPromptBuilder = buildResearchProjectPrompt;
|
|
181
181
|
|
|
182
|
+
/**
|
|
183
|
+
* Optional override for the reactive graph derivation step inside the
|
|
184
|
+
* "executing → reactive-execute" rule. Production leaves this null so the rule
|
|
185
|
+
* uses the real loadSliceTaskIO + deriveTaskGraph; tests inject a throwing
|
|
186
|
+
* function to deterministically exercise the best-effort failure path
|
|
187
|
+
* (auto-dispatch.ts:1494). The catch is otherwise unreachable because every
|
|
188
|
+
* operation it wraps (loadSliceTaskIO, deriveTaskGraph, saveReactiveState) is
|
|
189
|
+
* internally defensive.
|
|
190
|
+
* @internal
|
|
191
|
+
*/
|
|
192
|
+
let _reactiveGraphDeriveFn: ((basePath: string, mid: string, sid: string) => Promise<TaskIO[]>) | null = null;
|
|
193
|
+
|
|
194
|
+
export function setReactiveGraphDeriveFnForTest(
|
|
195
|
+
fn: ((basePath: string, mid: string, sid: string) => Promise<TaskIO[]>) | null,
|
|
196
|
+
): () => void {
|
|
197
|
+
const previous = _reactiveGraphDeriveFn;
|
|
198
|
+
_reactiveGraphDeriveFn = fn;
|
|
199
|
+
return () => { _reactiveGraphDeriveFn = previous; };
|
|
200
|
+
}
|
|
201
|
+
|
|
182
202
|
function shouldBypassMilestoneDepthGateInAuto(prefs: GSDPreferences | undefined): boolean {
|
|
183
203
|
return isAutoActive() && prefs?.planning_depth !== "deep";
|
|
184
204
|
}
|
|
@@ -1421,7 +1441,9 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1421
1441
|
graphMetrics,
|
|
1422
1442
|
} = await import("./reactive-graph.js");
|
|
1423
1443
|
|
|
1424
|
-
const taskIO =
|
|
1444
|
+
const taskIO = _reactiveGraphDeriveFn
|
|
1445
|
+
? await _reactiveGraphDeriveFn(basePath, mid, sid)
|
|
1446
|
+
: await loadSliceTaskIO(basePath, mid, sid);
|
|
1425
1447
|
if (taskIO.length < 2) return null; // single task, no point
|
|
1426
1448
|
|
|
1427
1449
|
const graph = deriveTaskGraph(taskIO);
|
|
@@ -17,6 +17,7 @@ import { unitPhaseLabel } from "./auto-dashboard.js";
|
|
|
17
17
|
import { getSessionModelOverride } from "./session-model-override.js";
|
|
18
18
|
import { logWarning } from "./workflow-logger.js";
|
|
19
19
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
20
|
+
import { modelIdsForProfileResolution, resolveProfileAnchorProvider, resolveDisabledModelProvidersFromPreferences } from "./preferences.js";
|
|
20
21
|
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
21
22
|
import { isModelBlocked, isModelTemporarilyUnavailable } from "./blocked-models.js";
|
|
22
23
|
import { getRequiredWorkflowToolsForAutoUnit, isWorkflowMcpSurfaceTool } from "./workflow-mcp.js";
|
|
@@ -404,8 +405,10 @@ export function resolvePreferredModelConfig(
|
|
|
404
405
|
unitType: string,
|
|
405
406
|
autoModeStartModel: { provider: string; id: string; flatRateCtx?: FlatRateContext } | null,
|
|
406
407
|
isAutoMode = true,
|
|
408
|
+
basePath?: string,
|
|
409
|
+
availableModelIds?: string[],
|
|
407
410
|
): PreferredModelConfig | undefined {
|
|
408
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
411
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds);
|
|
409
412
|
if (explicitConfig) {
|
|
410
413
|
return {
|
|
411
414
|
...explicitConfig,
|
|
@@ -475,8 +478,14 @@ export async function selectAndApplyModel(
|
|
|
475
478
|
// With no explicit level, fall back to the auto-start session level and raise
|
|
476
479
|
// the code-writing floor — preserving prior behavior exactly. Recomputed per
|
|
477
480
|
// dispatch so neither the floor nor a phase override leaks to other units.
|
|
481
|
+
const anchorProvider = resolveProfileAnchorProvider(ctx.model?.provider, autoModeStartModel?.provider);
|
|
482
|
+
const profileResolutionIds = modelIdsForProfileResolution(
|
|
483
|
+
ctx.modelRegistry,
|
|
484
|
+
anchorProvider,
|
|
485
|
+
resolveDisabledModelProvidersFromPreferences(),
|
|
486
|
+
);
|
|
478
487
|
const explicitThinkingLevel =
|
|
479
|
-
resolveThinkingLevelForUnit(unitType) as ReturnType<ExtensionAPI["getThinkingLevel"]> | undefined;
|
|
488
|
+
resolveThinkingLevelForUnit(unitType, basePath, profileResolutionIds) as ReturnType<ExtensionAPI["getThinkingLevel"]> | undefined;
|
|
480
489
|
const desiredThinkingLevel = explicitThinkingLevel
|
|
481
490
|
?? floorThinkingLevelForUnit(unitType, autoModeStartThinkingLevel);
|
|
482
491
|
if (explicitThinkingLevel) {
|
|
@@ -520,7 +529,13 @@ export async function selectAndApplyModel(
|
|
|
520
529
|
}
|
|
521
530
|
const modelConfig = effectiveSessionModelOverride
|
|
522
531
|
? undefined
|
|
523
|
-
: resolvePreferredModelConfig(
|
|
532
|
+
: resolvePreferredModelConfig(
|
|
533
|
+
unitType,
|
|
534
|
+
autoModeStartModel,
|
|
535
|
+
isAutoMode,
|
|
536
|
+
basePath,
|
|
537
|
+
profileResolutionIds,
|
|
538
|
+
);
|
|
524
539
|
let routing: { tier: string; modelDowngraded: boolean } | null = null;
|
|
525
540
|
let appliedModel: Model<Api> | null = null;
|
|
526
541
|
|
|
@@ -1068,16 +1083,16 @@ export function resolveModelId<T extends { id: string; provider: string }>(
|
|
|
1068
1083
|
*
|
|
1069
1084
|
* Order rationale:
|
|
1070
1085
|
* - openai-codex before github-copilot: ChatGPT-native for shared GPT IDs
|
|
1071
|
-
* - google-
|
|
1086
|
+
* - google-antigravity before google-gemini-cli: Antigravity replaced Gemini CLI for individuals
|
|
1072
1087
|
* - anthropic before github-copilot: first-party Claude API/OAuth over Copilot
|
|
1073
1088
|
* - github-copilot before openai/google: Copilot OAuth over platform API keys
|
|
1074
1089
|
*/
|
|
1075
1090
|
export const BARE_ID_SUBSCRIPTION_PROVIDER_PRECEDENCE = [
|
|
1076
1091
|
"openai-codex",
|
|
1092
|
+
"google-antigravity",
|
|
1077
1093
|
"google-gemini-cli",
|
|
1078
1094
|
"anthropic",
|
|
1079
1095
|
"github-copilot",
|
|
1080
|
-
"google-antigravity",
|
|
1081
1096
|
] as const;
|
|
1082
1097
|
|
|
1083
1098
|
/**
|
|
@@ -2100,9 +2100,6 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2100
2100
|
return "dispatched";
|
|
2101
2101
|
}
|
|
2102
2102
|
if (getUnitCostSpikeAction(unitCostUsd, rollingAvgUsd, resolveUnitCostSpikeMultiplier(prefs)) === "pause") {
|
|
2103
|
-
s.pendingVerificationRetry = null;
|
|
2104
|
-
s.verificationRetryCount.delete(retryKey);
|
|
2105
|
-
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2106
2103
|
const advancedPastUnit = await hasArtifactCostGuardAdvancedPastUnit(
|
|
2107
2104
|
s,
|
|
2108
2105
|
ctx,
|
|
@@ -2111,6 +2108,9 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2111
2108
|
prefs,
|
|
2112
2109
|
);
|
|
2113
2110
|
if (advancedPastUnit) {
|
|
2111
|
+
s.pendingVerificationRetry = null;
|
|
2112
|
+
s.verificationRetryCount.delete(retryKey);
|
|
2113
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2114
2114
|
debugLog("postUnit", {
|
|
2115
2115
|
phase: "artifact-cost-spike-continue-after-advance",
|
|
2116
2116
|
unitType: s.currentUnit.type,
|
|
@@ -2131,14 +2131,21 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2131
2131
|
unitCostUsd,
|
|
2132
2132
|
rollingAvgUsd,
|
|
2133
2133
|
);
|
|
2134
|
+
if (parallelBlocker) {
|
|
2135
|
+
s.pendingVerificationRetry = null;
|
|
2136
|
+
s.verificationRetryCount.delete(retryKey);
|
|
2137
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
2138
|
+
ctx.ui.notify(
|
|
2139
|
+
`Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — wrote parallel blocker and pausing auto-mode.`,
|
|
2140
|
+
"error",
|
|
2141
|
+
);
|
|
2142
|
+
await pauseAuto(ctx, pi);
|
|
2143
|
+
return "dispatched";
|
|
2144
|
+
}
|
|
2134
2145
|
ctx.ui.notify(
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
: `Unit ${s.currentUnit.id} cost spike detected (${unitCostUsd.toFixed(2)} vs avg ${rollingAvgUsd.toFixed(2)}) — pausing auto-mode.`,
|
|
2138
|
-
"error",
|
|
2146
|
+
`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.`,
|
|
2147
|
+
"warning",
|
|
2139
2148
|
);
|
|
2140
|
-
await pauseAuto(ctx, pi);
|
|
2141
|
-
return "dispatched";
|
|
2142
2149
|
}
|
|
2143
2150
|
const attempt = (s.verificationRetryCount.get(retryKey) ?? 0) + 1;
|
|
2144
2151
|
const failureDetails = describeArtifactVerificationFailure(
|
|
@@ -3891,7 +3891,11 @@ export async function buildReactiveExecutePrompt(
|
|
|
3891
3891
|
const taskPrompt = [
|
|
3892
3892
|
`## UNIT: Execute Task ${tid} ("${tTitle}")`,
|
|
3893
3893
|
"",
|
|
3894
|
-
"
|
|
3894
|
+
"## Working Directory",
|
|
3895
|
+
"",
|
|
3896
|
+
`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.`,
|
|
3897
|
+
`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.`,
|
|
3898
|
+
"",
|
|
3895
3899
|
"Implement from the inlined task plan below. Verify changes, then call `gsd_task_complete`.",
|
|
3896
3900
|
"Do not run git commands.",
|
|
3897
3901
|
"",
|
|
@@ -83,6 +83,53 @@ export {
|
|
|
83
83
|
} from "./milestone-summary-classifier.js";
|
|
84
84
|
export { hasImplementationArtifacts } from "./milestone-implementation-evidence.js";
|
|
85
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Optional override for the legacy roadmap parser used by verifyExpectedArtifact.
|
|
88
|
+
* Production leaves this null so the real parseLegacyRoadmap runs; tests inject
|
|
89
|
+
* a throwing function to deterministically exercise the parse-failure catches
|
|
90
|
+
* (auto-recovery.ts:515 plan-milestone and :622 complete-slice). Those catches
|
|
91
|
+
* are otherwise unreachable because parseLegacyRoadmap is internally defensive
|
|
92
|
+
* against every malformed input.
|
|
93
|
+
* @internal
|
|
94
|
+
*/
|
|
95
|
+
let _roadmapParserFn: ((content: string) => { slices: Array<{ id: string; done: boolean; depends?: string[] }> }) | null = null;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Inject an override for the legacy roadmap parser, returning a function that
|
|
99
|
+
* restores the default (real parser) behavior. No production caller.
|
|
100
|
+
* @internal
|
|
101
|
+
*/
|
|
102
|
+
export function _setRoadmapParserFnForTests(
|
|
103
|
+
fn: ((content: string) => { slices: Array<{ id: string; done: boolean; depends?: string[] }> }) | null,
|
|
104
|
+
): () => void {
|
|
105
|
+
const previous = _roadmapParserFn;
|
|
106
|
+
_roadmapParserFn = fn;
|
|
107
|
+
return () => { _roadmapParserFn = previous; };
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function parseRoadmapForRecovery(content: string): ReturnType<NonNullable<typeof _roadmapParserFn>> {
|
|
111
|
+
if (_roadmapParserFn) return _roadmapParserFn(content);
|
|
112
|
+
return parseLegacyRoadmap(content) as unknown as ReturnType<NonNullable<typeof _roadmapParserFn>>;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Optional override for the detached GitHub milestone finalize invoked after DB
|
|
117
|
+
* closeout in refreshRecoveryDbForArtifact. Production leaves this null so the
|
|
118
|
+
* real finalizeMilestoneGitHubSync runs; tests inject a throwing function to
|
|
119
|
+
* deterministically exercise the best-effort catch (auto-recovery.ts:232),
|
|
120
|
+
* which otherwise needs a real GitHub remote + network failure.
|
|
121
|
+
* @internal
|
|
122
|
+
*/
|
|
123
|
+
let _githubFinalizeFn: ((basePath: string, mid: string) => void | Promise<void>) | null = null;
|
|
124
|
+
|
|
125
|
+
export function _setGithubFinalizeFnForTests(
|
|
126
|
+
fn: ((basePath: string, mid: string) => void | Promise<void>) | null,
|
|
127
|
+
): () => void {
|
|
128
|
+
const previous = _githubFinalizeFn;
|
|
129
|
+
_githubFinalizeFn = fn;
|
|
130
|
+
return () => { _githubFinalizeFn = previous; };
|
|
131
|
+
}
|
|
132
|
+
|
|
86
133
|
// ─── Artifact Resolution & Verification ───────────────────────────────────────
|
|
87
134
|
|
|
88
135
|
export function diagnoseWorktreeIntegrityFailure(basePath: string): string | null {
|
|
@@ -197,11 +244,18 @@ export function refreshRecoveryDbForArtifact(
|
|
|
197
244
|
}
|
|
198
245
|
|
|
199
246
|
updateMilestoneStatus(mid, "complete", new Date().toISOString());
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
247
|
+
// Detached GitHub sync — best-effort. Test seam: when
|
|
248
|
+
// _githubFinalizeFn is injected, route through it so the catch
|
|
249
|
+
// (:232) is deterministically reachable (otherwise it needs a real
|
|
250
|
+
// GitHub remote + network failure). Production leaves it null. The
|
|
251
|
+
// seam is wrapped so a synchronous throw becomes a rejected promise,
|
|
252
|
+
// matching the real import-then-call deferred semantics.
|
|
253
|
+
const finalizePromise = _githubFinalizeFn
|
|
254
|
+
? new Promise<void>((resolve) => { resolve(_githubFinalizeFn!(basePath, mid)); })
|
|
255
|
+
: import("../github-sync/sync.js").then(({ finalizeMilestoneGitHubSync }) => finalizeMilestoneGitHubSync(basePath, mid));
|
|
256
|
+
void finalizePromise.catch((err) => {
|
|
257
|
+
logWarning("recovery", `GitHub milestone finalize failed after DB closeout: ${getErrorMessage(err)}`);
|
|
258
|
+
});
|
|
205
259
|
return { ok: true };
|
|
206
260
|
}
|
|
207
261
|
|
|
@@ -446,7 +500,7 @@ export function verifyExpectedArtifact(
|
|
|
446
500
|
return false;
|
|
447
501
|
}
|
|
448
502
|
try {
|
|
449
|
-
const roadmap =
|
|
503
|
+
const roadmap = parseRoadmapForRecovery(readFileSync(roadmapFile, "utf-8"));
|
|
450
504
|
const milestoneResearchFile = resolveExpectedArtifactPath("research-milestone", mid, base);
|
|
451
505
|
const hasMilestoneResearch = !!milestoneResearchFile && existsSync(milestoneResearchFile);
|
|
452
506
|
for (const slice of roadmap.slices) {
|
|
@@ -506,7 +560,7 @@ export function verifyExpectedArtifact(
|
|
|
506
560
|
|
|
507
561
|
if (unitType === "plan-milestone") {
|
|
508
562
|
try {
|
|
509
|
-
const roadmap =
|
|
563
|
+
const roadmap = parseRoadmapForRecovery(readFileSync(absPath, "utf-8"));
|
|
510
564
|
if (roadmap.slices.length === 0) {
|
|
511
565
|
logWarning("recovery", `verify-fail ${unitType} ${unitId}: roadmap has zero slices at ${absPath}`);
|
|
512
566
|
return false;
|
|
@@ -615,7 +669,7 @@ export function verifyExpectedArtifact(
|
|
|
615
669
|
if (roadmapFile && existsSync(roadmapFile)) {
|
|
616
670
|
try {
|
|
617
671
|
const roadmapContent = readFileSync(roadmapFile, "utf-8");
|
|
618
|
-
const roadmap =
|
|
672
|
+
const roadmap = parseRoadmapForRecovery(roadmapContent);
|
|
619
673
|
const slice = roadmap.slices.find((s) => s.id === sid);
|
|
620
674
|
if (slice && !slice.done) return false;
|
|
621
675
|
} catch (e) {
|
|
@@ -21,6 +21,10 @@ import { loadFile, getManifestStatus } from "./files.js";
|
|
|
21
21
|
import type { InterruptedSessionAssessment } from "./interrupted-session.js";
|
|
22
22
|
import {
|
|
23
23
|
loadEffectiveGSDPreferences,
|
|
24
|
+
loadEffectiveGSDPreferencesWithRegistry,
|
|
25
|
+
modelIdsForProfileResolution,
|
|
26
|
+
resolveProfileAnchorProvider,
|
|
27
|
+
resolveDisabledModelProvidersFromPreferences,
|
|
24
28
|
resolveSkillDiscoveryMode,
|
|
25
29
|
getIsolationMode,
|
|
26
30
|
} from "./preferences.js";
|
|
@@ -1012,9 +1016,14 @@ export async function bootstrapAutoSession(
|
|
|
1012
1016
|
// run /login" before pausing and resetting to claude-code/claude-sonnet-4-6.
|
|
1013
1017
|
const manualSessionOverride = getSessionModelOverride(ctx.sessionManager.getSessionId());
|
|
1014
1018
|
const sessionProviderIsCustom = isCustomProvider(ctx.model?.provider);
|
|
1019
|
+
const profileModelIds = modelIdsForProfileResolution(
|
|
1020
|
+
ctx.modelRegistry,
|
|
1021
|
+
resolveProfileAnchorProvider(ctx.model?.provider),
|
|
1022
|
+
resolveDisabledModelProvidersFromPreferences(),
|
|
1023
|
+
);
|
|
1015
1024
|
const preferredModel = sessionProviderIsCustom
|
|
1016
1025
|
? null
|
|
1017
|
-
: resolveDefaultSessionModel(ctx.model?.provider, base);
|
|
1026
|
+
: resolveDefaultSessionModel(ctx.model?.provider, base, profileModelIds);
|
|
1018
1027
|
// Validate the preferred model against the live registry + provider auth so
|
|
1019
1028
|
// an unconfigured PREFERENCES.md entry (no API key / OAuth) can't become the
|
|
1020
1029
|
// start-model snapshot. Without this, every subsequent unit would try to
|
|
@@ -1271,11 +1280,29 @@ export async function bootstrapAutoSession(
|
|
|
1271
1280
|
}
|
|
1272
1281
|
}
|
|
1273
1282
|
|
|
1274
|
-
const
|
|
1275
|
-
|
|
1283
|
+
const requestedMilestoneLock = process.env.GSD_MILESTONE_LOCK?.trim() || null;
|
|
1284
|
+
const lockedActiveMilestone =
|
|
1285
|
+
requestedMilestoneLock && state.activeMilestone?.id === requestedMilestoneLock;
|
|
1286
|
+
let blockingStrandedRecoveryAction: OrphanAuditAction | null;
|
|
1287
|
+
if (lockedActiveMilestone) {
|
|
1288
|
+
// Parallel worker or explicit `/gsd auto Mxxx`: sibling milestones'
|
|
1289
|
+
// stranded work must not block this milestone's resumption, and the
|
|
1290
|
+
// downstream `strandedRecoveryAction` (used for currentMilestoneId,
|
|
1291
|
+
// setActiveMilestoneId, and adoptStrandedMilestone) must be scoped to
|
|
1292
|
+
// the locked milestone only. Falling back to the first sibling action
|
|
1293
|
+
// would mis-target adoption (#742).
|
|
1294
|
+
const lockMatch = strandedRecoveryActions.find(
|
|
1295
|
+
(action) => action.milestoneId === requestedMilestoneLock,
|
|
1296
|
+
) ?? null;
|
|
1297
|
+
blockingStrandedRecoveryAction = lockMatch;
|
|
1298
|
+
strandedRecoveryAction = lockMatch;
|
|
1299
|
+
} else if (state.activeMilestone) {
|
|
1300
|
+
blockingStrandedRecoveryAction = strandedRecoveryActions.find(
|
|
1276
1301
|
(action) => action.milestoneId !== state.activeMilestone?.id,
|
|
1277
|
-
) ?? strandedRecoveryAction
|
|
1278
|
-
|
|
1302
|
+
) ?? strandedRecoveryAction;
|
|
1303
|
+
} else {
|
|
1304
|
+
blockingStrandedRecoveryAction = strandedRecoveryAction;
|
|
1305
|
+
}
|
|
1279
1306
|
|
|
1280
1307
|
if (blockingStrandedRecoveryAction) {
|
|
1281
1308
|
if (!state.activeMilestone) {
|
|
@@ -1297,6 +1324,8 @@ export async function bootstrapAutoSession(
|
|
|
1297
1324
|
formatStrandedWorkRecoveryMessage(strandedRecoveryAction),
|
|
1298
1325
|
"info",
|
|
1299
1326
|
);
|
|
1327
|
+
} else if (lockedActiveMilestone) {
|
|
1328
|
+
strandedRecoveryAction = null;
|
|
1300
1329
|
}
|
|
1301
1330
|
|
|
1302
1331
|
if (
|
|
@@ -1436,7 +1465,11 @@ export async function bootstrapAutoSession(
|
|
|
1436
1465
|
}
|
|
1437
1466
|
}
|
|
1438
1467
|
|
|
1439
|
-
const effectivePrefs =
|
|
1468
|
+
const effectivePrefs = loadEffectiveGSDPreferencesWithRegistry(
|
|
1469
|
+
ctx.modelRegistry,
|
|
1470
|
+
base,
|
|
1471
|
+
resolveProfileAnchorProvider(ctx.model?.provider, startModelSnapshot?.provider),
|
|
1472
|
+
)?.preferences;
|
|
1440
1473
|
const { shouldRunDeepProjectSetup } = await import("./auto-dispatch.js");
|
|
1441
1474
|
const deepProjectStagePending = shouldRunDeepProjectSetup(
|
|
1442
1475
|
state,
|
|
@@ -1788,7 +1821,11 @@ export async function bootstrapAutoSession(
|
|
|
1788
1821
|
// FlatRateContext used by selectAndApplyModel so user-declared
|
|
1789
1822
|
// flat-rate providers and externalCli auto-detection are respected.
|
|
1790
1823
|
const { isFlatRateProvider, buildFlatRateContext } = await import("./auto-model-selection.js");
|
|
1791
|
-
const bannerPrefs =
|
|
1824
|
+
const bannerPrefs = loadEffectiveGSDPreferencesWithRegistry(
|
|
1825
|
+
ctx.modelRegistry,
|
|
1826
|
+
base,
|
|
1827
|
+
resolveProfileAnchorProvider(ctx.model?.provider, s.autoModeStartModel?.provider),
|
|
1828
|
+
)?.preferences;
|
|
1792
1829
|
const effectiveProvider = s.autoModeStartModel?.provider ?? ctx.model?.provider;
|
|
1793
1830
|
const effectivelyEnabled = routingConfig.enabled
|
|
1794
1831
|
&& (routingConfig.allow_flat_rate_providers
|
|
@@ -242,6 +242,17 @@ function stripGsdDisplayPrefix(value: string | undefined | null, id: string): st
|
|
|
242
242
|
/** Active workspace registry — replaces the legacy `originalBase` singleton. */
|
|
243
243
|
let activeWorkspace: GsdWorkspace | null = null;
|
|
244
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Optional override for the shelter restore copy step (milestone merge #2505).
|
|
247
|
+
* Production leaves this null so restoreShelter uses the real cpSync; tests
|
|
248
|
+
* inject a throwing function to deterministically exercise the best-effort
|
|
249
|
+
* failure path (auto-worktree.ts:1809) and the shelter-retention guarantee,
|
|
250
|
+
* which is otherwise unreachable because shelter and restore run synchronously
|
|
251
|
+
* in one mergeMilestoneToMain call (the filesystem cannot change between them).
|
|
252
|
+
* @internal
|
|
253
|
+
*/
|
|
254
|
+
let _restoreEntryFn: ((src: string, dest: string) => void) | null = null;
|
|
255
|
+
|
|
245
256
|
function setActiveWorkspace(ws: GsdWorkspace | null): void {
|
|
246
257
|
activeWorkspace = ws;
|
|
247
258
|
}
|
|
@@ -972,6 +983,14 @@ function _resolveIntegrationBranchForReuse(
|
|
|
972
983
|
}
|
|
973
984
|
}
|
|
974
985
|
|
|
986
|
+
function safeCwd(fallback: string): string {
|
|
987
|
+
try {
|
|
988
|
+
return process.cwd();
|
|
989
|
+
} catch {
|
|
990
|
+
return fallback;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
975
994
|
/**
|
|
976
995
|
* When reusing an existing milestone branch, fast-forward it onto the
|
|
977
996
|
* integration branch when that's safe (branch is a strict ancestor of
|
|
@@ -1155,7 +1174,7 @@ export function teardownAutoWorktree(
|
|
|
1155
1174
|
|
|
1156
1175
|
const branch = autoWorktreeBranch(milestoneId);
|
|
1157
1176
|
const { preserveBranch = false, preserveWorktree = false } = opts;
|
|
1158
|
-
const previousCwd =
|
|
1177
|
+
const previousCwd = safeCwd(originalBasePath);
|
|
1159
1178
|
|
|
1160
1179
|
// Wrap the entire teardown body in a single try/finally so activeWorkspace
|
|
1161
1180
|
// is ALWAYS cleared — even if process.chdir throws (e.g. originalBasePath
|
|
@@ -1250,7 +1269,7 @@ export function teardownAutoWorktree(
|
|
|
1250
1269
|
* still works after process restart when module state has been reset.
|
|
1251
1270
|
*/
|
|
1252
1271
|
export function isInAutoWorktree(basePath: string): boolean {
|
|
1253
|
-
const targetPath = isGsdWorktreePath(basePath) ? basePath :
|
|
1272
|
+
const targetPath = isGsdWorktreePath(basePath) ? basePath : safeCwd("");
|
|
1254
1273
|
if (!isGsdWorktreePath(targetPath)) return false;
|
|
1255
1274
|
|
|
1256
1275
|
const storedBase = getAutoWorktreeOriginalBase();
|
|
@@ -1386,6 +1405,22 @@ export function _resetAutoWorktreeOriginalBaseForTests(): void {
|
|
|
1386
1405
|
setActiveWorkspace(null);
|
|
1387
1406
|
}
|
|
1388
1407
|
|
|
1408
|
+
/**
|
|
1409
|
+
* Inject an override for the shelter restore copy step, returning a function
|
|
1410
|
+
* that restores the default (real cpSync) behavior. Used by tests to
|
|
1411
|
+
* deterministically exercise the best-effort restore-failure path
|
|
1412
|
+
* (auto-worktree.ts:1809) and the #2505 shelter-retention guarantee — which is
|
|
1413
|
+
* otherwise unreachable because shelter + restore run synchronously in one
|
|
1414
|
+
* mergeMilestoneToMain call. No production caller.
|
|
1415
|
+
* @internal
|
|
1416
|
+
*/
|
|
1417
|
+
export function _setRestoreEntryFnForTests(
|
|
1418
|
+
fn: ((src: string, dest: string) => void) | null,
|
|
1419
|
+
): () => void {
|
|
1420
|
+
_restoreEntryFn = fn;
|
|
1421
|
+
return () => { _restoreEntryFn = null; };
|
|
1422
|
+
}
|
|
1423
|
+
|
|
1389
1424
|
export function getActiveAutoWorktreeContext(): {
|
|
1390
1425
|
originalBase: string;
|
|
1391
1426
|
worktreeName: string;
|
|
@@ -1795,7 +1830,15 @@ export function mergeMilestoneToMain(
|
|
|
1795
1830
|
}
|
|
1796
1831
|
try {
|
|
1797
1832
|
mkdirSync(milestonesDir, { recursive: true });
|
|
1798
|
-
|
|
1833
|
+
// Test seam: when _restoreEntryFn is injected, route the copy through it
|
|
1834
|
+
// so the best-effort failure path (and shelter-retention guarantee) can
|
|
1835
|
+
// be exercised deterministically. Production leaves it null → real cpSync.
|
|
1836
|
+
const dest = join(milestonesDir, dirName);
|
|
1837
|
+
if (_restoreEntryFn) {
|
|
1838
|
+
_restoreEntryFn(src, dest);
|
|
1839
|
+
} else {
|
|
1840
|
+
cpSync(src, dest, { recursive: true, force: true });
|
|
1841
|
+
}
|
|
1799
1842
|
} catch (err) { /* best-effort */
|
|
1800
1843
|
restoreFailed = true;
|
|
1801
1844
|
logError("worktree", `shelter restore failed (${dirName}): ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -2229,6 +2272,11 @@ export function mergeMilestoneToMain(
|
|
|
2229
2272
|
process.chdir(originalBasePath_);
|
|
2230
2273
|
} catch (err) {
|
|
2231
2274
|
logWarning("worktree", `chdir to project root after merge failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2275
|
+
debugLog("mergeMilestoneToMain", {
|
|
2276
|
+
phase: "post-merge-chdir-failed",
|
|
2277
|
+
target: originalBasePath_,
|
|
2278
|
+
error: err instanceof Error ? err.message : String(err),
|
|
2279
|
+
});
|
|
2232
2280
|
}
|
|
2233
2281
|
};
|
|
2234
2282
|
|