gsd-pi 2.81.0 → 2.82.0-dev.2841a1e44
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 +63 -32
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +3 -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/cmux/index.js +5 -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 +176 -125
- package/dist/resources/extensions/gsd/auto-prompts.js +13 -5
- 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 +38 -26
- 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/subagent-input.js +16 -7
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +3 -1
- package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +4 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +22 -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-bootstrap.js +5 -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/unit-context-manifest.js +25 -2
- package/dist/resources/extensions/gsd/verification-verdict.js +26 -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/resources/extensions/subagent/index.js +448 -78
- package/dist/resources/extensions/subagent/launch.js +77 -0
- package/dist/resources/extensions/subagent/run-store.js +148 -0
- package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
- package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/dist/resources/extensions/visual-brief/index.js +5 -0
- package/dist/resources/extensions/visual-brief/page-contract.js +122 -0
- package/dist/resources/extensions/visual-brief/prompts.js +111 -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 +11 -11
- 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 +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 +4 -4
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
- 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 +4 -4
- 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 +2 -2
- 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 +5 -5
- 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 +5 -5
- 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 +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
- 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 +11 -11
- 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 +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/2973.33f26573894b6153.js +2 -0
- package/dist/web/standalone/.next/static/chunks/{8359.e059d86b255fce1c.js → 8359.7eb3bb8f8ecf4c01.js} +2 -2
- 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/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-6a95bc41e0f7ec89.js} +1 -1
- package/dist/web/standalone/.next/static/css/0262768ec1b89d34.css +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 +5 -4
- 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/GSD-WORKFLOW.md +3 -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/cmux/index.ts +6 -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 +201 -138
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -5
- 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 +46 -38
- 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/subagent-input.ts +16 -6
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +3 -2
- package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
- package/src/resources/extensions/gsd/commands/catalog.ts +4 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +25 -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-bootstrap.ts +10 -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/brief-command.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
- package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -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/evidence-cross-ref.test.ts +38 -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 +81 -3
- 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/unit-context-manifest.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +83 -0
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -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 +34 -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/unit-context-manifest.ts +35 -2
- package/src/resources/extensions/gsd/verification-verdict.ts +47 -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/src/resources/extensions/subagent/index.ts +567 -103
- package/src/resources/extensions/subagent/launch.ts +131 -0
- package/src/resources/extensions/subagent/run-store.ts +218 -0
- package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
- package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
- package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
- package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
- package/src/resources/extensions/visual-brief/index.ts +8 -0
- package/src/resources/extensions/visual-brief/page-contract.ts +134 -0
- package/src/resources/extensions/visual-brief/prompts.ts +147 -0
- package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +172 -0
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- 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/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +0 -1544
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Qgr2B_MRhPxC0z8fwv4vT}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{drLMkgfHQ8lzS229_HWYR → Qgr2B_MRhPxC0z8fwv4vT}/_ssgManifest.js +0 -0
|
@@ -14,13 +14,11 @@ import { clearParseCache } from "./files.js";
|
|
|
14
14
|
import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
|
|
15
15
|
import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk, getCompletedMilestoneTaskFileHints, getMilestoneCommitAttributionShas, recordMilestoneCommitAttribution } from "./gsd-db.js";
|
|
16
16
|
import { isValidationTerminal } from "./state.js";
|
|
17
|
-
import {
|
|
18
|
-
import { logWarning, logError } from "./workflow-logger.js";
|
|
17
|
+
import { logWarning } from "./workflow-logger.js";
|
|
19
18
|
import { readIntegrationBranch } from "./git-service.js";
|
|
20
19
|
import { isClosedStatus } from "./status-guards.js";
|
|
21
|
-
import { nativeConflictFiles, nativeCommit, nativeCheckoutTheirs, nativeAddPaths, nativeMergeAbort, nativeRebaseAbort, nativeResetHard, } from "./native-git-bridge.js";
|
|
22
20
|
import { resolveSlicePath, resolveSliceFile, resolveTasksDir, resolveTaskFiles, relMilestoneFile, relSliceFile, buildSliceFileName, resolveMilestoneFile, clearPathCache, resolveGsdRootFile, } from "./paths.js";
|
|
23
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync,
|
|
21
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
|
|
24
22
|
import { execFileSync } from "node:child_process";
|
|
25
23
|
import { dirname, join } from "node:path";
|
|
26
24
|
import { resolveExpectedArtifactPath, diagnoseExpectedArtifact, } from "./auto-artifact-paths.js";
|
|
@@ -932,183 +930,10 @@ export function writeBlockerPlaceholder(unitType, unitId, base, reason) {
|
|
|
932
930
|
return diagnoseExpectedArtifact(unitType, unitId, base);
|
|
933
931
|
}
|
|
934
932
|
// ─── Merge State Reconciliation ───────────────────────────────────────────────
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
function abortAndResetMerge(basePath, hasMergeHead, squashMsgPath) {
|
|
940
|
-
if (hasMergeHead) {
|
|
941
|
-
try {
|
|
942
|
-
nativeMergeAbort(basePath);
|
|
943
|
-
}
|
|
944
|
-
catch (err) {
|
|
945
|
-
/* best-effort */
|
|
946
|
-
logWarning("recovery", `git merge-abort failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
947
|
-
}
|
|
948
|
-
}
|
|
949
|
-
else if (squashMsgPath) {
|
|
950
|
-
try {
|
|
951
|
-
unlinkSync(squashMsgPath);
|
|
952
|
-
}
|
|
953
|
-
catch (err) {
|
|
954
|
-
/* best-effort */
|
|
955
|
-
logWarning("recovery", `file unlink failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
956
|
-
}
|
|
957
|
-
}
|
|
958
|
-
try {
|
|
959
|
-
nativeResetHard(basePath);
|
|
960
|
-
}
|
|
961
|
-
catch (err) {
|
|
962
|
-
/* best-effort */
|
|
963
|
-
logError("recovery", `git reset failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
964
|
-
}
|
|
965
|
-
}
|
|
966
|
-
/**
|
|
967
|
-
* Detect and abort other in-progress git operations left behind by a SIGKILL'd
|
|
968
|
-
* worker (rebase, cherry-pick, revert). Without this, a killed worker mid-rebase
|
|
969
|
-
* leaves `.git/rebase-merge/` or `.git/CHERRY_PICK_HEAD` and the worktree is
|
|
970
|
-
* wedged until the user manually runs the matching `--abort`.
|
|
971
|
-
*
|
|
972
|
-
* Called before merge-state reconciliation because these states block any
|
|
973
|
-
* subsequent merge/commit operation. (Issue #4980 HIGH-7)
|
|
974
|
-
*/
|
|
975
|
-
function reconcileOtherInProgressGitOps(basePath, ctx) {
|
|
976
|
-
const gitDir = join(basePath, ".git");
|
|
977
|
-
const states = [
|
|
978
|
-
{
|
|
979
|
-
label: "rebase",
|
|
980
|
-
indicators: [join(gitDir, "rebase-merge"), join(gitDir, "rebase-apply")],
|
|
981
|
-
abort: () => nativeRebaseAbort(basePath),
|
|
982
|
-
},
|
|
983
|
-
{
|
|
984
|
-
label: "cherry-pick",
|
|
985
|
-
indicators: [join(gitDir, "CHERRY_PICK_HEAD")],
|
|
986
|
-
abort: () => {
|
|
987
|
-
// No native helper; fall back to git CLI.
|
|
988
|
-
try {
|
|
989
|
-
execFileSync("git", ["cherry-pick", "--abort"], {
|
|
990
|
-
cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8",
|
|
991
|
-
});
|
|
992
|
-
}
|
|
993
|
-
catch (err) {
|
|
994
|
-
logWarning("recovery", `cherry-pick --abort failed: ${getErrorMessage(err)}`);
|
|
995
|
-
}
|
|
996
|
-
},
|
|
997
|
-
},
|
|
998
|
-
{
|
|
999
|
-
label: "revert",
|
|
1000
|
-
indicators: [join(gitDir, "REVERT_HEAD")],
|
|
1001
|
-
abort: () => {
|
|
1002
|
-
try {
|
|
1003
|
-
execFileSync("git", ["revert", "--abort"], {
|
|
1004
|
-
cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8",
|
|
1005
|
-
});
|
|
1006
|
-
}
|
|
1007
|
-
catch (err) {
|
|
1008
|
-
logWarning("recovery", `revert --abort failed: ${getErrorMessage(err)}`);
|
|
1009
|
-
}
|
|
1010
|
-
},
|
|
1011
|
-
},
|
|
1012
|
-
];
|
|
1013
|
-
let reconciled = false;
|
|
1014
|
-
for (const s of states) {
|
|
1015
|
-
const present = s.indicators.some((p) => existsSync(p));
|
|
1016
|
-
if (!present)
|
|
1017
|
-
continue;
|
|
1018
|
-
try {
|
|
1019
|
-
s.abort();
|
|
1020
|
-
ctx.ui.notify(`Detected leftover ${s.label} state from prior session — aborted.`, "warning");
|
|
1021
|
-
reconciled = true;
|
|
1022
|
-
}
|
|
1023
|
-
catch (err) {
|
|
1024
|
-
logError("recovery", `${s.label} abort failed: ${getErrorMessage(err)}`);
|
|
1025
|
-
ctx.ui.notify(`Detected leftover ${s.label} state but auto-abort failed. ` +
|
|
1026
|
-
`Run \`git ${s.label} --abort\` manually before retrying.`, "error");
|
|
1027
|
-
return "blocked";
|
|
1028
|
-
}
|
|
1029
|
-
}
|
|
1030
|
-
return reconciled ? "reconciled" : "clean";
|
|
1031
|
-
}
|
|
1032
|
-
/**
|
|
1033
|
-
* Detect leftover merge state from a prior session and reconcile it.
|
|
1034
|
-
* If MERGE_HEAD or SQUASH_MSG exists, check whether conflicts are resolved.
|
|
1035
|
-
* If resolved: finalize the commit. If only .gsd conflicts remain: auto-resolve.
|
|
1036
|
-
* If code conflicts remain: fail safe without modifying the worktree.
|
|
1037
|
-
*/
|
|
1038
|
-
export function reconcileMergeState(basePath, ctx) {
|
|
1039
|
-
// First, abort any rebase/cherry-pick/revert left over from a SIGKILL'd
|
|
1040
|
-
// worker. Doing this before the merge-state check unblocks any merge that
|
|
1041
|
-
// would otherwise refuse with "you have unfinished operation". (HIGH-7)
|
|
1042
|
-
const otherOpsResult = reconcileOtherInProgressGitOps(basePath, ctx);
|
|
1043
|
-
if (otherOpsResult === "blocked")
|
|
1044
|
-
return "blocked";
|
|
1045
|
-
const mergeHeadPath = join(basePath, ".git", "MERGE_HEAD");
|
|
1046
|
-
const squashMsgPath = join(basePath, ".git", "SQUASH_MSG");
|
|
1047
|
-
const hasMergeHead = existsSync(mergeHeadPath);
|
|
1048
|
-
const hasSquashMsg = existsSync(squashMsgPath);
|
|
1049
|
-
if (!hasMergeHead && !hasSquashMsg) {
|
|
1050
|
-
// If we cleaned up another op type, return "reconciled" so the caller
|
|
1051
|
-
// re-derives state from a known-good baseline.
|
|
1052
|
-
return otherOpsResult === "reconciled" ? "reconciled" : "clean";
|
|
1053
|
-
}
|
|
1054
|
-
const conflictedFiles = nativeConflictFiles(basePath);
|
|
1055
|
-
if (conflictedFiles.length === 0) {
|
|
1056
|
-
// All conflicts resolved — finalize the merge/squash commit
|
|
1057
|
-
try {
|
|
1058
|
-
const commitSha = nativeCommit(basePath, "chore(gsd): reconcile merge state");
|
|
1059
|
-
if (commitSha) {
|
|
1060
|
-
const mode = hasMergeHead ? "merge" : "squash commit";
|
|
1061
|
-
ctx.ui.notify(`Finalized leftover ${mode} from prior session.`, "info");
|
|
1062
|
-
}
|
|
1063
|
-
else {
|
|
1064
|
-
ctx.ui.notify("No new commit needed for leftover merge/squash state — already committed.", "info");
|
|
1065
|
-
}
|
|
1066
|
-
}
|
|
1067
|
-
catch (err) {
|
|
1068
|
-
const errorMessage = getErrorMessage(err);
|
|
1069
|
-
ctx.ui.notify(`Failed to finalize leftover merge/squash commit: ${errorMessage}`, "error");
|
|
1070
|
-
return "blocked";
|
|
1071
|
-
}
|
|
1072
|
-
}
|
|
1073
|
-
else {
|
|
1074
|
-
// Still conflicted — try auto-resolving .gsd/ state file conflicts (#530)
|
|
1075
|
-
const gsdConflicts = conflictedFiles.filter((f) => f.startsWith(".gsd/"));
|
|
1076
|
-
const codeConflicts = conflictedFiles.filter((f) => !f.startsWith(".gsd/"));
|
|
1077
|
-
if (gsdConflicts.length > 0 && codeConflicts.length === 0) {
|
|
1078
|
-
// All conflicts are in .gsd/ state files — auto-resolve by accepting theirs
|
|
1079
|
-
let resolved = true;
|
|
1080
|
-
try {
|
|
1081
|
-
nativeCheckoutTheirs(basePath, gsdConflicts);
|
|
1082
|
-
nativeAddPaths(basePath, gsdConflicts);
|
|
1083
|
-
}
|
|
1084
|
-
catch (e) {
|
|
1085
|
-
logError("recovery", `auto-resolve .gsd/ conflicts failed: ${e.message}`);
|
|
1086
|
-
resolved = false;
|
|
1087
|
-
}
|
|
1088
|
-
if (resolved) {
|
|
1089
|
-
try {
|
|
1090
|
-
nativeCommit(basePath, "chore: auto-resolve .gsd/ state file conflicts");
|
|
1091
|
-
ctx.ui.notify(`Auto-resolved ${gsdConflicts.length} .gsd/ state file conflict(s) from prior merge.`, "info");
|
|
1092
|
-
}
|
|
1093
|
-
catch (e) {
|
|
1094
|
-
logError("recovery", `auto-commit .gsd/ conflict resolution failed: ${e.message}`);
|
|
1095
|
-
resolved = false;
|
|
1096
|
-
}
|
|
1097
|
-
}
|
|
1098
|
-
if (!resolved) {
|
|
1099
|
-
abortAndResetMerge(basePath, hasMergeHead, squashMsgPath);
|
|
1100
|
-
ctx.ui.notify("Detected leftover merge state — auto-resolve failed, cleaned up. Re-deriving state.", "warning");
|
|
1101
|
-
}
|
|
1102
|
-
}
|
|
1103
|
-
else {
|
|
1104
|
-
// Code conflicts present — fail safe and preserve any manual resolution
|
|
1105
|
-
// work instead of discarding it with merge --abort/reset --hard.
|
|
1106
|
-
ctx.ui.notify("Detected leftover merge state with unresolved code conflicts. Auto-mode will pause without modifying the worktree so manual conflict resolution is preserved.", "error");
|
|
1107
|
-
return "blocked";
|
|
1108
|
-
}
|
|
1109
|
-
}
|
|
1110
|
-
return "reconciled";
|
|
1111
|
-
}
|
|
933
|
+
// Body relocated to state-reconciliation/drift/merge-state.ts (ADR-017 #5701).
|
|
934
|
+
// Re-exported here for backward compatibility with existing call sites:
|
|
935
|
+
// auto.ts, auto/loop-deps.ts, tests/integration/auto-recovery.test.ts.
|
|
936
|
+
export { reconcileMergeState, } from "./state-reconciliation/drift/merge-state.js";
|
|
1112
937
|
// ─── Loop Remediation ─────────────────────────────────────────────────────────
|
|
1113
938
|
/**
|
|
1114
939
|
* Build concrete, manual remediation steps for a loop-detected unit failure.
|
|
@@ -33,3 +33,8 @@ export function recordToolInvocationError(toolName, errorMsg) {
|
|
|
33
33
|
autoSession.lastToolInvocationError = `${toolName}: ${errorMsg}`;
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
+
export function clearToolInvocationError() {
|
|
37
|
+
if (!autoSession.active)
|
|
38
|
+
return;
|
|
39
|
+
autoSession.lastToolInvocationError = null;
|
|
40
|
+
}
|
|
@@ -679,30 +679,22 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
679
679
|
{
|
|
680
680
|
const orphan = findUnmergedCompletedMilestone(base, getIsolationMode(base));
|
|
681
681
|
if (orphan && orphan !== state.activeMilestone?.id) {
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
s.originalBasePath
|
|
685
|
-
|
|
686
|
-
|
|
682
|
+
// ADR-016 phase 2 / B4 (#5622): the swap-run-revert protocol for
|
|
683
|
+
// the orphan-merge dance is owned by `adoptOrphanWorktree`. The
|
|
684
|
+
// verb snapshots prior `s.basePath` / `s.originalBasePath`, swaps
|
|
685
|
+
// into the orphan worktree, runs the merge callback under the
|
|
686
|
+
// swap, and reverts (or holds the swap) based on the result.
|
|
687
|
+
// Callers can no longer forget the revert step on failure — the
|
|
688
|
+
// pattern that originally motivated this verb.
|
|
689
|
+
const lifecycle = buildLifecycle();
|
|
690
|
+
const result = lifecycle.adoptOrphanWorktree(orphan, base, () => _mergeOrphanCompletedMilestone(lifecycle, orphan, ctx.ui));
|
|
687
691
|
if (!result.merged) {
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
try {
|
|
691
|
-
process.chdir(base);
|
|
692
|
-
}
|
|
693
|
-
catch (err) {
|
|
694
|
-
logWarning("bootstrap", `could not restore cwd after orphan merge failure: ${err instanceof Error ? err.message : String(err)}`);
|
|
695
|
-
}
|
|
692
|
+
// Verb already restored basePath/originalBasePath to `base` and
|
|
693
|
+
// chdir'd there. Return early.
|
|
696
694
|
return releaseLockAndReturn();
|
|
697
695
|
}
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
s.originalBasePath = priorOriginalBasePath || base;
|
|
701
|
-
}
|
|
702
|
-
if (result.merged) {
|
|
703
|
-
invalidateAllCaches();
|
|
704
|
-
state = await deriveState(base);
|
|
705
|
-
}
|
|
696
|
+
invalidateAllCaches();
|
|
697
|
+
state = await deriveState(base);
|
|
706
698
|
}
|
|
707
699
|
}
|
|
708
700
|
const effectivePrefs = loadEffectiveGSDPreferences(base)?.preferences;
|
|
@@ -792,7 +784,10 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
792
784
|
s.stepMode = requestedStepMode;
|
|
793
785
|
s.verbose = verboseMode;
|
|
794
786
|
s.cmdCtx = ctx;
|
|
795
|
-
|
|
787
|
+
// ADR-016 phase 2 / B2 (#5620): single owner of bootstrap basePath
|
|
788
|
+
// mutation. Sets s.basePath = base and s.originalBasePath = base
|
|
789
|
+
// (originalBasePath is empty on a fresh bootstrap).
|
|
790
|
+
buildLifecycle().adoptSessionRoot(base);
|
|
796
791
|
s.unitDispatchCount.clear();
|
|
797
792
|
s.unitRecoveryCount.clear();
|
|
798
793
|
s.lastBudgetAlertLevel = 0;
|
|
@@ -842,7 +837,9 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
842
837
|
}
|
|
843
838
|
}
|
|
844
839
|
// ── Auto-worktree setup ──
|
|
845
|
-
s.originalBasePath
|
|
840
|
+
// s.originalBasePath was set to `base` by `adoptSessionRoot(base)` above
|
|
841
|
+
// (ADR-016 phase 2 / B2, #5620). The redundant assignment that used to
|
|
842
|
+
// live here is gone.
|
|
846
843
|
const isUnderGsdWorktrees = (p) => {
|
|
847
844
|
// Direct layout: /.gsd/worktrees/
|
|
848
845
|
const marker = `${pathSep}.gsd${pathSep}worktrees${pathSep}`;
|
|
@@ -1,12 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
* snapshotting metrics + saving activity log + extracting memories
|
|
4
|
-
* that appears 6+ times in auto.ts.
|
|
5
|
-
*/
|
|
1
|
+
// Project/App: GSD-2
|
|
2
|
+
// File Purpose: Auto-mode unit closeout metrics, activity capture, and ghost-run detection.
|
|
6
3
|
import { snapshotUnitMetrics } from "./metrics.js";
|
|
7
4
|
import { saveActivityLog } from "./activity-log.js";
|
|
8
5
|
import { logWarning } from "./workflow-logger.js";
|
|
9
6
|
import { writeTurnGitTransaction } from "./uok/gitops.js";
|
|
7
|
+
export const GHOST_COMPLETION_MAX_ELAPSED_MS = 500;
|
|
8
|
+
export function snapshotUnitActivity(ctx, startedAt, now = Date.now()) {
|
|
9
|
+
let toolCalls = 0;
|
|
10
|
+
let assistantMessages = 0;
|
|
11
|
+
const entries = ctx.sessionManager.getEntries() ?? [];
|
|
12
|
+
for (const entry of entries) {
|
|
13
|
+
if (entry.type !== "message")
|
|
14
|
+
continue;
|
|
15
|
+
const msg = entry.message;
|
|
16
|
+
if (!msg || msg.role !== "assistant")
|
|
17
|
+
continue;
|
|
18
|
+
assistantMessages++;
|
|
19
|
+
if (!Array.isArray(msg.content))
|
|
20
|
+
continue;
|
|
21
|
+
for (const block of msg.content) {
|
|
22
|
+
if (block?.type === "toolCall")
|
|
23
|
+
toolCalls++;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
elapsedMs: Math.max(0, now - startedAt),
|
|
28
|
+
toolCalls,
|
|
29
|
+
assistantMessages,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export function isSuspiciousGhostCompletion(ctx, startedAt, maxElapsedMs = GHOST_COMPLETION_MAX_ELAPSED_MS) {
|
|
33
|
+
const activity = snapshotUnitActivity(ctx, startedAt);
|
|
34
|
+
return (activity.elapsedMs < maxElapsedMs &&
|
|
35
|
+
activity.toolCalls === 0 &&
|
|
36
|
+
activity.assistantMessages === 0);
|
|
37
|
+
}
|
|
10
38
|
/**
|
|
11
39
|
* Snapshot metrics, save activity log, and fire-and-forget memory extraction
|
|
12
40
|
* for a completed unit. Returns the activity log file path (if any).
|
|
@@ -17,9 +17,8 @@ import { runPostExecutionChecks } from "./post-execution-checks.js";
|
|
|
17
17
|
import { join } from "node:path";
|
|
18
18
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
19
19
|
import { UokGateRunner } from "./uok/gate-runner.js";
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
20
|
+
import { verificationRetryKey } from "./auto/verification-retry-policy.js";
|
|
21
|
+
import { decideVerificationVerdict } from "./verification-verdict.js";
|
|
23
22
|
/**
|
|
24
23
|
* Post-unit guard for `validate-milestone` units (#4094).
|
|
25
24
|
*
|
|
@@ -127,7 +126,7 @@ async function countIncompleteSlices(basePath, milestoneId) {
|
|
|
127
126
|
/**
|
|
128
127
|
* Run the verification gate for the current execute-task unit.
|
|
129
128
|
* Returns:
|
|
130
|
-
* - "continue" —
|
|
129
|
+
* - "continue" — host-owned verification passed, proceed normally
|
|
131
130
|
* - "retry" — gate failed with retries remaining, s.pendingVerificationRetry set for loop re-iteration
|
|
132
131
|
* - "pause" — gate failed with retries exhausted, pauseAuto already called
|
|
133
132
|
*/
|
|
@@ -177,6 +176,10 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
177
176
|
process.stderr.write(` [${w.severity}] ${w.name}: ${w.title}\n`);
|
|
178
177
|
}
|
|
179
178
|
}
|
|
179
|
+
const verdict = decideVerificationVerdict(s.currentUnit.type, result);
|
|
180
|
+
if (!verdict.passed) {
|
|
181
|
+
result.passed = false;
|
|
182
|
+
}
|
|
180
183
|
if (uokFlags.gates) {
|
|
181
184
|
const gateRunner = new UokGateRunner();
|
|
182
185
|
gateRunner.register({
|
|
@@ -189,10 +192,12 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
189
192
|
: "verification",
|
|
190
193
|
rationale: result.passed
|
|
191
194
|
? "verification checks passed"
|
|
192
|
-
:
|
|
195
|
+
: verdict.reason === "no-host-checks"
|
|
196
|
+
? "no runnable host-owned verification checks discovered"
|
|
197
|
+
: "verification checks failed",
|
|
193
198
|
findings: result.passed
|
|
194
199
|
? ""
|
|
195
|
-
: formatFailureContext(result),
|
|
200
|
+
: verdict.failureContext || formatFailureContext(result),
|
|
196
201
|
}),
|
|
197
202
|
});
|
|
198
203
|
await gateRunner.run("verification-gate", {
|
|
@@ -238,7 +243,8 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
238
243
|
}
|
|
239
244
|
}
|
|
240
245
|
// Write verification evidence JSON
|
|
241
|
-
const
|
|
246
|
+
const retryKey = verificationRetryKey(s.currentUnit.type, s.currentUnit.id);
|
|
247
|
+
const attempt = s.verificationRetryCount.get(retryKey) ?? 0;
|
|
242
248
|
if (mid && sid && tid) {
|
|
243
249
|
try {
|
|
244
250
|
const sDir = resolveSlicePath(s.basePath, mid, sid);
|
|
@@ -249,7 +255,11 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
249
255
|
}
|
|
250
256
|
else {
|
|
251
257
|
const nextAttempt = attempt + 1;
|
|
252
|
-
|
|
258
|
+
const includeRetryMetadata = !result.passed &&
|
|
259
|
+
verdict.retryable &&
|
|
260
|
+
autoFixEnabled &&
|
|
261
|
+
nextAttempt <= maxRetries;
|
|
262
|
+
writeVerificationJSON(result, tasksDir, tid, s.currentUnit.id, includeRetryMetadata ? nextAttempt : undefined, includeRetryMetadata ? maxRetries : undefined);
|
|
253
263
|
}
|
|
254
264
|
}
|
|
255
265
|
}
|
|
@@ -257,17 +267,6 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
257
267
|
logWarning("engine", `verification-evidence write error: ${evidenceErr.message}`);
|
|
258
268
|
}
|
|
259
269
|
}
|
|
260
|
-
const advisoryFailure = !result.passed &&
|
|
261
|
-
(result.discoverySource === "package-json" ||
|
|
262
|
-
result.checks.some((check) => isInfraVerificationFailure(check.stderr)));
|
|
263
|
-
if (advisoryFailure) {
|
|
264
|
-
s.verificationRetryCount.delete(s.currentUnit.id);
|
|
265
|
-
s.pendingVerificationRetry = null;
|
|
266
|
-
ctx.ui.notify(result.discoverySource === "package-json"
|
|
267
|
-
? "Verification failed in auto-discovered package.json checks — treating as advisory."
|
|
268
|
-
: "Verification failed due to infrastructure/runtime environment issues — treating as advisory.", "warning");
|
|
269
|
-
return "continue";
|
|
270
|
-
}
|
|
271
270
|
// ── Post-execution checks (run after main verification passes for execute-task units) ──
|
|
272
271
|
let postExecChecks;
|
|
273
272
|
let postExecBlockingFailure = false;
|
|
@@ -422,14 +421,25 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
422
421
|
}
|
|
423
422
|
// ── Auto-fix retry logic ──
|
|
424
423
|
if (result.passed) {
|
|
425
|
-
s.verificationRetryCount.delete(
|
|
424
|
+
s.verificationRetryCount.delete(retryKey);
|
|
425
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
426
426
|
s.pendingVerificationRetry = null;
|
|
427
427
|
return "continue";
|
|
428
428
|
}
|
|
429
|
+
else if (verdict.reason === "no-host-checks") {
|
|
430
|
+
s.verificationRetryCount.delete(retryKey);
|
|
431
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
432
|
+
s.pendingVerificationRetry = null;
|
|
433
|
+
ctx.ui.notify("Verification gate FAILED — no runnable host-owned verification checks were discovered. Pausing for human review.", "error");
|
|
434
|
+
process.stderr.write(`verification-gate: ${verdict.failureContext}\n`);
|
|
435
|
+
await pauseAuto(ctx, pi);
|
|
436
|
+
return "pause";
|
|
437
|
+
}
|
|
429
438
|
else if (postExecBlockingFailure) {
|
|
430
439
|
// Post-execution failures are cross-task consistency issues — retrying the same task won't fix them.
|
|
431
440
|
// Skip retry and pause immediately for human review.
|
|
432
|
-
s.verificationRetryCount.delete(
|
|
441
|
+
s.verificationRetryCount.delete(retryKey);
|
|
442
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
433
443
|
s.pendingVerificationRetry = null;
|
|
434
444
|
ctx.ui.notify(`Post-execution checks failed — cross-task consistency issue detected, pausing for human review`, "error");
|
|
435
445
|
await pauseAuto(ctx, pi);
|
|
@@ -437,10 +447,10 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
437
447
|
}
|
|
438
448
|
else if (autoFixEnabled && attempt + 1 <= maxRetries) {
|
|
439
449
|
const nextAttempt = attempt + 1;
|
|
440
|
-
s.verificationRetryCount.set(
|
|
450
|
+
s.verificationRetryCount.set(retryKey, nextAttempt);
|
|
441
451
|
s.pendingVerificationRetry = {
|
|
442
452
|
unitId: s.currentUnit.id,
|
|
443
|
-
failureContext: formatFailureContext(result),
|
|
453
|
+
failureContext: verdict.failureContext || formatFailureContext(result),
|
|
444
454
|
attempt: nextAttempt,
|
|
445
455
|
};
|
|
446
456
|
const failedCmds = result.checks
|
|
@@ -455,7 +465,8 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
455
465
|
}
|
|
456
466
|
else {
|
|
457
467
|
// Gate failed, retries exhausted
|
|
458
|
-
s.verificationRetryCount.delete(
|
|
468
|
+
s.verificationRetryCount.delete(retryKey);
|
|
469
|
+
s.verificationRetryFailureHashes.delete(retryKey);
|
|
459
470
|
s.pendingVerificationRetry = null;
|
|
460
471
|
const exhaustedFails = result.checks
|
|
461
472
|
.filter((c) => c.exitCode !== 0)
|
|
@@ -469,9 +480,10 @@ export async function runPostUnitVerification(vctx, pauseAuto) {
|
|
|
469
480
|
}
|
|
470
481
|
}
|
|
471
482
|
catch (err) {
|
|
472
|
-
// Gate errors are non-fatal
|
|
473
483
|
logWarning("engine", `verification-gate error: ${err.message}`);
|
|
474
|
-
|
|
484
|
+
ctx.ui.notify(`Verification gate errored before producing an authoritative verdict: ${err.message}`, "error");
|
|
485
|
+
await pauseAuto(ctx, pi);
|
|
486
|
+
return "pause";
|
|
475
487
|
}
|
|
476
488
|
}
|
|
477
489
|
/**
|
|
@@ -1271,6 +1271,14 @@ function autoCommitDirtyState(cwd) {
|
|
|
1271
1271
|
* On merge conflict: throws MergeConflictError.
|
|
1272
1272
|
* On "nothing to commit" after squash: safe only if milestone work is already
|
|
1273
1273
|
* on the integration branch. Throws if unanchored code changes would be lost.
|
|
1274
|
+
*
|
|
1275
|
+
* @internal **Do not call directly.** This is the inner squash-merge primitive
|
|
1276
|
+
* for the Worktree Lifecycle Module (ADR-016 phase 2 / A3, issue #5619).
|
|
1277
|
+
* Production callers must go through `WorktreeLifecycle.mergeMilestoneStandalone`
|
|
1278
|
+
* or `WorktreeLifecycle.exitMilestone({ merge: true })`. The export keyword
|
|
1279
|
+
* is preserved only so `auto.ts:buildWorktreeLifecycleDeps()` can wire this
|
|
1280
|
+
* function through the Module's deps seam — that is the construction of the
|
|
1281
|
+
* seam, not a bypass.
|
|
1274
1282
|
*/
|
|
1275
1283
|
export function mergeMilestoneToMain(originalBasePath_, milestoneId, roadmapContent) {
|
|
1276
1284
|
const worktreeCwd = process.cwd();
|