gsd-pi 2.81.0 → 2.82.0-dev.c22380fc3
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 +60 -30
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/tools/screenshot.js +1 -0
- package/dist/resources/extensions/browser-tools/tools/zoom.js +1 -0
- package/dist/resources/extensions/gsd/auto/loop.js +111 -8
- package/dist/resources/extensions/gsd/auto/orchestrator.js +113 -6
- package/dist/resources/extensions/gsd/auto/phases.js +199 -97
- package/dist/resources/extensions/gsd/auto/run-unit.js +66 -3
- package/dist/resources/extensions/gsd/auto/session.js +9 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +43 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +182 -178
- package/dist/resources/extensions/gsd/auto-dispatch.js +14 -11
- package/dist/resources/extensions/gsd/auto-post-unit.js +7 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +11 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +6 -181
- package/dist/resources/extensions/gsd/auto-runtime-state.js +5 -0
- package/dist/resources/extensions/gsd/auto-start.js +20 -23
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +33 -5
- package/dist/resources/extensions/gsd/auto-verification.js +12 -6
- package/dist/resources/extensions/gsd/auto-worktree.js +8 -0
- package/dist/resources/extensions/gsd/auto.js +371 -106
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +13 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +13 -2
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +4 -8
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +4 -10
- package/dist/resources/extensions/gsd/commands/handlers/parallel.js +9 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +15 -2
- package/dist/resources/extensions/gsd/context-store.js +112 -0
- package/dist/resources/extensions/gsd/db-writer.js +150 -84
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +41 -6
- package/dist/resources/extensions/gsd/git-service.js +2 -1
- package/dist/resources/extensions/gsd/gsd-db.js +7 -23
- package/dist/resources/extensions/gsd/health-widget-core.js +1 -1
- package/dist/resources/extensions/gsd/health-widget.js +4 -10
- package/dist/resources/extensions/gsd/knowledge-backfill.js +144 -0
- package/dist/resources/extensions/gsd/knowledge-capture.js +136 -0
- package/dist/resources/extensions/gsd/knowledge-parser.js +154 -0
- package/dist/resources/extensions/gsd/knowledge-projection.js +210 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +6 -96
- package/dist/resources/extensions/gsd/md-importer.js +1 -1
- package/dist/resources/extensions/gsd/memory-backfill.js +73 -17
- package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +222 -0
- package/dist/resources/extensions/gsd/migrate/command.js +5 -0
- package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
- package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
- package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
- package/dist/resources/extensions/gsd/native-git-bridge.js +14 -14
- package/dist/resources/extensions/gsd/notification-overlay.js +35 -40
- package/dist/resources/extensions/gsd/parallel-merge.js +53 -30
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +25 -33
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/dist/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/dist/resources/extensions/gsd/prompts/system.md +2 -2
- package/dist/resources/extensions/gsd/provider-switch-observer.js +146 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +15 -1
- package/dist/resources/extensions/gsd/session-lock.js +40 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +131 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +247 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +87 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +50 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +124 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-worker.js +32 -0
- package/dist/resources/extensions/gsd/state-reconciliation/errors.js +41 -0
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +99 -0
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +24 -0
- package/dist/resources/extensions/gsd/state-reconciliation/spawn-gate.js +43 -0
- package/dist/resources/extensions/gsd/state-reconciliation/types.js +3 -0
- package/dist/resources/extensions/gsd/state-reconciliation.js +5 -26
- package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
- package/dist/resources/extensions/gsd/tui/render-kit.js +74 -0
- package/dist/resources/extensions/gsd/watch/header-renderer.js +92 -69
- package/dist/resources/extensions/gsd/watch/splash-palette.js +10 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +2 -2
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +743 -318
- package/dist/resources/extensions/gsd/worktree-telemetry.js +3 -1
- 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 +12 -12
- 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/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 +12 -12
- 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.js +2 -2
- 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/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- 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 +0 -7
- package/dist/welcome-screen.js +60 -69
- package/package.json +3 -2
- package/packages/contracts/dist/rpc.test.js +7 -0
- package/packages/contracts/dist/rpc.test.js.map +1 -1
- package/packages/contracts/dist/workflow.d.ts +21 -0
- package/packages/contracts/dist/workflow.d.ts.map +1 -1
- package/packages/contracts/dist/workflow.js +24 -0
- package/packages/contracts/dist/workflow.js.map +1 -1
- package/packages/contracts/src/rpc.test.ts +8 -0
- package/packages/contracts/src/workflow.ts +24 -0
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/README.md +14 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +80 -0
- 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-parity.test.ts +244 -0
- package/packages/mcp-server/src/workflow-tools.test.ts +22 -0
- package/packages/mcp-server/src/workflow-tools.ts +168 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/index.d.ts +2 -2
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -1
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts +11 -0
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +20 -0
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/index.ts +7 -2
- package/packages/pi-ai/src/providers/transform-messages.ts +24 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +4 -4
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/assistant-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +76 -9
- 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/__tests__/user-message-design.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js +40 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/user-message-design.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +30 -29
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +10 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.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 +13 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts +1 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js +58 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts +2 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js +12 -6
- package/packages/pi-coding-agent/dist/modes/interactive/components/diff.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +14 -41
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +0 -1
- 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 +86 -82
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts +35 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js +152 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/transcript-design.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts +16 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js +73 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tui-style-kit.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +12 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +105 -1
- package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.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 +27 -26
- 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 +9 -6
- package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +17 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/assistant-message-design.test.ts +56 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +113 -9
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/user-message-design.test.ts +48 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +10 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +43 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +14 -14
- package/packages/pi-coding-agent/src/modes/interactive/components/bash-execution.ts +64 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/diff.ts +13 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +15 -42
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +84 -104
- package/packages/pi-coding-agent/src/modes/interactive/components/transcript-design.ts +196 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tui-style-kit.ts +94 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +14 -9
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme-highlight.test.ts +23 -0
- package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +106 -1
- package/packages/pi-coding-agent/src/modes/interactive/theme/themes.ts +27 -26
- package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +9 -6
- package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +22 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +14 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.d.ts.map +1 -1
- package/packages/pi-tui/dist/overlay-layout.js +9 -6
- package/packages/pi-tui/dist/overlay-layout.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +5 -0
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +20 -1
- package/packages/pi-tui/src/overlay-layout.ts +10 -7
- package/packages/pi-tui/src/tui.ts +6 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts +2 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.d.ts.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js +17 -0
- package/pkg/dist/modes/interactive/theme/theme-highlight.test.js.map +1 -0
- package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/theme.js +105 -1
- package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.d.ts.map +1 -1
- package/pkg/dist/modes/interactive/theme/themes.js +27 -26
- package/pkg/dist/modes/interactive/theme/themes.js.map +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/browser-tools/tools/screenshot.ts +1 -0
- package/src/resources/extensions/browser-tools/tools/zoom.ts +1 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +46 -11
- package/src/resources/extensions/gsd/auto/loop-deps.ts +9 -5
- package/src/resources/extensions/gsd/auto/loop.ts +113 -9
- package/src/resources/extensions/gsd/auto/orchestrator.ts +118 -6
- package/src/resources/extensions/gsd/auto/phases.ts +158 -19
- package/src/resources/extensions/gsd/auto/run-unit.ts +69 -4
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +82 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +230 -183
- package/src/resources/extensions/gsd/auto-dispatch.ts +15 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +7 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +11 -3
- package/src/resources/extensions/gsd/auto-recovery.ts +7 -209
- package/src/resources/extensions/gsd/auto-runtime-state.ts +5 -0
- package/src/resources/extensions/gsd/auto-start.ts +22 -22
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +51 -0
- package/src/resources/extensions/gsd/auto-verification.ts +12 -6
- package/src/resources/extensions/gsd/auto-worktree.ts +8 -0
- package/src/resources/extensions/gsd/auto.ts +411 -106
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +21 -6
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +12 -2
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +5 -8
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +4 -10
- package/src/resources/extensions/gsd/commands/handlers/parallel.ts +12 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +19 -2
- package/src/resources/extensions/gsd/context-store.ts +120 -1
- package/src/resources/extensions/gsd/db-writer.ts +167 -84
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +44 -6
- package/src/resources/extensions/gsd/doctor-types.ts +2 -0
- package/src/resources/extensions/gsd/git-service.ts +2 -0
- package/src/resources/extensions/gsd/gsd-db.ts +7 -23
- package/src/resources/extensions/gsd/health-widget-core.ts +1 -1
- package/src/resources/extensions/gsd/health-widget.ts +6 -10
- package/src/resources/extensions/gsd/journal.ts +2 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +164 -0
- package/src/resources/extensions/gsd/knowledge-capture.ts +160 -0
- package/src/resources/extensions/gsd/knowledge-parser.ts +174 -0
- package/src/resources/extensions/gsd/knowledge-projection.ts +241 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +10 -96
- package/src/resources/extensions/gsd/md-importer.ts +1 -1
- package/src/resources/extensions/gsd/memory-backfill.ts +89 -17
- package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +277 -0
- package/src/resources/extensions/gsd/migrate/command.ts +5 -0
- package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
- package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
- package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
- package/src/resources/extensions/gsd/native-git-bridge.ts +14 -13
- package/src/resources/extensions/gsd/notification-overlay.ts +50 -46
- package/src/resources/extensions/gsd/parallel-merge.ts +61 -34
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +33 -35
- package/src/resources/extensions/gsd/prompts/complete-slice.md +14 -12
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +20 -2
- package/src/resources/extensions/gsd/prompts/discuss.md +20 -2
- package/src/resources/extensions/gsd/prompts/system.md +2 -2
- package/src/resources/extensions/gsd/provider-switch-observer.ts +185 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +18 -1
- package/src/resources/extensions/gsd/session-lock.ts +41 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +172 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +337 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +69 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +109 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +68 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +185 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-worker.ts +46 -0
- package/src/resources/extensions/gsd/state-reconciliation/errors.ts +67 -0
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +142 -0
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +27 -0
- package/src/resources/extensions/gsd/state-reconciliation/spawn-gate.ts +60 -0
- package/src/resources/extensions/gsd/state-reconciliation/types.ts +83 -0
- package/src/resources/extensions/gsd/state-reconciliation.ts +21 -53
- package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +729 -176
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +408 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +292 -4
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +20 -5
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-unit-closeout.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +28 -1
- package/src/resources/extensions/gsd/tests/db-writer.test.ts +13 -8
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +453 -0
- package/src/resources/extensions/gsd/tests/decisions-stop-table-writes.test.ts +348 -0
- package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +20 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/header-renderer.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +10 -0
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
- package/src/resources/extensions/gsd/tests/integration/integration-proof.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +116 -24
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +323 -0
- package/src/resources/extensions/gsd/tests/knowledge-capture.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -2
- package/src/resources/extensions/gsd/tests/load-knowledge-block-rules-only.test.ts +209 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +46 -11
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/notification-overlay.test.ts +78 -41
- package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +12 -217
- package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +38 -6
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
- package/src/resources/extensions/gsd/tests/resume-dispatch-worktree.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +16 -4
- package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +71 -58
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +952 -0
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/tui-header-lifecycle.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/tui-render-kit.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +158 -58
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +597 -118
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +18 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
- package/src/resources/extensions/gsd/tui/render-kit.ts +109 -0
- package/src/resources/extensions/gsd/watch/header-renderer.ts +121 -79
- package/src/resources/extensions/gsd/watch/splash-palette.ts +11 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +2 -2
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +1171 -526
- package/src/resources/extensions/gsd/worktree-telemetry.ts +7 -2
- package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Wop3A7KRGyR06H3rla_1-}/_ssgManifest.js +0 -0
|
@@ -16,6 +16,7 @@ import type {
|
|
|
16
16
|
ExtensionAPI,
|
|
17
17
|
ExtensionContext,
|
|
18
18
|
ExtensionCommandContext,
|
|
19
|
+
SessionMessageEntry,
|
|
19
20
|
} from "@gsd/pi-coding-agent";
|
|
20
21
|
|
|
21
22
|
import { deriveState } from "./state.js";
|
|
@@ -32,7 +33,7 @@ import {
|
|
|
32
33
|
setRuntimeKv,
|
|
33
34
|
deleteRuntimeKv,
|
|
34
35
|
} from "./db/runtime-kv.js";
|
|
35
|
-
import { getManifestStatus } from "./files.js";
|
|
36
|
+
import { extractSection, getManifestStatus, splitFrontmatter, parseFrontmatterMap } from "./files.js";
|
|
36
37
|
export { inlinePriorMilestoneSummary } from "./files.js";
|
|
37
38
|
import { collectSecretsFromManifest } from "../get-secrets-from-user.js";
|
|
38
39
|
import {
|
|
@@ -188,6 +189,8 @@ import { isClosedStatus } from "./status-guards.js";
|
|
|
188
189
|
import {
|
|
189
190
|
type AutoDashboardData,
|
|
190
191
|
updateProgressWidget as _updateProgressWidget,
|
|
192
|
+
setCompletionProgressWidget,
|
|
193
|
+
setAutoOutcomeWidget,
|
|
191
194
|
updateSliceProgressCache,
|
|
192
195
|
clearSliceProgressCache,
|
|
193
196
|
describeNextUnit as _describeNextUnit,
|
|
@@ -201,7 +204,7 @@ import {
|
|
|
201
204
|
deregisterSigtermHandler as _deregisterSigtermHandler,
|
|
202
205
|
detectWorkingTreeActivity,
|
|
203
206
|
} from "./auto-supervisor.js";
|
|
204
|
-
import { isDbAvailable, getMilestone } from "./gsd-db.js";
|
|
207
|
+
import { isDbAvailable, getMilestone, getMilestoneSlices } from "./gsd-db.js";
|
|
205
208
|
import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
|
|
206
209
|
import { writeUnitRuntimeRecord } from "./unit-runtime.js";
|
|
207
210
|
import { countPendingCaptures } from "./captures.js";
|
|
@@ -231,18 +234,20 @@ import { bootstrapAutoSession, openProjectDbIfPresent, type BootstrapDeps } from
|
|
|
231
234
|
import { initHealthWidget } from "./health-widget.js";
|
|
232
235
|
import { runLegacyAutoLoop, runUokKernelLoop } from "./auto/loop.js";
|
|
233
236
|
import { resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSessionSwitchInFlight } from "./auto/resolve.js";
|
|
234
|
-
import type { LoopDeps } from "./auto/loop-deps.js";
|
|
237
|
+
import type { LoopDeps, StopAutoOptions } from "./auto/loop-deps.js";
|
|
235
238
|
import type { ErrorContext } from "./auto/types.js";
|
|
236
239
|
import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
237
240
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
238
241
|
import { validateDirectory } from "./validate-directory.js";
|
|
239
242
|
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
240
|
-
import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
|
|
243
|
+
import type { AutoOrchestrationModule, AutoOrchestratorDeps, DispatchAdapter } from "./auto/contracts.js";
|
|
241
244
|
import { reconcileBeforeDispatch } from "./state-reconciliation.js";
|
|
242
245
|
import { compileUnitToolContract } from "./tool-contract.js";
|
|
243
246
|
import { createWorktreeSafetyModule } from "./worktree-safety.js";
|
|
244
247
|
import { resolveManifest } from "./unit-context-manifest.js";
|
|
245
248
|
import { classifyFailure } from "./recovery-classification.js";
|
|
249
|
+
import { supportsStructuredQuestions } from "./workflow-mcp.js";
|
|
250
|
+
import type { MinimalModelRegistry } from "./context-budget.js";
|
|
246
251
|
// Slice-level parallelism (#2340)
|
|
247
252
|
import { getEligibleSlices } from "./slice-parallel-eligibility.js";
|
|
248
253
|
import { startSliceParallel } from "./slice-parallel-orchestrator.js";
|
|
@@ -456,15 +461,10 @@ export function _synthesizePausedSessionRecoveryForTest(
|
|
|
456
461
|
return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
|
|
457
462
|
}
|
|
458
463
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
): string {
|
|
464
|
-
return pausedWorktreePath && pathExists(pausedWorktreePath)
|
|
465
|
-
? pausedWorktreePath
|
|
466
|
-
: basePath;
|
|
467
|
-
}
|
|
464
|
+
// `_resolvePausedResumeBasePathForTest` was retired in ADR-016 phase 2 / B3
|
|
465
|
+
// (#5621). Production callers go through
|
|
466
|
+
// `WorktreeLifecycle.resumeFromPausedSession`; the pure helper for tests is
|
|
467
|
+
// `resolvePausedResumeBasePath` exported from `worktree-lifecycle.ts`.
|
|
468
468
|
|
|
469
469
|
const DETACHED_AUTO_KEEPALIVE_INTERVAL_MS = 30_000;
|
|
470
470
|
|
|
@@ -668,6 +668,10 @@ export function isAutoActive(): boolean {
|
|
|
668
668
|
return s.active;
|
|
669
669
|
}
|
|
670
670
|
|
|
671
|
+
export function isAutoCompletionStopInProgress(): boolean {
|
|
672
|
+
return s.completionStopInProgress;
|
|
673
|
+
}
|
|
674
|
+
|
|
671
675
|
/** Test-only seam for validating auto-mode guards (#4704). Do not use in production code. */
|
|
672
676
|
export function _setAutoActiveForTest(active: boolean): void {
|
|
673
677
|
s.active = active;
|
|
@@ -928,6 +932,31 @@ function buildSnapshotOpts(
|
|
|
928
932
|
};
|
|
929
933
|
}
|
|
930
934
|
|
|
935
|
+
function currentUnitLabel(): string | null {
|
|
936
|
+
if (!s.currentUnit) return null;
|
|
937
|
+
return `${unitVerb(s.currentUnit.type)} ${s.currentUnit.id}`;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
function setLifecycleOutcome(
|
|
941
|
+
ctx: ExtensionContext | undefined,
|
|
942
|
+
input: {
|
|
943
|
+
status: "paused" | "stopped" | "blocked" | "failed" | "complete" | "waiting" | "step";
|
|
944
|
+
title: string;
|
|
945
|
+
detail?: string | null;
|
|
946
|
+
nextAction: string;
|
|
947
|
+
commands?: string[];
|
|
948
|
+
unitLabel?: string | null;
|
|
949
|
+
},
|
|
950
|
+
): void {
|
|
951
|
+
if (!ctx?.hasUI) return;
|
|
952
|
+
const { unitLabel: unitLabelOverride, ...rest } = input;
|
|
953
|
+
setAutoOutcomeWidget(ctx, {
|
|
954
|
+
...rest,
|
|
955
|
+
unitLabel: unitLabelOverride !== undefined ? unitLabelOverride : currentUnitLabel(),
|
|
956
|
+
startedAt: s.autoStartTime,
|
|
957
|
+
});
|
|
958
|
+
}
|
|
959
|
+
|
|
931
960
|
function handleLostSessionLock(
|
|
932
961
|
ctx?: ExtensionContext,
|
|
933
962
|
lockStatus?: SessionLockStatus,
|
|
@@ -1015,27 +1044,35 @@ export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void>
|
|
|
1015
1044
|
// visible so the user still has a resumable auto-mode signal on screen.
|
|
1016
1045
|
if (!s.paused) {
|
|
1017
1046
|
ctx.ui.setStatus("gsd-auto", undefined);
|
|
1018
|
-
|
|
1047
|
+
if (s.completionStopInProgress) {
|
|
1048
|
+
s.completionStopInProgress = false;
|
|
1049
|
+
}
|
|
1019
1050
|
initHealthWidget(ctx);
|
|
1020
1051
|
}
|
|
1021
1052
|
|
|
1022
|
-
//
|
|
1053
|
+
// ADR-016 phase 3 (#5693): the stop-path basePath restore + chdir routes
|
|
1054
|
+
// through `Lifecycle.restoreToProjectRoot()`, the sole owner of both
|
|
1055
|
+
// `s.basePath` mutation and the paired `process.chdir` for auto-loop
|
|
1056
|
+
// transitions. The verb assigns `s.basePath` before any throwable work, so
|
|
1057
|
+
// a thrown error still leaves basePath restored.
|
|
1023
1058
|
if (s.originalBasePath) {
|
|
1024
|
-
s.basePath = s.originalBasePath;
|
|
1025
1059
|
try {
|
|
1026
|
-
|
|
1060
|
+
buildLifecycle().restoreToProjectRoot();
|
|
1027
1061
|
} catch (err) {
|
|
1028
|
-
|
|
1029
|
-
|
|
1062
|
+
logWarning(
|
|
1063
|
+
"engine",
|
|
1064
|
+
`restore project root failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
1065
|
+
{ file: "auto.ts" },
|
|
1066
|
+
);
|
|
1030
1067
|
}
|
|
1031
1068
|
}
|
|
1032
1069
|
|
|
1033
1070
|
if (s.originalBasePath && s.cmdCtx) {
|
|
1034
|
-
const result = await rerootCommandSession(s.cmdCtx, s.
|
|
1071
|
+
const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
|
|
1035
1072
|
if (result.status === "cancelled") {
|
|
1036
|
-
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.
|
|
1073
|
+
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
|
|
1037
1074
|
} else if (result.status === "failed") {
|
|
1038
|
-
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.
|
|
1075
|
+
logWarning("engine", `post-loop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
|
|
1039
1076
|
}
|
|
1040
1077
|
}
|
|
1041
1078
|
}
|
|
@@ -1046,6 +1083,58 @@ export function _cleanupAfterLoopExitForTest(ctx: ExtensionContext): Promise<voi
|
|
|
1046
1083
|
|
|
1047
1084
|
export type AutoWorktreeExitAction = "skip" | "merge" | "preserve";
|
|
1048
1085
|
|
|
1086
|
+
interface MilestoneCompletionRollup {
|
|
1087
|
+
milestoneTitle?: string;
|
|
1088
|
+
oneLiner?: string;
|
|
1089
|
+
successCriteriaResults?: string;
|
|
1090
|
+
definitionOfDoneResults?: string;
|
|
1091
|
+
requirementOutcomes?: string;
|
|
1092
|
+
deviations?: string;
|
|
1093
|
+
followUps?: string;
|
|
1094
|
+
keyDecisions?: string[];
|
|
1095
|
+
keyFiles?: string[];
|
|
1096
|
+
lessonsLearned?: string[];
|
|
1097
|
+
}
|
|
1098
|
+
|
|
1099
|
+
function normalizeFrontmatterList(value: unknown): string[] {
|
|
1100
|
+
if (!Array.isArray(value)) return [];
|
|
1101
|
+
return value
|
|
1102
|
+
.map(item => typeof item === "string" ? item.trim() : "")
|
|
1103
|
+
.filter(item => item.length > 0 && item !== "(none)");
|
|
1104
|
+
}
|
|
1105
|
+
|
|
1106
|
+
function firstBoldParagraph(body: string): string | undefined {
|
|
1107
|
+
const match = body.match(/\*\*([^*\n][\s\S]*?)\*\*/);
|
|
1108
|
+
return match?.[1]?.replace(/\s+/g, " ").trim() || undefined;
|
|
1109
|
+
}
|
|
1110
|
+
|
|
1111
|
+
function loadMilestoneCompletionRollup(basePath: string, milestoneId: string | null | undefined): MilestoneCompletionRollup {
|
|
1112
|
+
if (!milestoneId) return {};
|
|
1113
|
+
const summaryPath = resolveMilestoneFile(basePath, milestoneId, "SUMMARY");
|
|
1114
|
+
if (!summaryPath || !existsSync(summaryPath)) return {};
|
|
1115
|
+
|
|
1116
|
+
try {
|
|
1117
|
+
const raw = readFileSync(summaryPath, "utf-8");
|
|
1118
|
+
const [frontmatterLines, body] = splitFrontmatter(raw);
|
|
1119
|
+
const frontmatter = frontmatterLines ? parseFrontmatterMap(frontmatterLines) : {};
|
|
1120
|
+
return {
|
|
1121
|
+
milestoneTitle: typeof frontmatter.title === "string" ? frontmatter.title : undefined,
|
|
1122
|
+
oneLiner: firstBoldParagraph(body),
|
|
1123
|
+
successCriteriaResults: extractSection(body, "Success Criteria Results") ?? undefined,
|
|
1124
|
+
definitionOfDoneResults: extractSection(body, "Definition of Done Results") ?? undefined,
|
|
1125
|
+
requirementOutcomes: extractSection(body, "Requirement Outcomes") ?? undefined,
|
|
1126
|
+
deviations: extractSection(body, "Deviations") ?? undefined,
|
|
1127
|
+
followUps: extractSection(body, "Follow-ups") ?? undefined,
|
|
1128
|
+
keyDecisions: normalizeFrontmatterList(frontmatter.key_decisions),
|
|
1129
|
+
keyFiles: normalizeFrontmatterList(frontmatter.key_files),
|
|
1130
|
+
lessonsLearned: normalizeFrontmatterList(frontmatter.lessons_learned),
|
|
1131
|
+
};
|
|
1132
|
+
} catch (err) {
|
|
1133
|
+
logWarning("dashboard", `completion roll-up summary read failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1134
|
+
return {};
|
|
1135
|
+
}
|
|
1136
|
+
}
|
|
1137
|
+
|
|
1049
1138
|
export function _resolveAutoWorktreeExitActionForTest(
|
|
1050
1139
|
currentMilestoneId: string | null | undefined,
|
|
1051
1140
|
milestoneMergedInPhases: boolean,
|
|
@@ -1063,15 +1152,17 @@ export async function stopAuto(
|
|
|
1063
1152
|
ctx?: ExtensionContext,
|
|
1064
1153
|
pi?: ExtensionAPI,
|
|
1065
1154
|
reason?: string,
|
|
1155
|
+
options: StopAutoOptions = {},
|
|
1066
1156
|
): Promise<void> {
|
|
1067
1157
|
if (!s.active && !s.paused) return;
|
|
1068
1158
|
const loadedPreferences = loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences;
|
|
1069
1159
|
const reasonSuffix = reason ? ` — ${reason}` : "";
|
|
1160
|
+
const preserveCompletionSurface = Boolean(options.completionWidget);
|
|
1161
|
+
s.completionStopInProgress = preserveCompletionSurface;
|
|
1070
1162
|
|
|
1071
|
-
// #4764 — telemetry: record the exit reason
|
|
1072
|
-
// was
|
|
1073
|
-
//
|
|
1074
|
-
// is exactly the pattern that strands work.
|
|
1163
|
+
// #4764 — telemetry: record the exit reason, isolation mode, whether an auto
|
|
1164
|
+
// worktree was active, and whether the current milestone was merged before
|
|
1165
|
+
// stopAuto. The unmerged-work warning is only meaningful for real worktrees.
|
|
1075
1166
|
try {
|
|
1076
1167
|
const { emitAutoExit } = await import("./worktree-telemetry.js");
|
|
1077
1168
|
type AutoExitReason =
|
|
@@ -1096,10 +1187,13 @@ export async function stopAuto(
|
|
|
1096
1187
|
: rawReason === "stop" || rawReason === "pause"
|
|
1097
1188
|
? rawReason
|
|
1098
1189
|
: "other";
|
|
1099
|
-
|
|
1190
|
+
const telemetryBase = s.originalBasePath || s.basePath;
|
|
1191
|
+
emitAutoExit(telemetryBase, {
|
|
1100
1192
|
reason: normalizedReason,
|
|
1101
1193
|
milestoneId: s.currentMilestoneId ?? undefined,
|
|
1102
1194
|
milestoneMerged: s.milestoneMergedInPhases === true,
|
|
1195
|
+
isolationMode: getIsolationMode(telemetryBase),
|
|
1196
|
+
worktreeActive: isInAutoWorktree(s.basePath),
|
|
1103
1197
|
});
|
|
1104
1198
|
} catch (err) {
|
|
1105
1199
|
logWarning("engine", `auto-exit telemetry failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -1257,6 +1351,21 @@ export async function stopAuto(
|
|
|
1257
1351
|
}
|
|
1258
1352
|
}
|
|
1259
1353
|
|
|
1354
|
+
// Pre-compute completion widget slice counts while the DB is still open.
|
|
1355
|
+
// Step 8 runs after closeDatabase(), so DB-backed slice lookups must happen here.
|
|
1356
|
+
const completionMilestoneId = options.completionWidget?.milestoneId ?? s.currentMilestoneId;
|
|
1357
|
+
let completedSlices: number | null = null;
|
|
1358
|
+
let totalSlices: number | null = null;
|
|
1359
|
+
if (preserveCompletionSurface && options.completionWidget && completionMilestoneId && isDbAvailable()) {
|
|
1360
|
+
try {
|
|
1361
|
+
const slices = getMilestoneSlices(completionMilestoneId);
|
|
1362
|
+
completedSlices = slices.filter(slice => isClosedStatus(slice.status)).length;
|
|
1363
|
+
totalSlices = slices.length;
|
|
1364
|
+
} catch (err) {
|
|
1365
|
+
logWarning("dashboard", `completion slice stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
|
|
1260
1369
|
// ── Step 6: DB cleanup ──
|
|
1261
1370
|
if (isDbAvailable()) {
|
|
1262
1371
|
try {
|
|
@@ -1269,19 +1378,15 @@ export async function stopAuto(
|
|
|
1269
1378
|
}
|
|
1270
1379
|
}
|
|
1271
1380
|
|
|
1272
|
-
// ── Step 7: Restore basePath and chdir ──
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1281
|
-
}
|
|
1381
|
+
// ── Step 7: Restore basePath and chdir (ADR-016 phase 3, #5693) ──
|
|
1382
|
+
// `restoreToProjectRoot` owns both s.basePath restore and process.chdir;
|
|
1383
|
+
// no paired chdir is needed at the call site.
|
|
1384
|
+
if (s.originalBasePath) {
|
|
1385
|
+
try {
|
|
1386
|
+
buildLifecycle().restoreToProjectRoot();
|
|
1387
|
+
} catch (e) {
|
|
1388
|
+
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1282
1389
|
}
|
|
1283
|
-
} catch (e) {
|
|
1284
|
-
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1285
1390
|
}
|
|
1286
1391
|
|
|
1287
1392
|
// Re-root the active command session/tool runtime after worktree teardown.
|
|
@@ -1289,30 +1394,91 @@ export async function stopAuto(
|
|
|
1289
1394
|
// its own cwd for tools and system prompt; refresh it before returning to the
|
|
1290
1395
|
// user so follow-up commands do not target a removed milestone worktree.
|
|
1291
1396
|
if (s.originalBasePath && ctx && s.cmdCtx) {
|
|
1292
|
-
const result = await rerootCommandSession(s.cmdCtx, s.
|
|
1397
|
+
const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
|
|
1293
1398
|
if (result.status === "cancelled") {
|
|
1294
|
-
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.
|
|
1399
|
+
logWarning("engine", "post-stop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
|
|
1295
1400
|
} else if (result.status === "failed") {
|
|
1296
|
-
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.
|
|
1401
|
+
logWarning("engine", `post-stop session re-root failed: ${result.error ?? "unknown"}`, { file: "auto.ts", basePath: s.originalBasePath });
|
|
1297
1402
|
}
|
|
1298
1403
|
}
|
|
1299
1404
|
|
|
1300
1405
|
// ── Step 8: Ledger notification ──
|
|
1301
1406
|
try {
|
|
1302
1407
|
const ledger = getLedger();
|
|
1408
|
+
const isAllComplete = reason === "All milestones complete";
|
|
1409
|
+
const isMilestoneComplete = /^Milestone\s+\S+\s+complete$/i.test(reason ?? "");
|
|
1410
|
+
const notificationPrefix = isAllComplete
|
|
1411
|
+
? "All milestones complete"
|
|
1412
|
+
: isMilestoneComplete
|
|
1413
|
+
? `${reason}. Auto-mode finished this milestone`
|
|
1414
|
+
: `Auto-mode stopped${reasonSuffix}`;
|
|
1303
1415
|
if (ledger && ledger.units.length > 0) {
|
|
1304
1416
|
const totals = getProjectTotals(ledger.units);
|
|
1305
1417
|
ctx?.ui.notify(
|
|
1306
|
-
|
|
1418
|
+
`${notificationPrefix}. Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${ledger.units.length} units`,
|
|
1307
1419
|
"info",
|
|
1308
1420
|
);
|
|
1309
1421
|
} else {
|
|
1310
|
-
ctx?.ui.notify(
|
|
1422
|
+
ctx?.ui.notify(`${notificationPrefix}.`, "info");
|
|
1311
1423
|
}
|
|
1312
1424
|
} catch (e) {
|
|
1313
1425
|
debugLog("stop-cleanup-ledger", { error: e instanceof Error ? e.message : String(e) });
|
|
1314
1426
|
}
|
|
1315
1427
|
|
|
1428
|
+
if (preserveCompletionSurface && ctx && options.completionWidget) {
|
|
1429
|
+
const ledger = getLedger();
|
|
1430
|
+
const units = ledger?.units ?? [];
|
|
1431
|
+
const totals = units.length > 0 ? getProjectTotals(units) : null;
|
|
1432
|
+
let totalInput = 0;
|
|
1433
|
+
let totalCacheRead = 0;
|
|
1434
|
+
try {
|
|
1435
|
+
for (const entry of s.cmdCtx?.sessionManager?.getEntries?.() ?? []) {
|
|
1436
|
+
if (entry.type === "message") {
|
|
1437
|
+
const msgEntry = entry as SessionMessageEntry;
|
|
1438
|
+
if (msgEntry.message?.role === "assistant") {
|
|
1439
|
+
const usage = (msgEntry.message as any).usage;
|
|
1440
|
+
if (usage) {
|
|
1441
|
+
totalInput += usage.input || 0;
|
|
1442
|
+
totalCacheRead += usage.cacheRead || 0;
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
} catch (err) {
|
|
1448
|
+
logWarning("dashboard", `completion stats lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1449
|
+
}
|
|
1450
|
+
const contextUsage = s.cmdCtx?.getContextUsage?.();
|
|
1451
|
+
const milestoneId = completionMilestoneId;
|
|
1452
|
+
const rollup = loadMilestoneCompletionRollup(s.originalBasePath || s.basePath, milestoneId);
|
|
1453
|
+
setCompletionProgressWidget(ctx, {
|
|
1454
|
+
milestoneId,
|
|
1455
|
+
milestoneTitle: options.completionWidget.milestoneTitle ?? rollup.milestoneTitle,
|
|
1456
|
+
oneLiner: rollup.oneLiner,
|
|
1457
|
+
successCriteriaResults: rollup.successCriteriaResults,
|
|
1458
|
+
definitionOfDoneResults: rollup.definitionOfDoneResults,
|
|
1459
|
+
requirementOutcomes: rollup.requirementOutcomes,
|
|
1460
|
+
deviations: rollup.deviations,
|
|
1461
|
+
followUps: rollup.followUps,
|
|
1462
|
+
keyDecisions: rollup.keyDecisions,
|
|
1463
|
+
keyFiles: rollup.keyFiles,
|
|
1464
|
+
lessonsLearned: rollup.lessonsLearned,
|
|
1465
|
+
reason: reason ?? "Milestone complete",
|
|
1466
|
+
startedAt: s.autoStartTime,
|
|
1467
|
+
totalCost: totals?.cost ?? 0,
|
|
1468
|
+
totalTokens: totals?.tokens.total ?? 0,
|
|
1469
|
+
unitCount: units.length,
|
|
1470
|
+
cacheHitRate: totalCacheRead + totalInput > 0
|
|
1471
|
+
? (totalCacheRead / (totalCacheRead + totalInput)) * 100
|
|
1472
|
+
: null,
|
|
1473
|
+
contextPercent: contextUsage?.percent ?? null,
|
|
1474
|
+
contextWindow: contextUsage?.contextWindow ?? s.cmdCtx?.model?.contextWindow ?? null,
|
|
1475
|
+
completedSlices,
|
|
1476
|
+
totalSlices,
|
|
1477
|
+
allMilestonesComplete: options.completionWidget.allMilestonesComplete,
|
|
1478
|
+
basePath: s.originalBasePath || s.basePath || null,
|
|
1479
|
+
});
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1316
1482
|
// ── Step 9: Cmux sidebar / event log ──
|
|
1317
1483
|
try {
|
|
1318
1484
|
pi?.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "clear" as const, preferences: loadedPreferences });
|
|
@@ -1403,8 +1569,20 @@ export async function stopAuto(
|
|
|
1403
1569
|
|
|
1404
1570
|
// UI cleanup
|
|
1405
1571
|
ctx?.ui.setStatus("gsd-auto", undefined);
|
|
1406
|
-
|
|
1407
|
-
|
|
1572
|
+
if (!preserveCompletionSurface) {
|
|
1573
|
+
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
1574
|
+
const status = reason?.startsWith("Blocked:") ? "blocked" : reason?.toLowerCase().includes("fail") ? "failed" : "stopped";
|
|
1575
|
+
setLifecycleOutcome(ctx, {
|
|
1576
|
+
status,
|
|
1577
|
+
title: status === "blocked" ? "Auto-mode blocked" : status === "failed" ? "Auto-mode stopped with an issue" : "Auto-mode stopped",
|
|
1578
|
+
detail: reason ?? "Auto-mode stopped.",
|
|
1579
|
+
nextAction: status === "blocked"
|
|
1580
|
+
? "Fix the blocker, then run /gsd auto to resume."
|
|
1581
|
+
: "Run /gsd status for the current project state, or /gsd auto to continue.",
|
|
1582
|
+
commands: ["/gsd status for overview", "/gsd auto to run", "/gsd visualize to inspect", "/gsd notifications for history"],
|
|
1583
|
+
});
|
|
1584
|
+
if (ctx) initHealthWidget(ctx);
|
|
1585
|
+
}
|
|
1408
1586
|
restoreProjectRootEnv();
|
|
1409
1587
|
restoreMilestoneLockEnv();
|
|
1410
1588
|
|
|
@@ -1421,7 +1599,7 @@ export async function stopAuto(
|
|
|
1421
1599
|
}
|
|
1422
1600
|
|
|
1423
1601
|
// Reset all session state in one call
|
|
1424
|
-
s.
|
|
1602
|
+
s.resetAfterStop({ preserveCompletionSurface });
|
|
1425
1603
|
}
|
|
1426
1604
|
}
|
|
1427
1605
|
|
|
@@ -1495,6 +1673,8 @@ export async function pauseAuto(
|
|
|
1495
1673
|
logWarning("engine", `paused-session DB write failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1496
1674
|
}
|
|
1497
1675
|
|
|
1676
|
+
const pausedUnitLabel = currentUnitLabel();
|
|
1677
|
+
|
|
1498
1678
|
// Close out the current unit so its runtime record doesn't stay at "dispatched"
|
|
1499
1679
|
if (s.currentUnit && ctx) {
|
|
1500
1680
|
try {
|
|
@@ -1545,8 +1725,16 @@ export async function pauseAuto(
|
|
|
1545
1725
|
s.verificationRetryCount.clear();
|
|
1546
1726
|
ctx?.ui.setStatus("gsd-auto", "paused");
|
|
1547
1727
|
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
1548
|
-
if (ctx) initHealthWidget(ctx);
|
|
1549
1728
|
const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
|
|
1729
|
+
setLifecycleOutcome(ctx, {
|
|
1730
|
+
status: "paused",
|
|
1731
|
+
title: `${s.stepMode ? "Step" : "Auto"}-mode paused`,
|
|
1732
|
+
detail: _errorContext?.message ?? "Paused by user request.",
|
|
1733
|
+
nextAction: `Type to steer, or run ${resumeCmd} to resume.`,
|
|
1734
|
+
commands: [resumeCmd, "/gsd status for overview", "/gsd notifications for history"],
|
|
1735
|
+
unitLabel: pausedUnitLabel,
|
|
1736
|
+
});
|
|
1737
|
+
if (ctx) initHealthWidget(ctx);
|
|
1550
1738
|
ctx?.ui.notify(
|
|
1551
1739
|
`${s.stepMode ? "Step" : "Auto"}-mode paused (Escape). Type to interact, or ${resumeCmd} to resume.`,
|
|
1552
1740
|
"info",
|
|
@@ -1561,29 +1749,105 @@ export async function pauseAuto(
|
|
|
1561
1749
|
* deps bag is intentionally focused — Lifecycle does not see the wider auto-
|
|
1562
1750
|
* mode dependency graph.
|
|
1563
1751
|
*/
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1752
|
+
/**
|
|
1753
|
+
* Construct a `WorktreeLifecycleDeps` bag without binding to any session.
|
|
1754
|
+
*
|
|
1755
|
+
* Exported so session-less callers (currently `parallel-merge.ts`) can build
|
|
1756
|
+
* the same deps and call `mergeMilestoneStandalone` through the Worktree
|
|
1757
|
+
* Lifecycle Module instead of bypassing it (ADR-016 phase 2 / A2).
|
|
1758
|
+
*/
|
|
1759
|
+
export function buildWorktreeLifecycleDeps(): WorktreeLifecycleDeps {
|
|
1760
|
+
// ADR-016 phase 2 / C-track close-out:
|
|
1761
|
+
// C1 (#5624) — fs + git-CLI primitives inlined
|
|
1762
|
+
// C2 (#5625) — worktree-manager helpers inlined
|
|
1763
|
+
// C3 (#5626) — cache + preferences + paths inlined
|
|
1764
|
+
// C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
|
|
1765
|
+
//
|
|
1766
|
+
// Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
|
|
1767
|
+
// worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
|
|
1768
|
+
// closure.
|
|
1769
|
+
return {
|
|
1770
|
+
gitServiceFactory: (basePath: string) => {
|
|
1771
|
+
const gitConfig =
|
|
1772
|
+
loadEffectiveGSDPreferences()?.preferences?.git ?? {};
|
|
1773
|
+
return new GitServiceImpl(basePath, gitConfig);
|
|
1774
|
+
},
|
|
1574
1775
|
worktreeProjection: new WorktreeStateProjection(),
|
|
1575
|
-
isInAutoWorktree,
|
|
1576
|
-
autoCommitCurrentBranch,
|
|
1577
|
-
autoWorktreeBranch,
|
|
1578
|
-
teardownAutoWorktree,
|
|
1579
1776
|
mergeMilestoneToMain,
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1777
|
+
};
|
|
1778
|
+
}
|
|
1779
|
+
|
|
1780
|
+
function buildLifecycle(): WorktreeLifecycle {
|
|
1781
|
+
return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
|
|
1782
|
+
}
|
|
1783
|
+
|
|
1784
|
+
/**
|
|
1785
|
+
* Build the production `DispatchAdapter` used by `createWiredAutoOrchestrationModule`.
|
|
1786
|
+
*
|
|
1787
|
+
* Exported so tests can verify parity with `runDispatch`'s `resolveDispatch` call —
|
|
1788
|
+
* the wired adapter must derive `structuredQuestionsAvailable`, `sessionContextWindow`,
|
|
1789
|
+
* `sessionProvider`, and `modelRegistry` the same way phases.ts:runDispatch does.
|
|
1790
|
+
*/
|
|
1791
|
+
export function createWiredDispatchAdapter(
|
|
1792
|
+
ctx: ExtensionContext,
|
|
1793
|
+
pi: ExtensionAPI,
|
|
1794
|
+
dispatchBasePath: string,
|
|
1795
|
+
): DispatchAdapter {
|
|
1796
|
+
return {
|
|
1797
|
+
async decideNextUnit(input) {
|
|
1798
|
+
const state = input.stateSnapshot;
|
|
1799
|
+
const active = state.activeMilestone;
|
|
1800
|
+
if (!active) return null;
|
|
1801
|
+
|
|
1802
|
+
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
1803
|
+
|
|
1804
|
+
// Derive session-derived dispatch inputs the same way phases.ts:runDispatch does
|
|
1805
|
+
// (#5789). Prefer caller-supplied values when present so test harnesses and
|
|
1806
|
+
// alternative wirings can inject deterministic snapshots; otherwise pull from
|
|
1807
|
+
// the captured pi/ctx references.
|
|
1808
|
+
const sessionProvider = input.sessionProvider ?? ctx.model?.provider;
|
|
1809
|
+
const sessionContextWindow = input.sessionContextWindow ?? ctx.model?.contextWindow;
|
|
1810
|
+
const modelRegistry = input.modelRegistry ?? (ctx.modelRegistry as MinimalModelRegistry | undefined);
|
|
1811
|
+
const authMode =
|
|
1812
|
+
sessionProvider && typeof ctx.modelRegistry?.getProviderAuthMode === "function"
|
|
1813
|
+
? ctx.modelRegistry.getProviderAuthMode(sessionProvider)
|
|
1814
|
+
: undefined;
|
|
1815
|
+
const activeTools = typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [];
|
|
1816
|
+
// Mirrors runDispatch: deep-planning keeps approval gates in plain chat
|
|
1817
|
+
// because structured questions can be cancelled outside the chat turn on
|
|
1818
|
+
// some transports.
|
|
1819
|
+
const structuredQuestionsAvailable =
|
|
1820
|
+
input.structuredQuestionsAvailable ??
|
|
1821
|
+
(prefs?.planning_depth === "deep"
|
|
1822
|
+
? "false"
|
|
1823
|
+
: supportsStructuredQuestions(activeTools, {
|
|
1824
|
+
authMode,
|
|
1825
|
+
baseUrl: ctx.model?.baseUrl,
|
|
1826
|
+
})
|
|
1827
|
+
? "true"
|
|
1828
|
+
: "false");
|
|
1829
|
+
|
|
1830
|
+
const action = await resolveDispatch({
|
|
1831
|
+
basePath: dispatchBasePath,
|
|
1832
|
+
mid: active.id,
|
|
1833
|
+
midTitle: active.title,
|
|
1834
|
+
state,
|
|
1835
|
+
prefs,
|
|
1836
|
+
structuredQuestionsAvailable,
|
|
1837
|
+
sessionContextWindow,
|
|
1838
|
+
sessionProvider,
|
|
1839
|
+
modelRegistry,
|
|
1840
|
+
});
|
|
1841
|
+
|
|
1842
|
+
if (action.action !== "dispatch") return null;
|
|
1843
|
+
return {
|
|
1844
|
+
unitType: action.unitType,
|
|
1845
|
+
unitId: action.unitId,
|
|
1846
|
+
reason: action.matchedRule ?? "dispatch",
|
|
1847
|
+
preconditions: [],
|
|
1848
|
+
};
|
|
1849
|
+
},
|
|
1850
|
+
};
|
|
1587
1851
|
}
|
|
1588
1852
|
|
|
1589
1853
|
/**
|
|
@@ -1595,7 +1859,7 @@ function buildLifecycle(): WorktreeLifecycle {
|
|
|
1595
1859
|
*/
|
|
1596
1860
|
export function createWiredAutoOrchestrationModule(
|
|
1597
1861
|
ctx: ExtensionContext,
|
|
1598
|
-
|
|
1862
|
+
pi: ExtensionAPI,
|
|
1599
1863
|
dispatchBasePath: string,
|
|
1600
1864
|
runtimeBasePath = resolveProjectRoot(dispatchBasePath),
|
|
1601
1865
|
): AutoOrchestrationModule {
|
|
@@ -1606,44 +1870,25 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1606
1870
|
stateReconciliation: {
|
|
1607
1871
|
async reconcileBeforeDispatch() {
|
|
1608
1872
|
const result = await reconcileBeforeDispatch(dispatchBasePath);
|
|
1609
|
-
if (
|
|
1873
|
+
if (result.blockers.length > 0) {
|
|
1610
1874
|
return {
|
|
1611
1875
|
ok: false,
|
|
1612
|
-
reason: result.
|
|
1876
|
+
reason: result.blockers[0],
|
|
1613
1877
|
stateSnapshot: result.stateSnapshot,
|
|
1614
1878
|
};
|
|
1615
1879
|
}
|
|
1880
|
+
const repairedKinds = result.repaired.map((d) => d.kind);
|
|
1616
1881
|
return {
|
|
1617
1882
|
ok: true,
|
|
1618
|
-
reason:
|
|
1883
|
+
reason:
|
|
1884
|
+
repairedKinds.length > 0
|
|
1885
|
+
? `repaired: ${repairedKinds.join(", ")}`
|
|
1886
|
+
: "clean",
|
|
1619
1887
|
stateSnapshot: result.stateSnapshot,
|
|
1620
1888
|
};
|
|
1621
1889
|
},
|
|
1622
1890
|
},
|
|
1623
|
-
dispatch:
|
|
1624
|
-
async decideNextUnit(input) {
|
|
1625
|
-
const state = input.stateSnapshot;
|
|
1626
|
-
const active = state.activeMilestone;
|
|
1627
|
-
if (!active) return null;
|
|
1628
|
-
|
|
1629
|
-
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
1630
|
-
const action = await resolveDispatch({
|
|
1631
|
-
basePath: dispatchBasePath,
|
|
1632
|
-
mid: active.id,
|
|
1633
|
-
midTitle: active.title,
|
|
1634
|
-
state,
|
|
1635
|
-
prefs,
|
|
1636
|
-
});
|
|
1637
|
-
|
|
1638
|
-
if (action.action !== "dispatch") return null;
|
|
1639
|
-
return {
|
|
1640
|
-
unitType: action.unitType,
|
|
1641
|
-
unitId: action.unitId,
|
|
1642
|
-
reason: action.matchedRule ?? "dispatch",
|
|
1643
|
-
preconditions: [],
|
|
1644
|
-
};
|
|
1645
|
-
},
|
|
1646
|
-
},
|
|
1891
|
+
dispatch: createWiredDispatchAdapter(ctx, pi, dispatchBasePath),
|
|
1647
1892
|
recovery: {
|
|
1648
1893
|
async classifyAndRecover(input) {
|
|
1649
1894
|
const recovery = classifyFailure(input);
|
|
@@ -1692,12 +1937,25 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1692
1937
|
async cleanupOnStop() {},
|
|
1693
1938
|
},
|
|
1694
1939
|
health: {
|
|
1940
|
+
checkResourcesStale() {
|
|
1941
|
+
return checkResourcesStale(s.resourceVersionOnStart);
|
|
1942
|
+
},
|
|
1695
1943
|
async preAdvanceGate() {
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1944
|
+
try {
|
|
1945
|
+
const gate = await preDispatchHealthGate(dispatchBasePath);
|
|
1946
|
+
if (gate.proceed) {
|
|
1947
|
+
return {
|
|
1948
|
+
kind: "pass",
|
|
1949
|
+
fixesApplied: gate.fixesApplied,
|
|
1950
|
+
};
|
|
1951
|
+
}
|
|
1952
|
+
return {
|
|
1953
|
+
kind: "fail",
|
|
1954
|
+
reason: gate.reason ?? "Pre-dispatch health check failed — run /gsd doctor for details.",
|
|
1955
|
+
};
|
|
1956
|
+
} catch (error) {
|
|
1957
|
+
return { kind: "threw", error };
|
|
1958
|
+
}
|
|
1701
1959
|
},
|
|
1702
1960
|
async postAdvanceRecord(result) {
|
|
1703
1961
|
if (result.kind === "error") {
|
|
@@ -1765,6 +2023,43 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1765
2023
|
}
|
|
1766
2024
|
},
|
|
1767
2025
|
},
|
|
2026
|
+
uokGate: {
|
|
2027
|
+
async emit(input) {
|
|
2028
|
+
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
2029
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
2030
|
+
if (!uokFlags.gates) return;
|
|
2031
|
+
const milestoneId = input.milestoneId ?? s.currentMilestoneId ?? undefined;
|
|
2032
|
+
try {
|
|
2033
|
+
const { UokGateRunner } = await import("./uok/gate-runner.js");
|
|
2034
|
+
const runner = new UokGateRunner();
|
|
2035
|
+
runner.register({
|
|
2036
|
+
id: input.gateId,
|
|
2037
|
+
type: input.gateType,
|
|
2038
|
+
execute: async () => ({
|
|
2039
|
+
outcome: input.outcome,
|
|
2040
|
+
failureClass: input.failureClass,
|
|
2041
|
+
rationale: input.rationale,
|
|
2042
|
+
findings: input.findings ?? "",
|
|
2043
|
+
}),
|
|
2044
|
+
});
|
|
2045
|
+
await runner.run(input.gateId, {
|
|
2046
|
+
basePath: dispatchBasePath,
|
|
2047
|
+
traceId: `pre-dispatch:${flowId}`,
|
|
2048
|
+
turnId: `orch-${seq}`,
|
|
2049
|
+
milestoneId,
|
|
2050
|
+
unitType: "pre-dispatch",
|
|
2051
|
+
unitId: `orch-${seq}`,
|
|
2052
|
+
});
|
|
2053
|
+
} catch (err) {
|
|
2054
|
+
logWarning("engine", `uok gate emit failed: ${getErrorMessage(err)}`, {
|
|
2055
|
+
file: "auto.ts",
|
|
2056
|
+
gateId: input.gateId,
|
|
2057
|
+
gateType: input.gateType,
|
|
2058
|
+
...(milestoneId ? { milestoneId } : {}),
|
|
2059
|
+
});
|
|
2060
|
+
}
|
|
2061
|
+
},
|
|
2062
|
+
},
|
|
1768
2063
|
};
|
|
1769
2064
|
|
|
1770
2065
|
return createAutoOrchestrator(deps);
|
|
@@ -1825,7 +2120,6 @@ function buildLoopDeps(pi: ExtensionAPI): LoopDeps {
|
|
|
1825
2120
|
pruneQueueOrder,
|
|
1826
2121
|
isInAutoWorktree,
|
|
1827
2122
|
shouldUseWorktreeIsolation,
|
|
1828
|
-
mergeMilestoneToMain,
|
|
1829
2123
|
teardownAutoWorktree,
|
|
1830
2124
|
createAutoWorktree,
|
|
1831
2125
|
captureIntegrationBranch,
|
|
@@ -2145,7 +2439,12 @@ export async function startAuto(
|
|
|
2145
2439
|
s.verbose = verboseMode;
|
|
2146
2440
|
s.stepMode = requestedStepMode;
|
|
2147
2441
|
s.cmdCtx = ctx;
|
|
2148
|
-
|
|
2442
|
+
// ADR-016 phase 2 / B2 (#5620): bootstrap basePath transition before
|
|
2443
|
+
// the resume path consults persisted worktree state. Defensive about
|
|
2444
|
+
// s.originalBasePath — the meta-restore above (line 2003 / 2055) may
|
|
2445
|
+
// have already populated it from paused metadata; the verb preserves
|
|
2446
|
+
// that value.
|
|
2447
|
+
buildLifecycle().adoptSessionRoot(base);
|
|
2149
2448
|
// ── Resume worktree: if the paused session was inside a milestone worktree,
|
|
2150
2449
|
// apply that path as the dispatch basePath immediately (#3723).
|
|
2151
2450
|
// This ensures the dispatch loop runs from the worktree directory even when
|
|
@@ -2161,7 +2460,8 @@ export async function startAuto(
|
|
|
2161
2460
|
{ file: "auto.ts", milestoneId: s.currentMilestoneId ?? "" },
|
|
2162
2461
|
);
|
|
2163
2462
|
}
|
|
2164
|
-
|
|
2463
|
+
// ADR-016 phase 2 / B3 (#5621): paused-resume worktree-path adoption.
|
|
2464
|
+
buildLifecycle().resumeFromPausedSession(base, resumeWorktreePath);
|
|
2165
2465
|
// Rebuild scope now that s.basePath reflects the actual worktree (or project root).
|
|
2166
2466
|
rebuildScope(s.basePath, s.currentMilestoneId);
|
|
2167
2467
|
// Ensure the workflow-logger audit log is pinned to the project root
|
|
@@ -2463,7 +2763,12 @@ export async function dispatchHookUnit(
|
|
|
2463
2763
|
s.pendingQuickTasks = [];
|
|
2464
2764
|
}
|
|
2465
2765
|
|
|
2466
|
-
|
|
2766
|
+
// ADR-016 phase 2 / B2 (#5620): hook-trigger basePath transition. Treats
|
|
2767
|
+
// the trigger as a bootstrap variant — if the session is fresh,
|
|
2768
|
+
// `originalBasePath` gets set to `targetBasePath`; if the session was
|
|
2769
|
+
// already active with an established `originalBasePath`, the verb
|
|
2770
|
+
// preserves it.
|
|
2771
|
+
buildLifecycle().adoptSessionRoot(targetBasePath);
|
|
2467
2772
|
if (!s.orchestration) {
|
|
2468
2773
|
ensureOrchestrationModule(ctx, pi, s.basePath);
|
|
2469
2774
|
}
|