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
|
*
|
|
@@ -20,7 +22,7 @@ import { gsdRoot, resolveMilestoneFile, resolveMilestonePath, resolveDir, milest
|
|
|
20
22
|
import { invalidateAllCaches } from "./cache.js";
|
|
21
23
|
import { clearActivityLogState } from "./activity-log.js";
|
|
22
24
|
import { synthesizeCrashRecovery, getDeepDiagnostic, readActiveMilestoneId, } from "./session-forensics.js";
|
|
23
|
-
import { writeLock, clearLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, } from "./crash-recovery.js";
|
|
25
|
+
import { writeLock, clearLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, emitOpenUnitEndForUnit, } from "./crash-recovery.js";
|
|
24
26
|
import { acquireSessionLock, getSessionLockStatus, releaseSessionLock, updateSessionLock, } from "./session-lock.js";
|
|
25
27
|
import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, } from "./preferences.js";
|
|
26
28
|
import { sendDesktopNotification } from "./notifications.js";
|
|
@@ -45,8 +47,9 @@ import { readFileSync, existsSync, mkdirSync } from "node:fs";
|
|
|
45
47
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
46
48
|
import { autoCommitCurrentBranch, captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, resolveProjectRoot, } from "./worktree.js";
|
|
47
49
|
import { GitServiceImpl } from "./git-service.js";
|
|
50
|
+
import { nativeCheckoutBranch } from "./native-git-bridge.js";
|
|
48
51
|
import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
|
|
49
|
-
import { createAutoWorktree, enterAutoWorktree, enterBranchModeForMilestone, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch,
|
|
52
|
+
import { createAutoWorktree, enterAutoWorktree, enterBranchModeForMilestone, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
|
|
50
53
|
import { pruneQueueOrder } from "./queue-order.js";
|
|
51
54
|
import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
|
|
52
55
|
import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
|
|
@@ -61,6 +64,8 @@ import { isClosedStatus } from "./status-guards.js";
|
|
|
61
64
|
import { updateProgressWidget as _updateProgressWidget, updateSliceProgressCache, clearSliceProgressCache, } from "./auto-dashboard.js";
|
|
62
65
|
import { registerSigtermHandler as _registerSigtermHandler, deregisterSigtermHandler as _deregisterSigtermHandler, } from "./auto-supervisor.js";
|
|
63
66
|
import { isDbAvailable, getMilestone } from "./gsd-db.js";
|
|
67
|
+
import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
|
|
68
|
+
import { writeUnitRuntimeRecord } from "./unit-runtime.js";
|
|
64
69
|
import { countPendingCaptures } from "./captures.js";
|
|
65
70
|
import { CMUX_CHANNELS } from "../shared/cmux-events.js";
|
|
66
71
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
@@ -83,8 +88,24 @@ import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
|
83
88
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
84
89
|
import { validateDirectory } from "./validate-directory.js";
|
|
85
90
|
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
86
|
-
import {
|
|
91
|
+
import { reconcileBeforeDispatch } from "./state-reconciliation.js";
|
|
92
|
+
import { compileUnitToolContract } from "./tool-contract.js";
|
|
93
|
+
import { createWorktreeSafetyModule } from "./worktree-safety.js";
|
|
94
|
+
import { resolveManifest } from "./unit-context-manifest.js";
|
|
95
|
+
import { classifyFailure } from "./recovery-classification.js";
|
|
96
|
+
import { WorktreeLifecycle, } from "./worktree-lifecycle.js";
|
|
97
|
+
import { WorktreeStateProjection } from "./worktree-state-projection.js";
|
|
87
98
|
import { reorderForCaching } from "./prompt-ordering.js";
|
|
99
|
+
import { initTokenCounter } from "./token-counter.js";
|
|
100
|
+
// Warm the tiktoken encoder at extension startup so context-budget computations
|
|
101
|
+
// can use accurate token counts via countTokensSync without paying the load
|
|
102
|
+
// cost mid-prompt-build. Fire-and-forget — failure falls back to the
|
|
103
|
+
// provider-aware char-ratio estimator already used by getCharsPerToken().
|
|
104
|
+
// Catch rejections explicitly: an unhandled rejection at module-import time
|
|
105
|
+
// can destabilize startup before the engine logger is configured.
|
|
106
|
+
void initTokenCounter().catch((err) => {
|
|
107
|
+
logWarning("engine", `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
108
|
+
});
|
|
88
109
|
export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
|
|
89
110
|
import { autoSession as s } from "./auto-runtime-state.js";
|
|
90
111
|
import { gsdHome } from "./gsd-home.js";
|
|
@@ -112,11 +133,12 @@ const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
|
112
133
|
* the DB is unavailable (e.g. fresh project before init) we skip registration
|
|
113
134
|
* silently rather than blocking session start.
|
|
114
135
|
*/
|
|
115
|
-
function registerAutoWorkerForSession(session) {
|
|
136
|
+
function registerAutoWorkerForSession(session, projectRootOverride) {
|
|
116
137
|
if (session.workerId)
|
|
117
138
|
return; // already registered (e.g. resume re-runs)
|
|
118
139
|
try {
|
|
119
|
-
const projectRootRealpath = normalizeRealPath(
|
|
140
|
+
const projectRootRealpath = normalizeRealPath(projectRootOverride
|
|
141
|
+
?? session.scope?.workspace.projectRoot
|
|
120
142
|
?? (session.originalBasePath || session.basePath));
|
|
121
143
|
session.workerId = registerAutoWorker({ projectRootRealpath });
|
|
122
144
|
}
|
|
@@ -148,6 +170,12 @@ function restoreProjectRootEnv() {
|
|
|
148
170
|
s.hadProjectRootEnv = false;
|
|
149
171
|
s.projectRootEnvCaptured = false;
|
|
150
172
|
}
|
|
173
|
+
export function _captureProjectRootEnvForTest(projectRoot) {
|
|
174
|
+
captureProjectRootEnv(projectRoot);
|
|
175
|
+
}
|
|
176
|
+
export function _restoreProjectRootEnvForTest() {
|
|
177
|
+
restoreProjectRootEnv();
|
|
178
|
+
}
|
|
151
179
|
function captureMilestoneLockEnv(milestoneId) {
|
|
152
180
|
if (!s.milestoneLockEnvCaptured) {
|
|
153
181
|
s.hadMilestoneLockEnv = Object.prototype.hasOwnProperty.call(process.env, "GSD_MILESTONE_LOCK");
|
|
@@ -225,8 +253,21 @@ function synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile
|
|
|
225
253
|
export function _synthesizePausedSessionRecoveryForTest(basePath, unitType, unitId, sessionFile) {
|
|
226
254
|
return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
|
|
227
255
|
}
|
|
256
|
+
export function _resolvePausedResumeBasePathForTest(basePath, pausedWorktreePath, pathExists = existsSync) {
|
|
257
|
+
return pausedWorktreePath && pathExists(pausedWorktreePath)
|
|
258
|
+
? pausedWorktreePath
|
|
259
|
+
: basePath;
|
|
260
|
+
}
|
|
261
|
+
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
262
|
+
function withDetachedAutoKeepalive(run) {
|
|
263
|
+
const keepAlive = setInterval(() => { }, DETACHED_AUTO_KEEPALIVE_INTERVAL_MS);
|
|
264
|
+
return run.finally(() => {
|
|
265
|
+
clearInterval(keepAlive);
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
export const _withDetachedAutoKeepaliveForTest = withDetachedAutoKeepalive;
|
|
228
269
|
export function startAutoDetached(ctx, pi, base, verboseMode, options) {
|
|
229
|
-
void startAuto(ctx, pi, base, verboseMode, options).catch((err) => {
|
|
270
|
+
void withDetachedAutoKeepalive(startAuto(ctx, pi, base, verboseMode, options)).catch((err) => {
|
|
230
271
|
const message = getErrorMessage(err);
|
|
231
272
|
ctx.ui.notify(`Auto-start failed: ${message}`, "error");
|
|
232
273
|
logWarning("engine", `auto start error: ${message}`, { file: "auto.ts" });
|
|
@@ -264,9 +305,50 @@ export function shouldUseWorktreeIsolation(basePath) {
|
|
|
264
305
|
*/
|
|
265
306
|
// Re-export budget utilities for external consumers
|
|
266
307
|
export { getBudgetAlertLevel, getNewBudgetAlertLevel, getBudgetEnforcementAction, } from "./auto-budget.js";
|
|
308
|
+
function closeOutSignalInterruptedUnit(currentBasePath) {
|
|
309
|
+
const currentUnit = s.currentUnit;
|
|
310
|
+
if (!currentUnit)
|
|
311
|
+
return;
|
|
312
|
+
const reason = "Auto-mode process received a termination signal";
|
|
313
|
+
const errorContext = {
|
|
314
|
+
message: reason,
|
|
315
|
+
category: "aborted",
|
|
316
|
+
isTransient: false,
|
|
317
|
+
};
|
|
318
|
+
const basePath = s.basePath || currentBasePath;
|
|
319
|
+
try {
|
|
320
|
+
emitOpenUnitEndForUnit(basePath, currentUnit.type, currentUnit.id, "cancelled", errorContext);
|
|
321
|
+
}
|
|
322
|
+
catch (err) {
|
|
323
|
+
logWarning("engine", `signal unit-end cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
324
|
+
}
|
|
325
|
+
try {
|
|
326
|
+
writeUnitRuntimeRecord(basePath, currentUnit.type, currentUnit.id, currentUnit.startedAt, {
|
|
327
|
+
phase: "crashed",
|
|
328
|
+
lastProgressAt: Date.now(),
|
|
329
|
+
lastProgressKind: "signal",
|
|
330
|
+
});
|
|
331
|
+
}
|
|
332
|
+
catch (err) {
|
|
333
|
+
logWarning("engine", `signal runtime cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
if (s.workerId)
|
|
337
|
+
markLatestActiveForWorkerCanceled(s.workerId, "signal-exit");
|
|
338
|
+
}
|
|
339
|
+
catch (err) {
|
|
340
|
+
logWarning("engine", `signal dispatch cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
resolveAgentEndCancelled(errorContext);
|
|
344
|
+
}
|
|
345
|
+
catch (err) {
|
|
346
|
+
logWarning("engine", `signal resolve cleanup failed: ${getErrorMessage(err)}`, { file: "auto.ts" });
|
|
347
|
+
}
|
|
348
|
+
}
|
|
267
349
|
/** Wrapper: register SIGTERM handler and store reference. */
|
|
268
350
|
function registerSigtermHandler(currentBasePath) {
|
|
269
|
-
s.sigtermHandler = _registerSigtermHandler(currentBasePath, s.sigtermHandler);
|
|
351
|
+
s.sigtermHandler = _registerSigtermHandler(currentBasePath, s.sigtermHandler, () => closeOutSignalInterruptedUnit(currentBasePath));
|
|
270
352
|
}
|
|
271
353
|
/** Wrapper: deregister SIGTERM handler and clear reference. */
|
|
272
354
|
function deregisterSigtermHandler() {
|
|
@@ -352,6 +434,20 @@ export function _warnIfWorktreeMissingForTest(worktreePath, milestoneId) {
|
|
|
352
434
|
export function isAutoPaused() {
|
|
353
435
|
return s.paused;
|
|
354
436
|
}
|
|
437
|
+
export async function refreshResumeResourcesAndDb(basePath, deps = {}) {
|
|
438
|
+
const env = deps.env ?? process.env;
|
|
439
|
+
const importModule = deps.importModule ?? ((specifier) => import(specifier));
|
|
440
|
+
const agentDir = env.GSD_CODING_AGENT_DIR || join(gsdHome(), "agent");
|
|
441
|
+
const pkgRoot = env.GSD_PKG_ROOT;
|
|
442
|
+
const resourceLoaderPath = pkgRoot
|
|
443
|
+
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
444
|
+
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
445
|
+
const { initResources } = await importModule(resourceLoaderPath);
|
|
446
|
+
initResources(agentDir);
|
|
447
|
+
const { primeCache } = await importModule("./prompt-loader.js");
|
|
448
|
+
primeCache();
|
|
449
|
+
await (deps.openProjectDb ?? openProjectDbIfPresent)(basePath);
|
|
450
|
+
}
|
|
355
451
|
export function setActiveEngineId(id) {
|
|
356
452
|
s.activeEngineId = id;
|
|
357
453
|
}
|
|
@@ -555,7 +651,21 @@ function handleLostSessionLock(ctx, lockStatus) {
|
|
|
555
651
|
* the stale unit state, progress widget, status badge, and restores CWD so
|
|
556
652
|
* the dashboard does not show an orphaned timer and the shell is usable.
|
|
557
653
|
*/
|
|
558
|
-
function
|
|
654
|
+
export async function rerootCommandSession(cmdCtx, workspaceRoot) {
|
|
655
|
+
if (!cmdCtx || !workspaceRoot)
|
|
656
|
+
return { status: "skipped" };
|
|
657
|
+
try {
|
|
658
|
+
const result = await cmdCtx.newSession({ workspaceRoot });
|
|
659
|
+
return result.cancelled ? { status: "cancelled" } : { status: "ok" };
|
|
660
|
+
}
|
|
661
|
+
catch (err) {
|
|
662
|
+
return {
|
|
663
|
+
status: "failed",
|
|
664
|
+
error: err instanceof Error ? err.message : String(err),
|
|
665
|
+
};
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
export async function cleanupAfterLoopExit(ctx) {
|
|
559
669
|
s.currentUnit = null;
|
|
560
670
|
s.active = false;
|
|
561
671
|
deactivateGSD();
|
|
@@ -594,6 +704,26 @@ function cleanupAfterLoopExit(ctx) {
|
|
|
594
704
|
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
595
705
|
}
|
|
596
706
|
}
|
|
707
|
+
if (s.originalBasePath && s.cmdCtx) {
|
|
708
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
709
|
+
if (result.status === "cancelled") {
|
|
710
|
+
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
711
|
+
}
|
|
712
|
+
else if (result.status === "failed") {
|
|
713
|
+
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
export function _cleanupAfterLoopExitForTest(ctx) {
|
|
718
|
+
return cleanupAfterLoopExit(ctx);
|
|
719
|
+
}
|
|
720
|
+
export function _resolveAutoWorktreeExitActionForTest(currentMilestoneId, milestoneMergedInPhases, milestoneComplete) {
|
|
721
|
+
const action = _selectStopAutoWorktreeExit({
|
|
722
|
+
currentMilestoneId: currentMilestoneId ?? null,
|
|
723
|
+
milestoneComplete,
|
|
724
|
+
milestoneMergedInPhases,
|
|
725
|
+
});
|
|
726
|
+
return action === "none" ? "skip" : action;
|
|
597
727
|
}
|
|
598
728
|
export async function stopAuto(ctx, pi, reason) {
|
|
599
729
|
if (!s.active && !s.paused)
|
|
@@ -658,6 +788,8 @@ export async function stopAuto(ctx, pi, reason) {
|
|
|
658
788
|
if (s.workerId) {
|
|
659
789
|
markWorkerStopping(s.workerId);
|
|
660
790
|
}
|
|
791
|
+
s.workerId = null;
|
|
792
|
+
s.milestoneLeaseToken = null;
|
|
661
793
|
}
|
|
662
794
|
catch (e) {
|
|
663
795
|
debugLog("stop-cleanup-coordination", { error: e instanceof Error ? e.message : String(e) });
|
|
@@ -701,7 +833,7 @@ export async function stopAuto(ctx, pi, reason) {
|
|
|
701
833
|
const notifyCtx = ctx
|
|
702
834
|
? { notify: ctx.ui.notify.bind(ctx.ui) }
|
|
703
835
|
: { notify: () => { } };
|
|
704
|
-
const
|
|
836
|
+
const lifecycle = buildLifecycle();
|
|
705
837
|
// Check if the milestone is complete. DB status is the authoritative
|
|
706
838
|
// signal — only a successful gsd_complete_milestone call flips it to
|
|
707
839
|
// "complete" (tools/complete-milestone.ts). SUMMARY file presence is
|
|
@@ -732,19 +864,27 @@ export async function stopAuto(ctx, pi, reason) {
|
|
|
732
864
|
// Non-fatal — fall through to preserveBranch path
|
|
733
865
|
logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
734
866
|
}
|
|
735
|
-
|
|
867
|
+
const exitAction = _selectStopAutoWorktreeExit({
|
|
868
|
+
currentMilestoneId: s.currentMilestoneId,
|
|
869
|
+
milestoneComplete,
|
|
870
|
+
milestoneMergedInPhases: s.milestoneMergedInPhases,
|
|
871
|
+
});
|
|
872
|
+
if (exitAction === "merge") {
|
|
736
873
|
// Milestone is complete — merge worktree branch back to main
|
|
737
|
-
|
|
874
|
+
const r = lifecycle.exitMilestone(s.currentMilestoneId, { merge: true }, notifyCtx);
|
|
875
|
+
if (!r.ok && r.cause instanceof Error)
|
|
876
|
+
throw r.cause;
|
|
738
877
|
}
|
|
739
|
-
else {
|
|
878
|
+
else if (exitAction === "preserve") {
|
|
740
879
|
// Milestone still in progress — preserve branch for later resumption
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
880
|
+
const r = lifecycle.exitMilestone(s.currentMilestoneId, { merge: false, preserveBranch: true }, notifyCtx);
|
|
881
|
+
if (!r.ok && r.cause instanceof Error)
|
|
882
|
+
throw r.cause;
|
|
744
883
|
}
|
|
745
884
|
}
|
|
746
885
|
}
|
|
747
886
|
catch (e) {
|
|
887
|
+
ctx?.ui.notify(`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.`, "warning");
|
|
748
888
|
debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
|
|
749
889
|
}
|
|
750
890
|
// ── Step 5: Rebuild state while DB is still open (#3599) ──
|
|
@@ -790,6 +930,19 @@ export async function stopAuto(ctx, pi, reason) {
|
|
|
790
930
|
catch (e) {
|
|
791
931
|
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
792
932
|
}
|
|
933
|
+
// Re-root the active command session/tool runtime after worktree teardown.
|
|
934
|
+
// mergeAndExit restores process.cwd(), but AgentSession has already captured
|
|
935
|
+
// its own cwd for tools and system prompt; refresh it before returning to the
|
|
936
|
+
// user so follow-up commands do not target a removed milestone worktree.
|
|
937
|
+
if (s.originalBasePath && ctx && s.cmdCtx) {
|
|
938
|
+
const result = await rerootCommandSession(s.cmdCtx, s.basePath);
|
|
939
|
+
if (result.status === "cancelled") {
|
|
940
|
+
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.basePath });
|
|
941
|
+
}
|
|
942
|
+
else if (result.status === "failed") {
|
|
943
|
+
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.basePath });
|
|
944
|
+
}
|
|
945
|
+
}
|
|
793
946
|
// ── Step 8: Ledger notification ──
|
|
794
947
|
try {
|
|
795
948
|
const ledger = getLedger();
|
|
@@ -915,6 +1068,11 @@ export async function stopAuto(ctx, pi, reason) {
|
|
|
915
1068
|
s.reset();
|
|
916
1069
|
}
|
|
917
1070
|
}
|
|
1071
|
+
export function _selectStopAutoWorktreeExit(args) {
|
|
1072
|
+
if (!args.currentMilestoneId || args.milestoneMergedInPhases)
|
|
1073
|
+
return "none";
|
|
1074
|
+
return args.milestoneComplete ? "merge" : "preserve";
|
|
1075
|
+
}
|
|
918
1076
|
/**
|
|
919
1077
|
* Pause auto-mode without destroying state. Context is preserved.
|
|
920
1078
|
* The user can interact with the agent, then `/gsd auto` resumes
|
|
@@ -1021,39 +1179,35 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
|
|
|
1021
1179
|
ctx?.ui.notify(`${s.stepMode ? "Step" : "Auto"}-mode paused (Escape). Type to interact, or ${resumeCmd} to resume.`, "info");
|
|
1022
1180
|
}
|
|
1023
1181
|
/**
|
|
1024
|
-
* Build a
|
|
1025
|
-
*
|
|
1182
|
+
* Build a WorktreeLifecycle Module wrapping the current session.
|
|
1183
|
+
*
|
|
1184
|
+
* Per ADR-016, the Lifecycle Module is the typed-Interface owner of milestone
|
|
1185
|
+
* entry/exit/merge verbs and calls Projection on lifecycle transitions. The
|
|
1186
|
+
* deps bag is intentionally focused — Lifecycle does not see the wider auto-
|
|
1187
|
+
* mode dependency graph.
|
|
1026
1188
|
*/
|
|
1027
|
-
function
|
|
1028
|
-
|
|
1029
|
-
isInAutoWorktree,
|
|
1030
|
-
shouldUseWorktreeIsolation,
|
|
1031
|
-
getIsolationMode,
|
|
1032
|
-
mergeMilestoneToMain,
|
|
1033
|
-
syncWorktreeStateBack,
|
|
1034
|
-
teardownAutoWorktree,
|
|
1035
|
-
createAutoWorktree,
|
|
1189
|
+
function buildLifecycle() {
|
|
1190
|
+
const lifecycleDeps = {
|
|
1036
1191
|
enterAutoWorktree,
|
|
1192
|
+
createAutoWorktree,
|
|
1037
1193
|
enterBranchModeForMilestone,
|
|
1038
1194
|
getAutoWorktreePath,
|
|
1195
|
+
getIsolationMode,
|
|
1196
|
+
invalidateAllCaches,
|
|
1197
|
+
GitServiceImpl,
|
|
1198
|
+
loadEffectiveGSDPreferences,
|
|
1199
|
+
worktreeProjection: new WorktreeStateProjection(),
|
|
1200
|
+
isInAutoWorktree,
|
|
1039
1201
|
autoCommitCurrentBranch,
|
|
1040
|
-
getCurrentBranch,
|
|
1041
1202
|
autoWorktreeBranch,
|
|
1203
|
+
teardownAutoWorktree,
|
|
1204
|
+
mergeMilestoneToMain,
|
|
1205
|
+
getCurrentBranch,
|
|
1206
|
+
checkoutBranch: nativeCheckoutBranch,
|
|
1042
1207
|
resolveMilestoneFile,
|
|
1043
1208
|
readFileSync: (path, encoding) => readFileSync(path, encoding),
|
|
1044
|
-
GitServiceImpl: GitServiceImpl,
|
|
1045
|
-
loadEffectiveGSDPreferences: loadEffectiveGSDPreferences,
|
|
1046
|
-
invalidateAllCaches,
|
|
1047
|
-
captureIntegrationBranch,
|
|
1048
1209
|
};
|
|
1049
|
-
|
|
1050
|
-
/**
|
|
1051
|
-
* Build a WorktreeResolver wrapping the current session.
|
|
1052
|
-
* Cheap to construct — it's just a thin wrapper over `s` + deps.
|
|
1053
|
-
* Used by stopAuto(), resume path, and buildLoopDeps().
|
|
1054
|
-
*/
|
|
1055
|
-
function buildResolver() {
|
|
1056
|
-
return new WorktreeResolver(s, buildResolverDeps());
|
|
1210
|
+
return new WorktreeLifecycle(s, lifecycleDeps);
|
|
1057
1211
|
}
|
|
1058
1212
|
/**
|
|
1059
1213
|
* Thin entry glue for the new Auto Orchestration module.
|
|
@@ -1066,9 +1220,26 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
|
|
|
1066
1220
|
const flowId = `auto-orchestrator-${Date.now()}`;
|
|
1067
1221
|
let seq = 0;
|
|
1068
1222
|
const deps = {
|
|
1223
|
+
stateReconciliation: {
|
|
1224
|
+
async reconcileBeforeDispatch() {
|
|
1225
|
+
const result = await reconcileBeforeDispatch(dispatchBasePath);
|
|
1226
|
+
if (!result.ok) {
|
|
1227
|
+
return {
|
|
1228
|
+
ok: false,
|
|
1229
|
+
reason: result.reason,
|
|
1230
|
+
stateSnapshot: result.stateSnapshot,
|
|
1231
|
+
};
|
|
1232
|
+
}
|
|
1233
|
+
return {
|
|
1234
|
+
ok: true,
|
|
1235
|
+
reason: result.repaired.join(", "),
|
|
1236
|
+
stateSnapshot: result.stateSnapshot,
|
|
1237
|
+
};
|
|
1238
|
+
},
|
|
1239
|
+
},
|
|
1069
1240
|
dispatch: {
|
|
1070
|
-
async decideNextUnit() {
|
|
1071
|
-
const state =
|
|
1241
|
+
async decideNextUnit(input) {
|
|
1242
|
+
const state = input.stateSnapshot;
|
|
1072
1243
|
const active = state.activeMilestone;
|
|
1073
1244
|
if (!active)
|
|
1074
1245
|
return null;
|
|
@@ -1092,12 +1263,48 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
|
|
|
1092
1263
|
},
|
|
1093
1264
|
recovery: {
|
|
1094
1265
|
async classifyAndRecover(input) {
|
|
1095
|
-
const
|
|
1096
|
-
return { action:
|
|
1266
|
+
const recovery = classifyFailure(input);
|
|
1267
|
+
return { action: recovery.action, reason: recovery.reason };
|
|
1268
|
+
},
|
|
1269
|
+
},
|
|
1270
|
+
toolContract: {
|
|
1271
|
+
async compileUnitToolContract(unitType) {
|
|
1272
|
+
const result = compileUnitToolContract(unitType);
|
|
1273
|
+
if (!result.ok)
|
|
1274
|
+
return { ok: false, reason: result.detail };
|
|
1275
|
+
return { ok: true, reason: result.contract.validationRules.join(", ") };
|
|
1097
1276
|
},
|
|
1098
1277
|
},
|
|
1099
1278
|
worktree: {
|
|
1100
|
-
async prepareForUnit() {
|
|
1279
|
+
async prepareForUnit(unitType, unitId) {
|
|
1280
|
+
const manifest = resolveManifest(unitType);
|
|
1281
|
+
if (!manifest) {
|
|
1282
|
+
return {
|
|
1283
|
+
ok: false,
|
|
1284
|
+
reason: `No Unit manifest is registered for ${unitType}`,
|
|
1285
|
+
};
|
|
1286
|
+
}
|
|
1287
|
+
const writeScope = manifest.tools.mode === "all" || manifest.tools.mode === "docs"
|
|
1288
|
+
? "source-writing"
|
|
1289
|
+
: "planning-only";
|
|
1290
|
+
const safety = createWorktreeSafetyModule();
|
|
1291
|
+
const snapshot = await deriveState(dispatchBasePath);
|
|
1292
|
+
const milestoneId = snapshot.activeMilestone?.id ?? null;
|
|
1293
|
+
const expectedBranch = milestoneId ? autoWorktreeBranch(milestoneId) : null;
|
|
1294
|
+
const result = safety.validateUnitRoot({
|
|
1295
|
+
unitType,
|
|
1296
|
+
unitId,
|
|
1297
|
+
writeScope,
|
|
1298
|
+
projectRoot: runtimeBasePath,
|
|
1299
|
+
unitRoot: dispatchBasePath,
|
|
1300
|
+
milestoneId,
|
|
1301
|
+
expectedBranch,
|
|
1302
|
+
});
|
|
1303
|
+
if (!result.ok) {
|
|
1304
|
+
return { ok: false, reason: `${result.kind}: ${result.reason}` };
|
|
1305
|
+
}
|
|
1306
|
+
return { ok: true, reason: result.kind };
|
|
1307
|
+
},
|
|
1101
1308
|
async syncAfterUnit() { },
|
|
1102
1309
|
async cleanupOnStop() { },
|
|
1103
1310
|
},
|
|
@@ -1191,6 +1398,7 @@ function buildLoopDeps(pi) {
|
|
|
1191
1398
|
// (resolveDispatch, runPreDispatchHooks, etc.) delegate to the registry.
|
|
1192
1399
|
initRegistry(convertDispatchRules(DISPATCH_RULES));
|
|
1193
1400
|
const cmux = makeCmuxEmitters(pi);
|
|
1401
|
+
const worktreeProjection = new WorktreeStateProjection();
|
|
1194
1402
|
return {
|
|
1195
1403
|
lockBase,
|
|
1196
1404
|
buildSnapshotOpts,
|
|
@@ -1210,8 +1418,8 @@ function buildLoopDeps(pi) {
|
|
|
1210
1418
|
loadEffectiveGSDPreferences,
|
|
1211
1419
|
// Pre-dispatch health gate
|
|
1212
1420
|
preDispatchHealthGate,
|
|
1213
|
-
// Worktree
|
|
1214
|
-
|
|
1421
|
+
// Worktree state projection (ADR-016 — single Module Interface)
|
|
1422
|
+
worktreeProjection,
|
|
1215
1423
|
// Resource version guard
|
|
1216
1424
|
checkResourcesStale,
|
|
1217
1425
|
// Session lock
|
|
@@ -1272,8 +1480,9 @@ function buildLoopDeps(pi) {
|
|
|
1272
1480
|
atomicWriteSync,
|
|
1273
1481
|
// Git
|
|
1274
1482
|
GitServiceImpl: GitServiceImpl,
|
|
1275
|
-
//
|
|
1276
|
-
|
|
1483
|
+
// Worktree Lifecycle Module (ADR-016 — single Module Interface for the
|
|
1484
|
+
// milestone create/enter/exit/merge verbs)
|
|
1485
|
+
lifecycle: buildLifecycle(),
|
|
1277
1486
|
// Post-unit processing
|
|
1278
1487
|
postUnitPreVerification,
|
|
1279
1488
|
runPostUnitVerification,
|
|
@@ -1504,9 +1713,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1504
1713
|
if (resumeWorktreePath && !existsSync(resumeWorktreePath)) {
|
|
1505
1714
|
logWarning("session", `Worktree was expected at ${resumeWorktreePath} but is missing. Continuing in project-root mode. To restart with a fresh worktree, run /gsd-debug or recreate the milestone.`, { file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" });
|
|
1506
1715
|
}
|
|
1507
|
-
|
|
1508
|
-
s.basePath = resumeWorktreePath;
|
|
1509
|
-
}
|
|
1716
|
+
s.basePath = _resolvePausedResumeBasePathForTest(base, resumeWorktreePath);
|
|
1510
1717
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
1511
1718
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1512
1719
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -1532,9 +1739,14 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1532
1739
|
!isInAutoWorktree(s.basePath) &&
|
|
1533
1740
|
!detectWorktreeName(s.basePath) &&
|
|
1534
1741
|
!detectWorktreeName(s.originalBasePath)) {
|
|
1535
|
-
|
|
1742
|
+
const enterResult = buildLifecycle().enterMilestone(s.currentMilestoneId, {
|
|
1536
1743
|
notify: ctx.ui.notify.bind(ctx.ui),
|
|
1537
1744
|
});
|
|
1745
|
+
if (!enterResult.ok && enterResult.reason === "lease-conflict") {
|
|
1746
|
+
ctx.ui.notify(`Cannot resume milestone ${s.currentMilestoneId}: lease is held by another worker.`, "error");
|
|
1747
|
+
await stopAuto(ctx, pi, "lease-conflict during resume");
|
|
1748
|
+
return;
|
|
1749
|
+
}
|
|
1538
1750
|
// s.basePath may have been updated to a worktree path by enterMilestone.
|
|
1539
1751
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1540
1752
|
}
|
|
@@ -1551,16 +1763,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1551
1763
|
// tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
|
|
1552
1764
|
// relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
|
|
1553
1765
|
// Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
|
|
1554
|
-
|
|
1555
|
-
const pkgRoot = process.env.GSD_PKG_ROOT;
|
|
1556
|
-
const resourceLoaderPath = pkgRoot
|
|
1557
|
-
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
1558
|
-
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
1559
|
-
const { initResources } = await import(resourceLoaderPath);
|
|
1560
|
-
initResources(agentDir);
|
|
1561
|
-
// Open the project DB before rebuild/derive so resume uses DB-backed
|
|
1562
|
-
// state instead of falling back to stale markdown parsing (#2940).
|
|
1563
|
-
await openProjectDbIfPresent(s.basePath);
|
|
1766
|
+
await refreshResumeResourcesAndDb(s.basePath);
|
|
1564
1767
|
try {
|
|
1565
1768
|
await rebuildState(s.basePath);
|
|
1566
1769
|
pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync", preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
|
|
@@ -1613,7 +1816,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1613
1816
|
runKernelLoop: runUokKernelLoop,
|
|
1614
1817
|
runLegacyLoop: runLegacyAutoLoop,
|
|
1615
1818
|
});
|
|
1616
|
-
cleanupAfterLoopExit(ctx);
|
|
1819
|
+
await cleanupAfterLoopExit(ctx);
|
|
1617
1820
|
return;
|
|
1618
1821
|
}
|
|
1619
1822
|
// ── Fresh start path — delegated to auto-start.ts ──
|
|
@@ -1621,8 +1824,12 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1621
1824
|
shouldUseWorktreeIsolation,
|
|
1622
1825
|
registerSigtermHandler,
|
|
1623
1826
|
lockBase,
|
|
1624
|
-
|
|
1827
|
+
buildLifecycle,
|
|
1625
1828
|
};
|
|
1829
|
+
// Register the worker before bootstrap enters a milestone worktree.
|
|
1830
|
+
// This ensures enterMilestone can claim a lease and seed dispatch claims
|
|
1831
|
+
// for crash-recovery fidelity (#5405).
|
|
1832
|
+
registerAutoWorkerForSession(s, base);
|
|
1626
1833
|
const ready = await bootstrapAutoSession(s, ctx, pi, base, verboseMode, requestedStepMode, bootstrapDeps, freshStartAssessment);
|
|
1627
1834
|
if (!ready)
|
|
1628
1835
|
return;
|
|
@@ -1656,7 +1863,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
|
|
|
1656
1863
|
runKernelLoop: runUokKernelLoop,
|
|
1657
1864
|
runLegacyLoop: runLegacyAutoLoop,
|
|
1658
1865
|
});
|
|
1659
|
-
cleanupAfterLoopExit(ctx);
|
|
1866
|
+
await cleanupAfterLoopExit(ctx);
|
|
1660
1867
|
}
|
|
1661
1868
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
1662
1869
|
export { describeNextUnit } from "./auto-dashboard.js";
|
|
@@ -1740,28 +1947,7 @@ export async function dispatchHookUnit(ctx, pi, hookName, triggerUnitType, trigg
|
|
|
1740
1947
|
id: triggerUnitId,
|
|
1741
1948
|
startedAt: hookStartedAt,
|
|
1742
1949
|
};
|
|
1743
|
-
|
|
1744
|
-
// newSession() snapshots process.cwd() during construction; chdir-ing
|
|
1745
|
-
// afterward leaves the session rooted to whatever cwd was when the call
|
|
1746
|
-
// was made. Must be synchronous — no awaits between chdir and newSession.
|
|
1747
|
-
try {
|
|
1748
|
-
if (process.cwd() !== s.basePath)
|
|
1749
|
-
process.chdir(s.basePath);
|
|
1750
|
-
}
|
|
1751
|
-
catch (err) {
|
|
1752
|
-
const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
|
|
1753
|
-
logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
|
|
1754
|
-
ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
|
|
1755
|
-
if (wasActive) {
|
|
1756
|
-
s.basePath = previousBasePath;
|
|
1757
|
-
s.currentUnit = previousCurrentUnit;
|
|
1758
|
-
}
|
|
1759
|
-
else {
|
|
1760
|
-
s.reset();
|
|
1761
|
-
}
|
|
1762
|
-
return false;
|
|
1763
|
-
}
|
|
1764
|
-
const result = await s.cmdCtx.newSession();
|
|
1950
|
+
const result = await s.cmdCtx.newSession({ workspaceRoot: s.basePath });
|
|
1765
1951
|
if (result.cancelled) {
|
|
1766
1952
|
await stopAuto(ctx, pi);
|
|
1767
1953
|
return false;
|