@opengsd/gsd-pi 1.4.0 → 1.5.0-dev.553dc518
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 +11 -11
- package/dist/onboarding.js +11 -0
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/GSD-WORKFLOW.md +20 -25
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +118 -53
- package/dist/resources/extensions/cursor-cli/index.js +16 -0
- package/dist/resources/extensions/cursor-cli/models.js +63 -0
- package/dist/resources/extensions/cursor-cli/package.json +11 -0
- package/dist/resources/extensions/cursor-cli/readiness.js +128 -0
- package/dist/resources/extensions/cursor-cli/stream-adapter.js +353 -0
- package/dist/resources/extensions/gsd/activity-log.js +4 -1
- package/dist/resources/extensions/gsd/artifact-verification.js +25 -9
- package/dist/resources/extensions/gsd/auto/closeout.js +137 -42
- package/dist/resources/extensions/gsd/auto/finalize.js +9 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +4 -3
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +6 -3
- package/dist/resources/extensions/gsd/auto/run-unit.js +5 -2
- package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +3 -0
- package/dist/resources/extensions/gsd/auto/unit-phase.js +5 -9
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +4 -5
- package/dist/resources/extensions/gsd/auto-dispatch.js +15 -5
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -18
- package/dist/resources/extensions/gsd/auto-prompts.js +76 -2
- package/dist/resources/extensions/gsd/auto-start.js +7 -5
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +4 -0
- package/dist/resources/extensions/gsd/auto-worktree-branch-lifecycle.js +189 -0
- package/dist/resources/extensions/gsd/auto-worktree-cleanup.js +133 -0
- package/dist/resources/extensions/gsd/auto-worktree-conflict-auto-resolve.js +35 -0
- package/dist/resources/extensions/gsd/auto-worktree-creation.js +130 -0
- package/dist/resources/extensions/gsd/auto-worktree-entry.js +118 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-already-merged.js +98 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-branch-head.js +52 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-cleanup.js +87 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-code-changes.js +46 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-db-ready.js +68 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-integration-branch.js +51 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-message.js +106 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-pre-teardown.js +64 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-stash.js +168 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge.js +302 -0
- package/dist/resources/extensions/gsd/auto-worktree-milestone-shelter.js +119 -0
- package/dist/resources/extensions/gsd/auto-worktree-path-resolution.js +5 -0
- package/dist/resources/extensions/gsd/auto-worktree-path-utils.js +5 -0
- package/dist/resources/extensions/gsd/auto-worktree-resource-version.js +41 -0
- package/dist/resources/extensions/gsd/auto-worktree-runtime-cleanup.js +99 -0
- package/dist/resources/extensions/gsd/auto-worktree-session-registry.js +57 -0
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +249 -0
- package/dist/resources/extensions/gsd/auto-worktree-teardown.js +120 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +20 -2046
- package/dist/resources/extensions/gsd/auto.js +31 -5
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +3 -0
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +133 -6
- package/dist/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.js +58 -9
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +127 -22
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +14 -1
- package/dist/resources/extensions/gsd/codebase-generator.js +157 -19
- package/dist/resources/extensions/gsd/commands/handlers/core.js +40 -4
- package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +153 -1
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +3 -3
- package/dist/resources/extensions/gsd/commands-worktree.js +11 -2
- package/dist/resources/extensions/gsd/db/queries.js +48 -9
- package/dist/resources/extensions/gsd/discussion-handoff.js +8 -3
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +8 -2
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +292 -18
- package/dist/resources/extensions/gsd/doctor-providers.js +38 -10
- package/dist/resources/extensions/gsd/doctor.js +93 -3
- package/dist/resources/extensions/gsd/exec-sandbox.js +6 -2
- package/dist/resources/extensions/gsd/flat-phase-migration.js +88 -26
- package/dist/resources/extensions/gsd/forensics.js +1 -1
- package/dist/resources/extensions/gsd/git-conflict-resolve.js +2 -2
- package/dist/resources/extensions/gsd/git-service.js +59 -18
- package/dist/resources/extensions/gsd/gsd-db.js +63 -0
- package/dist/resources/extensions/gsd/guidance.js +1 -0
- package/dist/resources/extensions/gsd/guided-flow.js +46 -12
- package/dist/resources/extensions/gsd/key-manager.js +1 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +40 -11
- package/dist/resources/extensions/gsd/migrate-external.js +24 -7
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +14 -3
- package/dist/resources/extensions/gsd/milestone-settlement.js +1 -1
- package/dist/resources/extensions/gsd/parallel-merge.js +1 -1
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -1
- package/dist/resources/extensions/gsd/preferences-diagnostics.js +24 -1
- package/dist/resources/extensions/gsd/preferences-models.js +6 -4
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +107 -2
- package/dist/resources/extensions/gsd/preferences.js +29 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -2
- package/dist/resources/extensions/gsd/prompts/system.md +6 -6
- package/dist/resources/extensions/gsd/quick.js +12 -3
- package/dist/resources/extensions/gsd/redact-secrets.js +37 -0
- package/dist/resources/extensions/gsd/repo-identity.js +16 -0
- package/dist/resources/extensions/gsd/repository-registry.js +6 -1
- package/dist/resources/extensions/gsd/root-write-leak-guard.js +4 -2
- package/dist/resources/extensions/gsd/safe-fs.js +23 -2
- package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +7 -9
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +2 -1
- package/dist/resources/extensions/gsd/state/derive/from-db.js +88 -153
- package/dist/resources/extensions/gsd/tool-contract.js +14 -0
- package/dist/resources/extensions/gsd/tools/plan-task.js +76 -8
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +40 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +5 -4
- package/dist/resources/extensions/gsd/unit-registry.js +37 -2
- package/dist/resources/extensions/gsd/unit-runtime.js +21 -0
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +1 -1
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -1
- package/dist/resources/extensions/gsd/workspace-git-preflight.js +2 -2
- package/dist/resources/extensions/gsd/workspace.js +26 -8
- package/dist/resources/extensions/gsd/worktree-command.js +1 -1
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +81 -14
- package/dist/resources/extensions/gsd/worktree-manager.js +97 -4
- package/dist/resources/extensions/gsd/worktree-reentry.js +2 -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 +10 -10
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/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 +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +10 -10
- package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
- package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +3 -3
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/dist/wizard.d.ts +8 -0
- package/dist/wizard.js +8 -1
- package/integrations/hermes/CONTEXT.md +47 -0
- package/integrations/hermes/README.md +21 -0
- package/integrations/hermes/__init__.py +31 -0
- package/integrations/hermes/docs/issue-1162-grilling.md +197 -0
- package/integrations/hermes/docs/setup.md +4 -0
- package/integrations/hermes/open_gsd_hermes/commands.py +141 -0
- package/integrations/hermes/open_gsd_hermes/config.py +2 -0
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +591 -39
- package/integrations/hermes/open_gsd_hermes/notifications.py +10 -1
- package/integrations/hermes/plugin.yaml +4 -0
- package/integrations/hermes/tests/test_config.py +6 -0
- package/integrations/hermes/tests/test_directory_loader.py +37 -0
- package/integrations/hermes/tests/test_gsd_client_cache.py +3 -0
- package/integrations/hermes/tests/test_gsd_client_execute.py +35 -0
- package/integrations/hermes/tests/test_gsd_client_process_cwd.py +22 -0
- package/integrations/hermes/tests/test_gsd_client_timeout.py +98 -0
- package/integrations/hermes/tests/test_milestone_client.py +447 -0
- package/integrations/hermes/tests/test_new_milestone_command.py +313 -0
- package/integrations/hermes/tests/test_supervisor_fsm.py +40 -0
- package/package.json +8 -8
- package/packages/cloud-mcp-gateway/dist/auth-store.d.ts +1 -0
- package/packages/cloud-mcp-gateway/dist/auth-store.d.ts.map +1 -1
- package/packages/cloud-mcp-gateway/dist/auth-store.js +21 -1
- package/packages/cloud-mcp-gateway/dist/auth-store.js.map +1 -1
- package/packages/cloud-mcp-gateway/dist/auth-store.test.js +34 -0
- package/packages/cloud-mcp-gateway/dist/auth-store.test.js.map +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/dist/cloud-runtime.d.ts +2 -0
- package/packages/daemon/dist/cloud-runtime.d.ts.map +1 -1
- package/packages/daemon/dist/cloud-runtime.js +25 -1
- package/packages/daemon/dist/cloud-runtime.js.map +1 -1
- package/packages/daemon/dist/cloud-runtime.test.js +51 -0
- package/packages/daemon/dist/cloud-runtime.test.js.map +1 -1
- package/packages/daemon/dist/message-batcher.d.ts +7 -0
- package/packages/daemon/dist/message-batcher.d.ts.map +1 -1
- package/packages/daemon/dist/message-batcher.js +13 -0
- package/packages/daemon/dist/message-batcher.js.map +1 -1
- package/packages/daemon/dist/message-batcher.test.js +48 -0
- package/packages/daemon/dist/message-batcher.test.js.map +1 -1
- package/packages/daemon/dist/session-manager.js +1 -1
- package/packages/daemon/dist/session-manager.js.map +1 -1
- package/packages/daemon/package.json +5 -5
- package/packages/gsd-agent-core/dist/compaction/compaction.d.ts +13 -1
- package/packages/gsd-agent-core/dist/compaction/compaction.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/compaction/compaction.js +15 -1
- package/packages/gsd-agent-core/dist/compaction/compaction.js.map +1 -1
- package/packages/gsd-agent-core/dist/export-html/template.js +53 -4
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.js +4 -1
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +3 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/server.d.ts +18 -5
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +46 -5
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +1 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/package.json +4 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +14 -9
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/env-api-keys.d.ts.map +1 -1
- package/packages/pi-ai/dist/env-api-keys.js +3 -0
- package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +7 -3
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/dist/tool-result-content.d.ts +3 -0
- package/packages/pi-ai/dist/tool-result-content.d.ts.map +1 -0
- package/packages/pi-ai/dist/tool-result-content.js +62 -0
- package/packages/pi-ai/dist/tool-result-content.js.map +1 -0
- package/packages/pi-ai/dist/types.d.ts +10 -22
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-resolver.js +1 -0
- package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +3 -0
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/dist/rpc-client.js +1 -1
- package/packages/rpc-client/dist/rpc-client.js.map +1 -1
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/core/export-html/template.js +53 -4
- package/pkg/package.json +1 -1
- package/scripts/link-workspace-packages.cjs +14 -4
- package/src/resources/GSD-WORKFLOW.md +20 -25
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +130 -51
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +371 -39
- package/src/resources/extensions/cursor-cli/index.ts +18 -0
- package/src/resources/extensions/cursor-cli/models.ts +65 -0
- package/src/resources/extensions/cursor-cli/package.json +11 -0
- package/src/resources/extensions/cursor-cli/readiness.ts +143 -0
- package/src/resources/extensions/cursor-cli/stream-adapter.ts +440 -0
- package/src/resources/extensions/cursor-cli/tests/index.test.ts +54 -0
- package/src/resources/extensions/cursor-cli/tests/readiness.test.ts +29 -0
- package/src/resources/extensions/cursor-cli/tests/stream-adapter.test.ts +166 -0
- package/src/resources/extensions/gsd/activity-log.ts +4 -1
- package/src/resources/extensions/gsd/artifact-verification.ts +25 -9
- package/src/resources/extensions/gsd/auto/closeout.ts +163 -58
- package/src/resources/extensions/gsd/auto/finalize.ts +8 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +4 -3
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +6 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +5 -2
- package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +8 -0
- package/src/resources/extensions/gsd/auto/unit-phase.ts +5 -9
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +4 -5
- package/src/resources/extensions/gsd/auto-dispatch.ts +17 -5
- package/src/resources/extensions/gsd/auto-model-selection.ts +49 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +73 -2
- package/src/resources/extensions/gsd/auto-start.ts +8 -5
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +4 -0
- package/src/resources/extensions/gsd/auto-worktree-branch-lifecycle.ts +237 -0
- package/src/resources/extensions/gsd/auto-worktree-cleanup.ts +166 -0
- package/src/resources/extensions/gsd/auto-worktree-conflict-auto-resolve.ts +37 -0
- package/src/resources/extensions/gsd/auto-worktree-creation.ts +171 -0
- package/src/resources/extensions/gsd/auto-worktree-entry.ts +154 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-already-merged.ts +161 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-branch-head.ts +83 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-cleanup.ts +132 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-code-changes.ts +71 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-db-ready.ts +112 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-integration-branch.ts +99 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-message.ts +166 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-pre-teardown.ts +93 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-stash.ts +213 -0
- package/src/resources/extensions/gsd/auto-worktree-merge.ts +391 -0
- package/src/resources/extensions/gsd/auto-worktree-milestone-shelter.ts +159 -0
- package/src/resources/extensions/gsd/auto-worktree-path-resolution.ts +6 -0
- package/src/resources/extensions/gsd/auto-worktree-path-utils.ts +10 -0
- package/src/resources/extensions/gsd/auto-worktree-resource-version.ts +44 -0
- package/src/resources/extensions/gsd/auto-worktree-runtime-cleanup.ts +119 -0
- package/src/resources/extensions/gsd/auto-worktree-session-registry.ts +71 -0
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +370 -0
- package/src/resources/extensions/gsd/auto-worktree-teardown.ts +161 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +69 -2390
- package/src/resources/extensions/gsd/auto.ts +32 -19
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +3 -0
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +147 -6
- package/src/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.ts +80 -12
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +163 -22
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +23 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +179 -18
- package/src/resources/extensions/gsd/commands/handlers/core.ts +39 -3
- package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +135 -1
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +3 -3
- package/src/resources/extensions/gsd/commands-worktree.ts +13 -2
- package/src/resources/extensions/gsd/db/queries.ts +49 -9
- package/src/resources/extensions/gsd/discussion-handoff.ts +10 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +8 -2
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +372 -22
- package/src/resources/extensions/gsd/doctor-providers.ts +39 -10
- package/src/resources/extensions/gsd/doctor-types.ts +5 -1
- package/src/resources/extensions/gsd/doctor.ts +95 -3
- package/src/resources/extensions/gsd/exec-sandbox.ts +6 -2
- package/src/resources/extensions/gsd/flat-phase-migration.ts +112 -25
- package/src/resources/extensions/gsd/forensics.ts +1 -1
- package/src/resources/extensions/gsd/git-conflict-resolve.ts +2 -2
- package/src/resources/extensions/gsd/git-service.ts +67 -17
- package/src/resources/extensions/gsd/gsd-db.ts +85 -0
- package/src/resources/extensions/gsd/guidance.ts +2 -0
- package/src/resources/extensions/gsd/guided-flow.ts +52 -13
- package/src/resources/extensions/gsd/key-manager.ts +1 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +40 -10
- package/src/resources/extensions/gsd/migrate-external.ts +23 -6
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +19 -4
- package/src/resources/extensions/gsd/milestone-settlement.ts +1 -1
- package/src/resources/extensions/gsd/model-router.ts +4 -5
- package/src/resources/extensions/gsd/parallel-merge.ts +1 -1
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -1
- package/src/resources/extensions/gsd/preferences-diagnostics.ts +24 -0
- package/src/resources/extensions/gsd/preferences-models.ts +6 -3
- package/src/resources/extensions/gsd/preferences-types.ts +30 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +97 -2
- package/src/resources/extensions/gsd/preferences.ts +38 -4
- package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -2
- package/src/resources/extensions/gsd/prompts/system.md +6 -6
- package/src/resources/extensions/gsd/quick.ts +11 -3
- package/src/resources/extensions/gsd/redact-secrets.ts +40 -0
- package/src/resources/extensions/gsd/repo-identity.ts +17 -0
- package/src/resources/extensions/gsd/repository-registry.ts +7 -1
- package/src/resources/extensions/gsd/root-write-leak-guard.ts +3 -2
- package/src/resources/extensions/gsd/safe-fs.ts +22 -2
- package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +7 -9
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +1 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -1
- package/src/resources/extensions/gsd/state/derive/from-db.ts +201 -157
- package/src/resources/extensions/gsd/tests/auto-loop-no-copy-artifacts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +131 -5
- package/src/resources/extensions/gsd/tests/auto-migrating-recovery.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +178 -0
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +43 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/auto-session-scope.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/auto-start-bootstrap-await-3420.test.ts +3 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-timeout-recovery-harness-abort.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +10 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-already-merged.test.ts +177 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-branch-head.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-cleanup.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-code-changes.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-db-ready.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-integration-branch.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-message.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-pre-teardown.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-stash.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-shelter.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/auto-worktree-resource-version.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-untracked-content.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/batch-task-query.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +365 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +62 -1
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +138 -1
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +571 -5
- package/src/resources/extensions/gsd/tests/doctor-workspace.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +82 -2
- package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +25 -1
- package/src/resources/extensions/gsd/tests/flat-rate-routing-guard.test.ts +87 -19
- package/src/resources/extensions/gsd/tests/gate-1b-orphan-discrimination.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +4 -6
- package/src/resources/extensions/gsd/tests/integration/auto-stash-merge.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/integration/feature-branch-lifecycle-integration.test.ts +2 -5
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/merge-preserve-worktree-on-preteardown-error.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/integration/workspace-collapse-integration.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +592 -23
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +25 -1
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/parallel-worker-lock-contention.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +50 -6
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +17 -0
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +264 -1
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/preferences.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +147 -0
- package/src/resources/extensions/gsd/tests/recovery-verify-logs.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/redact-secrets.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/register-hooks-flat-phase-migration.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/register-hooks-loop-guard-auto.test.ts +275 -0
- package/src/resources/extensions/gsd/tests/repository-registry.test.ts +41 -2
- package/src/resources/extensions/gsd/tests/require-slice-discussion-dispatch.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +31 -9
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/schedule-wakeup-tool.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -5
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +49 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/status-per-repo.test.ts +94 -0
- package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/system-flat-phase-layout.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/teardown-cleanup-parity.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/teardown-failure-clears-registry.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +166 -0
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +66 -18
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +81 -0
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +53 -1
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +208 -1
- package/src/resources/extensions/gsd/tests/workspace.test.ts +18 -4
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +1 -3
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +36 -3
- package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +32 -0
- package/src/resources/extensions/gsd/tool-contract.ts +29 -0
- package/src/resources/extensions/gsd/tools/plan-task.ts +107 -9
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +58 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +11 -5
- package/src/resources/extensions/gsd/unit-registry.ts +48 -2
- package/src/resources/extensions/gsd/unit-runtime.ts +42 -0
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +1 -1
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -1
- package/src/resources/extensions/gsd/workspace-git-preflight.ts +2 -2
- package/src/resources/extensions/gsd/workspace.ts +42 -8
- package/src/resources/extensions/gsd/worktree-command.ts +1 -1
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +154 -26
- package/src/resources/extensions/gsd/worktree-manager.ts +143 -5
- package/src/resources/extensions/gsd/worktree-reentry.ts +2 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-bc4c723c6a19c6f0.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
- /package/dist/web/standalone/.next/static/{zQLcXm0Za8lexoXtgDpMG → ZpFDazP-38PXBPiI_LdZf}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{zQLcXm0Za8lexoXtgDpMG → ZpFDazP-38PXBPiI_LdZf}/_ssgManifest.js +0 -0
|
@@ -280,6 +280,15 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
|
|
|
280
280
|
files: leak.files.map((file) => ({ path: file.path, status: file.status })),
|
|
281
281
|
});
|
|
282
282
|
ctx.ui.notify(message, "error");
|
|
283
|
+
try {
|
|
284
|
+
deps.checkpointWorkflowDatabase?.();
|
|
285
|
+
}
|
|
286
|
+
catch (err) {
|
|
287
|
+
debugLog("autoLoop", {
|
|
288
|
+
phase: "root-write-leak-checkpoint-failed",
|
|
289
|
+
error: err instanceof Error ? err.message : String(err),
|
|
290
|
+
});
|
|
291
|
+
}
|
|
283
292
|
await deps.stopAuto(ctx, pi, "Root-write leak during isolated auto-mode", {
|
|
284
293
|
preserveCompletedMilestoneBranch: true,
|
|
285
294
|
});
|
|
@@ -21,7 +21,8 @@ import { createWorktreeSafetyModule } from "../worktree-safety.js";
|
|
|
21
21
|
import { repairAutoWorktreeSafetyFailure } from "../auto-worktree-repair.js";
|
|
22
22
|
import { resolveManifest } from "../unit-context-manifest.js";
|
|
23
23
|
import { preDispatchHealthGate, recordHealthSnapshot, } from "../doctor-proactive.js";
|
|
24
|
-
import {
|
|
24
|
+
import { autoWorktreeBranch } from "../auto-worktree-branch-lifecycle.js";
|
|
25
|
+
import { checkResourcesStale } from "../auto-worktree-resource-version.js";
|
|
25
26
|
import { getSessionLockStatus } from "../session-lock.js";
|
|
26
27
|
import { resolveUokFlags } from "../uok/flags.js";
|
|
27
28
|
import { emitJournalEvent as _emitJournalEvent } from "../journal.js";
|
|
@@ -31,7 +32,7 @@ import { getPriorSliceCompletionBlocker } from "../dispatch-guard.js";
|
|
|
31
32
|
import { GitServiceImpl } from "../git-service.js";
|
|
32
33
|
import { WorktreeStateProjection } from "../worktree-state-projection.js";
|
|
33
34
|
import { WorktreeLifecycle } from "../worktree-lifecycle.js";
|
|
34
|
-
import {
|
|
35
|
+
import { createDefaultMilestoneMergeTransaction } from "../milestone-merge-transaction.js";
|
|
35
36
|
import { createWorkspace, scopeMilestone } from "../workspace.js";
|
|
36
37
|
import { supportsStructuredQuestions } from "../workflow-mcp.js";
|
|
37
38
|
import { getRegisteredToolSnapshot, getToolBaselineSnapshot } from "../auto-model-selection.js";
|
|
@@ -560,7 +561,7 @@ export class AutoOrchestrator {
|
|
|
560
561
|
return new GitServiceImpl(basePath, gitConfig);
|
|
561
562
|
},
|
|
562
563
|
worktreeProjection: new WorktreeStateProjection(),
|
|
563
|
-
|
|
564
|
+
mergeMilestone: createDefaultMilestoneMergeTransaction(),
|
|
564
565
|
});
|
|
565
566
|
}
|
|
566
567
|
rebuildScope(rawPath, milestoneId) {
|
|
@@ -345,7 +345,8 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
345
345
|
if (stop)
|
|
346
346
|
return stop;
|
|
347
347
|
}
|
|
348
|
-
// PR creation (auto_pr) is handled
|
|
348
|
+
// PR creation (auto_pr) is handled by the publication handoff in
|
|
349
|
+
// the milestone merge transaction (#2302).
|
|
349
350
|
deps.invalidateAllCaches();
|
|
350
351
|
state = await deps.deriveState(s.canonicalProjectRoot);
|
|
351
352
|
mid = state.activeMilestone?.id;
|
|
@@ -430,7 +431,8 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
430
431
|
const stop = await _runMilestoneMergeOnceWithStashRestore(ic, s.currentMilestoneId);
|
|
431
432
|
if (stop)
|
|
432
433
|
return stop;
|
|
433
|
-
// PR creation (auto_pr) is handled
|
|
434
|
+
// PR creation (auto_pr) is handled by the publication handoff in
|
|
435
|
+
// the milestone merge transaction (#2302).
|
|
434
436
|
}
|
|
435
437
|
const unmappedActive = countUnmappedActiveRequirements();
|
|
436
438
|
const completionStopReason = formatCompletePhaseNextAction(unmappedActive);
|
|
@@ -506,7 +508,8 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
506
508
|
const stop = await _runMilestoneMergeOnceWithStashRestore(ic, s.currentMilestoneId);
|
|
507
509
|
if (stop)
|
|
508
510
|
return stop;
|
|
509
|
-
// PR creation (auto_pr) is handled
|
|
511
|
+
// PR creation (auto_pr) is handled by the publication handoff in
|
|
512
|
+
// the milestone merge transaction (#2302).
|
|
510
513
|
}
|
|
511
514
|
deps.sendDesktopNotification("GSD", `Milestone ${mid} complete!`, "success", "milestone", basename(s.originalBasePath || s.basePath));
|
|
512
515
|
deps.logCmuxEvent(prefs, `Milestone ${mid} complete.`, "success");
|
|
@@ -6,7 +6,7 @@ import { debugLog } from "../debug-logger.js";
|
|
|
6
6
|
import { logWarning } from "../workflow-logger.js";
|
|
7
7
|
import { resolveAutoSupervisorConfig } from "../preferences.js";
|
|
8
8
|
import { readUnitRuntimeRecord } from "../unit-runtime.js";
|
|
9
|
-
import { consumeAutoWakeup } from "./schedule-wakeup.js";
|
|
9
|
+
import { clearAutoWakeup, consumeAutoWakeup } from "./schedule-wakeup.js";
|
|
10
10
|
import { applyUnitSkillVisibility } from "../skill-scope.js";
|
|
11
11
|
const UNIT_FAILSAFE_BUFFER_MS = 30_000;
|
|
12
12
|
const UNIT_FAILSAFE_RECHECK_MS = 30_000;
|
|
@@ -192,7 +192,7 @@ export async function runUnit(ctx, pi, s, unitType, unitId, prompt) {
|
|
|
192
192
|
const UNIT_HARD_TIMEOUT_MS = Math.max(UNIT_FAILSAFE_BUFFER_MS, ((supervisor.hard_timeout_minutes ?? 30) * 60 * 1000) + UNIT_FAILSAFE_BUFFER_MS);
|
|
193
193
|
const freshProgressMs = Math.max(UNIT_FAILSAFE_BUFFER_MS, ((supervisor.idle_timeout_minutes ?? 10) * 60 * 1000) + UNIT_FAILSAFE_BUFFER_MS);
|
|
194
194
|
let unitTimeoutHandle;
|
|
195
|
-
let result;
|
|
195
|
+
let result = { status: "cancelled" };
|
|
196
196
|
try {
|
|
197
197
|
const awaitAgentEndWithTimeout = (agentEndPromise) => {
|
|
198
198
|
const timeoutResult = new Promise((resolve) => {
|
|
@@ -297,6 +297,9 @@ export async function runUnit(ctx, pi, s, unitType, unitId, prompt) {
|
|
|
297
297
|
finally {
|
|
298
298
|
if (unitTimeoutHandle)
|
|
299
299
|
clearTimeout(unitTimeoutHandle);
|
|
300
|
+
if (result.status !== "completed") {
|
|
301
|
+
clearAutoWakeup(s.basePath, unitType, unitId);
|
|
302
|
+
}
|
|
300
303
|
ctx.ui.setWorkingMessage?.(undefined);
|
|
301
304
|
setVisibleSkills?.(undefined);
|
|
302
305
|
}
|
|
@@ -13,6 +13,9 @@ export function consumeAutoWakeup(basePath, unitType, unitId) {
|
|
|
13
13
|
pendingWakeups.delete(key);
|
|
14
14
|
return wakeup;
|
|
15
15
|
}
|
|
16
|
+
export function clearAutoWakeup(basePath, unitType, unitId) {
|
|
17
|
+
pendingWakeups.delete(wakeupKey(basePath, unitType, unitId));
|
|
18
|
+
}
|
|
16
19
|
export function _resetAutoWakeupsForTest() {
|
|
17
20
|
pendingWakeups.clear();
|
|
18
21
|
}
|
|
@@ -17,7 +17,7 @@ import { isDbAvailable, getTask } from "../gsd-db.js";
|
|
|
17
17
|
import { parseUnitId } from "../unit-id.js";
|
|
18
18
|
import { createCheckpoint, cleanupCheckpoint, rollbackToCheckpoint } from "../safety/git-checkpoint.js";
|
|
19
19
|
import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
|
|
20
|
-
import {
|
|
20
|
+
import { getUnitWorkflowDispatchReadinessErrorForModel } from "../tool-contract.js";
|
|
21
21
|
import { prepareWorkflowMcpForProject } from "../workflow-mcp-auto-prep.js";
|
|
22
22
|
import { applyThinkingLevelForModel, floorThinkingLevelForUnit, } from "../auto-model-selection.js";
|
|
23
23
|
import { isSuspiciousGhostCompletion } from "../auto-unit-closeout.js";
|
|
@@ -246,17 +246,13 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
246
246
|
s.currentDispatchedModelId = s.currentUnitModel
|
|
247
247
|
? `${s.currentUnitModel.provider ?? ""}/${s.currentUnitModel.id ?? ""}`
|
|
248
248
|
: null;
|
|
249
|
-
const compatibilityError =
|
|
250
|
-
|
|
249
|
+
const compatibilityError = getUnitWorkflowDispatchReadinessErrorForModel({
|
|
250
|
+
model: s.currentUnitModel,
|
|
251
|
+
fallbackModel: ctx.model,
|
|
252
|
+
getProviderAuthMode: (provider) => ctx.modelRegistry.getProviderAuthMode(provider),
|
|
251
253
|
projectRoot: s.basePath,
|
|
252
254
|
surface: "auto-mode",
|
|
253
255
|
unitType,
|
|
254
|
-
authMode: s.currentUnitModel?.provider
|
|
255
|
-
? ctx.modelRegistry.getProviderAuthMode(s.currentUnitModel.provider)
|
|
256
|
-
: ctx.model?.provider
|
|
257
|
-
? ctx.modelRegistry.getProviderAuthMode(ctx.model.provider)
|
|
258
|
-
: undefined,
|
|
259
|
-
baseUrl: s.currentUnitModel?.baseUrl ?? ctx.model?.baseUrl,
|
|
260
256
|
activeTools: typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [],
|
|
261
257
|
});
|
|
262
258
|
const workflowMcpPrepModel = s.currentUnitModel;
|
|
@@ -10,7 +10,7 @@ import { buildResearchSlicePrompt, buildResearchMilestonePrompt, buildPlanSliceP
|
|
|
10
10
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
11
11
|
import { pauseAuto } from "./auto.js";
|
|
12
12
|
import { resolveCanonicalMilestoneRoot } from "./worktree-manager.js";
|
|
13
|
-
import {
|
|
13
|
+
import { getUnitWorkflowDispatchReadinessErrorForModel } from "./tool-contract.js";
|
|
14
14
|
export function parseDirectDispatchPhase(raw) {
|
|
15
15
|
const tokens = raw.trim().split(/\s+/).filter(Boolean);
|
|
16
16
|
if (tokens.length === 0)
|
|
@@ -213,13 +213,12 @@ export async function dispatchDirectPhase(ctx, pi, phase, base, opts = {}) {
|
|
|
213
213
|
ctx.ui.notify(`Unknown phase "${phase}". Valid phases: research, plan, execute, complete, validate, reassess, uat, replan.`, "warning");
|
|
214
214
|
return;
|
|
215
215
|
}
|
|
216
|
-
const compatibilityError =
|
|
217
|
-
|
|
216
|
+
const compatibilityError = getUnitWorkflowDispatchReadinessErrorForModel({
|
|
217
|
+
model: ctx.model,
|
|
218
|
+
getProviderAuthMode: (provider) => ctx.modelRegistry.getProviderAuthMode(provider),
|
|
218
219
|
projectRoot,
|
|
219
220
|
surface: "direct phase dispatch",
|
|
220
221
|
unitType,
|
|
221
|
-
authMode: ctx.model?.provider ? ctx.modelRegistry.getProviderAuthMode(ctx.model.provider) : undefined,
|
|
222
|
-
baseUrl: ctx.model?.baseUrl,
|
|
223
222
|
activeTools: typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [],
|
|
224
223
|
});
|
|
225
224
|
if (compatibilityError) {
|
|
@@ -596,7 +596,7 @@ export const DISPATCH_RULES = [
|
|
|
596
596
|
},
|
|
597
597
|
},
|
|
598
598
|
{
|
|
599
|
-
name: "uat-verdict-gate (non-PASS
|
|
599
|
+
name: "uat-verdict-gate (non-PASS observed; closeout enforces)",
|
|
600
600
|
match: async ({ mid, basePath, prefs }) => {
|
|
601
601
|
// Only applies when UAT dispatch is enabled
|
|
602
602
|
if (!prefs?.uat_dispatch)
|
|
@@ -611,9 +611,9 @@ export const DISPATCH_RULES = [
|
|
|
611
611
|
continue;
|
|
612
612
|
const { verdict, uatType } = result;
|
|
613
613
|
if (!isAcceptableUatVerdict(verdict, uatType)) {
|
|
614
|
-
//
|
|
615
|
-
// so follow-up slices can remediate, while
|
|
616
|
-
// enforces manual UAT PASS sign-off before closure.
|
|
614
|
+
// Observe non-PASS verdicts without hard-stopping auto-mode. Allow
|
|
615
|
+
// progression so follow-up slices can remediate, while
|
|
616
|
+
// complete-milestone still enforces manual UAT PASS sign-off before closure.
|
|
617
617
|
continue;
|
|
618
618
|
}
|
|
619
619
|
}
|
|
@@ -902,9 +902,19 @@ export const DISPATCH_RULES = [
|
|
|
902
902
|
const sliceContextFile = resolveSliceFile(basePath, mid, state.activeSlice.id, "CONTEXT");
|
|
903
903
|
if (sliceContextFile && existsSync(sliceContextFile))
|
|
904
904
|
return null; // discussion already done, proceed
|
|
905
|
+
const closedSliceIds = getClosedSliceIds(mid);
|
|
906
|
+
const justClosedSliceId = closedSliceIds[closedSliceIds.length - 1];
|
|
907
|
+
let priorVerdictWarning = "";
|
|
908
|
+
if (justClosedSliceId) {
|
|
909
|
+
const prior = await readUatGateVerdict(basePath, mid, justClosedSliceId);
|
|
910
|
+
if (prior && !isAcceptableUatVerdict(prior.verdict, prior.uatType)) {
|
|
911
|
+
priorVerdictWarning =
|
|
912
|
+
` Note: the slice just closed (${justClosedSliceId}) recorded a non-PASS UAT verdict (${prior.verdict.toUpperCase()}); review before continuing.`;
|
|
913
|
+
}
|
|
914
|
+
}
|
|
905
915
|
return {
|
|
906
916
|
action: "stop",
|
|
907
|
-
reason: `Slice ${state.activeSlice.id} requires discussion before planning (require_slice_discussion is enabled). Run /gsd discuss to discuss this slice, then /gsd auto to resume
|
|
917
|
+
reason: `Slice ${state.activeSlice.id} requires discussion before planning (require_slice_discussion is enabled). Run /gsd discuss to discuss this slice, then /gsd auto to resume.${priorVerdictWarning}`,
|
|
908
918
|
level: "warning",
|
|
909
919
|
};
|
|
910
920
|
},
|
|
@@ -326,7 +326,7 @@ export function floorThinkingLevelForUnit(unitType, level) {
|
|
|
326
326
|
return EXECUTE_TASK_MIN_THINKING_LEVEL;
|
|
327
327
|
}
|
|
328
328
|
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true, basePath, availableModelIds, preferredModelId) {
|
|
329
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId);
|
|
329
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId, true);
|
|
330
330
|
if (explicitConfig) {
|
|
331
331
|
return {
|
|
332
332
|
...explicitConfig,
|
|
@@ -338,23 +338,45 @@ export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAuto
|
|
|
338
338
|
if (!isAutoMode)
|
|
339
339
|
return undefined;
|
|
340
340
|
const routingConfig = resolveDynamicRoutingConfig();
|
|
341
|
-
if (!routingConfig.enabled
|
|
341
|
+
if (!routingConfig.enabled)
|
|
342
342
|
return undefined;
|
|
343
|
-
//
|
|
344
|
-
//
|
|
345
|
-
//
|
|
346
|
-
|
|
343
|
+
// Only an explicit flat-rate opt-out suppresses synthesized routing.
|
|
344
|
+
// `dynamic_routing.enabled: true` is user intent to run routing even when
|
|
345
|
+
// the start provider is a flat-rate subscription. Applied ahead of both the
|
|
346
|
+
// tier-pin and profile-derived synthesis paths so the opt-out is uniform.
|
|
347
|
+
if (routingConfig.allow_flat_rate_providers === false &&
|
|
347
348
|
autoModeStartModel &&
|
|
348
349
|
isFlatRateProvider(autoModeStartModel.provider, autoModeStartModel.flatRateCtx)) {
|
|
349
350
|
return undefined;
|
|
350
351
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
if (
|
|
352
|
+
// With explicit `tier_models` pins, synthesize a heavy-tier ceiling that
|
|
353
|
+
// dynamic routing downgrades from per unit.
|
|
354
|
+
if (routingConfig.tier_models) {
|
|
355
|
+
const ceilingModel = routingConfig.tier_models.heavy
|
|
356
|
+
?? (autoModeStartModel ? `${autoModeStartModel.provider}/${autoModeStartModel.id}` : undefined);
|
|
357
|
+
if (!ceilingModel)
|
|
358
|
+
return undefined;
|
|
359
|
+
return {
|
|
360
|
+
primary: ceilingModel,
|
|
361
|
+
fallbacks: [],
|
|
362
|
+
source: "synthesized",
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
// No `tier_models` pins: fall back to the token-profile's per-phase model so
|
|
366
|
+
// profile tier resolution survives. `skipProfileDefaults` is left false here
|
|
367
|
+
// (unlike the explicit-detection call above) precisely because we WANT the
|
|
368
|
+
// profile defaults this time — they are the routing ceiling, not a hard
|
|
369
|
+
// user selection. Labeling the result `synthesized` (not `explicit`) keeps
|
|
370
|
+
// dynamic routing and fallbacks enabled downstream. Without this branch,
|
|
371
|
+
// `resolvePreferredModelConfig` returns undefined for profile-only configs
|
|
372
|
+
// and auto dispatch bleeds the start model onto every unit, silently
|
|
373
|
+
// discarding the profile (#1115: routing/fallbacks disabled when a
|
|
374
|
+
// token_profile is set but no tier_models are pinned).
|
|
375
|
+
const profileConfig = resolveModelWithFallbacksForUnit(unitType, basePath, availableModelIds, preferredModelId, false);
|
|
376
|
+
if (!profileConfig)
|
|
354
377
|
return undefined;
|
|
355
378
|
return {
|
|
356
|
-
|
|
357
|
-
fallbacks: [],
|
|
379
|
+
...profileConfig,
|
|
358
380
|
source: "synthesized",
|
|
359
381
|
};
|
|
360
382
|
}
|
|
@@ -510,15 +532,11 @@ autoModeStartThinkingLevel) {
|
|
|
510
532
|
]));
|
|
511
533
|
}
|
|
512
534
|
}
|
|
513
|
-
// Disable routing for flat-rate providers
|
|
514
|
-
//
|
|
515
|
-
// model provides no cost benefit — it only degrades quality.
|
|
535
|
+
// Disable routing for flat-rate providers only when the user explicitly
|
|
536
|
+
// opts out with dynamic_routing.allow_flat_rate_providers: false.
|
|
516
537
|
// Fail-closed: if primary model can't be resolved, fall back to
|
|
517
538
|
// provider-level signals rather than allowing unwanted downgrades.
|
|
518
|
-
|
|
519
|
-
// claude-code subscribers can still get intelligent per-task selection
|
|
520
|
-
// across their subscription (#4386).
|
|
521
|
-
if (routingConfig.enabled && !routingConfig.allow_flat_rate_providers) {
|
|
539
|
+
if (routingConfig.enabled && routingConfig.allow_flat_rate_providers === false) {
|
|
522
540
|
const primaryModel = resolveModelId(modelConfig.primary, routingEligibleModels, ctx.model?.provider);
|
|
523
541
|
if (primaryModel) {
|
|
524
542
|
const primaryFlatRateCtx = buildFlatRateContext(primaryModel.provider, ctx, prefs);
|
|
@@ -12,12 +12,13 @@ import { hasVerdict, extractVerdict } from "./verdict-parser.js";
|
|
|
12
12
|
import { loadPrompt, inlineTemplate } from "./prompt-loader.js";
|
|
13
13
|
import { resolveMilestoneFile, resolveSliceFile, resolveSlicePath, resolveTasksDir, resolveTaskFiles, resolveTaskFile, relMilestoneFile, relSliceFile, relSlicePath, relMilestonePath, relTaskFile, resolveGsdRootFile, relGsdRootFile, resolveRuntimeFile, } from "./paths.js";
|
|
14
14
|
import { resolveInlineLevel, loadEffectiveGSDPreferences } from "./preferences.js";
|
|
15
|
+
import { createRepositoryRegistryFromPreferences } from "./repository-registry.js";
|
|
15
16
|
import { isContextModeEnabled } from "./preferences-types.js";
|
|
16
17
|
import { parseRoadmap } from "./parsers-legacy.js";
|
|
17
|
-
import { join } from "node:path";
|
|
18
|
+
import { join, relative, sep } from "node:path";
|
|
18
19
|
import { existsSync } from "node:fs";
|
|
19
20
|
import { computeBudgets, resolveExecutorContextWindow, truncateAtSectionBoundary } from "./context-budget.js";
|
|
20
|
-
import { getPendingGatesForTurn } from "./gsd-db.js";
|
|
21
|
+
import { getGateResults, getPendingGatesForTurn } from "./gsd-db.js";
|
|
21
22
|
import { assertGateCoverage, getGatesForTurn, } from "./gate-registry.js";
|
|
22
23
|
import { formatDecisionsCompact, formatRequirementsCompact } from "./structured-data-formatter.js";
|
|
23
24
|
import { readPhaseAnchor, formatAnchorForPrompt } from "./phase-anchor.js";
|
|
@@ -295,6 +296,37 @@ function formatExecutorConstraints(sessionContextWindow, modelRegistry, sessionP
|
|
|
295
296
|
`- Keep individual tasks completable within a single context window — if a task needs more context than fits, split it`,
|
|
296
297
|
].join("\n");
|
|
297
298
|
}
|
|
299
|
+
/**
|
|
300
|
+
* Builds the Declared Repositories block for parent-workspace planners.
|
|
301
|
+
* Returns "" for single-repo projects so the common-case prompt is unchanged;
|
|
302
|
+
* only parent mode with declared child repos gets the registry list and the
|
|
303
|
+
* targetRepositories assignment instruction.
|
|
304
|
+
*/
|
|
305
|
+
export function buildRepoRegistryBlock(base) {
|
|
306
|
+
let registry;
|
|
307
|
+
try {
|
|
308
|
+
registry = createRepositoryRegistryFromPreferences(base, loadEffectiveGSDPreferences(base)?.preferences);
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return "";
|
|
312
|
+
}
|
|
313
|
+
const hasChildRepo = registry.repositories.some((repo) => repo.id !== "project");
|
|
314
|
+
if (registry.mode !== "parent" || !hasChildRepo)
|
|
315
|
+
return "";
|
|
316
|
+
const lines = registry.repositories.map((repo) => {
|
|
317
|
+
const relPath = relative(registry.projectRoot, repo.root).split(sep).join("/") || ".";
|
|
318
|
+
const role = repo.role ? ` — ${repo.role}` : "";
|
|
319
|
+
const root = repo.id === "project" ? " (root)" : ` (${relPath})`;
|
|
320
|
+
return `- \`${repo.id}\`${root}${role}`;
|
|
321
|
+
});
|
|
322
|
+
return [
|
|
323
|
+
"### Declared Repositories",
|
|
324
|
+
"",
|
|
325
|
+
...lines,
|
|
326
|
+
"",
|
|
327
|
+
"This is a parent workspace. Assign each task's `targetRepositories` to the repository id(s) it touches (from the list above). Omit `targetRepositories` to inherit the slice-wide default from `gsd_plan_slice`; set it explicitly when a task differs (e.g. `[\"project\"]` for parent-root work).",
|
|
328
|
+
].join("\n");
|
|
329
|
+
}
|
|
298
330
|
/**
|
|
299
331
|
* Returns a markdown bullet list of known context file paths for the given
|
|
300
332
|
* milestone (and optionally slice). Falls back to a generic tool-agnostic
|
|
@@ -2174,6 +2206,7 @@ async function renderSlicePrompt(options) {
|
|
|
2174
2206
|
inlinedContext,
|
|
2175
2207
|
dependencySummaries: depContent,
|
|
2176
2208
|
sourceFilePaths: buildSourceFilePaths(base, mid, sid),
|
|
2209
|
+
repoRegistry: buildRepoRegistryBlock(base),
|
|
2177
2210
|
executorContextConstraints,
|
|
2178
2211
|
commitInstruction,
|
|
2179
2212
|
skillActivation: buildSkillActivationBlock({
|
|
@@ -2906,6 +2939,47 @@ export async function buildValidateMilestonePrompt(mid, midTitle, base, level) {
|
|
|
2906
2939
|
inlined.push(outstandingBlock);
|
|
2907
2940
|
trackPromptContext(contextTelemetry, "outstanding-items", "inline", outstandingBlock);
|
|
2908
2941
|
}
|
|
2942
|
+
const persistedGateFlags = [];
|
|
2943
|
+
try {
|
|
2944
|
+
const gateLabels = {
|
|
2945
|
+
Q3: "Threat Surface",
|
|
2946
|
+
Q4: "Requirement Impact",
|
|
2947
|
+
};
|
|
2948
|
+
for (const sid of seenValSlices) {
|
|
2949
|
+
for (const gate of getGateResults(mid, sid, "slice")) {
|
|
2950
|
+
if (gate.gate_id !== "Q3" && gate.gate_id !== "Q4")
|
|
2951
|
+
continue;
|
|
2952
|
+
const findings = gate.findings.trim();
|
|
2953
|
+
const rationale = gate.rationale.trim();
|
|
2954
|
+
const verdict = gate.verdict ?? "";
|
|
2955
|
+
const hasNonPassVerdict = verdict !== "" && verdict !== "pass" && verdict !== "omitted";
|
|
2956
|
+
if (!findings && !hasNonPassVerdict)
|
|
2957
|
+
continue;
|
|
2958
|
+
const displayVerdict = verdict || gate.status;
|
|
2959
|
+
const detail = findings || rationale || "_No findings text recorded; reconcile the persisted non-pass verdict._";
|
|
2960
|
+
persistedGateFlags.push(`- **${sid} / ${gate.gate_id} (${gateLabels[gate.gate_id]}) / ${displayVerdict}:** ${detail}`);
|
|
2961
|
+
if (findings && rationale)
|
|
2962
|
+
persistedGateFlags.push(` - Rationale: ${rationale}`);
|
|
2963
|
+
}
|
|
2964
|
+
}
|
|
2965
|
+
}
|
|
2966
|
+
catch (err) {
|
|
2967
|
+
logWarning("prompt", `buildValidateMilestonePrompt persisted gate flags lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2968
|
+
}
|
|
2969
|
+
if (persistedGateFlags.length > 0) {
|
|
2970
|
+
const persistedGateFlagsBlock = [
|
|
2971
|
+
"### Persisted Slice-Level Gate Flags (from quality_gates)",
|
|
2972
|
+
"",
|
|
2973
|
+
"These slice gates recorded findings or non-pass verdicts during execution. Reconcile each against the milestone-level evidence before returning MV03/MV04 verdicts.",
|
|
2974
|
+
"",
|
|
2975
|
+
...persistedGateFlags,
|
|
2976
|
+
].join("\n");
|
|
2977
|
+
inlined.push(persistedGateFlagsBlock);
|
|
2978
|
+
trackPromptContext(contextTelemetry, "persisted-slice-gate-flags", "inline", persistedGateFlagsBlock);
|
|
2979
|
+
}
|
|
2980
|
+
else {
|
|
2981
|
+
trackPromptContext(contextTelemetry, "persisted-slice-gate-flags", "skipped", null, "none");
|
|
2982
|
+
}
|
|
2909
2983
|
// Inline existing VALIDATION file if this is a re-validation round
|
|
2910
2984
|
const validationPath = resolveMilestoneFile(base, mid, "VALIDATION");
|
|
2911
2985
|
const validationRel = relMilestoneFile(base, mid, "VALIDATION");
|
|
@@ -27,9 +27,10 @@ import { ensureGitignore, untrackRuntimeFiles } from "./gitignore.js";
|
|
|
27
27
|
import { nativeIsRepo, nativeInit, nativeAddAll, nativeCommit, nativeGetCurrentBranch, nativeDetectMainBranch, nativeBranchList, nativeBranchExists, nativeBranchListMerged, nativeBranchDelete, nativeWorktreeRemove, nativeCommitCountBetween, nativeHasChanges, } from "./native-git-bridge.js";
|
|
28
28
|
import { GitServiceImpl } from "./git-service.js";
|
|
29
29
|
import { captureIntegrationBranch, detectWorktreeName, setActiveMilestoneId, } from "./worktree.js";
|
|
30
|
-
import { getAutoWorktreePath } from "./auto-worktree.js";
|
|
30
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
31
31
|
import { checkoutBranchWithStashGuard } from "./worktree-git-recovery.js";
|
|
32
|
-
import {
|
|
32
|
+
import { cleanStaleRuntimeUnits } from "./auto-worktree-runtime-cleanup.js";
|
|
33
|
+
import { readResourceVersion } from "./auto-worktree-resource-version.js";
|
|
33
34
|
import { worktreePath as getWorktreeDir, isInsideWorktreesDir } from "./worktree-manager.js";
|
|
34
35
|
import { emitWorktreeOrphaned } from "./worktree-telemetry.js";
|
|
35
36
|
import { queryJournal } from "./journal.js";
|
|
@@ -1435,15 +1436,16 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
|
|
|
1435
1436
|
? `${s.autoModeStartModel.provider}/${s.autoModeStartModel.id}`
|
|
1436
1437
|
: ctx.model ? `${ctx.model.provider}/${ctx.model.id}` : "default";
|
|
1437
1438
|
// Flat-rate providers (e.g. GitHub Copilot, claude-code, user-declared
|
|
1438
|
-
// subscription proxies, externalCli CLIs) suppress routing
|
|
1439
|
-
//
|
|
1439
|
+
// subscription proxies, externalCli CLIs) suppress routing only when the
|
|
1440
|
+
// user explicitly opts out with allow_flat_rate_providers: false. Reflect
|
|
1441
|
+
// that in the banner. Thread the same
|
|
1440
1442
|
// FlatRateContext used by selectAndApplyModel so user-declared
|
|
1441
1443
|
// flat-rate providers and externalCli auto-detection are respected.
|
|
1442
1444
|
const { isFlatRateProvider, buildFlatRateContext } = await import("./auto-model-selection.js");
|
|
1443
1445
|
const bannerPrefs = loadEffectiveGSDPreferencesWithRegistry(ctx.modelRegistry, base, resolveProfileAnchorProvider(ctx.model?.provider, s.autoModeStartModel?.provider), s.autoModeStartModel ? `${s.autoModeStartModel.provider}/${s.autoModeStartModel.id}` : undefined)?.preferences;
|
|
1444
1446
|
const effectiveProvider = s.autoModeStartModel?.provider ?? ctx.model?.provider;
|
|
1445
1447
|
const effectivelyEnabled = routingConfig.enabled
|
|
1446
|
-
&& (routingConfig.allow_flat_rate_providers
|
|
1448
|
+
&& (routingConfig.allow_flat_rate_providers !== false
|
|
1447
1449
|
|| !(effectiveProvider && isFlatRateProvider(effectiveProvider, buildFlatRateContext(effectiveProvider, ctx, bannerPrefs))));
|
|
1448
1450
|
// The actual ceiling may come from tier_models.heavy, not the start model.
|
|
1449
1451
|
const effectiveCeiling = (routingConfig.enabled && routingConfig.tier_models?.heavy)
|
|
@@ -56,6 +56,8 @@ export async function recoverTimedOutUnit(ctx, pi, unitType, unitId, reason, rct
|
|
|
56
56
|
lastProgressAt: Date.now(),
|
|
57
57
|
progressCount: (runtime?.progressCount ?? 0) + 1,
|
|
58
58
|
lastProgressKind: reason === "idle" ? "idle-recovery-retry" : "hard-recovery-retry",
|
|
59
|
+
// This steering retry is a fresh chance for the same unit to save a valid result.
|
|
60
|
+
harnessAbort: undefined,
|
|
59
61
|
});
|
|
60
62
|
const steeringLines = isEscalation
|
|
61
63
|
? [
|
|
@@ -151,6 +153,8 @@ export async function recoverTimedOutUnit(ctx, pi, unitType, unitId, reason, rct
|
|
|
151
153
|
lastProgressAt: Date.now(),
|
|
152
154
|
progressCount: (runtime?.progressCount ?? 0) + 1,
|
|
153
155
|
lastProgressKind: reason === "idle" ? "idle-recovery-retry" : "hard-recovery-retry",
|
|
156
|
+
// This steering retry is a fresh chance for the same unit to save a valid result.
|
|
157
|
+
harnessAbort: undefined,
|
|
154
158
|
});
|
|
155
159
|
const steeringLines = isEscalation
|
|
156
160
|
? [
|