gsd-pi 2.82.0 → 3.0.0-dev.2e8b124f7
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 +125 -32
- package/dist/cli.js +20 -9
- package/dist/headless-ui.js +13 -6
- package/dist/headless.js +9 -2
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +10 -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/claude-code-cli/partial-builder.js +2 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -6
- package/dist/resources/extensions/cmux/index.js +5 -0
- package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
- package/dist/resources/extensions/gsd/auto/loop.js +110 -37
- package/dist/resources/extensions/gsd/auto/orchestrator.js +124 -6
- package/dist/resources/extensions/gsd/auto/phases.js +113 -38
- package/dist/resources/extensions/gsd/auto/session.js +6 -0
- package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -1
- package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
- package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +71 -20
- package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +278 -137
- package/dist/resources/extensions/gsd/auto-prompts.js +47 -13
- package/dist/resources/extensions/gsd/auto-recovery.js +79 -14
- package/dist/resources/extensions/gsd/auto-start.js +90 -14
- package/dist/resources/extensions/gsd/auto-timers.js +11 -3
- package/dist/resources/extensions/gsd/auto-verification.js +102 -34
- package/dist/resources/extensions/gsd/auto-worktree.js +178 -11
- package/dist/resources/extensions/gsd/auto.js +225 -81
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +31 -7
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -9
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +10 -4
- package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +24 -9
- package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +20 -0
- package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +17 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +9 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -2
- package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
- package/dist/resources/extensions/gsd/context-store.js +112 -0
- package/dist/resources/extensions/gsd/crash-recovery.js +52 -7
- package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
- package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
- package/dist/resources/extensions/gsd/db-base-schema.js +2 -0
- package/dist/resources/extensions/gsd/db-migration-steps.js +4 -0
- package/dist/resources/extensions/gsd/db-task-slice-rows.js +2 -0
- package/dist/resources/extensions/gsd/db-writer.js +150 -84
- package/dist/resources/extensions/gsd/dispatch-guard.js +46 -2
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -1
- package/dist/resources/extensions/gsd/doctor-git-checks.js +87 -7
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
- package/dist/resources/extensions/gsd/doctor.js +2 -28
- package/dist/resources/extensions/gsd/export-html.js +27 -425
- package/dist/resources/extensions/gsd/forensics.js +10 -3
- package/dist/resources/extensions/gsd/git-service.js +138 -10
- package/dist/resources/extensions/gsd/gsd-db.js +76 -33
- package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
- package/dist/resources/extensions/gsd/guided-flow.js +110 -117
- package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
- package/dist/resources/extensions/gsd/init-wizard.js +17 -2
- 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 +20 -12
- package/dist/resources/extensions/gsd/mcp-filter.js +58 -0
- 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/parsers.js +10 -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/migration-auto-check.js +12 -17
- package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
- package/dist/resources/extensions/gsd/native-git-bridge.js +57 -14
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -0
- package/dist/resources/extensions/gsd/paths.js +4 -0
- package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
- package/dist/resources/extensions/gsd/planning-path-scope.js +9 -3
- package/dist/resources/extensions/gsd/post-execution-checks.js +73 -9
- package/dist/resources/extensions/gsd/pre-execution-checks.js +38 -11
- package/dist/resources/extensions/gsd/preferences-mcp.js +19 -0
- package/dist/resources/extensions/gsd/preferences-types.js +2 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +138 -0
- package/dist/resources/extensions/gsd/preferences.js +2 -0
- package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
- package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
- package/dist/resources/extensions/gsd/prompts/forensics.md +3 -3
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
- package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
- package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
- package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- 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/queue-reorder-ui.js +30 -13
- package/dist/resources/extensions/gsd/repository-registry.js +44 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +2 -0
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +42 -18
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +59 -2
- package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
- package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
- package/dist/resources/extensions/gsd/state.js +14 -4
- package/dist/resources/extensions/gsd/status-guards.js +14 -2
- package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/dist/resources/extensions/gsd/templates/plan.md +9 -5
- package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
- package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
- package/dist/resources/extensions/gsd/tools/plan-slice.js +151 -15
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
- package/dist/resources/extensions/gsd/unit-context-composer.js +2 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +69 -17
- package/dist/resources/extensions/gsd/validation.js +23 -1
- package/dist/resources/extensions/gsd/verification-gate.js +142 -7
- package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +83 -19
- package/dist/resources/extensions/gsd/worktree-manager.js +11 -2
- package/dist/resources/extensions/gsd/worktree-safety.js +33 -1
- package/dist/resources/extensions/gsd/worktree-state-projection.js +31 -0
- package/dist/resources/extensions/shared/html-shell.js +388 -0
- package/dist/resources/extensions/shared/interview-ui.js +6 -4
- 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/ttsr/ttsr-manager.js +3 -1
- 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 +124 -0
- package/dist/resources/extensions/visual-brief/prompts.js +140 -0
- package/dist/resources/skills/forensics/SKILL.md +1 -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 +9 -9
- 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 +5 -5
- package/dist/web/standalone/.next/required-server-files.json +4 -4
- 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.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
- 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 -5
- 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 -5
- 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 -8
- 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 -8
- 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 -5
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
- package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
- 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.65b24fac92188a6b.js +10 -0
- package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
- 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-8c10ec293ae0f1d5.js +1 -0
- 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-855d616060cb6e59.js} +1 -1
- package/dist/web/standalone/.next/static/css/746ee28c929d1880.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/package.json +6 -5
- 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 +23 -1
- 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/native/tsconfig.json +2 -1
- package/packages/native/tsconfig.tsbuildinfo +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/google-gemini-cli.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
- package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
- package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
- package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.js +5 -6
- package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
- package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
- package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
- 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/google-gemini-cli.test.ts +49 -0
- package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
- package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
- package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
- package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
- package/packages/pi-ai/src/providers/simple-options.ts +5 -6
- 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/agent-session-thinking-level.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
- package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +6 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js +7 -2
- package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +14 -1
- package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
- package/packages/pi-coding-agent/dist/core/sdk.js.map +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__/tool-execution.test.js +8 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
- 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.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +71 -97
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -7
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +24 -10
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.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/agent-session-thinking-level.test.ts +79 -0
- package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
- package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +23 -1
- package/packages/pi-coding-agent/src/core/compaction/compaction.ts +7 -2
- package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
- package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +17 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -102
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +15 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +9 -9
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
- 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__/terminal.test.d.ts +2 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
- package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
- package/packages/pi-tui/dist/__tests__/tui.test.js +45 -2
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/terminal.d.ts +2 -0
- package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
- package/packages/pi-tui/dist/terminal.js +12 -0
- package/packages/pi-tui/dist/terminal.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +108 -24
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/terminal.test.ts +121 -0
- package/packages/pi-tui/src/__tests__/tui.test.ts +59 -2
- package/packages/pi-tui/src/terminal.ts +11 -0
- package/packages/pi-tui/src/tui.ts +111 -24
- 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/package.json +1 -1
- package/src/resources/GSD-WORKFLOW.md +10 -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/claude-code-cli/partial-builder.ts +2 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +52 -6
- package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +49 -2
- package/src/resources/extensions/cmux/index.ts +6 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +62 -16
- package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
- package/src/resources/extensions/gsd/auto/loop.ts +111 -38
- package/src/resources/extensions/gsd/auto/orchestrator.ts +129 -6
- package/src/resources/extensions/gsd/auto/phases.ts +141 -49
- package/src/resources/extensions/gsd/auto/session.ts +16 -0
- package/src/resources/extensions/gsd/auto/types.ts +3 -0
- package/src/resources/extensions/gsd/auto/unit-runner-events.ts +6 -2
- package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
- package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +74 -20
- package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +312 -148
- package/src/resources/extensions/gsd/auto-prompts.ts +47 -16
- package/src/resources/extensions/gsd/auto-recovery.ts +83 -11
- package/src/resources/extensions/gsd/auto-start.ts +99 -12
- package/src/resources/extensions/gsd/auto-timers.ts +10 -3
- package/src/resources/extensions/gsd/auto-verification.ts +124 -42
- package/src/resources/extensions/gsd/auto-worktree.ts +195 -11
- package/src/resources/extensions/gsd/auto.ts +226 -70
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +42 -7
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -9
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +11 -4
- package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +27 -10
- package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
- package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +42 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
- package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +21 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +8 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +11 -3
- package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
- package/src/resources/extensions/gsd/context-store.ts +120 -1
- package/src/resources/extensions/gsd/crash-recovery.ts +52 -6
- package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
- package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
- package/src/resources/extensions/gsd/db-base-schema.ts +2 -0
- package/src/resources/extensions/gsd/db-migration-steps.ts +5 -0
- package/src/resources/extensions/gsd/db-task-slice-rows.ts +4 -0
- package/src/resources/extensions/gsd/db-writer.ts +167 -84
- package/src/resources/extensions/gsd/dispatch-guard.ts +60 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -1
- package/src/resources/extensions/gsd/doctor-git-checks.ts +89 -7
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
- package/src/resources/extensions/gsd/doctor-types.ts +3 -0
- package/src/resources/extensions/gsd/doctor.ts +2 -27
- package/src/resources/extensions/gsd/export-html.ts +27 -427
- package/src/resources/extensions/gsd/forensics.ts +9 -3
- package/src/resources/extensions/gsd/git-service.ts +166 -11
- package/src/resources/extensions/gsd/gsd-db.ts +80 -31
- package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
- package/src/resources/extensions/gsd/guided-flow.ts +142 -134
- package/src/resources/extensions/gsd/guided-unit-context.ts +30 -0
- package/src/resources/extensions/gsd/init-wizard.ts +17 -2
- package/src/resources/extensions/gsd/journal.ts +8 -1
- 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 +20 -12
- package/src/resources/extensions/gsd/mcp-filter.ts +80 -0
- 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/parsers.ts +11 -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/migration-auto-check.ts +15 -23
- package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
- package/src/resources/extensions/gsd/native-git-bridge.ts +63 -14
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -0
- package/src/resources/extensions/gsd/paths.ts +5 -0
- package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
- package/src/resources/extensions/gsd/planning-path-scope.ts +10 -2
- package/src/resources/extensions/gsd/post-execution-checks.ts +87 -12
- package/src/resources/extensions/gsd/pre-execution-checks.ts +49 -11
- package/src/resources/extensions/gsd/preferences-mcp.ts +27 -0
- package/src/resources/extensions/gsd/preferences-types.ts +33 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +145 -0
- package/src/resources/extensions/gsd/preferences.ts +5 -0
- package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
- package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
- package/src/resources/extensions/gsd/prompts/forensics.md +3 -3
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
- package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
- package/src/resources/extensions/gsd/prompts/queue.md +4 -4
- package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
- package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
- 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/queue-reorder-ui.ts +31 -13
- package/src/resources/extensions/gsd/repository-registry.ts +77 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +2 -0
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +54 -19
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +52 -1
- package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
- package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
- package/src/resources/extensions/gsd/state.ts +15 -4
- package/src/resources/extensions/gsd/status-guards.ts +16 -2
- package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
- package/src/resources/extensions/gsd/templates/plan.md +9 -5
- package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
- package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +375 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +598 -8
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
- package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +129 -6
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
- package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +21 -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/checkout-branch-stash-guard.test.ts +87 -0
- package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +32 -4
- package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
- package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +104 -2
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
- package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -0
- 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 +61 -2
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +111 -1
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +97 -0
- package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
- package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
- package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
- package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +199 -2
- package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
- package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +49 -3
- package/src/resources/extensions/gsd/tests/journal.test.ts +32 -0
- 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/mcp-filter.test.ts +287 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
- package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
- package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
- package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +80 -2
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
- package/src/resources/extensions/gsd/tests/parallel-orchestrator-zombie-cleanup.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +343 -3
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +18 -1
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
- package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -3
- package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/preferences-mcp.test.ts +128 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
- package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
- package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
- package/src/resources/extensions/gsd/tests/repository-registry.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -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 +21 -1
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +72 -1
- package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +86 -2
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +17 -1
- package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +131 -9
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +111 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +42 -1
- package/src/resources/extensions/gsd/tests/verification-gate.test.ts +173 -1
- package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
- package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +57 -2
- package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +95 -0
- package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +59 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
- package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
- package/src/resources/extensions/gsd/tools/plan-slice.ts +172 -12
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
- package/src/resources/extensions/gsd/types.ts +1 -1
- package/src/resources/extensions/gsd/unit-context-composer.ts +3 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +86 -19
- package/src/resources/extensions/gsd/validation.ts +23 -1
- package/src/resources/extensions/gsd/verification-gate.ts +170 -6
- package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +2 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +93 -20
- package/src/resources/extensions/gsd/worktree-manager.ts +14 -2
- package/src/resources/extensions/gsd/worktree-safety.ts +45 -6
- package/src/resources/extensions/gsd/worktree-state-projection.ts +43 -0
- package/src/resources/extensions/shared/html-shell.ts +412 -0
- package/src/resources/extensions/shared/interview-ui.ts +6 -4
- package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +15 -0
- 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/ttsr/ttsr-manager.ts +5 -1
- 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 +136 -0
- package/src/resources/extensions/visual-brief/prompts.ts +183 -0
- package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
- package/src/resources/skills/forensics/SKILL.md +1 -1
- package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/layout-9ecfd95f343793f0.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/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
- package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
- package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
- /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → zCegwxH2e6vLp1vEZLLuZ}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → zCegwxH2e6vLp1vEZLLuZ}/_ssgManifest.js +0 -0
|
@@ -58,6 +58,7 @@ import {
|
|
|
58
58
|
import {
|
|
59
59
|
writeLock,
|
|
60
60
|
clearLock,
|
|
61
|
+
clearStaleWorkerLock,
|
|
61
62
|
readCrashLock,
|
|
62
63
|
isLockProcessAlive,
|
|
63
64
|
formatCrashInfo,
|
|
@@ -240,12 +241,14 @@ import { runAutoLoopWithUok } from "./uok/kernel.js";
|
|
|
240
241
|
import { resolveUokFlags } from "./uok/flags.js";
|
|
241
242
|
import { validateDirectory } from "./validate-directory.js";
|
|
242
243
|
import { createAutoOrchestrator } from "./auto/orchestrator.js";
|
|
243
|
-
import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
|
|
244
|
+
import type { AutoAdvanceResult, AutoOrchestrationModule, AutoOrchestratorDeps, DispatchAdapter } from "./auto/contracts.js";
|
|
244
245
|
import { reconcileBeforeDispatch } from "./state-reconciliation.js";
|
|
245
246
|
import { compileUnitToolContract } from "./tool-contract.js";
|
|
246
247
|
import { createWorktreeSafetyModule } from "./worktree-safety.js";
|
|
247
248
|
import { resolveManifest } from "./unit-context-manifest.js";
|
|
248
249
|
import { classifyFailure } from "./recovery-classification.js";
|
|
250
|
+
import { supportsStructuredQuestions } from "./workflow-mcp.js";
|
|
251
|
+
import type { MinimalModelRegistry } from "./context-budget.js";
|
|
249
252
|
// Slice-level parallelism (#2340)
|
|
250
253
|
import { getEligibleSlices } from "./slice-parallel-eligibility.js";
|
|
251
254
|
import { startSliceParallel } from "./slice-parallel-orchestrator.js";
|
|
@@ -281,6 +284,7 @@ import type {
|
|
|
281
284
|
UnitRouting,
|
|
282
285
|
StartModel,
|
|
283
286
|
AutoSession,
|
|
287
|
+
PendingOrchestrationDispatch,
|
|
284
288
|
} from "./auto/session.js";
|
|
285
289
|
export {
|
|
286
290
|
STUB_RECOVERY_THRESHOLD,
|
|
@@ -314,6 +318,13 @@ import { normalizeRealPath } from "./paths.js";
|
|
|
314
318
|
/** Throttle STATE.md rebuilds — at most once per 30 seconds */
|
|
315
319
|
const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
316
320
|
|
|
321
|
+
export function formatAutoStopNotification(prefix: string, totals: { cost: number; tokens: { total: number } }, unitCount: number): string {
|
|
322
|
+
return [
|
|
323
|
+
`${prefix}.`,
|
|
324
|
+
`Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${unitCount} units`,
|
|
325
|
+
].join("\n");
|
|
326
|
+
}
|
|
327
|
+
|
|
317
328
|
/**
|
|
318
329
|
* Phase B — register this auto-mode process in the workers table so other
|
|
319
330
|
* workers and janitors can detect liveness via heartbeat. Best-effort: if
|
|
@@ -1019,6 +1030,8 @@ export async function rerootCommandSession(
|
|
|
1019
1030
|
}
|
|
1020
1031
|
|
|
1021
1032
|
export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void> {
|
|
1033
|
+
const preserveStepSurface = s.preserveStepSurfaceAfterLoopExit;
|
|
1034
|
+
const preservePausedSurface = s.paused;
|
|
1022
1035
|
s.currentUnit = null;
|
|
1023
1036
|
s.active = false;
|
|
1024
1037
|
deactivateGSD();
|
|
@@ -1041,21 +1054,24 @@ export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void>
|
|
|
1041
1054
|
// A transient provider-error pause intentionally leaves the paused badge
|
|
1042
1055
|
// visible so the user still has a resumable auto-mode signal on screen.
|
|
1043
1056
|
if (!s.paused) {
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1057
|
+
if (preserveStepSurface) {
|
|
1058
|
+
s.preserveStepSurfaceAfterLoopExit = false;
|
|
1059
|
+
} else {
|
|
1060
|
+
ctx.ui.setStatus("gsd-auto", undefined);
|
|
1061
|
+
ctx.ui.setWidget("gsd-progress", undefined);
|
|
1062
|
+
if (s.completionStopInProgress) {
|
|
1063
|
+
s.completionStopInProgress = false;
|
|
1064
|
+
}
|
|
1065
|
+
initHealthWidget(ctx);
|
|
1047
1066
|
}
|
|
1048
|
-
initHealthWidget(ctx);
|
|
1049
1067
|
}
|
|
1050
1068
|
|
|
1051
|
-
// ADR-016 phase 3 (#5693): the stop-path basePath restore routes
|
|
1052
|
-
// `Lifecycle.restoreToProjectRoot()`, the sole owner of
|
|
1053
|
-
//
|
|
1054
|
-
//
|
|
1055
|
-
//
|
|
1056
|
-
|
|
1057
|
-
// session-state mutation.
|
|
1058
|
-
if (s.originalBasePath) {
|
|
1069
|
+
// ADR-016 phase 3 (#5693): the stop-path basePath restore + chdir routes
|
|
1070
|
+
// through `Lifecycle.restoreToProjectRoot()`, the sole owner of both
|
|
1071
|
+
// `s.basePath` mutation and the paired `process.chdir` for auto-loop
|
|
1072
|
+
// transitions. The verb assigns `s.basePath` before any throwable work, so
|
|
1073
|
+
// a thrown error still leaves basePath restored.
|
|
1074
|
+
if (s.originalBasePath && !preserveStepSurface && !preservePausedSurface) {
|
|
1059
1075
|
try {
|
|
1060
1076
|
buildLifecycle().restoreToProjectRoot();
|
|
1061
1077
|
} catch (err) {
|
|
@@ -1065,14 +1081,9 @@ export async function cleanupAfterLoopExit(ctx: ExtensionContext): Promise<void>
|
|
|
1065
1081
|
{ file: "auto.ts" },
|
|
1066
1082
|
);
|
|
1067
1083
|
}
|
|
1068
|
-
try {
|
|
1069
|
-
process.chdir(s.originalBasePath);
|
|
1070
|
-
} catch (err) {
|
|
1071
|
-
logWarning("engine", `basePath restore/chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1072
|
-
}
|
|
1073
1084
|
}
|
|
1074
1085
|
|
|
1075
|
-
if (s.originalBasePath && s.cmdCtx) {
|
|
1086
|
+
if (s.originalBasePath && s.cmdCtx && !preserveStepSurface && !preservePausedSurface) {
|
|
1076
1087
|
const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
|
|
1077
1088
|
if (result.status === "cancelled") {
|
|
1078
1089
|
logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
|
|
@@ -1183,6 +1194,8 @@ export async function stopAuto(
|
|
|
1183
1194
|
? "merge-conflict"
|
|
1184
1195
|
: rawReason.startsWith("Merge error") || rawReason.startsWith("Merge failed")
|
|
1185
1196
|
? "merge-failed"
|
|
1197
|
+
: rawReason.startsWith("Slice-parallel dispatched")
|
|
1198
|
+
? "stop"
|
|
1186
1199
|
: rawReason.startsWith("slice-merge-conflict")
|
|
1187
1200
|
? "slice-merge-conflict"
|
|
1188
1201
|
: rawReason === "All milestones complete"
|
|
@@ -1384,20 +1397,14 @@ export async function stopAuto(
|
|
|
1384
1397
|
}
|
|
1385
1398
|
|
|
1386
1399
|
// ── Step 7: Restore basePath and chdir (ADR-016 phase 3, #5693) ──
|
|
1387
|
-
// `restoreToProjectRoot`
|
|
1388
|
-
// no
|
|
1400
|
+
// `restoreToProjectRoot` owns both s.basePath restore and process.chdir;
|
|
1401
|
+
// no paired chdir is needed at the call site.
|
|
1389
1402
|
if (s.originalBasePath) {
|
|
1390
1403
|
try {
|
|
1391
1404
|
buildLifecycle().restoreToProjectRoot();
|
|
1392
1405
|
} catch (e) {
|
|
1393
1406
|
debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
|
|
1394
1407
|
}
|
|
1395
|
-
try {
|
|
1396
|
-
process.chdir(s.basePath);
|
|
1397
|
-
} catch (err) {
|
|
1398
|
-
/* best-effort */
|
|
1399
|
-
logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
|
|
1400
|
-
}
|
|
1401
1408
|
}
|
|
1402
1409
|
|
|
1403
1410
|
// Re-root the active command session/tool runtime after worktree teardown.
|
|
@@ -1426,7 +1433,7 @@ export async function stopAuto(
|
|
|
1426
1433
|
if (ledger && ledger.units.length > 0) {
|
|
1427
1434
|
const totals = getProjectTotals(ledger.units);
|
|
1428
1435
|
ctx?.ui.notify(
|
|
1429
|
-
|
|
1436
|
+
formatAutoStopNotification(notificationPrefix, totals, ledger.units.length),
|
|
1430
1437
|
"info",
|
|
1431
1438
|
);
|
|
1432
1439
|
} else {
|
|
@@ -1733,7 +1740,6 @@ export async function pauseAuto(
|
|
|
1733
1740
|
restoreProjectRootEnv();
|
|
1734
1741
|
restoreMilestoneLockEnv();
|
|
1735
1742
|
s.pendingVerificationRetry = null;
|
|
1736
|
-
s.verificationRetryCount.clear();
|
|
1737
1743
|
ctx?.ui.setStatus("gsd-auto", "paused");
|
|
1738
1744
|
ctx?.ui.setWidget("gsd-progress", undefined);
|
|
1739
1745
|
const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
|
|
@@ -1792,6 +1798,100 @@ function buildLifecycle(): WorktreeLifecycle {
|
|
|
1792
1798
|
return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
|
|
1793
1799
|
}
|
|
1794
1800
|
|
|
1801
|
+
/**
|
|
1802
|
+
* Build the production `DispatchAdapter` used by `createWiredAutoOrchestrationModule`.
|
|
1803
|
+
*
|
|
1804
|
+
* Exported so tests can verify parity with `runDispatch`'s `resolveDispatch` call —
|
|
1805
|
+
* the wired adapter must derive `structuredQuestionsAvailable`, `sessionContextWindow`,
|
|
1806
|
+
* `sessionProvider`, and `modelRegistry` the same way phases.ts:runDispatch does.
|
|
1807
|
+
*/
|
|
1808
|
+
export function createWiredDispatchAdapter(
|
|
1809
|
+
ctx: ExtensionContext,
|
|
1810
|
+
pi: ExtensionAPI,
|
|
1811
|
+
dispatchBasePath: string,
|
|
1812
|
+
session?: AutoSession,
|
|
1813
|
+
): DispatchAdapter {
|
|
1814
|
+
return {
|
|
1815
|
+
async decideNextUnit(input) {
|
|
1816
|
+
const state = input.stateSnapshot;
|
|
1817
|
+
const active = state.activeMilestone;
|
|
1818
|
+
if (!active) return null;
|
|
1819
|
+
|
|
1820
|
+
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
1821
|
+
|
|
1822
|
+
// Derive session-derived dispatch inputs the same way phases.ts:runDispatch does
|
|
1823
|
+
// (#5789). Prefer caller-supplied values when present so test harnesses and
|
|
1824
|
+
// alternative wirings can inject deterministic snapshots; otherwise pull from
|
|
1825
|
+
// the captured pi/ctx references.
|
|
1826
|
+
const sessionProvider = input.sessionProvider ?? ctx.model?.provider;
|
|
1827
|
+
const sessionContextWindow = input.sessionContextWindow ?? ctx.model?.contextWindow;
|
|
1828
|
+
const modelRegistry = input.modelRegistry ?? (ctx.modelRegistry as MinimalModelRegistry | undefined);
|
|
1829
|
+
const authMode =
|
|
1830
|
+
sessionProvider && typeof ctx.modelRegistry?.getProviderAuthMode === "function"
|
|
1831
|
+
? ctx.modelRegistry.getProviderAuthMode(sessionProvider)
|
|
1832
|
+
: undefined;
|
|
1833
|
+
const activeTools = typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [];
|
|
1834
|
+
// Mirrors runDispatch: deep-planning keeps approval gates in plain chat
|
|
1835
|
+
// because structured questions can be cancelled outside the chat turn on
|
|
1836
|
+
// some transports.
|
|
1837
|
+
const structuredQuestionsAvailable =
|
|
1838
|
+
input.structuredQuestionsAvailable ??
|
|
1839
|
+
(prefs?.planning_depth === "deep"
|
|
1840
|
+
? "false"
|
|
1841
|
+
: supportsStructuredQuestions(activeTools, {
|
|
1842
|
+
authMode,
|
|
1843
|
+
baseUrl: ctx.model?.baseUrl,
|
|
1844
|
+
})
|
|
1845
|
+
? "true"
|
|
1846
|
+
: "false");
|
|
1847
|
+
|
|
1848
|
+
const action = await resolveDispatch({
|
|
1849
|
+
basePath: dispatchBasePath,
|
|
1850
|
+
mid: active.id,
|
|
1851
|
+
midTitle: active.title,
|
|
1852
|
+
state,
|
|
1853
|
+
prefs,
|
|
1854
|
+
session: input.session,
|
|
1855
|
+
structuredQuestionsAvailable,
|
|
1856
|
+
sessionContextWindow,
|
|
1857
|
+
sessionProvider,
|
|
1858
|
+
modelRegistry,
|
|
1859
|
+
});
|
|
1860
|
+
|
|
1861
|
+
if (action.action === "stop") {
|
|
1862
|
+
if (session) session.pendingOrchestrationDispatch = null;
|
|
1863
|
+
return {
|
|
1864
|
+
kind: "blocked",
|
|
1865
|
+
reason: action.reason,
|
|
1866
|
+
action: action.level === "warning" ? "pause" : "stop",
|
|
1867
|
+
};
|
|
1868
|
+
}
|
|
1869
|
+
if (action.action !== "dispatch") {
|
|
1870
|
+
if (session) session.pendingOrchestrationDispatch = null;
|
|
1871
|
+
return null;
|
|
1872
|
+
}
|
|
1873
|
+
if (session) {
|
|
1874
|
+
const pending: PendingOrchestrationDispatch = {
|
|
1875
|
+
unitType: action.unitType,
|
|
1876
|
+
unitId: action.unitId,
|
|
1877
|
+
prompt: action.prompt,
|
|
1878
|
+
pauseAfterUatDispatch: action.pauseAfterDispatch ?? false,
|
|
1879
|
+
state,
|
|
1880
|
+
mid: active.id,
|
|
1881
|
+
midTitle: active.title,
|
|
1882
|
+
};
|
|
1883
|
+
session.pendingOrchestrationDispatch = pending;
|
|
1884
|
+
}
|
|
1885
|
+
return {
|
|
1886
|
+
unitType: action.unitType,
|
|
1887
|
+
unitId: action.unitId,
|
|
1888
|
+
reason: action.matchedRule ?? "dispatch",
|
|
1889
|
+
preconditions: [],
|
|
1890
|
+
};
|
|
1891
|
+
},
|
|
1892
|
+
};
|
|
1893
|
+
}
|
|
1894
|
+
|
|
1795
1895
|
/**
|
|
1796
1896
|
* Thin entry glue for the new Auto Orchestration module.
|
|
1797
1897
|
*
|
|
@@ -1801,7 +1901,7 @@ function buildLifecycle(): WorktreeLifecycle {
|
|
|
1801
1901
|
*/
|
|
1802
1902
|
export function createWiredAutoOrchestrationModule(
|
|
1803
1903
|
ctx: ExtensionContext,
|
|
1804
|
-
|
|
1904
|
+
pi: ExtensionAPI,
|
|
1805
1905
|
dispatchBasePath: string,
|
|
1806
1906
|
runtimeBasePath = resolveProjectRoot(dispatchBasePath),
|
|
1807
1907
|
): AutoOrchestrationModule {
|
|
@@ -1830,30 +1930,7 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1830
1930
|
};
|
|
1831
1931
|
},
|
|
1832
1932
|
},
|
|
1833
|
-
dispatch:
|
|
1834
|
-
async decideNextUnit(input) {
|
|
1835
|
-
const state = input.stateSnapshot;
|
|
1836
|
-
const active = state.activeMilestone;
|
|
1837
|
-
if (!active) return null;
|
|
1838
|
-
|
|
1839
|
-
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
1840
|
-
const action = await resolveDispatch({
|
|
1841
|
-
basePath: dispatchBasePath,
|
|
1842
|
-
mid: active.id,
|
|
1843
|
-
midTitle: active.title,
|
|
1844
|
-
state,
|
|
1845
|
-
prefs,
|
|
1846
|
-
});
|
|
1847
|
-
|
|
1848
|
-
if (action.action !== "dispatch") return null;
|
|
1849
|
-
return {
|
|
1850
|
-
unitType: action.unitType,
|
|
1851
|
-
unitId: action.unitId,
|
|
1852
|
-
reason: action.matchedRule ?? "dispatch",
|
|
1853
|
-
preconditions: [],
|
|
1854
|
-
};
|
|
1855
|
-
},
|
|
1856
|
-
},
|
|
1933
|
+
dispatch: createWiredDispatchAdapter(ctx, pi, dispatchBasePath, s),
|
|
1857
1934
|
recovery: {
|
|
1858
1935
|
async classifyAndRecover(input) {
|
|
1859
1936
|
const recovery = classifyFailure(input);
|
|
@@ -1876,10 +1953,16 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1876
1953
|
reason: `No Unit manifest is registered for ${unitType}`,
|
|
1877
1954
|
};
|
|
1878
1955
|
}
|
|
1956
|
+
if (getIsolationMode(runtimeBasePath) !== "worktree") {
|
|
1957
|
+
return { ok: true, reason: "not-required" };
|
|
1958
|
+
}
|
|
1879
1959
|
const writeScope =
|
|
1880
1960
|
manifest.tools.mode === "all" || manifest.tools.mode === "docs"
|
|
1881
1961
|
? "source-writing"
|
|
1882
1962
|
: "planning-only";
|
|
1963
|
+
if (getIsolationMode(runtimeBasePath) !== "worktree") {
|
|
1964
|
+
return { ok: true, reason: "isolation-not-worktree" };
|
|
1965
|
+
}
|
|
1883
1966
|
const safety = createWorktreeSafetyModule();
|
|
1884
1967
|
const snapshot = await deriveState(dispatchBasePath);
|
|
1885
1968
|
const milestoneId = snapshot.activeMilestone?.id ?? null;
|
|
@@ -1902,12 +1985,25 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1902
1985
|
async cleanupOnStop() {},
|
|
1903
1986
|
},
|
|
1904
1987
|
health: {
|
|
1988
|
+
checkResourcesStale() {
|
|
1989
|
+
return checkResourcesStale(s.resourceVersionOnStart);
|
|
1990
|
+
},
|
|
1905
1991
|
async preAdvanceGate() {
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1992
|
+
try {
|
|
1993
|
+
const gate = await preDispatchHealthGate(dispatchBasePath);
|
|
1994
|
+
if (gate.proceed) {
|
|
1995
|
+
return {
|
|
1996
|
+
kind: "pass",
|
|
1997
|
+
fixesApplied: gate.fixesApplied,
|
|
1998
|
+
};
|
|
1999
|
+
}
|
|
2000
|
+
return {
|
|
2001
|
+
kind: "fail",
|
|
2002
|
+
reason: gate.reason ?? "Pre-dispatch health check failed — run /gsd doctor for details.",
|
|
2003
|
+
};
|
|
2004
|
+
} catch (error) {
|
|
2005
|
+
return { kind: "threw", error };
|
|
2006
|
+
}
|
|
1911
2007
|
},
|
|
1912
2008
|
async postAdvanceRecord(result) {
|
|
1913
2009
|
if (result.kind === "error") {
|
|
@@ -1936,22 +2032,22 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1936
2032
|
},
|
|
1937
2033
|
async journalTransition(event) {
|
|
1938
2034
|
const eventType = event.name === "start"
|
|
1939
|
-
? "iteration-start"
|
|
2035
|
+
? "orchestrator-iteration-start"
|
|
1940
2036
|
: event.name === "resume"
|
|
1941
|
-
? "iteration-start"
|
|
2037
|
+
? "orchestrator-iteration-start"
|
|
1942
2038
|
: event.name === "advance"
|
|
1943
|
-
? "dispatch-match"
|
|
2039
|
+
? "orchestrator-dispatch-match"
|
|
1944
2040
|
: event.name === "advance-blocked"
|
|
1945
|
-
? "guard-block"
|
|
2041
|
+
? "orchestrator-guard-block"
|
|
1946
2042
|
: event.name === "advance-stopped"
|
|
1947
|
-
? "dispatch-stop"
|
|
2043
|
+
? "orchestrator-dispatch-stop"
|
|
1948
2044
|
: event.name === "advance-error"
|
|
1949
|
-
? "iteration-end"
|
|
2045
|
+
? "orchestrator-iteration-end"
|
|
1950
2046
|
: event.name === "advance-paused" || event.name === "advance-retry"
|
|
1951
|
-
? "guard-block"
|
|
2047
|
+
? "orchestrator-guard-block"
|
|
1952
2048
|
: event.name === "stop"
|
|
1953
|
-
? "terminal"
|
|
1954
|
-
: "iteration-end";
|
|
2049
|
+
? "orchestrator-terminal"
|
|
2050
|
+
: "orchestrator-iteration-end";
|
|
1955
2051
|
|
|
1956
2052
|
_emitJournalEvent(runtimeBasePath, {
|
|
1957
2053
|
ts: new Date().toISOString(),
|
|
@@ -1975,11 +2071,60 @@ export function createWiredAutoOrchestrationModule(
|
|
|
1975
2071
|
}
|
|
1976
2072
|
},
|
|
1977
2073
|
},
|
|
2074
|
+
uokGate: {
|
|
2075
|
+
async emit(input) {
|
|
2076
|
+
const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
|
|
2077
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
2078
|
+
if (!uokFlags.gates) return;
|
|
2079
|
+
const milestoneId = input.milestoneId ?? s.currentMilestoneId ?? undefined;
|
|
2080
|
+
try {
|
|
2081
|
+
const { UokGateRunner } = await import("./uok/gate-runner.js");
|
|
2082
|
+
const runner = new UokGateRunner();
|
|
2083
|
+
runner.register({
|
|
2084
|
+
id: input.gateId,
|
|
2085
|
+
type: input.gateType,
|
|
2086
|
+
execute: async () => ({
|
|
2087
|
+
outcome: input.outcome,
|
|
2088
|
+
failureClass: input.failureClass,
|
|
2089
|
+
rationale: input.rationale,
|
|
2090
|
+
findings: input.findings ?? "",
|
|
2091
|
+
}),
|
|
2092
|
+
});
|
|
2093
|
+
await runner.run(input.gateId, {
|
|
2094
|
+
basePath: dispatchBasePath,
|
|
2095
|
+
traceId: `pre-dispatch:${flowId}`,
|
|
2096
|
+
turnId: `orch-${seq}`,
|
|
2097
|
+
milestoneId,
|
|
2098
|
+
unitType: "pre-dispatch",
|
|
2099
|
+
unitId: `orch-${seq}`,
|
|
2100
|
+
});
|
|
2101
|
+
} catch (err) {
|
|
2102
|
+
logWarning("engine", `uok gate emit failed: ${getErrorMessage(err)}`, {
|
|
2103
|
+
file: "auto.ts",
|
|
2104
|
+
gateId: input.gateId,
|
|
2105
|
+
gateType: input.gateType,
|
|
2106
|
+
...(milestoneId ? { milestoneId } : {}),
|
|
2107
|
+
});
|
|
2108
|
+
}
|
|
2109
|
+
},
|
|
2110
|
+
},
|
|
1978
2111
|
};
|
|
1979
2112
|
|
|
1980
2113
|
return createAutoOrchestrator(deps);
|
|
1981
2114
|
}
|
|
1982
2115
|
|
|
2116
|
+
function notifyResumeBlocked(ctx: ExtensionContext, result: Extract<AutoAdvanceResult, { kind: "blocked" }>): void {
|
|
2117
|
+
const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
|
|
2118
|
+
ctx.ui.notify(`Auto-mode blocked: ${result.reason}. Fix and run ${resumeCmd} to resume.`, "warning");
|
|
2119
|
+
setLifecycleOutcome(ctx, {
|
|
2120
|
+
status: "blocked",
|
|
2121
|
+
title: "Auto-mode blocked",
|
|
2122
|
+
detail: result.reason,
|
|
2123
|
+
nextAction: `Fix the blocker, then run ${resumeCmd} to resume.`,
|
|
2124
|
+
commands: ["/gsd status for overview", `${resumeCmd} to resume`, "/gsd doctor to diagnose"],
|
|
2125
|
+
});
|
|
2126
|
+
}
|
|
2127
|
+
|
|
1983
2128
|
function ensureOrchestrationModule(ctx: ExtensionContext, pi: ExtensionAPI, basePath: string): void {
|
|
1984
2129
|
s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
|
|
1985
2130
|
}
|
|
@@ -2317,7 +2462,7 @@ export async function startAuto(
|
|
|
2317
2462
|
// This closes the journal gap reported in #3348 where the worker wrote side
|
|
2318
2463
|
// effects (SUMMARY.md, DB updates) but died before emitting unit-end.
|
|
2319
2464
|
emitCrashRecoveredUnitEnd(base, freshStartAssessment.lock);
|
|
2320
|
-
|
|
2465
|
+
clearStaleWorkerLock(base);
|
|
2321
2466
|
}
|
|
2322
2467
|
|
|
2323
2468
|
if (!s.paused) {
|
|
@@ -2388,6 +2533,8 @@ export async function startAuto(
|
|
|
2388
2533
|
s.unitLifetimeDispatches.clear();
|
|
2389
2534
|
if (!getLedger()) initMetrics(base);
|
|
2390
2535
|
if (s.currentMilestoneId) setActiveMilestoneId(base, s.currentMilestoneId);
|
|
2536
|
+
await openProjectDbIfPresent(base);
|
|
2537
|
+
registerAutoWorkerForSession(s, base);
|
|
2391
2538
|
|
|
2392
2539
|
// Re-register health level notification callback lost across process restart
|
|
2393
2540
|
setLevelChangeCallback((_from, to, summary) => {
|
|
@@ -2495,7 +2642,15 @@ export async function startAuto(
|
|
|
2495
2642
|
pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
|
|
2496
2643
|
|
|
2497
2644
|
try {
|
|
2498
|
-
await s.orchestration?.resume();
|
|
2645
|
+
const resumeResult = await s.orchestration?.resume();
|
|
2646
|
+
if (resumeResult?.kind === "blocked" && resumeResult.action === "stop") {
|
|
2647
|
+
notifyResumeBlocked(ctx, resumeResult);
|
|
2648
|
+
await cleanupAfterLoopExit(ctx);
|
|
2649
|
+
return;
|
|
2650
|
+
}
|
|
2651
|
+
if (resumeResult?.kind === "blocked") {
|
|
2652
|
+
notifyResumeBlocked(ctx, resumeResult);
|
|
2653
|
+
}
|
|
2499
2654
|
} catch (err) {
|
|
2500
2655
|
debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
|
|
2501
2656
|
}
|
|
@@ -2516,6 +2671,7 @@ export async function startAuto(
|
|
|
2516
2671
|
const bootstrapDeps: BootstrapDeps = {
|
|
2517
2672
|
shouldUseWorktreeIsolation,
|
|
2518
2673
|
registerSigtermHandler,
|
|
2674
|
+
registerAutoWorkerForSession: (projectRoot) => registerAutoWorkerForSession(s, projectRoot),
|
|
2519
2675
|
lockBase,
|
|
2520
2676
|
buildLifecycle,
|
|
2521
2677
|
};
|
|
@@ -32,6 +32,7 @@ import { shouldIgnoreAgentEndForActiveUnit } from "../auto/unit-runner-events.js
|
|
|
32
32
|
import { resolveModelId } from "../auto-model-selection.js";
|
|
33
33
|
import { resolveProjectRoot } from "../worktree.js";
|
|
34
34
|
import { clearDiscussionFlowState } from "./write-gate.js";
|
|
35
|
+
import { clearGuidedUnitContext } from "../guided-unit-context.js";
|
|
35
36
|
import { resumeAutoAfterProviderDelay } from "./provider-error-resume.js";
|
|
36
37
|
import {
|
|
37
38
|
classifyError,
|
|
@@ -48,6 +49,11 @@ const MAX_NETWORK_RETRIES = 2;
|
|
|
48
49
|
function isObjectRecord(value: unknown): value is Record<string, unknown> {
|
|
49
50
|
return !!value && typeof value === "object";
|
|
50
51
|
}
|
|
52
|
+
|
|
53
|
+
export function _hasEmptyAgentEndContent(content: unknown): boolean {
|
|
54
|
+
return content == null || (Array.isArray(content) && content.length === 0);
|
|
55
|
+
}
|
|
56
|
+
|
|
51
57
|
/**
|
|
52
58
|
* Cap on auto-resume attempts for sustained transient-provider errors.
|
|
53
59
|
*
|
|
@@ -94,6 +100,14 @@ export function isUserInitiatedAbortMessage(message: string | undefined | null):
|
|
|
94
100
|
return /\b(?:claude code process aborted by user|request aborted by user|process aborted by user)\b/i.test(message);
|
|
95
101
|
}
|
|
96
102
|
|
|
103
|
+
export function shouldDeferTransientErrorToCoreRetry(
|
|
104
|
+
cls: ErrorClass,
|
|
105
|
+
rawErrorMsg: string,
|
|
106
|
+
): boolean {
|
|
107
|
+
if (!isTransient(cls) || cls.kind === "rate-limit") return false;
|
|
108
|
+
return !/retry failed after \d+ attempts:/i.test(rawErrorMsg);
|
|
109
|
+
}
|
|
110
|
+
|
|
97
111
|
function isBareClaudeCodeSessionSwitchAbortMarker(message: string | undefined | null): boolean {
|
|
98
112
|
if (!message) return false;
|
|
99
113
|
const normalized = message.trim().replace(/\s+/g, " ").toLowerCase();
|
|
@@ -196,6 +210,14 @@ export function resolveAgentEndErrorDisplay(
|
|
|
196
210
|
return rawErrorMsg;
|
|
197
211
|
}
|
|
198
212
|
|
|
213
|
+
export function isTerminalDeletedWorktreeProviderError(
|
|
214
|
+
message: string | undefined | null,
|
|
215
|
+
): boolean {
|
|
216
|
+
if (!message) return false;
|
|
217
|
+
if (!/\bdoes not exist\b/i.test(message)) return false;
|
|
218
|
+
return /[/\\]\.gsd[/\\](?:projects[/\\][^/\\]+[/\\])?worktrees[/\\][^/\\\s"']+/i.test(message);
|
|
219
|
+
}
|
|
220
|
+
|
|
199
221
|
async function pauseTransientWithBackoff(
|
|
200
222
|
cls: ErrorClass,
|
|
201
223
|
pi: ExtensionAPI,
|
|
@@ -244,9 +266,11 @@ export async function handleAgentEnd(
|
|
|
244
266
|
// falsely report files as missing — producing a spurious "ready signal
|
|
245
267
|
// rejected" loop even though the files are on disk.
|
|
246
268
|
clearPathCache();
|
|
269
|
+
const basePath = resolveAgentEndBasePath();
|
|
270
|
+
clearGuidedUnitContext(basePath);
|
|
247
271
|
|
|
248
272
|
try {
|
|
249
|
-
if (await checkDeepProjectSetupAfterTurn(event, ctx,
|
|
273
|
+
if (await checkDeepProjectSetupAfterTurn(event, ctx, basePath)) {
|
|
250
274
|
return;
|
|
251
275
|
}
|
|
252
276
|
} catch (err) {
|
|
@@ -254,8 +278,8 @@ export async function handleAgentEnd(
|
|
|
254
278
|
logWarning("bootstrap", `checkDeepProjectSetupAfterTurn failed: ${message}`);
|
|
255
279
|
}
|
|
256
280
|
|
|
257
|
-
if (checkAutoStartAfterDiscuss()) {
|
|
258
|
-
clearDiscussionFlowState(
|
|
281
|
+
if (checkAutoStartAfterDiscuss(basePath)) {
|
|
282
|
+
clearDiscussionFlowState(basePath ?? process.cwd());
|
|
259
283
|
return;
|
|
260
284
|
}
|
|
261
285
|
|
|
@@ -263,14 +287,14 @@ export async function handleAgentEnd(
|
|
|
263
287
|
// are missing, `checkAutoStartAfterDiscuss` returns false silently. Surface
|
|
264
288
|
// that and nudge the LLM to complete the writes before the user hits the
|
|
265
289
|
// downstream "All milestones complete" warning loop.
|
|
266
|
-
if (maybeHandleReadyPhraseWithoutFiles(event)) return;
|
|
290
|
+
if (maybeHandleReadyPhraseWithoutFiles(event, basePath)) return;
|
|
267
291
|
|
|
268
292
|
// #4573 — Empty-turn recovery: if the LLM announced intent in prose but
|
|
269
293
|
// emitted no tool calls, nudge it to execute. Fires only when auto-mode is
|
|
270
294
|
// active or a discussion autostart is pending (non-auto interactive discuss
|
|
271
295
|
// is user-driven). Runs before `isAutoActive` early return so pending
|
|
272
296
|
// discussions (where isAutoActive may be false) still get recovered.
|
|
273
|
-
if (maybeHandleEmptyIntentTurn(event, isAutoActive())) return;
|
|
297
|
+
if (maybeHandleEmptyIntentTurn(event, isAutoActive(), basePath)) return;
|
|
274
298
|
|
|
275
299
|
if (!isAutoActive()) return;
|
|
276
300
|
|
|
@@ -310,7 +334,7 @@ export async function handleAgentEnd(
|
|
|
310
334
|
// that carry error context — e.g. errorMessage field or non-empty content
|
|
311
335
|
// indicating a mid-stream failure. (#2695)
|
|
312
336
|
const content = "content" in lastMsg ? lastMsg.content : undefined;
|
|
313
|
-
const hasEmptyContent =
|
|
337
|
+
const hasEmptyContent = _hasEmptyAgentEndContent(content);
|
|
314
338
|
const hasErrorMessage = "errorMessage" in lastMsg && !!lastMsg.errorMessage;
|
|
315
339
|
|
|
316
340
|
if (hasEmptyContent && !hasErrorMessage) {
|
|
@@ -355,6 +379,17 @@ export async function handleAgentEnd(
|
|
|
355
379
|
rawErrorMsg,
|
|
356
380
|
"content" in lastMsg ? lastMsg.content : undefined,
|
|
357
381
|
);
|
|
382
|
+
if (
|
|
383
|
+
isAutoCompletionStopInProgress() &&
|
|
384
|
+
isTerminalDeletedWorktreeProviderError(`${rawErrorMsg}\n${displayMsg}`)
|
|
385
|
+
) {
|
|
386
|
+
resetRetryState(retryState);
|
|
387
|
+
logWarning(
|
|
388
|
+
"bootstrap",
|
|
389
|
+
`Ignoring stale deleted-worktree provider error during terminal completion reroot: ${displayMsg || rawErrorMsg}`,
|
|
390
|
+
);
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
358
393
|
const errorDetail = displayMsg ? `: ${displayMsg}` : "";
|
|
359
394
|
const explicitRetryAfterMs = ("retryAfterMs" in lastMsg && typeof lastMsg.retryAfterMs === "number") ? lastMsg.retryAfterMs : undefined;
|
|
360
395
|
|
|
@@ -461,7 +496,7 @@ export async function handleAgentEnd(
|
|
|
461
496
|
// Core retries transient failures in-session after this handler.
|
|
462
497
|
// Keep that behavior for non-rate-limit classes to avoid pause/retry races,
|
|
463
498
|
// but let rate-limit continue into model fallback logic below (#4373).
|
|
464
|
-
if (
|
|
499
|
+
if (shouldDeferTransientErrorToCoreRetry(cls, rawErrorMsg)) {
|
|
465
500
|
return;
|
|
466
501
|
}
|
|
467
502
|
|
|
@@ -487,17 +487,18 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
487
487
|
promptGuidelines: [
|
|
488
488
|
"Use gsd_plan_milestone for milestone planning instead of writing ROADMAP.md directly.",
|
|
489
489
|
"Keep parameters flat and provide the full milestone planning payload, including slices.",
|
|
490
|
+
"Milestone and slice titles must not contain forward slash (/), en dash, or em dash characters.",
|
|
490
491
|
"The tool validates input, writes milestone and slice planning data transactionally, renders ROADMAP.md from DB, and clears both state and parse caches after success.",
|
|
491
492
|
"Use the canonical name gsd_plan_milestone; gsd_milestone_plan is only an alias.",
|
|
492
493
|
],
|
|
493
494
|
parameters: Type.Object({
|
|
494
495
|
// ── Core identification + content (required) ──────────────────────
|
|
495
496
|
milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
|
|
496
|
-
title: Type.String({ description: "Milestone title" }),
|
|
497
|
+
title: Type.String({ description: "Milestone title; must not contain forward slash (/), en dash, or em dash characters" }),
|
|
497
498
|
vision: Type.String({ description: "Milestone vision" }),
|
|
498
499
|
slices: Type.Array(Type.Object({
|
|
499
500
|
sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
|
|
500
|
-
title: Type.String({ description: "Slice title" }),
|
|
501
|
+
title: Type.String({ description: "Slice title; must not contain forward slash (/), en dash, or em dash characters" }),
|
|
501
502
|
risk: Type.String({ description: "Slice risk" }),
|
|
502
503
|
depends: Type.Array(Type.String(), { description: "Slice dependency IDs" }),
|
|
503
504
|
demo: Type.String({ description: "Roadmap demo text / After this" }),
|
|
@@ -570,10 +571,10 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
570
571
|
title: Type.String({ description: "Task title" }),
|
|
571
572
|
description: Type.String({ description: "Task description / steps block" }),
|
|
572
573
|
estimate: Type.String({ description: "Task estimate string" }),
|
|
573
|
-
files: Type.Array(Type.String(), { description: "
|
|
574
|
+
files: Type.Array(Type.String(), { description: "Array<string> of files likely touched; pass [\"path\"] or [], never a single string" }),
|
|
574
575
|
verify: Type.String({ description: "Verification command or block" }),
|
|
575
|
-
inputs: Type.Array(Type.String(), { description: "
|
|
576
|
-
expectedOutput: Type.Array(Type.String(), { description: "
|
|
576
|
+
inputs: Type.Array(Type.String(), { description: "Array<string> of input files or references; pass [\"path\"] or [], never a single string" }),
|
|
577
|
+
expectedOutput: Type.Array(Type.String(), { description: "Array<string> of expected output files or artifacts; pass [\"path\"] or [], never a single string" }),
|
|
577
578
|
observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
|
|
578
579
|
}), { description: "Planned tasks for the slice" }),
|
|
579
580
|
// ── Enrichment metadata (optional — defaults to empty) ────────────
|
|
@@ -650,10 +651,10 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
650
651
|
title: Type.String({ description: "Task title" }),
|
|
651
652
|
description: Type.String({ description: "Task description / steps block" }),
|
|
652
653
|
estimate: Type.String({ description: "Task estimate string" }),
|
|
653
|
-
files: Type.Array(Type.String(), { description: "
|
|
654
|
+
files: Type.Array(Type.String(), { description: "Array<string> of files likely touched; pass [\"path\"] or [], never a single string" }),
|
|
654
655
|
verify: Type.String({ description: "Verification command or block" }),
|
|
655
|
-
inputs: Type.Array(Type.String(), { description: "
|
|
656
|
-
expectedOutput: Type.Array(Type.String(), { description: "
|
|
656
|
+
inputs: Type.Array(Type.String(), { description: "Array<string> of input files or references; pass [\"path\"] or [], never a single string" }),
|
|
657
|
+
expectedOutput: Type.Array(Type.String(), { description: "Array<string> of expected output files or artifacts; pass [\"path\"] or [], never a single string" }),
|
|
657
658
|
observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
|
|
658
659
|
// Single-writer v3 audit trail (Stream 2): caller-provided actor identity + causation.
|
|
659
660
|
actorName: Type.Optional(Type.String({ description: "Caller-provided actor identity for the audit trail (e.g. 'executor-01', 'gsd-orchestrator')" })),
|
|
@@ -912,7 +913,7 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
912
913
|
label: "Skip Slice",
|
|
913
914
|
description:
|
|
914
915
|
"Mark a slice as skipped so auto-mode advances past it without executing. " +
|
|
915
|
-
"Non-closed tasks within the slice are cascaded to skipped so milestone completion is not blocked by leftover pending tasks
|
|
916
|
+
"Non-closed tasks within the slice are cascaded to skipped so milestone completion is not blocked by leftover pending tasks. " +
|
|
916
917
|
"The slice data is preserved for reference. The state machine treats skipped slices like completed ones for dependency satisfaction.",
|
|
917
918
|
promptSnippet: "Skip a GSD slice (mark as skipped, auto-mode will advance past it)",
|
|
918
919
|
promptGuidelines: [
|