gsd-pi 2.80.0-dev.8b3a59f5c → 2.80.0-dev.a947d025c
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/README.md +35 -59
- package/dist/claude-cli-check.d.ts +30 -0
- package/dist/claude-cli-check.js +18 -7
- package/dist/cli.js +0 -19
- package/dist/headless-query.d.ts +10 -0
- package/dist/headless-query.js +6 -4
- package/dist/loader-entrypoint.d.ts +8 -0
- package/dist/loader-entrypoint.js +27 -0
- package/dist/loader.js +2 -11
- package/dist/mcp-server.d.ts +1 -0
- package/dist/mcp-server.js +6 -3
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +2 -2
- package/dist/resources/extensions/claude-code-cli/readiness.js +18 -7
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +40 -3
- package/dist/resources/extensions/github-sync/sync.js +4 -1
- package/dist/resources/extensions/gsd/auto/contracts.js +2 -0
- package/dist/resources/extensions/gsd/auto/loop.js +103 -9
- package/dist/resources/extensions/gsd/auto/orchestrator.js +48 -4
- package/dist/resources/extensions/gsd/auto/phases.js +311 -154
- package/dist/resources/extensions/gsd/auto/resolve.js +29 -0
- package/dist/resources/extensions/gsd/auto/run-unit.js +22 -30
- package/dist/resources/extensions/gsd/auto/session.js +9 -1
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -0
- package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +33 -1
- package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +9 -1
- package/dist/resources/extensions/gsd/auto-dashboard.js +18 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +5 -32
- package/dist/resources/extensions/gsd/auto-dispatch.js +26 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +122 -88
- package/dist/resources/extensions/gsd/auto-prompts.js +214 -17
- package/dist/resources/extensions/gsd/auto-recovery.js +43 -1
- package/dist/resources/extensions/gsd/auto-start.js +254 -17
- package/dist/resources/extensions/gsd/auto-supervisor.js +8 -1
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +229 -336
- package/dist/resources/extensions/gsd/auto.js +273 -87
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +122 -11
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +44 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +37 -10
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +30 -20
- package/dist/resources/extensions/gsd/bootstrap/journal-tools.js +4 -1
- package/dist/resources/extensions/gsd/bootstrap/memory-tools.js +6 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +330 -54
- package/dist/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.js +4 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +82 -23
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +19 -2
- package/dist/resources/extensions/gsd/clean-root-preflight.js +65 -9
- package/dist/resources/extensions/gsd/commands/dispatcher.js +5 -0
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +2 -2
- package/dist/resources/extensions/gsd/commands-config.js +1 -1
- package/dist/resources/extensions/gsd/commands-eval-review.js +2 -2
- package/dist/resources/extensions/gsd/commands-handlers.js +23 -9
- package/dist/resources/extensions/gsd/context-budget.js +37 -2
- package/dist/resources/extensions/gsd/crash-recovery.js +56 -10
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +92 -0
- package/dist/resources/extensions/gsd/db-base-schema.js +4 -2
- package/dist/resources/extensions/gsd/db-migration-steps.js +6 -0
- package/dist/resources/extensions/gsd/detection.js +106 -0
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +2 -0
- package/dist/resources/extensions/gsd/git-service.js +73 -5
- package/dist/resources/extensions/gsd/gsd-db.js +46 -13
- package/dist/resources/extensions/gsd/guided-flow.js +149 -48
- package/dist/resources/extensions/gsd/health-widget.js +3 -0
- package/dist/resources/extensions/gsd/init-wizard.js +4 -1
- package/dist/resources/extensions/gsd/memory-store.js +69 -12
- package/dist/resources/extensions/gsd/migrate/command.js +40 -1
- package/dist/resources/extensions/gsd/migration-auto-check.js +87 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +32 -8
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +101 -0
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +13 -3
- package/dist/resources/extensions/gsd/planning-path-scope.js +26 -0
- package/dist/resources/extensions/gsd/pre-execution-checks.js +22 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +28 -2
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/dist/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/dist/resources/extensions/gsd/quick.js +34 -2
- package/dist/resources/extensions/gsd/recovery-classification.js +94 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +10 -2
- package/dist/resources/extensions/gsd/slice-cadence.js +45 -2
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +15 -9
- package/dist/resources/extensions/gsd/state-reconciliation.js +27 -0
- package/dist/resources/extensions/gsd/tool-contract.js +50 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -7
- package/dist/resources/extensions/gsd/tools/complete-task.js +1 -1
- package/dist/resources/extensions/gsd/tools/context-mode-tool-result.js +15 -0
- package/dist/resources/extensions/gsd/tools/exec-search-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/exec-tool.js +3 -15
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -0
- package/dist/resources/extensions/gsd/tools/plan-slice.js +9 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +9 -0
- package/dist/resources/extensions/gsd/tools/resume-tool.js +5 -0
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +1 -1
- package/dist/resources/extensions/gsd/unit-context-composer.js +12 -3
- package/dist/resources/extensions/gsd/unit-runtime.js +22 -0
- package/dist/resources/extensions/gsd/workflow-protocol.js +131 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +958 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +16 -14
- package/dist/resources/extensions/gsd/worktree-safety.js +119 -0
- package/dist/resources/extensions/gsd/worktree-state-projection.js +317 -0
- package/dist/resources/skills/web-quality-audit/scripts/analyze.sh +0 -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 +16 -16
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
- package/dist/web/standalone/.next/required-server-files.json +1 -1
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
- 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/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +16 -16
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +3 -3
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-fab3ebb85b006001.js → page-752f1e2ebdaa3e45.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-0481f1221120a7c6.js → webpack-de742b64187e13fe.js} +1 -1
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.d.ts +2 -0
- package/dist/welcome-screen.js +9 -7
- package/package.json +6 -4
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +22 -17
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +75 -2
- package/packages/mcp-server/src/workflow-tools.ts +30 -16
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +4 -1
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/dist/agent.d.ts +9 -2
- package/packages/pi-agent-core/dist/agent.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent.js +43 -11
- package/packages/pi-agent-core/dist/agent.js.map +1 -1
- package/packages/pi-agent-core/dist/index.d.ts +1 -0
- package/packages/pi-agent-core/dist/index.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/index.js +2 -0
- package/packages/pi-agent-core/dist/index.js.map +1 -1
- package/packages/pi-agent-core/dist/token-audit.d.ts +47 -0
- package/packages/pi-agent-core/dist/token-audit.d.ts.map +1 -0
- package/packages/pi-agent-core/dist/token-audit.js +221 -0
- package/packages/pi-agent-core/dist/token-audit.js.map +1 -0
- package/packages/pi-agent-core/dist/types.d.ts +31 -0
- package/packages/pi-agent-core/dist/types.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/types.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +128 -0
- package/packages/pi-agent-core/src/agent-loop.ts +4 -1
- package/packages/pi-agent-core/src/agent.ts +52 -11
- package/packages/pi-agent-core/src/index.ts +2 -0
- package/packages/pi-agent-core/src/token-audit.test.ts +189 -0
- package/packages/pi-agent-core/src/token-audit.ts +287 -0
- package/packages/pi-agent-core/src/types.ts +26 -10
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js +35 -13
- package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js +21 -11
- package/packages/pi-ai/dist/providers/anthropic-bearer-auth.test.js.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.d.ts +7 -0
- package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic.js +9 -7
- package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js +23 -14
- package/packages/pi-ai/dist/providers/minimax-tool-name.test.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +2 -0
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js +48 -21
- package/packages/pi-ai/dist/utils/oauth/github-copilot.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-antigravity.test.js.map +1 -1
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js +22 -21
- package/packages/pi-ai/dist/utils/oauth/google-gemini-cli.test.js.map +1 -1
- package/packages/pi-ai/src/providers/anthropic-auth.test.ts +39 -25
- package/packages/pi-ai/src/providers/anthropic-bearer-auth.test.ts +26 -22
- package/packages/pi-ai/src/providers/anthropic.ts +22 -9
- package/packages/pi-ai/src/providers/minimax-tool-name.test.ts +34 -21
- package/packages/pi-ai/src/types.ts +3 -0
- package/packages/pi-ai/src/utils/oauth/github-copilot.test.ts +56 -22
- package/packages/pi-ai/src/utils/oauth/google-antigravity.test.ts +24 -28
- package/packages/pi-ai/src/utils/oauth/google-gemini-cli.test.ts +24 -28
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +36 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +30 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts +21 -2
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +94 -16
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +35 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +11 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +9 -0
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js +103 -0
- package/packages/pi-coding-agent/dist/core/compaction-threshold.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts +15 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js +66 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js +24 -0
- package/packages/pi-coding-agent/dist/core/db-snapshot.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +8 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/runner.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.js +20 -7
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +102 -3
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +60 -4
- package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js +2 -0
- package/packages/pi-coding-agent/dist/core/hooks-runner.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js +46 -0
- package/packages/pi-coding-agent/dist/core/sdk-tool-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/sdk.d.ts +10 -2
- package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +81 -4
- package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +20 -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 +25 -0
- package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js +22 -0
- package/packages/pi-coding-agent/dist/core/skill-tool.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +6 -7
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +2 -3
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js +22 -56
- package/packages/pi-coding-agent/dist/core/tools/bash-spawn-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/tools/bash.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/bash.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/edit.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js +12 -1
- package/packages/pi-coding-agent/dist/core/tools/edit.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/find.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/find.js +14 -6
- package/packages/pi-coding-agent/dist/core/tools/find.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/grep.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/grep.js +12 -3
- package/packages/pi-coding-agent/dist/core/tools/grep.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts +2 -1
- package/packages/pi-coding-agent/dist/core/tools/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/tools/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/ls.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/ls.js +10 -3
- package/packages/pi-coding-agent/dist/core/tools/ls.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js +3 -1
- package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +7 -62
- package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js +115 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target-metadata.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts +19 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js +20 -0
- package/packages/pi-coding-agent/dist/core/tools/tool-target.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts +4 -0
- package/packages/pi-coding-agent/dist/core/tools/write.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js +9 -1
- package/packages/pi-coding-agent/dist/core/tools/write.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +6 -4
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +114 -22
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +32 -7
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +6 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +177 -19
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +33 -6
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +71 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +25 -3
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js +36 -27
- package/packages/pi-coding-agent/dist/modes/interactive/theme/themes.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +21 -0
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
- package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js +28 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage-safety-guard.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js +3 -2
- package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +40 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +102 -16
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +41 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +18 -0
- package/packages/pi-coding-agent/src/core/compaction-threshold.test.ts +121 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.test.ts +32 -0
- package/packages/pi-coding-agent/src/core/db-snapshot.ts +66 -0
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +10 -0
- package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +113 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +24 -6
- package/packages/pi-coding-agent/src/core/extensions/types.ts +63 -2
- package/packages/pi-coding-agent/src/core/hooks-runner.test.ts +2 -0
- package/packages/pi-coding-agent/src/core/sdk-tool-filter.test.ts +60 -0
- package/packages/pi-coding-agent/src/core/sdk.ts +92 -4
- package/packages/pi-coding-agent/src/core/settings-manager.ts +39 -1
- package/packages/pi-coding-agent/src/core/skill-tool.test.ts +28 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +8 -10
- package/packages/pi-coding-agent/src/core/tools/bash-spawn-windows.test.ts +22 -66
- package/packages/pi-coding-agent/src/core/tools/bash.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/edit.ts +13 -1
- package/packages/pi-coding-agent/src/core/tools/find.ts +15 -6
- package/packages/pi-coding-agent/src/core/tools/grep.ts +13 -3
- package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/index.ts +8 -0
- package/packages/pi-coding-agent/src/core/tools/ls.ts +11 -3
- package/packages/pi-coding-agent/src/core/tools/read.ts +4 -1
- package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +11 -72
- package/packages/pi-coding-agent/src/core/tools/tool-target-metadata.test.ts +127 -0
- package/packages/pi-coding-agent/src/core/tools/tool-target.ts +48 -0
- package/packages/pi-coding-agent/src/core/tools/write.ts +14 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +7 -5
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +144 -22
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +2 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +41 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +208 -19
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +75 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +41 -8
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +27 -3
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +36 -27
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +25 -0
- package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage-safety-guard.test.ts +31 -0
- package/packages/pi-coding-agent/src/resources/extensions/memory/storage.ts +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +18 -8
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/src/tui.ts +20 -8
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/README.md +7 -0
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +36 -27
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/src/resources/GSD-WORKFLOW.md +2 -2
- package/src/resources/extensions/claude-code-cli/readiness.ts +25 -7
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +42 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +67 -0
- package/src/resources/extensions/github-sync/sync.ts +8 -1
- package/src/resources/extensions/github-sync/tests/sync-source.test.ts +6 -18
- package/src/resources/extensions/gsd/auto/contracts.ts +19 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +11 -11
- package/src/resources/extensions/gsd/auto/loop.ts +134 -16
- package/src/resources/extensions/gsd/auto/orchestrator.ts +52 -4
- package/src/resources/extensions/gsd/auto/phases.ts +427 -220
- package/src/resources/extensions/gsd/auto/resolve.ts +42 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +28 -30
- package/src/resources/extensions/gsd/auto/session.ts +9 -1
- package/src/resources/extensions/gsd/auto/types.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +15 -0
- package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +63 -1
- package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +14 -1
- package/src/resources/extensions/gsd/auto-dashboard.ts +20 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +8 -34
- package/src/resources/extensions/gsd/auto-dispatch.ts +33 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +134 -90
- package/src/resources/extensions/gsd/auto-prompts.ts +228 -16
- package/src/resources/extensions/gsd/auto-recovery.ts +54 -0
- package/src/resources/extensions/gsd/auto-start.ts +326 -25
- package/src/resources/extensions/gsd/auto-supervisor.ts +7 -0
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +2 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +259 -360
- package/src/resources/extensions/gsd/auto.ts +336 -89
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +147 -11
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +45 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +36 -10
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +32 -19
- package/src/resources/extensions/gsd/bootstrap/journal-tools.ts +5 -1
- package/src/resources/extensions/gsd/bootstrap/memory-tools.ts +7 -4
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +6 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +379 -54
- package/src/resources/extensions/gsd/bootstrap/sanitize-complete-milestone.ts +4 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +90 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +19 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +72 -9
- package/src/resources/extensions/gsd/commands/dispatcher.ts +6 -0
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +4 -2
- package/src/resources/extensions/gsd/commands-config.ts +1 -1
- package/src/resources/extensions/gsd/commands-eval-review.ts +2 -2
- package/src/resources/extensions/gsd/commands-handlers.ts +34 -15
- package/src/resources/extensions/gsd/context-budget.ts +44 -2
- package/src/resources/extensions/gsd/crash-recovery.ts +67 -10
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +107 -0
- package/src/resources/extensions/gsd/db-base-schema.ts +4 -2
- package/src/resources/extensions/gsd/db-migration-steps.ts +8 -0
- package/src/resources/extensions/gsd/detection.ts +128 -0
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +3 -0
- package/src/resources/extensions/gsd/git-service.ts +87 -10
- package/src/resources/extensions/gsd/gsd-db.ts +50 -13
- package/src/resources/extensions/gsd/guided-flow.ts +175 -55
- package/src/resources/extensions/gsd/health-widget.ts +3 -0
- package/src/resources/extensions/gsd/init-wizard.ts +5 -1
- package/src/resources/extensions/gsd/memory-store.ts +77 -12
- package/src/resources/extensions/gsd/migrate/command.ts +47 -1
- package/src/resources/extensions/gsd/migration-auto-check.ts +129 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +39 -6
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +117 -0
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +13 -3
- package/src/resources/extensions/gsd/planning-path-scope.ts +35 -0
- package/src/resources/extensions/gsd/pre-execution-checks.ts +23 -0
- package/src/resources/extensions/gsd/preferences-types.ts +1 -1
- package/src/resources/extensions/gsd/prompt-loader.ts +27 -2
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +27 -23
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/execute-task.md +4 -2
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +1 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/quick-task.md +1 -5
- package/src/resources/extensions/gsd/prompts/replan-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/validate-milestone.md +2 -2
- package/src/resources/extensions/gsd/quick.ts +37 -2
- package/src/resources/extensions/gsd/recovery-classification.ts +122 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +11 -2
- package/src/resources/extensions/gsd/slice-cadence.ts +49 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +23 -9
- package/src/resources/extensions/gsd/state-reconciliation.ts +57 -0
- package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +59 -89
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +47 -172
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +0 -35
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +35 -9
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +544 -41
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +80 -59
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +119 -2
- package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +3 -47
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +76 -18
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +175 -11
- package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +54 -95
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +67 -26
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +32 -30
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +32 -128
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +20 -30
- package/src/resources/extensions/gsd/tests/auto-start-index-lock.test.ts +17 -29
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/auto-start-time-persistence.test.ts +21 -39
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +15 -24
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +44 -29
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +39 -51
- package/src/resources/extensions/gsd/tests/auto-wrapup-inflight-guard.test.ts +159 -213
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +15 -32
- package/src/resources/extensions/gsd/tests/browser-teardown.test.ts +0 -41
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +97 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +34 -27
- package/src/resources/extensions/gsd/tests/cmux.test.ts +51 -53
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +39 -61
- package/src/resources/extensions/gsd/tests/commands-config.test.ts +26 -19
- package/src/resources/extensions/gsd/tests/compaction-snapshot.test.ts +14 -1
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/complete-task-normalize-lists.test.ts +29 -33
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +45 -108
- package/src/resources/extensions/gsd/tests/context-budget.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/context-store.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/crash-handler-secondary.test.ts +90 -31
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +18 -10
- package/src/resources/extensions/gsd/tests/cwd-fallback-hardening.test.ts +138 -0
- package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +4 -68
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +6 -11
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +14 -65
- package/src/resources/extensions/gsd/tests/detection.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scoping.test.ts +44 -37
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +58 -40
- package/src/resources/extensions/gsd/tests/dispatch-guard-closed-status.test.ts +25 -15
- package/src/resources/extensions/gsd/tests/dispatch-rule-coverage.test.ts +313 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +35 -17
- package/src/resources/extensions/gsd/tests/error-success-mask.test.ts +16 -21
- package/src/resources/extensions/gsd/tests/est-annotation-timeout.test.ts +15 -82
- package/src/resources/extensions/gsd/tests/exec-history.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +219 -0
- package/src/resources/extensions/gsd/tests/finalize-survivor-branch.test.ts +151 -0
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +2 -20
- package/src/resources/extensions/gsd/tests/frontmatter-parse-noise.test.ts +18 -26
- package/src/resources/extensions/gsd/tests/has-pending-deep-stage.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/init-skip-git.test.ts +9 -12
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/integration/commands-eval-review.integration.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/git-locale.test.ts +31 -20
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +60 -202
- package/src/resources/extensions/gsd/tests/isolation-none-branch-guard.test.ts +13 -56
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +248 -10
- package/src/resources/extensions/gsd/tests/journal-query-tool.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/lazy-pi-tui-import.test.ts +44 -6
- package/src/resources/extensions/gsd/tests/memory-decay-factor.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +21 -35
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +37 -7
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +267 -0
- package/src/resources/extensions/gsd/tests/milestone-transition-state-rebuild.test.ts +88 -98
- package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +70 -278
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +34 -2
- package/src/resources/extensions/gsd/tests/needs-remediation-revalidation.test.ts +37 -30
- package/src/resources/extensions/gsd/tests/note-captures-executed.test.ts +32 -28
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +44 -9
- package/src/resources/extensions/gsd/tests/orphan-merge-bootstrap.test.ts +144 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +201 -0
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-fast-forward.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/phantom-ghost-detection.test.ts +24 -37
- package/src/resources/extensions/gsd/tests/phantom-milestone-default-queued.test.ts +9 -24
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +95 -75
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +36 -22
- package/src/resources/extensions/gsd/tests/pre-exec-backtick-strip.test.ts +36 -30
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +45 -5
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +74 -4
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +20 -22
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +130 -32
- package/src/resources/extensions/gsd/tests/project-root-cwd-crash.test.ts +18 -36
- package/src/resources/extensions/gsd/tests/projection-no-plan-overwrite.test.ts +35 -73
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +76 -138
- package/src/resources/extensions/gsd/tests/prompt-duplication-cuts.test.ts +230 -0
- package/src/resources/extensions/gsd/tests/prompt-path-audit.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +70 -106
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +59 -161
- package/src/resources/extensions/gsd/tests/query-tools-db-open.test.ts +33 -29
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +22 -196
- package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +23 -93
- package/src/resources/extensions/gsd/tests/quick-external-gsd.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +50 -79
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +27 -13
- package/src/resources/extensions/gsd/tests/remote-questions.test.ts +151 -251
- package/src/resources/extensions/gsd/tests/resource-loader-import-path.test.ts +41 -29
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +58 -69
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +32 -164
- package/src/resources/extensions/gsd/tests/right-sized-workflow-prompts.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +57 -41
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/schema-v27-v28-sequence.test.ts +156 -0
- package/src/resources/extensions/gsd/tests/select-resumable-milestone.test.ts +96 -0
- package/src/resources/extensions/gsd/tests/session-model-override.test.ts +14 -9
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +222 -0
- package/src/resources/extensions/gsd/tests/show-config-command.test.ts +44 -42
- package/src/resources/extensions/gsd/tests/signal-handlers.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/skip-slice-state-rebuild.test.ts +56 -24
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +51 -11
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +66 -50
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +68 -107
- package/src/resources/extensions/gsd/tests/slice-sequence-insert.test.ts +115 -42
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +21 -59
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +25 -116
- package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +21 -57
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +29 -76
- package/src/resources/extensions/gsd/tests/stale-lockfile-recovery.test.ts +33 -24
- package/src/resources/extensions/gsd/tests/stale-slice-rows.test.ts +39 -30
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +101 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -4
- package/src/resources/extensions/gsd/tests/status-db-open.test.ts +35 -40
- package/src/resources/extensions/gsd/tests/stop-auto-merge-back.test.ts +48 -46
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +14 -102
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +78 -232
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +32 -35
- package/src/resources/extensions/gsd/tests/system-context-memory.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +7 -9
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +84 -309
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +291 -0
- package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +134 -341
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +210 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +136 -4
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +8 -25
- package/src/resources/extensions/gsd/tests/unit-dispatches.test.ts +80 -1
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +37 -0
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -99
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +43 -36
- package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -444
- package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +44 -189
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +2 -57
- package/src/resources/extensions/gsd/tests/workflow-protocol-excerpt.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +21 -44
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +27 -26
- package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +50 -31
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +434 -0
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +20 -18
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +9 -2
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +22 -19
- package/src/resources/extensions/gsd/tests/worktree-project-root-degrade.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +373 -76
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +327 -0
- package/src/resources/extensions/gsd/tests/worktree-state-projection.test.ts +120 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/zero-slice-roadmap-guided.test.ts +19 -13
- package/src/resources/extensions/gsd/tool-contract.ts +82 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +14 -15
- package/src/resources/extensions/gsd/tools/complete-task.ts +1 -1
- package/src/resources/extensions/gsd/tools/context-mode-tool-result.ts +25 -0
- package/src/resources/extensions/gsd/tools/exec-search-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/exec-tool.ts +4 -23
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -0
- package/src/resources/extensions/gsd/tools/plan-slice.ts +13 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +10 -0
- package/src/resources/extensions/gsd/tools/resume-tool.ts +7 -7
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +19 -4
- package/src/resources/extensions/gsd/unit-runtime.ts +25 -0
- package/src/resources/extensions/gsd/workflow-protocol.ts +160 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1255 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +15 -4
- package/src/resources/extensions/gsd/worktree-safety.ts +282 -0
- package/src/resources/extensions/gsd/worktree-state-projection.ts +404 -0
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +86 -40
- package/src/resources/skills/web-quality-audit/scripts/analyze.sh +0 -0
- package/dist/resources/extensions/gsd/worktree-resolver.js +0 -733
- package/dist/web/standalone/.next/static/chunks/8336.631939fb583761fa.js +0 -10
- package/src/resources/extensions/gsd/tests/sync-layer-scope.test.ts +0 -434
- package/src/resources/extensions/gsd/worktree-resolver.ts +0 -909
- /package/dist/web/standalone/.next/static/{k-MDjzPMF62Rg1-FR437h → 8G7Lc96dfT0V6VXh6O6Ka}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{k-MDjzPMF62Rg1-FR437h → 8G7Lc96dfT0V6VXh6O6Ka}/_ssgManifest.js +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode orchestration, session lifecycle, and stop handling.
|
|
1
3
|
/**
|
|
2
4
|
* GSD Auto Mode — Fresh Session Per Unit
|
|
3
5
|
*
|
|
@@ -59,6 +61,7 @@ import {
|
|
|
59
61
|
isLockProcessAlive,
|
|
60
62
|
formatCrashInfo,
|
|
61
63
|
emitCrashRecoveredUnitEnd,
|
|
64
|
+
emitOpenUnitEndForUnit,
|
|
62
65
|
} from "./crash-recovery.js";
|
|
63
66
|
import {
|
|
64
67
|
acquireSessionLock,
|
|
@@ -150,6 +153,7 @@ import {
|
|
|
150
153
|
resolveProjectRoot,
|
|
151
154
|
} from "./worktree.js";
|
|
152
155
|
import { GitServiceImpl } from "./git-service.js";
|
|
156
|
+
import { nativeCheckoutBranch } from "./native-git-bridge.js";
|
|
153
157
|
import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
154
158
|
import {
|
|
155
159
|
createAutoWorktree,
|
|
@@ -162,8 +166,6 @@ import {
|
|
|
162
166
|
mergeMilestoneToMain,
|
|
163
167
|
autoWorktreeBranch,
|
|
164
168
|
syncWorktreeStateBack,
|
|
165
|
-
syncProjectRootToWorktree,
|
|
166
|
-
syncStateToProjectRoot,
|
|
167
169
|
readResourceVersion,
|
|
168
170
|
checkResourcesStale,
|
|
169
171
|
escapeStaleWorktree,
|
|
@@ -200,6 +202,8 @@ import {
|
|
|
200
202
|
detectWorkingTreeActivity,
|
|
201
203
|
} from "./auto-supervisor.js";
|
|
202
204
|
import { isDbAvailable, getMilestone } from "./gsd-db.js";
|
|
205
|
+
import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
|
|
206
|
+
import { writeUnitRuntimeRecord } from "./unit-runtime.js";
|
|
203
207
|
import { countPendingCaptures } from "./captures.js";
|
|
204
208
|
import { CMUX_CHANNELS, type CmuxLogLevel } from "../shared/cmux-events.js";
|
|
205
209
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
@@ -234,14 +238,34 @@ import { resolveUokFlags } from "./uok/flags.js";
|
|
|
234
238
|
import { validateDirectory } from "./validate-directory.js";
|
|
235
239
|
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
236
240
|
import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
|
|
241
|
+
import { reconcileBeforeDispatch } from "./state-reconciliation.js";
|
|
242
|
+
import { compileUnitToolContract } from "./tool-contract.js";
|
|
243
|
+
import { createWorktreeSafetyModule } from "./worktree-safety.js";
|
|
244
|
+
import { resolveManifest } from "./unit-context-manifest.js";
|
|
245
|
+
import { classifyFailure } from "./recovery-classification.js";
|
|
237
246
|
// Slice-level parallelism (#2340)
|
|
238
247
|
import { getEligibleSlices } from "./slice-parallel-eligibility.js";
|
|
239
248
|
import { startSliceParallel } from "./slice-parallel-orchestrator.js";
|
|
240
249
|
import {
|
|
241
|
-
|
|
242
|
-
type
|
|
243
|
-
} from "./worktree-
|
|
250
|
+
WorktreeLifecycle,
|
|
251
|
+
type WorktreeLifecycleDeps,
|
|
252
|
+
} from "./worktree-lifecycle.js";
|
|
253
|
+
import { WorktreeStateProjection } from "./worktree-state-projection.js";
|
|
244
254
|
import { reorderForCaching } from "./prompt-ordering.js";
|
|
255
|
+
import { initTokenCounter } from "./token-counter.js";
|
|
256
|
+
|
|
257
|
+
// Warm the tiktoken encoder at extension startup so context-budget computations
|
|
258
|
+
// can use accurate token counts via countTokensSync without paying the load
|
|
259
|
+
// cost mid-prompt-build. Fire-and-forget — failure falls back to the
|
|
260
|
+
// provider-aware char-ratio estimator already used by getCharsPerToken().
|
|
261
|
+
// Catch rejections explicitly: an unhandled rejection at module-import time
|
|
262
|
+
// can destabilize startup before the engine logger is configured.
|
|
263
|
+
void initTokenCounter().catch((err) => {
|
|
264
|
+
logWarning(
|
|
265
|
+
"engine",
|
|
266
|
+
`token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
267
|
+
);
|
|
268
|
+
});
|
|
245
269
|
|
|
246
270
|
// ─── Session State ─────────────────────────────────────────────────────────
|
|
247
271
|
|
|
@@ -293,11 +317,15 @@ const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
|
293
317
|
* the DB is unavailable (e.g. fresh project before init) we skip registration
|
|
294
318
|
* silently rather than blocking session start.
|
|
295
319
|
*/
|
|
296
|
-
function registerAutoWorkerForSession(
|
|
320
|
+
function registerAutoWorkerForSession(
|
|
321
|
+
session: AutoSession,
|
|
322
|
+
projectRootOverride?: string,
|
|
323
|
+
): void {
|
|
297
324
|
if (session.workerId) return; // already registered (e.g. resume re-runs)
|
|
298
325
|
try {
|
|
299
326
|
const projectRootRealpath = normalizeRealPath(
|
|
300
|
-
|
|
327
|
+
projectRootOverride
|
|
328
|
+
?? session.scope?.workspace.projectRoot
|
|
301
329
|
?? (session.originalBasePath || session.basePath),
|
|
302
330
|
);
|
|
303
331
|
session.workerId = registerAutoWorker({ projectRootRealpath });
|
|
@@ -332,6 +360,14 @@ function restoreProjectRootEnv(): void {
|
|
|
332
360
|
s.projectRootEnvCaptured = false;
|
|
333
361
|
}
|
|
334
362
|
|
|
363
|
+
export function _captureProjectRootEnvForTest(projectRoot: string): void {
|
|
364
|
+
captureProjectRootEnv(projectRoot);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
export function _restoreProjectRootEnvForTest(): void {
|
|
368
|
+
restoreProjectRootEnv();
|
|
369
|
+
}
|
|
370
|
+
|
|
335
371
|
function captureMilestoneLockEnv(milestoneId: string | null): void {
|
|
336
372
|
if (!s.milestoneLockEnvCaptured) {
|
|
337
373
|
s.hadMilestoneLockEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_MILESTONE_LOCK");
|
|
@@ -420,6 +456,27 @@ export function _synthesizePausedSessionRecoveryForTest(
|
|
|
420
456
|
return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
|
|
421
457
|
}
|
|
422
458
|
|
|
459
|
+
export function _resolvePausedResumeBasePathForTest(
|
|
460
|
+
basePath: string,
|
|
461
|
+
pausedWorktreePath: string | null | undefined,
|
|
462
|
+
pathExists: (path: string) => boolean = existsSync,
|
|
463
|
+
): string {
|
|
464
|
+
return pausedWorktreePath && pathExists(pausedWorktreePath)
|
|
465
|
+
? pausedWorktreePath
|
|
466
|
+
: basePath;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
470
|
+
|
|
471
|
+
function withDetachedAutoKeepalive<T>(run: Promise<T>): Promise<T> {
|
|
472
|
+
const keepAlive = setInterval(() => {}, DETACHED_AUTO_KEEPALIVE_INTERVAL_MS);
|
|
473
|
+
return run.finally(() => {
|
|
474
|
+
clearInterval(keepAlive);
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
export const _withDetachedAutoKeepaliveForTest = withDetachedAutoKeepalive;
|
|
479
|
+
|
|
423
480
|
export function startAutoDetached(
|
|
424
481
|
ctx: ExtensionCommandContext,
|
|
425
482
|
pi: ExtensionAPI,
|
|
@@ -431,7 +488,7 @@ export function startAutoDetached(
|
|
|
431
488
|
milestoneLock?: string | null;
|
|
432
489
|
},
|
|
433
490
|
): void {
|
|
434
|
-
void startAuto(ctx, pi, base, verboseMode, options).catch((err) => {
|
|
491
|
+
void withDetachedAutoKeepalive(startAuto(ctx, pi, base, verboseMode, options)).catch((err) => {
|
|
435
492
|
const message = getErrorMessage(err);
|
|
436
493
|
ctx.ui.notify(`Auto-start failed: ${message}`, "error");
|
|
437
494
|
logWarning("engine", `auto start error: ${message}`, { file: "auto.ts" });
|
|
@@ -490,9 +547,54 @@ export {
|
|
|
490
547
|
getBudgetEnforcementAction,
|
|
491
548
|
} from "./auto-budget.js";
|
|
492
549
|
|
|
550
|
+
function closeOutSignalInterruptedUnit(currentBasePath: string): void {
|
|
551
|
+
const currentUnit = s.currentUnit;
|
|
552
|
+
if (!currentUnit) return;
|
|
553
|
+
|
|
554
|
+
const reason = "Auto-mode process received a termination signal";
|
|
555
|
+
const errorContext: ErrorContext = {
|
|
556
|
+
message: reason,
|
|
557
|
+
category: "aborted",
|
|
558
|
+
isTransient: false,
|
|
559
|
+
};
|
|
560
|
+
const basePath = s.basePath || currentBasePath;
|
|
561
|
+
|
|
562
|
+
try {
|
|
563
|
+
emitOpenUnitEndForUnit(basePath, currentUnit.type, currentUnit.id, "cancelled", errorContext);
|
|
564
|
+
} catch (err) {
|
|
565
|
+
logWarning("engine", `signal unit-end cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
try {
|
|
569
|
+
writeUnitRuntimeRecord(basePath, currentUnit.type, currentUnit.id, currentUnit.startedAt, {
|
|
570
|
+
phase: "crashed",
|
|
571
|
+
lastProgressAt: Date.now(),
|
|
572
|
+
lastProgressKind: "signal",
|
|
573
|
+
});
|
|
574
|
+
} catch (err) {
|
|
575
|
+
logWarning("engine", `signal runtime cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
try {
|
|
579
|
+
if (s.workerId) markLatestActiveForWorkerCanceled(s.workerId, "signal-exit");
|
|
580
|
+
} catch (err) {
|
|
581
|
+
logWarning("engine", `signal dispatch cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
try {
|
|
585
|
+
resolveAgentEndCancelled(errorContext);
|
|
586
|
+
} catch (err) {
|
|
587
|
+
logWarning("engine", `signal resolve cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
588
|
+
}
|
|
589
|
+
}
|
|
590
|
+
|
|
493
591
|
/** Wrapper: register SIGTERM handler and store reference. */
|
|
494
592
|
function registerSigtermHandler(currentBasePath: string): void {
|
|
495
|
-
s.sigtermHandler = _registerSigtermHandler(
|
|
593
|
+
s.sigtermHandler = _registerSigtermHandler(
|
|
594
|
+
currentBasePath,
|
|
595
|
+
s.sigtermHandler,
|
|
596
|
+
() => closeOutSignalInterruptedUnit(currentBasePath),
|
|
597
|
+
);
|
|
496
598
|
}
|
|
497
599
|
|
|
498
600
|
/** Wrapper: deregister SIGTERM handler and clear reference. */
|
|
@@ -595,6 +697,30 @@ export function isAutoPaused(): boolean {
|
|
|
595
697
|
return s.paused;
|
|
596
698
|
}
|
|
597
699
|
|
|
700
|
+
export interface ResumeResourceRefreshDeps {
|
|
701
|
+
env?: NodeJS.ProcessEnv;
|
|
702
|
+
importModule?: (specifier: string) => Promise<any>;
|
|
703
|
+
openProjectDb?: (basePath: string) => Promise<void>;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
export async function refreshResumeResourcesAndDb(
|
|
707
|
+
basePath: string,
|
|
708
|
+
deps: ResumeResourceRefreshDeps = {},
|
|
709
|
+
): Promise<void> {
|
|
710
|
+
const env = deps.env ?? process.env;
|
|
711
|
+
const importModule = deps.importModule ?? ((specifier: string) => import(specifier));
|
|
712
|
+
const agentDir = env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
|
|
713
|
+
const pkgRoot = env.GSD_PKG_ROOT;
|
|
714
|
+
const resourceLoaderPath = pkgRoot
|
|
715
|
+
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
716
|
+
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
717
|
+
const { initResources } = await importModule(resourceLoaderPath);
|
|
718
|
+
initResources(agentDir);
|
|
719
|
+
const { primeCache } = await importModule("./prompt-loader.js");
|
|
720
|
+
primeCache();
|
|
721
|
+
await (deps.openProjectDb ?? openProjectDbIfPresent)(basePath);
|
|
722
|
+
}
|
|
723
|
+
|
|
598
724
|
export function setActiveEngineId(id: string | null): void {
|
|
599
725
|
s.activeEngineId = id;
|
|
600
726
|
}
|
|
@@ -849,7 +975,23 @@ function handleLostSessionLock(
|
|
|
849
975
|
* the stale unit state, progress widget, status badge, and restores CWD so
|
|
850
976
|
* the dashboard does not show an orphaned timer and the shell is usable.
|
|
851
977
|
*/
|
|
852
|
-
function
|
|
978
|
+
export async function rerootCommandSession(
|
|
979
|
+
cmdCtx: Pick<ExtensionCommandContext, "newSession"> | null | undefined,
|
|
980
|
+
workspaceRoot: string,
|
|
981
|
+
): Promise<{ status: "skipped" | "ok" | "cancelled" | "failed"; error?: string }> {
|
|
982
|
+
if (!cmdCtx || !workspaceRoot) return { status: "skipped" };
|
|
983
|
+
try {
|
|
984
|
+
const result = await cmdCtx.newSession({ workspaceRoot });
|
|
985
|
+
return result.cancelled ? { status: "cancelled" } : { status: "ok" };
|
|
986
|
+
} catch (err) {
|
|
987
|
+
return {
|
|
988
|
+
status: "failed",
|
|
989
|
+
error: err instanceof Error ? err.message : String(err),
|
|
990
|
+
};
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void> {
|
|
853
995
|
s.currentUnit = null;
|
|
854
996
|
s.active = false;
|
|
855
997
|
deactivateGSD();
|
|
@@ -887,6 +1029,34 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
|
|
|
887
1029
|
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
888
1030
|
}
|
|
889
1031
|
}
|
|
1032
|
+
|
|
1033
|
+
if (s.originalBasePath && s.cmdCtx) {
|
|
1034
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
1035
|
+
if (result.status === "cancelled") {
|
|
1036
|
+
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
1037
|
+
} else if (result.status === "failed") {
|
|
1038
|
+
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
1039
|
+
}
|
|
1040
|
+
}
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
export function _cleanupAfterLoopExitForTest(ctx: ExtensionContext): Promise<void> {
|
|
1044
|
+
return cleanupAfterLoopExit(ctx);
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
export type AutoWorktreeExitAction = "skip" | "merge" | "preserve";
|
|
1048
|
+
|
|
1049
|
+
export function _resolveAutoWorktreeExitActionForTest(
|
|
1050
|
+
currentMilestoneId: string | null | undefined,
|
|
1051
|
+
milestoneMergedInPhases: boolean,
|
|
1052
|
+
milestoneComplete: boolean,
|
|
1053
|
+
): AutoWorktreeExitAction {
|
|
1054
|
+
const action = _selectStopAutoWorktreeExit({
|
|
1055
|
+
currentMilestoneId: currentMilestoneId ?? null,
|
|
1056
|
+
milestoneComplete,
|
|
1057
|
+
milestoneMergedInPhases,
|
|
1058
|
+
});
|
|
1059
|
+
return action === "none" ? "skip" : action;
|
|
890
1060
|
}
|
|
891
1061
|
|
|
892
1062
|
export async function stopAuto(
|
|
@@ -957,6 +1127,8 @@ export async function stopAuto(
|
|
|
957
1127
|
if (s.workerId) {
|
|
958
1128
|
markWorkerStopping(s.workerId);
|
|
959
1129
|
}
|
|
1130
|
+
s.workerId = null;
|
|
1131
|
+
s.milestoneLeaseToken = null;
|
|
960
1132
|
} catch (e) {
|
|
961
1133
|
debugLog("stop-cleanup-coordination", { error: e instanceof Error ? e.message : String(e) });
|
|
962
1134
|
}
|
|
@@ -1000,7 +1172,7 @@ export async function stopAuto(
|
|
|
1000
1172
|
const notifyCtx = ctx
|
|
1001
1173
|
? { notify: ctx.ui.notify.bind(ctx.ui) }
|
|
1002
1174
|
: { notify: () => {} };
|
|
1003
|
-
const
|
|
1175
|
+
const lifecycle = buildLifecycle();
|
|
1004
1176
|
|
|
1005
1177
|
// Check if the milestone is complete. DB status is the authoritative
|
|
1006
1178
|
// signal — only a successful gsd_complete_milestone call flips it to
|
|
@@ -1038,17 +1210,35 @@ export async function stopAuto(
|
|
|
1038
1210
|
logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1039
1211
|
}
|
|
1040
1212
|
|
|
1041
|
-
|
|
1213
|
+
const exitAction = _selectStopAutoWorktreeExit({
|
|
1214
|
+
currentMilestoneId: s.currentMilestoneId,
|
|
1215
|
+
milestoneComplete,
|
|
1216
|
+
milestoneMergedInPhases: s.milestoneMergedInPhases,
|
|
1217
|
+
});
|
|
1218
|
+
|
|
1219
|
+
if (exitAction === "merge") {
|
|
1042
1220
|
// Milestone is complete — merge worktree branch back to main
|
|
1043
|
-
|
|
1044
|
-
|
|
1221
|
+
const r = lifecycle.exitMilestone(
|
|
1222
|
+
s.currentMilestoneId,
|
|
1223
|
+
{ merge: true },
|
|
1224
|
+
notifyCtx,
|
|
1225
|
+
);
|
|
1226
|
+
if (!r.ok && r.cause instanceof Error) throw r.cause;
|
|
1227
|
+
} else if (exitAction === "preserve") {
|
|
1045
1228
|
// Milestone still in progress — preserve branch for later resumption
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1229
|
+
const r = lifecycle.exitMilestone(
|
|
1230
|
+
s.currentMilestoneId,
|
|
1231
|
+
{ merge: false, preserveBranch: true },
|
|
1232
|
+
notifyCtx,
|
|
1233
|
+
);
|
|
1234
|
+
if (!r.ok && r.cause instanceof Error) throw r.cause;
|
|
1049
1235
|
}
|
|
1050
1236
|
}
|
|
1051
1237
|
} catch (e) {
|
|
1238
|
+
ctx?.ui.notify(
|
|
1239
|
+
`Worktree cleanup failed for ${s.currentMilestoneId ?? "current milestone"}: ${e instanceof Error ? e.message : String(e)}. Resolve the preserved branch/worktree and run /gsd auto to resume.`,
|
|
1240
|
+
"warning",
|
|
1241
|
+
);
|
|
1052
1242
|
debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
|
|
1053
1243
|
}
|
|
1054
1244
|
|
|
@@ -1094,6 +1284,19 @@ export async function stopAuto(
|
|
|
1094
1284
|
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1095
1285
|
}
|
|
1096
1286
|
|
|
1287
|
+
// Re-root the active command session/tool runtime after worktree teardown.
|
|
1288
|
+
// mergeAndExit restores process.cwd(), but AgentSession has already captured
|
|
1289
|
+
// its own cwd for tools and system prompt; refresh it before returning to the
|
|
1290
|
+
// user so follow-up commands do not target a removed milestone worktree.
|
|
1291
|
+
if (s.originalBasePath && ctx && s.cmdCtx) {
|
|
1292
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
1293
|
+
if (result.status === "cancelled") {
|
|
1294
|
+
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
1295
|
+
} else if (result.status === "failed") {
|
|
1296
|
+
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1097
1300
|
// ── Step 8: Ledger notification ──
|
|
1098
1301
|
try {
|
|
1099
1302
|
const ledger = getLedger();
|
|
@@ -1222,6 +1425,17 @@ export async function stopAuto(
|
|
|
1222
1425
|
}
|
|
1223
1426
|
}
|
|
1224
1427
|
|
|
1428
|
+
export type StopAutoWorktreeExitAction = "none" | "merge" | "preserve";
|
|
1429
|
+
|
|
1430
|
+
export function _selectStopAutoWorktreeExit(args: {
|
|
1431
|
+
currentMilestoneId: string | null;
|
|
1432
|
+
milestoneComplete: boolean;
|
|
1433
|
+
milestoneMergedInPhases: boolean;
|
|
1434
|
+
}): StopAutoWorktreeExitAction {
|
|
1435
|
+
if (!args.currentMilestoneId || args.milestoneMergedInPhases) return "none";
|
|
1436
|
+
return args.milestoneComplete ? "merge" : "preserve";
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1225
1439
|
/**
|
|
1226
1440
|
* Pause auto-mode without destroying state. Context is preserved.
|
|
1227
1441
|
* The user can interact with the agent, then `/gsd auto` resumes
|
|
@@ -1340,43 +1554,36 @@ export async function pauseAuto(
|
|
|
1340
1554
|
}
|
|
1341
1555
|
|
|
1342
1556
|
/**
|
|
1343
|
-
* Build a
|
|
1344
|
-
*
|
|
1557
|
+
* Build a WorktreeLifecycle Module wrapping the current session.
|
|
1558
|
+
*
|
|
1559
|
+
* Per ADR-016, the Lifecycle Module is the typed-Interface owner of milestone
|
|
1560
|
+
* entry/exit/merge verbs and calls Projection on lifecycle transitions. The
|
|
1561
|
+
* deps bag is intentionally focused — Lifecycle does not see the wider auto-
|
|
1562
|
+
* mode dependency graph.
|
|
1345
1563
|
*/
|
|
1346
|
-
function
|
|
1347
|
-
|
|
1348
|
-
isInAutoWorktree,
|
|
1349
|
-
shouldUseWorktreeIsolation,
|
|
1350
|
-
getIsolationMode,
|
|
1351
|
-
mergeMilestoneToMain,
|
|
1352
|
-
syncWorktreeStateBack,
|
|
1353
|
-
teardownAutoWorktree,
|
|
1354
|
-
createAutoWorktree,
|
|
1564
|
+
function buildLifecycle(): WorktreeLifecycle {
|
|
1565
|
+
const lifecycleDeps = {
|
|
1355
1566
|
enterAutoWorktree,
|
|
1567
|
+
createAutoWorktree,
|
|
1356
1568
|
enterBranchModeForMilestone,
|
|
1357
1569
|
getAutoWorktreePath,
|
|
1570
|
+
getIsolationMode,
|
|
1571
|
+
invalidateAllCaches,
|
|
1572
|
+
GitServiceImpl,
|
|
1573
|
+
loadEffectiveGSDPreferences,
|
|
1574
|
+
worktreeProjection: new WorktreeStateProjection(),
|
|
1575
|
+
isInAutoWorktree,
|
|
1358
1576
|
autoCommitCurrentBranch,
|
|
1359
|
-
getCurrentBranch,
|
|
1360
1577
|
autoWorktreeBranch,
|
|
1578
|
+
teardownAutoWorktree,
|
|
1579
|
+
mergeMilestoneToMain,
|
|
1580
|
+
getCurrentBranch,
|
|
1581
|
+
checkoutBranch: nativeCheckoutBranch,
|
|
1361
1582
|
resolveMilestoneFile,
|
|
1362
1583
|
readFileSync: (path: string, encoding: string) =>
|
|
1363
1584
|
readFileSync(path, encoding as BufferEncoding),
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
loadEffectiveGSDPreferences:
|
|
1367
|
-
loadEffectiveGSDPreferences as unknown as WorktreeResolverDeps["loadEffectiveGSDPreferences"],
|
|
1368
|
-
invalidateAllCaches,
|
|
1369
|
-
captureIntegrationBranch,
|
|
1370
|
-
};
|
|
1371
|
-
}
|
|
1372
|
-
|
|
1373
|
-
/**
|
|
1374
|
-
* Build a WorktreeResolver wrapping the current session.
|
|
1375
|
-
* Cheap to construct — it's just a thin wrapper over `s` + deps.
|
|
1376
|
-
* Used by stopAuto(), resume path, and buildLoopDeps().
|
|
1377
|
-
*/
|
|
1378
|
-
function buildResolver(): WorktreeResolver {
|
|
1379
|
-
return new WorktreeResolver(s, buildResolverDeps());
|
|
1585
|
+
} as unknown as WorktreeLifecycleDeps;
|
|
1586
|
+
return new WorktreeLifecycle(s, lifecycleDeps);
|
|
1380
1587
|
}
|
|
1381
1588
|
|
|
1382
1589
|
/**
|
|
@@ -1396,9 +1603,26 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1396
1603
|
let seq = 0;
|
|
1397
1604
|
|
|
1398
1605
|
const deps: AutoOrchestratorDeps = {
|
|
1606
|
+
stateReconciliation: {
|
|
1607
|
+
async reconcileBeforeDispatch() {
|
|
1608
|
+
const result = await reconcileBeforeDispatch(dispatchBasePath);
|
|
1609
|
+
if (!result.ok) {
|
|
1610
|
+
return {
|
|
1611
|
+
ok: false,
|
|
1612
|
+
reason: result.reason,
|
|
1613
|
+
stateSnapshot: result.stateSnapshot,
|
|
1614
|
+
};
|
|
1615
|
+
}
|
|
1616
|
+
return {
|
|
1617
|
+
ok: true,
|
|
1618
|
+
reason: result.repaired.join(", "),
|
|
1619
|
+
stateSnapshot: result.stateSnapshot,
|
|
1620
|
+
};
|
|
1621
|
+
},
|
|
1622
|
+
},
|
|
1399
1623
|
dispatch: {
|
|
1400
|
-
async decideNextUnit() {
|
|
1401
|
-
const state =
|
|
1624
|
+
async decideNextUnit(input) {
|
|
1625
|
+
const state = input.stateSnapshot;
|
|
1402
1626
|
const active = state.activeMilestone;
|
|
1403
1627
|
if (!active) return null;
|
|
1404
1628
|
|
|
@@ -1422,12 +1646,48 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1422
1646
|
},
|
|
1423
1647
|
recovery: {
|
|
1424
1648
|
async classifyAndRecover(input) {
|
|
1425
|
-
const
|
|
1426
|
-
return { action:
|
|
1649
|
+
const recovery = classifyFailure(input);
|
|
1650
|
+
return { action: recovery.action, reason: recovery.reason };
|
|
1651
|
+
},
|
|
1652
|
+
},
|
|
1653
|
+
toolContract: {
|
|
1654
|
+
async compileUnitToolContract(unitType) {
|
|
1655
|
+
const result = compileUnitToolContract(unitType);
|
|
1656
|
+
if (!result.ok) return { ok: false, reason: result.detail };
|
|
1657
|
+
return { ok: true, reason: result.contract.validationRules.join(", ") };
|
|
1427
1658
|
},
|
|
1428
1659
|
},
|
|
1429
1660
|
worktree: {
|
|
1430
|
-
async prepareForUnit() {
|
|
1661
|
+
async prepareForUnit(unitType, unitId) {
|
|
1662
|
+
const manifest = resolveManifest(unitType);
|
|
1663
|
+
if (!manifest) {
|
|
1664
|
+
return {
|
|
1665
|
+
ok: false,
|
|
1666
|
+
reason: `No Unit manifest is registered for ${unitType}`,
|
|
1667
|
+
};
|
|
1668
|
+
}
|
|
1669
|
+
const writeScope =
|
|
1670
|
+
manifest.tools.mode === "all" || manifest.tools.mode === "docs"
|
|
1671
|
+
? "source-writing"
|
|
1672
|
+
: "planning-only";
|
|
1673
|
+
const safety = createWorktreeSafetyModule();
|
|
1674
|
+
const snapshot = await deriveState(dispatchBasePath);
|
|
1675
|
+
const milestoneId = snapshot.activeMilestone?.id ?? null;
|
|
1676
|
+
const expectedBranch = milestoneId ? autoWorktreeBranch(milestoneId) : null;
|
|
1677
|
+
const result = safety.validateUnitRoot({
|
|
1678
|
+
unitType,
|
|
1679
|
+
unitId,
|
|
1680
|
+
writeScope,
|
|
1681
|
+
projectRoot: runtimeBasePath,
|
|
1682
|
+
unitRoot: dispatchBasePath,
|
|
1683
|
+
milestoneId,
|
|
1684
|
+
expectedBranch,
|
|
1685
|
+
});
|
|
1686
|
+
if (!result.ok) {
|
|
1687
|
+
return { ok: false, reason: `${result.kind}: ${result.reason}` };
|
|
1688
|
+
}
|
|
1689
|
+
return { ok: true, reason: result.kind };
|
|
1690
|
+
},
|
|
1431
1691
|
async syncAfterUnit() {},
|
|
1432
1692
|
async cleanupOnStop() {},
|
|
1433
1693
|
},
|
|
@@ -1525,6 +1785,7 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1525
1785
|
initRegistry(convertDispatchRules(DISPATCH_RULES));
|
|
1526
1786
|
|
|
1527
1787
|
const cmux = makeCmuxEmitters(pi);
|
|
1788
|
+
const worktreeProjection = new WorktreeStateProjection();
|
|
1528
1789
|
|
|
1529
1790
|
return {
|
|
1530
1791
|
lockBase,
|
|
@@ -1548,8 +1809,8 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1548
1809
|
// Pre-dispatch health gate
|
|
1549
1810
|
preDispatchHealthGate,
|
|
1550
1811
|
|
|
1551
|
-
// Worktree
|
|
1552
|
-
|
|
1812
|
+
// Worktree state projection (ADR-016 — single Module Interface)
|
|
1813
|
+
worktreeProjection,
|
|
1553
1814
|
|
|
1554
1815
|
// Resource version guard
|
|
1555
1816
|
checkResourcesStale,
|
|
@@ -1621,8 +1882,9 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1621
1882
|
// Git
|
|
1622
1883
|
GitServiceImpl: GitServiceImpl as unknown as LoopDeps["GitServiceImpl"],
|
|
1623
1884
|
|
|
1624
|
-
//
|
|
1625
|
-
|
|
1885
|
+
// Worktree Lifecycle Module (ADR-016 — single Module Interface for the
|
|
1886
|
+
// milestone create/enter/exit/merge verbs)
|
|
1887
|
+
lifecycle: buildLifecycle(),
|
|
1626
1888
|
|
|
1627
1889
|
// Post-unit processing
|
|
1628
1890
|
postUnitPreVerification,
|
|
@@ -1899,9 +2161,7 @@ export async function startAuto(
|
|
|
1899
2161
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
1900
2162
|
);
|
|
1901
2163
|
}
|
|
1902
|
-
|
|
1903
|
-
s.basePath = resumeWorktreePath;
|
|
1904
|
-
}
|
|
2164
|
+
s.basePath = _resolvePausedResumeBasePathForTest(base, resumeWorktreePath);
|
|
1905
2165
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
1906
2166
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1907
2167
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -1929,9 +2189,17 @@ export async function startAuto(
|
|
|
1929
2189
|
!detectWorktreeName(s.basePath) &&
|
|
1930
2190
|
!detectWorktreeName(s.originalBasePath)
|
|
1931
2191
|
) {
|
|
1932
|
-
|
|
2192
|
+
const enterResult = buildLifecycle().enterMilestone(s.currentMilestoneId, {
|
|
1933
2193
|
notify: ctx.ui.notify.bind(ctx.ui),
|
|
1934
2194
|
});
|
|
2195
|
+
if (!enterResult.ok && enterResult.reason === "lease-conflict") {
|
|
2196
|
+
ctx.ui.notify(
|
|
2197
|
+
`Cannot resume milestone ${s.currentMilestoneId}: lease is held by another worker.`,
|
|
2198
|
+
"error",
|
|
2199
|
+
);
|
|
2200
|
+
await stopAuto(ctx, pi, "lease-conflict during resume");
|
|
2201
|
+
return;
|
|
2202
|
+
}
|
|
1935
2203
|
// s.basePath may have been updated to a worktree path by enterMilestone.
|
|
1936
2204
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1937
2205
|
}
|
|
@@ -1953,16 +2221,7 @@ export async function startAuto(
|
|
|
1953
2221
|
// tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
|
|
1954
2222
|
// relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
|
|
1955
2223
|
// Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
|
|
1956
|
-
|
|
1957
|
-
const pkgRoot = process.env.GSD_PKG_ROOT;
|
|
1958
|
-
const resourceLoaderPath = pkgRoot
|
|
1959
|
-
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
1960
|
-
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
1961
|
-
const { initResources } = await import(resourceLoaderPath);
|
|
1962
|
-
initResources(agentDir);
|
|
1963
|
-
// Open the project DB before rebuild/derive so resume uses DB-backed
|
|
1964
|
-
// state instead of falling back to stale markdown parsing (#2940).
|
|
1965
|
-
await openProjectDbIfPresent(s.basePath);
|
|
2224
|
+
await refreshResumeResourcesAndDb(s.basePath);
|
|
1966
2225
|
try {
|
|
1967
2226
|
await rebuildState(s.basePath);
|
|
1968
2227
|
pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync" as const, preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
|
|
@@ -2034,7 +2293,7 @@ export async function startAuto(
|
|
|
2034
2293
|
runKernelLoop: runUokKernelLoop,
|
|
2035
2294
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2036
2295
|
});
|
|
2037
|
-
cleanupAfterLoopExit(ctx);
|
|
2296
|
+
await cleanupAfterLoopExit(ctx);
|
|
2038
2297
|
return;
|
|
2039
2298
|
}
|
|
2040
2299
|
|
|
@@ -2043,9 +2302,14 @@ export async function startAuto(
|
|
|
2043
2302
|
shouldUseWorktreeIsolation,
|
|
2044
2303
|
registerSigtermHandler,
|
|
2045
2304
|
lockBase,
|
|
2046
|
-
|
|
2305
|
+
buildLifecycle,
|
|
2047
2306
|
};
|
|
2048
2307
|
|
|
2308
|
+
// Register the worker before bootstrap enters a milestone worktree.
|
|
2309
|
+
// This ensures enterMilestone can claim a lease and seed dispatch claims
|
|
2310
|
+
// for crash-recovery fidelity (#5405).
|
|
2311
|
+
registerAutoWorkerForSession(s, base);
|
|
2312
|
+
|
|
2049
2313
|
const ready = await bootstrapAutoSession(
|
|
2050
2314
|
s,
|
|
2051
2315
|
ctx,
|
|
@@ -2089,7 +2353,7 @@ export async function startAuto(
|
|
|
2089
2353
|
runKernelLoop: runUokKernelLoop,
|
|
2090
2354
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2091
2355
|
});
|
|
2092
|
-
cleanupAfterLoopExit(ctx);
|
|
2356
|
+
await cleanupAfterLoopExit(ctx);
|
|
2093
2357
|
}
|
|
2094
2358
|
|
|
2095
2359
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
@@ -2213,24 +2477,7 @@ export async function dispatchHookUnit(
|
|
|
2213
2477
|
startedAt: hookStartedAt,
|
|
2214
2478
|
};
|
|
2215
2479
|
|
|
2216
|
-
|
|
2217
|
-
// newSession() snapshots process.cwd() during construction; chdir-ing
|
|
2218
|
-
// afterward leaves the session rooted to whatever cwd was when the call
|
|
2219
|
-
// was made. Must be synchronous — no awaits between chdir and newSession.
|
|
2220
|
-
try { if (process.cwd() !== s.basePath) process.chdir(s.basePath); } catch (err) {
|
|
2221
|
-
const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
|
|
2222
|
-
logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
|
|
2223
|
-
ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
|
|
2224
|
-
if (wasActive) {
|
|
2225
|
-
s.basePath = previousBasePath;
|
|
2226
|
-
s.currentUnit = previousCurrentUnit;
|
|
2227
|
-
} else {
|
|
2228
|
-
s.reset();
|
|
2229
|
-
}
|
|
2230
|
-
return false;
|
|
2231
|
-
}
|
|
2232
|
-
|
|
2233
|
-
const result = await s.cmdCtx!.newSession();
|
|
2480
|
+
const result = await s.cmdCtx!.newSession({ workspaceRoot: s.basePath });
|
|
2234
2481
|
if (result.cancelled) {
|
|
2235
2482
|
await stopAuto(ctx, pi);
|
|
2236
2483
|
return false;
|