gsd-pi 2.80.0-dev.fbe7c8c6f → 2.81.0
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/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 +282 -132
- 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 +16 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +112 -78
- package/dist/resources/extensions/gsd/auto-prompts.js +103 -16
- package/dist/resources/extensions/gsd/auto-recovery.js +43 -1
- package/dist/resources/extensions/gsd/auto-start.js +252 -14
- 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 +264 -86
- 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 +24 -6
- 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/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 +119 -42
- 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 +22 -17
- 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-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/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-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 +14 -14
- package/dist/web/standalone/.next/build-manifest.json +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- 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.js +2 -2
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- 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 +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- 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/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-0481f1221120a7c6.js → webpack-de742b64187e13fe.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- 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 +3 -3
- package/packages/daemon/package.json +2 -2
- 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/package.json +2 -2
- 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/package.json +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/package.json +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/package.json +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 +6 -2
- 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 +3 -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 +6 -6
- package/packages/pi-coding-agent/dist/core/extensions/runner.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +5 -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__/tool-execution.test.js +89 -2
- 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/tool-card-cleanup-and-success-runtime.test.js +25 -1
- 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 +155 -7
- 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 +31 -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/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/package.json +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 +6 -2
- 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 +5 -3
- package/packages/pi-coding-agent/src/core/extensions/runner.ts +8 -5
- 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__/tool-execution.test.ts +119 -2
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +180 -7
- 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 +39 -8
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +27 -3
- 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/package.json +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/packages/rpc-client/package.json +1 -1
- package/pkg/package.json +1 -1
- 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 +10 -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 +393 -200
- 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 +16 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +124 -80
- package/src/resources/extensions/gsd/auto-prompts.ts +112 -15
- package/src/resources/extensions/gsd/auto-recovery.ts +54 -0
- package/src/resources/extensions/gsd/auto-start.ts +319 -19
- 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 +324 -88
- 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 +32 -7
- 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/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 +148 -49
- 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 +22 -17
- 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-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/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 +543 -40
- 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 +15 -6
- 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/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/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/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/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 -77
- 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 +55 -0
- 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 +14 -13
- 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-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-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/dist/web/standalone/.next/static/chunks/app/page-fab3ebb85b006001.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- 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/{yTuahMMuJzVnsov5PreWl → drLMkgfHQ8lzS229_HWYR}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{yTuahMMuJzVnsov5PreWl → drLMkgfHQ8lzS229_HWYR}/_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,16 @@ 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
|
+
|
|
423
469
|
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
424
470
|
|
|
425
471
|
function withDetachedAutoKeepalive<T>(run: Promise<T>): Promise<T> {
|
|
@@ -501,9 +547,54 @@ export {
|
|
|
501
547
|
getBudgetEnforcementAction,
|
|
502
548
|
} from "./auto-budget.js";
|
|
503
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
|
+
|
|
504
591
|
/** Wrapper: register SIGTERM handler and store reference. */
|
|
505
592
|
function registerSigtermHandler(currentBasePath: string): void {
|
|
506
|
-
s.sigtermHandler = _registerSigtermHandler(
|
|
593
|
+
s.sigtermHandler = _registerSigtermHandler(
|
|
594
|
+
currentBasePath,
|
|
595
|
+
s.sigtermHandler,
|
|
596
|
+
() => closeOutSignalInterruptedUnit(currentBasePath),
|
|
597
|
+
);
|
|
507
598
|
}
|
|
508
599
|
|
|
509
600
|
/** Wrapper: deregister SIGTERM handler and clear reference. */
|
|
@@ -606,6 +697,30 @@ export function isAutoPaused(): boolean {
|
|
|
606
697
|
return s.paused;
|
|
607
698
|
}
|
|
608
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
|
+
|
|
609
724
|
export function setActiveEngineId(id: string | null): void {
|
|
610
725
|
s.activeEngineId = id;
|
|
611
726
|
}
|
|
@@ -860,7 +975,23 @@ function handleLostSessionLock(
|
|
|
860
975
|
* the stale unit state, progress widget, status badge, and restores CWD so
|
|
861
976
|
* the dashboard does not show an orphaned timer and the shell is usable.
|
|
862
977
|
*/
|
|
863
|
-
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> {
|
|
864
995
|
s.currentUnit = null;
|
|
865
996
|
s.active = false;
|
|
866
997
|
deactivateGSD();
|
|
@@ -898,6 +1029,34 @@ function cleanupAfterLoopExit(ctx: ExtensionContext): void {
|
|
|
898
1029
|
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
899
1030
|
}
|
|
900
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;
|
|
901
1060
|
}
|
|
902
1061
|
|
|
903
1062
|
export async function stopAuto(
|
|
@@ -968,6 +1127,8 @@ export async function stopAuto(
|
|
|
968
1127
|
if (s.workerId) {
|
|
969
1128
|
markWorkerStopping(s.workerId);
|
|
970
1129
|
}
|
|
1130
|
+
s.workerId = null;
|
|
1131
|
+
s.milestoneLeaseToken = null;
|
|
971
1132
|
} catch (e) {
|
|
972
1133
|
debugLog("stop-cleanup-coordination", { error: e instanceof Error ? e.message : String(e) });
|
|
973
1134
|
}
|
|
@@ -1011,7 +1172,7 @@ export async function stopAuto(
|
|
|
1011
1172
|
const notifyCtx = ctx
|
|
1012
1173
|
? { notify: ctx.ui.notify.bind(ctx.ui) }
|
|
1013
1174
|
: { notify: () => {} };
|
|
1014
|
-
const
|
|
1175
|
+
const lifecycle = buildLifecycle();
|
|
1015
1176
|
|
|
1016
1177
|
// Check if the milestone is complete. DB status is the authoritative
|
|
1017
1178
|
// signal — only a successful gsd_complete_milestone call flips it to
|
|
@@ -1049,17 +1210,35 @@ export async function stopAuto(
|
|
|
1049
1210
|
logWarning("engine", `milestone summary check failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1050
1211
|
}
|
|
1051
1212
|
|
|
1052
|
-
|
|
1213
|
+
const exitAction = _selectStopAutoWorktreeExit({
|
|
1214
|
+
currentMilestoneId: s.currentMilestoneId,
|
|
1215
|
+
milestoneComplete,
|
|
1216
|
+
milestoneMergedInPhases: s.milestoneMergedInPhases,
|
|
1217
|
+
});
|
|
1218
|
+
|
|
1219
|
+
if (exitAction === "merge") {
|
|
1053
1220
|
// Milestone is complete — merge worktree branch back to main
|
|
1054
|
-
|
|
1055
|
-
|
|
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") {
|
|
1056
1228
|
// Milestone still in progress — preserve branch for later resumption
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
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;
|
|
1060
1235
|
}
|
|
1061
1236
|
}
|
|
1062
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
|
+
);
|
|
1063
1242
|
debugLog("stop-cleanup-worktree", { error: e instanceof Error ? e.message : String(e) });
|
|
1064
1243
|
}
|
|
1065
1244
|
|
|
@@ -1105,6 +1284,19 @@ export async function stopAuto(
|
|
|
1105
1284
|
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1106
1285
|
}
|
|
1107
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
|
+
|
|
1108
1300
|
// ── Step 8: Ledger notification ──
|
|
1109
1301
|
try {
|
|
1110
1302
|
const ledger = getLedger();
|
|
@@ -1233,6 +1425,17 @@ export async function stopAuto(
|
|
|
1233
1425
|
}
|
|
1234
1426
|
}
|
|
1235
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
|
+
|
|
1236
1439
|
/**
|
|
1237
1440
|
* Pause auto-mode without destroying state. Context is preserved.
|
|
1238
1441
|
* The user can interact with the agent, then `/gsd auto` resumes
|
|
@@ -1351,43 +1554,36 @@ export async function pauseAuto(
|
|
|
1351
1554
|
}
|
|
1352
1555
|
|
|
1353
1556
|
/**
|
|
1354
|
-
* Build a
|
|
1355
|
-
*
|
|
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.
|
|
1356
1563
|
*/
|
|
1357
|
-
function
|
|
1358
|
-
|
|
1359
|
-
isInAutoWorktree,
|
|
1360
|
-
shouldUseWorktreeIsolation,
|
|
1361
|
-
getIsolationMode,
|
|
1362
|
-
mergeMilestoneToMain,
|
|
1363
|
-
syncWorktreeStateBack,
|
|
1364
|
-
teardownAutoWorktree,
|
|
1365
|
-
createAutoWorktree,
|
|
1564
|
+
function buildLifecycle(): WorktreeLifecycle {
|
|
1565
|
+
const lifecycleDeps = {
|
|
1366
1566
|
enterAutoWorktree,
|
|
1567
|
+
createAutoWorktree,
|
|
1367
1568
|
enterBranchModeForMilestone,
|
|
1368
1569
|
getAutoWorktreePath,
|
|
1570
|
+
getIsolationMode,
|
|
1571
|
+
invalidateAllCaches,
|
|
1572
|
+
GitServiceImpl,
|
|
1573
|
+
loadEffectiveGSDPreferences,
|
|
1574
|
+
worktreeProjection: new WorktreeStateProjection(),
|
|
1575
|
+
isInAutoWorktree,
|
|
1369
1576
|
autoCommitCurrentBranch,
|
|
1370
|
-
getCurrentBranch,
|
|
1371
1577
|
autoWorktreeBranch,
|
|
1578
|
+
teardownAutoWorktree,
|
|
1579
|
+
mergeMilestoneToMain,
|
|
1580
|
+
getCurrentBranch,
|
|
1581
|
+
checkoutBranch: nativeCheckoutBranch,
|
|
1372
1582
|
resolveMilestoneFile,
|
|
1373
1583
|
readFileSync: (path: string, encoding: string) =>
|
|
1374
1584
|
readFileSync(path, encoding as BufferEncoding),
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
loadEffectiveGSDPreferences:
|
|
1378
|
-
loadEffectiveGSDPreferences as unknown as WorktreeResolverDeps["loadEffectiveGSDPreferences"],
|
|
1379
|
-
invalidateAllCaches,
|
|
1380
|
-
captureIntegrationBranch,
|
|
1381
|
-
};
|
|
1382
|
-
}
|
|
1383
|
-
|
|
1384
|
-
/**
|
|
1385
|
-
* Build a WorktreeResolver wrapping the current session.
|
|
1386
|
-
* Cheap to construct — it's just a thin wrapper over `s` + deps.
|
|
1387
|
-
* Used by stopAuto(), resume path, and buildLoopDeps().
|
|
1388
|
-
*/
|
|
1389
|
-
function buildResolver(): WorktreeResolver {
|
|
1390
|
-
return new WorktreeResolver(s, buildResolverDeps());
|
|
1585
|
+
} as unknown as WorktreeLifecycleDeps;
|
|
1586
|
+
return new WorktreeLifecycle(s, lifecycleDeps);
|
|
1391
1587
|
}
|
|
1392
1588
|
|
|
1393
1589
|
/**
|
|
@@ -1407,9 +1603,26 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1407
1603
|
let seq = 0;
|
|
1408
1604
|
|
|
1409
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
|
+
},
|
|
1410
1623
|
dispatch: {
|
|
1411
|
-
async decideNextUnit() {
|
|
1412
|
-
const state =
|
|
1624
|
+
async decideNextUnit(input) {
|
|
1625
|
+
const state = input.stateSnapshot;
|
|
1413
1626
|
const active = state.activeMilestone;
|
|
1414
1627
|
if (!active) return null;
|
|
1415
1628
|
|
|
@@ -1433,12 +1646,48 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1433
1646
|
},
|
|
1434
1647
|
recovery: {
|
|
1435
1648
|
async classifyAndRecover(input) {
|
|
1436
|
-
const
|
|
1437
|
-
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(", ") };
|
|
1438
1658
|
},
|
|
1439
1659
|
},
|
|
1440
1660
|
worktree: {
|
|
1441
|
-
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
|
+
},
|
|
1442
1691
|
async syncAfterUnit() {},
|
|
1443
1692
|
async cleanupOnStop() {},
|
|
1444
1693
|
},
|
|
@@ -1536,6 +1785,7 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1536
1785
|
initRegistry(convertDispatchRules(DISPATCH_RULES));
|
|
1537
1786
|
|
|
1538
1787
|
const cmux = makeCmuxEmitters(pi);
|
|
1788
|
+
const worktreeProjection = new WorktreeStateProjection();
|
|
1539
1789
|
|
|
1540
1790
|
return {
|
|
1541
1791
|
lockBase,
|
|
@@ -1559,8 +1809,8 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1559
1809
|
// Pre-dispatch health gate
|
|
1560
1810
|
preDispatchHealthGate,
|
|
1561
1811
|
|
|
1562
|
-
// Worktree
|
|
1563
|
-
|
|
1812
|
+
// Worktree state projection (ADR-016 — single Module Interface)
|
|
1813
|
+
worktreeProjection,
|
|
1564
1814
|
|
|
1565
1815
|
// Resource version guard
|
|
1566
1816
|
checkResourcesStale,
|
|
@@ -1632,8 +1882,9 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1632
1882
|
// Git
|
|
1633
1883
|
GitServiceImpl: GitServiceImpl as unknown as LoopDeps["GitServiceImpl"],
|
|
1634
1884
|
|
|
1635
|
-
//
|
|
1636
|
-
|
|
1885
|
+
// Worktree Lifecycle Module (ADR-016 — single Module Interface for the
|
|
1886
|
+
// milestone create/enter/exit/merge verbs)
|
|
1887
|
+
lifecycle: buildLifecycle(),
|
|
1637
1888
|
|
|
1638
1889
|
// Post-unit processing
|
|
1639
1890
|
postUnitPreVerification,
|
|
@@ -1910,9 +2161,7 @@ export async function startAuto(
|
|
|
1910
2161
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
1911
2162
|
);
|
|
1912
2163
|
}
|
|
1913
|
-
|
|
1914
|
-
s.basePath = resumeWorktreePath;
|
|
1915
|
-
}
|
|
2164
|
+
s.basePath = _resolvePausedResumeBasePathForTest(base, resumeWorktreePath);
|
|
1916
2165
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
1917
2166
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1918
2167
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -1940,9 +2189,17 @@ export async function startAuto(
|
|
|
1940
2189
|
!detectWorktreeName(s.basePath) &&
|
|
1941
2190
|
!detectWorktreeName(s.originalBasePath)
|
|
1942
2191
|
) {
|
|
1943
|
-
|
|
2192
|
+
const enterResult = buildLifecycle().enterMilestone(s.currentMilestoneId, {
|
|
1944
2193
|
notify: ctx.ui.notify.bind(ctx.ui),
|
|
1945
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
|
+
}
|
|
1946
2203
|
// s.basePath may have been updated to a worktree path by enterMilestone.
|
|
1947
2204
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
1948
2205
|
}
|
|
@@ -1964,16 +2221,7 @@ export async function startAuto(
|
|
|
1964
2221
|
// tree; deployed extensions live at ~/.gsd/agent/extensions/gsd/ where the
|
|
1965
2222
|
// relative path resolves to ~/.gsd/agent/resource-loader.js which doesn't exist.
|
|
1966
2223
|
// Using GSD_PKG_ROOT constructs a correct absolute path in both contexts (#3949).
|
|
1967
|
-
|
|
1968
|
-
const pkgRoot = process.env.GSD_PKG_ROOT;
|
|
1969
|
-
const resourceLoaderPath = pkgRoot
|
|
1970
|
-
? pathToFileURL(join(pkgRoot, "dist", "resource-loader.js")).href
|
|
1971
|
-
: new URL("../../../resource-loader.js", import.meta.url).href;
|
|
1972
|
-
const { initResources } = await import(resourceLoaderPath);
|
|
1973
|
-
initResources(agentDir);
|
|
1974
|
-
// Open the project DB before rebuild/derive so resume uses DB-backed
|
|
1975
|
-
// state instead of falling back to stale markdown parsing (#2940).
|
|
1976
|
-
await openProjectDbIfPresent(s.basePath);
|
|
2224
|
+
await refreshResumeResourcesAndDb(s.basePath);
|
|
1977
2225
|
try {
|
|
1978
2226
|
await rebuildState(s.basePath);
|
|
1979
2227
|
pi.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "sync" as const, preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, state: await deriveState(s.basePath) });
|
|
@@ -2045,7 +2293,7 @@ export async function startAuto(
|
|
|
2045
2293
|
runKernelLoop: runUokKernelLoop,
|
|
2046
2294
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2047
2295
|
});
|
|
2048
|
-
cleanupAfterLoopExit(ctx);
|
|
2296
|
+
await cleanupAfterLoopExit(ctx);
|
|
2049
2297
|
return;
|
|
2050
2298
|
}
|
|
2051
2299
|
|
|
@@ -2054,9 +2302,14 @@ export async function startAuto(
|
|
|
2054
2302
|
shouldUseWorktreeIsolation,
|
|
2055
2303
|
registerSigtermHandler,
|
|
2056
2304
|
lockBase,
|
|
2057
|
-
|
|
2305
|
+
buildLifecycle,
|
|
2058
2306
|
};
|
|
2059
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
|
+
|
|
2060
2313
|
const ready = await bootstrapAutoSession(
|
|
2061
2314
|
s,
|
|
2062
2315
|
ctx,
|
|
@@ -2100,7 +2353,7 @@ export async function startAuto(
|
|
|
2100
2353
|
runKernelLoop: runUokKernelLoop,
|
|
2101
2354
|
runLegacyLoop: runLegacyAutoLoop,
|
|
2102
2355
|
});
|
|
2103
|
-
cleanupAfterLoopExit(ctx);
|
|
2356
|
+
await cleanupAfterLoopExit(ctx);
|
|
2104
2357
|
}
|
|
2105
2358
|
|
|
2106
2359
|
// describeNextUnit is imported from auto-dashboard.ts and re-exported
|
|
@@ -2224,24 +2477,7 @@ export async function dispatchHookUnit(
|
|
|
2224
2477
|
startedAt: hookStartedAt,
|
|
2225
2478
|
};
|
|
2226
2479
|
|
|
2227
|
-
|
|
2228
|
-
// newSession() snapshots process.cwd() during construction; chdir-ing
|
|
2229
|
-
// afterward leaves the session rooted to whatever cwd was when the call
|
|
2230
|
-
// was made. Must be synchronous — no awaits between chdir and newSession.
|
|
2231
|
-
try { if (process.cwd() !== s.basePath) process.chdir(s.basePath); } catch (err) {
|
|
2232
|
-
const msg = `Failed to chdir before hook newSession (basePath: ${s.basePath}): ${err instanceof Error ? err.message : String(err)}`;
|
|
2233
|
-
logWarning("engine", msg, { file: "auto.ts", basePath: s.basePath, error: err instanceof Error ? err.message : String(err) });
|
|
2234
|
-
ctx.ui.notify(`${msg}. Cancelling hook dispatch to avoid running in the wrong directory.`, "error");
|
|
2235
|
-
if (wasActive) {
|
|
2236
|
-
s.basePath = previousBasePath;
|
|
2237
|
-
s.currentUnit = previousCurrentUnit;
|
|
2238
|
-
} else {
|
|
2239
|
-
s.reset();
|
|
2240
|
-
}
|
|
2241
|
-
return false;
|
|
2242
|
-
}
|
|
2243
|
-
|
|
2244
|
-
const result = await s.cmdCtx!.newSession();
|
|
2480
|
+
const result = await s.cmdCtx!.newSession({ workspaceRoot: s.basePath });
|
|
2245
2481
|
if (result.cancelled) {
|
|
2246
2482
|
await stopAuto(ctx, pi);
|
|
2247
2483
|
return false;
|