@opengsd/gsd-pi 1.4.0 → 1.5.0-dev.4fb2d460
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/ask-user-questions.js +1 -1
- 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-artifact-paths.js +12 -3
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -7
- package/dist/resources/extensions/gsd/auto-dispatch.js +31 -7
- 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-recovery.js +50 -6
- package/dist/resources/extensions/gsd/auto-start.js +8 -6
- 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 +134 -7
- 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 +194 -28
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +14 -1
- package/dist/resources/extensions/gsd/codebase-generator.js +164 -20
- 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/db/writers/cascades.js +20 -2
- 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 +106 -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 +75 -11
- package/dist/resources/extensions/gsd/guidance.js +1 -0
- package/dist/resources/extensions/gsd/guided-flow.js +62 -19
- 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/md-importer.js +89 -23
- package/dist/resources/extensions/gsd/migrate-external.js +24 -7
- package/dist/resources/extensions/gsd/migration-auto-check.js +30 -3
- 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/paths.js +17 -3
- 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-skills.js +10 -16
- 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 +49 -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/skill-discovery.js +36 -23
- 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/reopen-slice.js +5 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +13 -5
- 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/resources/extensions/shared/interview-ui.js +62 -9
- 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 +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 +9 -9
- 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/package-manager.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +74 -53
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +30 -2
- package/packages/pi-coding-agent/dist/core/resource-loader.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/dist/core/skill-directories.d.ts +66 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.js +138 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/skills.d.ts +4 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +4 -1
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.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/ask-user-questions.ts +1 -1
- 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-artifact-paths.ts +12 -3
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +13 -7
- package/src/resources/extensions/gsd/auto-dispatch.ts +35 -7
- 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-recovery.ts +50 -6
- package/src/resources/extensions/gsd/auto-start.ts +9 -6
- 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 +148 -7
- 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 +229 -28
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +23 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +186 -19
- 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/db/writers/cascades.ts +23 -1
- 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 +132 -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 +105 -11
- package/src/resources/extensions/gsd/guidance.ts +2 -0
- package/src/resources/extensions/gsd/guided-flow.ts +71 -20
- 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/md-importer.ts +93 -22
- package/src/resources/extensions/gsd/migrate-external.ts +23 -6
- package/src/resources/extensions/gsd/migration-auto-check.ts +32 -3
- 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/paths.ts +21 -3
- 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-skills.ts +10 -16
- 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 +58 -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/skill-discovery.ts +47 -23
- 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-artifact-paths.test.ts +169 -1
- 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 +111 -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 +387 -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 +109 -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/import-completion-lost-update.test.ts +196 -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/journal-integration.test.ts +16 -15
- 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/migration-auto-check.test.ts +91 -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 +169 -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/reopen-slice.test.ts +52 -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/skill-discovery.test.ts +46 -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 +259 -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/reopen-slice.ts +5 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +13 -5
- 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/src/resources/extensions/shared/interview-ui.ts +58 -11
- package/src/resources/extensions/shared/tests/interview-ui-border.test.ts +32 -0
- 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 → gXoWec4UNqcR0tkuHwYCr}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{zQLcXm0Za8lexoXtgDpMG → gXoWec4UNqcR0tkuHwYCr}/_ssgManifest.js +0 -0
|
@@ -12,6 +12,7 @@ import { appendEvent } from "../workflow-events.js";
|
|
|
12
12
|
import { logWarning } from "../workflow-logger.js";
|
|
13
13
|
import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
14
14
|
import { validatePathOnlyPlanningFields, validatePlanningPathScope } from "../planning-path-scope.js";
|
|
15
|
+
import { createRepositoryRegistryFromPreferences, defaultRepositoryTargets, type RepositoryRegistry } from "../repository-registry.js";
|
|
15
16
|
import type { GateId } from "../types.js";
|
|
16
17
|
|
|
17
18
|
export interface PlanTaskParams {
|
|
@@ -26,6 +27,8 @@ export interface PlanTaskParams {
|
|
|
26
27
|
inputs: string[];
|
|
27
28
|
expectedOutput: string[];
|
|
28
29
|
observabilityImpact?: string;
|
|
30
|
+
/** Repository id(s) this task touches (parent workspace); omitted for single-repo projects. */
|
|
31
|
+
targetRepositories?: string[];
|
|
29
32
|
fullPlanMd?: string;
|
|
30
33
|
/** Optional caller-provided identity for audit trail */
|
|
31
34
|
actorName?: string;
|
|
@@ -40,6 +43,63 @@ export interface PlanTaskResult {
|
|
|
40
43
|
taskPlanPath: string;
|
|
41
44
|
}
|
|
42
45
|
|
|
46
|
+
function validateRepositoryTargetIds(field: string, value: unknown): string[] {
|
|
47
|
+
const ids = validateStringArray(value, field);
|
|
48
|
+
if (ids.length === 0) throw new Error(`${field} must include at least one repository id when provided`);
|
|
49
|
+
const deduped = Array.from(new Set(ids.map((id) => id.trim()).filter(Boolean)));
|
|
50
|
+
if (deduped.length === 0) throw new Error(`${field} must include at least one repository id when provided`);
|
|
51
|
+
return deduped;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function validateReferencedRepositories(
|
|
55
|
+
targetRepositories: string[] | undefined,
|
|
56
|
+
registry: RepositoryRegistry,
|
|
57
|
+
): string | null {
|
|
58
|
+
if (!targetRepositories) return null;
|
|
59
|
+
const known = new Set(registry.repositories.map((repo) => repo.id));
|
|
60
|
+
const missing = targetRepositories.filter((id) => !known.has(id));
|
|
61
|
+
if (missing.length === 0) return null;
|
|
62
|
+
return `unknown targetRepositories: ${missing.join(", ")}. Declared repositories: ${Array.from(known).join(", ")}`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function resolveAllowedRootsForPathScope(
|
|
66
|
+
targetRepositories: string[],
|
|
67
|
+
registry: RepositoryRegistry,
|
|
68
|
+
): string[] {
|
|
69
|
+
if (targetRepositories.length === 0) return [registry.projectRoot];
|
|
70
|
+
const roots = targetRepositories
|
|
71
|
+
.map((id) => registry.byId.get(id)?.root)
|
|
72
|
+
.filter((root): root is string => typeof root === "string");
|
|
73
|
+
return roots.length > 0 ? roots : [registry.projectRoot];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function validatePathScopeForTargetRepositories(
|
|
77
|
+
params: PlanTaskParams,
|
|
78
|
+
basePath: string,
|
|
79
|
+
registry: RepositoryRegistry,
|
|
80
|
+
targetRepositories: string[],
|
|
81
|
+
): string | null {
|
|
82
|
+
return validatePlanningPathScope(
|
|
83
|
+
basePath,
|
|
84
|
+
[
|
|
85
|
+
{ field: "files", values: params.files },
|
|
86
|
+
{ field: "inputs", values: params.inputs },
|
|
87
|
+
{ field: "expectedOutput", values: params.expectedOutput },
|
|
88
|
+
],
|
|
89
|
+
resolveAllowedRootsForPathScope(targetRepositories, registry),
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function resolveEffectiveTargetRepositories(
|
|
94
|
+
taskTargetRepositories: string[] | undefined,
|
|
95
|
+
sliceTargetRepositories: string[] | undefined,
|
|
96
|
+
defaultTargets: string[],
|
|
97
|
+
): string[] {
|
|
98
|
+
if (taskTargetRepositories) return taskTargetRepositories;
|
|
99
|
+
if (sliceTargetRepositories?.length) return sliceTargetRepositories;
|
|
100
|
+
return defaultTargets;
|
|
101
|
+
}
|
|
102
|
+
|
|
43
103
|
function validateParams(params: PlanTaskParams): PlanTaskParams {
|
|
44
104
|
if (!isNonEmptyString(params?.milestoneId)) throw new Error("milestoneId is required");
|
|
45
105
|
if (!isNonEmptyString(params?.sliceId)) throw new Error("sliceId is required");
|
|
@@ -57,6 +117,9 @@ function validateParams(params: PlanTaskParams): PlanTaskParams {
|
|
|
57
117
|
files: validateStringArray(params.files, "files"),
|
|
58
118
|
inputs: validateStringArray(params.inputs, "inputs"),
|
|
59
119
|
expectedOutput: validateStringArray(params.expectedOutput, "expectedOutput"),
|
|
120
|
+
...(params.targetRepositories !== undefined
|
|
121
|
+
? { targetRepositories: validateRepositoryTargetIds("targetRepositories", params.targetRepositories) }
|
|
122
|
+
: {}),
|
|
60
123
|
};
|
|
61
124
|
}
|
|
62
125
|
|
|
@@ -84,23 +147,19 @@ export async function handlePlanTask(
|
|
|
84
147
|
return { error: `validation failed: ${pathOnlyError}` };
|
|
85
148
|
}
|
|
86
149
|
|
|
87
|
-
const pathScopeError = validatePlanningPathScope(basePath, [
|
|
88
|
-
{ field: "files", values: params.files },
|
|
89
|
-
{ field: "inputs", values: params.inputs },
|
|
90
|
-
{ field: "expectedOutput", values: params.expectedOutput },
|
|
91
|
-
]);
|
|
92
|
-
if (pathScopeError) {
|
|
93
|
-
return { error: `validation failed: ${pathScopeError}` };
|
|
94
|
-
}
|
|
95
|
-
|
|
96
150
|
let taskGates: GateId[];
|
|
151
|
+
let repositoryRegistry: RepositoryRegistry;
|
|
97
152
|
try {
|
|
98
153
|
taskGates = resolveTaskGates(basePath);
|
|
154
|
+
const loaded = loadEffectiveGSDPreferences(basePath);
|
|
155
|
+
repositoryRegistry = createRepositoryRegistryFromPreferences(basePath, loaded?.preferences);
|
|
99
156
|
} catch (err) {
|
|
100
157
|
const message = err instanceof Error ? err.message : String(err);
|
|
101
158
|
return { error: `validation failed: ${message}` };
|
|
102
159
|
}
|
|
103
160
|
|
|
161
|
+
const defaultTargets = defaultRepositoryTargets(repositoryRegistry);
|
|
162
|
+
|
|
104
163
|
// ── Guards + DB writes inside a single transaction (prevents TOCTOU) ───
|
|
105
164
|
// Guards must be inside the transaction so the state they check cannot
|
|
106
165
|
// change between the read and the write (#2723).
|
|
@@ -124,6 +183,44 @@ export async function handlePlanTask(
|
|
|
124
183
|
return;
|
|
125
184
|
}
|
|
126
185
|
|
|
186
|
+
let effectiveTargetRepositories = resolveEffectiveTargetRepositories(
|
|
187
|
+
params.targetRepositories,
|
|
188
|
+
parentSlice.target_repositories,
|
|
189
|
+
defaultTargets,
|
|
190
|
+
);
|
|
191
|
+
const repoValidationError = validateReferencedRepositories(effectiveTargetRepositories, repositoryRegistry);
|
|
192
|
+
if (repoValidationError) {
|
|
193
|
+
guardError = `validation failed: ${repoValidationError}`;
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
let pathScopeError = validatePathScopeForTargetRepositories(
|
|
198
|
+
params,
|
|
199
|
+
basePath,
|
|
200
|
+
repositoryRegistry,
|
|
201
|
+
effectiveTargetRepositories,
|
|
202
|
+
);
|
|
203
|
+
const storedTaskTargets = existingTask?.target_repositories?.length
|
|
204
|
+
? existingTask.target_repositories
|
|
205
|
+
: undefined;
|
|
206
|
+
// Omitted targetRepositories inherit the current slice default first.
|
|
207
|
+
// Fall back to the stored task target only when that inherited scope
|
|
208
|
+
// rejects the replan paths, preserving explicit per-task parent-root work.
|
|
209
|
+
if (pathScopeError && params.targetRepositories === undefined && storedTaskTargets) {
|
|
210
|
+
const storedRepoValidationError = validateReferencedRepositories(storedTaskTargets, repositoryRegistry);
|
|
211
|
+
const storedPathScopeError = storedRepoValidationError
|
|
212
|
+
? storedRepoValidationError
|
|
213
|
+
: validatePathScopeForTargetRepositories(params, basePath, repositoryRegistry, storedTaskTargets);
|
|
214
|
+
if (!storedPathScopeError) {
|
|
215
|
+
effectiveTargetRepositories = storedTaskTargets;
|
|
216
|
+
pathScopeError = null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
if (pathScopeError) {
|
|
220
|
+
guardError = `validation failed: ${pathScopeError}`;
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
|
|
127
224
|
if (!existingTask) {
|
|
128
225
|
insertTask({
|
|
129
226
|
id: params.taskId,
|
|
@@ -143,6 +240,7 @@ export async function handlePlanTask(
|
|
|
143
240
|
expectedOutput: params.expectedOutput,
|
|
144
241
|
observabilityImpact: params.observabilityImpact ?? "",
|
|
145
242
|
fullPlanMd: params.fullPlanMd,
|
|
243
|
+
targetRepositories: effectiveTargetRepositories,
|
|
146
244
|
});
|
|
147
245
|
for (const gid of taskGates) {
|
|
148
246
|
insertGateRow({ milestoneId: params.milestoneId, sliceId: params.sliceId, gateId: gid, scope: "task", taskId: params.taskId });
|
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
* tasks back to "pending". This is intentional — if you're reopening a
|
|
6
6
|
* slice, you're re-doing the work. Partial resets create ambiguous state.
|
|
7
7
|
*
|
|
8
|
+
* Also recovers a desynced slice (#1205): when a UAT→planning fallback leaves
|
|
9
|
+
* the slice open (e.g. "pending") but its tasks still "complete", this clears
|
|
10
|
+
* that state so the planner can re-plan without hitting "already complete"
|
|
11
|
+
* rejections.
|
|
12
|
+
*
|
|
8
13
|
* The parent milestone must still be open (not complete).
|
|
9
14
|
*/
|
|
10
15
|
|
|
@@ -24,8 +24,8 @@ import { writeManifest } from "../workflow-manifest.js";
|
|
|
24
24
|
import { appendEvent } from "../workflow-events.js";
|
|
25
25
|
import { logWarning } from "../workflow-logger.js";
|
|
26
26
|
import { existsSync, unlinkSync } from "node:fs";
|
|
27
|
-
import { join } from "node:path";
|
|
28
|
-
import { resolveTasksDir, clearPathCache } from "../paths.js";
|
|
27
|
+
import { join, basename, dirname } from "node:path";
|
|
28
|
+
import { resolveTasksDir, resolveSlicePath, clearPathCache } from "../paths.js";
|
|
29
29
|
|
|
30
30
|
export interface ReopenTaskParams {
|
|
31
31
|
milestoneId: string;
|
|
@@ -106,10 +106,18 @@ export async function handleReopenTask(
|
|
|
106
106
|
// ── Clean up stale filesystem artifacts (M12 fix) ────────────────────────
|
|
107
107
|
// Without this, the DB-filesystem reconciler sees the SUMMARY.md and
|
|
108
108
|
// auto-corrects the task back to "complete", making reopen a no-op (#3161).
|
|
109
|
+
// Legacy layout keeps the summary under a tasks/ subdir; flat-phase writes
|
|
110
|
+
// TID-SUMMARY.md directly in the phase dir. A tasks/ subdir may still exist
|
|
111
|
+
// in flat-phase for auxiliary artifacts — its mere existence must NOT redirect
|
|
112
|
+
// summary cleanup into tasks/ (#1208).
|
|
109
113
|
try {
|
|
110
|
-
const
|
|
111
|
-
if (
|
|
112
|
-
const
|
|
114
|
+
const slicePath = resolveSlicePath(basePath, params.milestoneId, params.sliceId);
|
|
115
|
+
if (slicePath) {
|
|
116
|
+
const isLegacySlice = basename(dirname(slicePath)) === "slices";
|
|
117
|
+
const summaryDir = isLegacySlice
|
|
118
|
+
? (resolveTasksDir(basePath, params.milestoneId, params.sliceId) ?? slicePath)
|
|
119
|
+
: slicePath;
|
|
120
|
+
const summaryPath = join(summaryDir, `${params.taskId}-SUMMARY.md`);
|
|
113
121
|
if (existsSync(summaryPath)) unlinkSync(summaryPath);
|
|
114
122
|
}
|
|
115
123
|
} catch (cleanupErr) {
|
|
@@ -53,11 +53,13 @@ import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
|
53
53
|
import { parseProject } from "../schemas/parsers.js";
|
|
54
54
|
import { autoSession, getAutoRuntimeSnapshot, isAutoActive } from "../auto-runtime-state.js";
|
|
55
55
|
import { renderPlanFromDb } from "../markdown-renderer.js";
|
|
56
|
+
import { readUnitHarnessAbort, type UnitHarnessAbortRecord } from "../unit-runtime.js";
|
|
56
57
|
import {
|
|
57
58
|
prepareUatRun,
|
|
58
59
|
saveUatAttemptArtifact,
|
|
59
60
|
type UatResultSaveParams,
|
|
60
61
|
} from "../uat-run.js";
|
|
62
|
+
import { appendNotification } from "../notification-store.js";
|
|
61
63
|
import { registerAutoWorker, markWorkerStopping, getAutoWorker } from "../db/auto-workers.js";
|
|
62
64
|
import {
|
|
63
65
|
claimMilestoneLease,
|
|
@@ -116,6 +118,48 @@ function blockIfWrongAutoUnit(requiredUnitType: string, operation: string): Tool
|
|
|
116
118
|
};
|
|
117
119
|
}
|
|
118
120
|
|
|
121
|
+
function blockIfHarnessAbortedUnit(operation: string, basePath: string): ToolExecutionResult | null {
|
|
122
|
+
const snapshot = getAutoRuntimeSnapshot();
|
|
123
|
+
if (!snapshot.active || !snapshot.currentUnit) return null;
|
|
124
|
+
|
|
125
|
+
const abort = readUnitHarnessAbort(
|
|
126
|
+
snapshot.basePath || basePath,
|
|
127
|
+
snapshot.currentUnit.type,
|
|
128
|
+
snapshot.currentUnit.id,
|
|
129
|
+
snapshot.currentUnit.startedAt,
|
|
130
|
+
);
|
|
131
|
+
if (!abort) return null;
|
|
132
|
+
|
|
133
|
+
return harnessAbortResult(operation, snapshot.currentUnit.type, snapshot.currentUnit.id, abort);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function harnessAbortResult(
|
|
137
|
+
operation: string,
|
|
138
|
+
unitType: string,
|
|
139
|
+
unitId: string,
|
|
140
|
+
abort: UnitHarnessAbortRecord,
|
|
141
|
+
): ToolExecutionResult {
|
|
142
|
+
const toolText = abort.toolName ? ` while calling ${abort.toolName}` : "";
|
|
143
|
+
const message =
|
|
144
|
+
`Retryable harness abort: ${unitType} ${unitId} was truncated by ${abort.kind}${toolText}. ` +
|
|
145
|
+
"This gate result was not saved; leave the gate pending so auto-mode can rerun it.";
|
|
146
|
+
return {
|
|
147
|
+
content: [{ type: "text", text: message }],
|
|
148
|
+
details: {
|
|
149
|
+
operation,
|
|
150
|
+
error: "harness_aborted_needs_retry",
|
|
151
|
+
retryable: true,
|
|
152
|
+
unitType,
|
|
153
|
+
unitId,
|
|
154
|
+
harnessAbortKind: abort.kind,
|
|
155
|
+
harnessAbortReason: abort.reason,
|
|
156
|
+
harnessAbortToolName: abort.toolName,
|
|
157
|
+
harnessAbortCount: abort.count,
|
|
158
|
+
},
|
|
159
|
+
isError: true,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
|
|
119
163
|
function milestoneLeaseConflictResult(
|
|
120
164
|
milestoneId: string,
|
|
121
165
|
byWorker: string,
|
|
@@ -1135,6 +1179,9 @@ export async function executeSaveGateResult(
|
|
|
1135
1179
|
params: SaveGateResultParams,
|
|
1136
1180
|
basePath: string = process.cwd(),
|
|
1137
1181
|
): Promise<ToolExecutionResult> {
|
|
1182
|
+
const harnessAbort = blockIfHarnessAbortedUnit("save_gate_result", basePath);
|
|
1183
|
+
if (harnessAbort) return harnessAbort;
|
|
1184
|
+
|
|
1138
1185
|
const dbAvailable = await ensureDbOpen(basePath);
|
|
1139
1186
|
if (!dbAvailable) {
|
|
1140
1187
|
return {
|
|
@@ -1206,6 +1253,9 @@ export async function executeUatResultSave(
|
|
|
1206
1253
|
const unitGuard = blockIfWrongAutoUnit("run-uat", "save_uat_result");
|
|
1207
1254
|
if (unitGuard) return unitGuard;
|
|
1208
1255
|
|
|
1256
|
+
const harnessAbort = blockIfHarnessAbortedUnit("save_uat_result", basePath);
|
|
1257
|
+
if (harnessAbort) return harnessAbort;
|
|
1258
|
+
|
|
1209
1259
|
const dbAvailable = await ensureDbOpen(basePath);
|
|
1210
1260
|
if (!dbAvailable) return errorResult("save_uat_result", "GSD database is not available.", "db_unavailable");
|
|
1211
1261
|
|
|
@@ -1268,6 +1318,14 @@ export async function executeUatResultSave(
|
|
|
1268
1318
|
evaluatedAt: run.evaluatedAt,
|
|
1269
1319
|
});
|
|
1270
1320
|
invalidateStateCache();
|
|
1321
|
+
if (run.hasHuman) {
|
|
1322
|
+
appendNotification(
|
|
1323
|
+
`UAT for ${run.params.milestoneId}/${run.params.sliceId} has NEEDS-HUMAN checks awaiting human validation`,
|
|
1324
|
+
"warning",
|
|
1325
|
+
"notify",
|
|
1326
|
+
{ kind: "uat-needs-human", scope: `${run.params.milestoneId}/${run.params.sliceId}` },
|
|
1327
|
+
);
|
|
1328
|
+
}
|
|
1271
1329
|
const savedText = `UAT result saved for ${run.params.milestoneId}/${run.params.sliceId}: ${run.params.verdict}`;
|
|
1272
1330
|
return {
|
|
1273
1331
|
content: [{
|
|
@@ -140,6 +140,10 @@ export type ContextModePolicy =
|
|
|
140
140
|
* restricted to .gsd/**. Subagent dispatch is denied unless
|
|
141
141
|
* `allowedSubagents` opts a unit into controlled read-only
|
|
142
142
|
* specialist delegation.
|
|
143
|
+
* - "workflow-only"
|
|
144
|
+
* — Read tools + GSD workflow tools only. No generic writes
|
|
145
|
+
* and no generic shell; used by lanes whose durable output
|
|
146
|
+
* must be produced by a dedicated DB-backed workflow tool.
|
|
143
147
|
*
|
|
144
148
|
* The allowlist for "docs" is declared per-manifest rather than hardcoded so
|
|
145
149
|
* projects with non-standard doc layouts can extend it without forking the
|
|
@@ -152,7 +156,8 @@ export type ToolsPolicy =
|
|
|
152
156
|
| { readonly mode: "planning" }
|
|
153
157
|
| { readonly mode: "planning-dispatch"; readonly allowedSubagents: readonly string[] }
|
|
154
158
|
| { readonly mode: "docs"; readonly allowedPathGlobs: readonly string[] }
|
|
155
|
-
| { readonly mode: "verification"; readonly allowedSubagents?: readonly string[] }
|
|
159
|
+
| { readonly mode: "verification"; readonly allowedSubagents?: readonly string[] }
|
|
160
|
+
| { readonly mode: "workflow-only"; readonly allowedSubagents?: readonly string[] };
|
|
156
161
|
|
|
157
162
|
// ─── Computed-artifact registry (#4924 v2 contract) ───────────────────────
|
|
158
163
|
|
|
@@ -405,9 +410,10 @@ export const UNIT_MANIFESTS: Record<UnitType, UnitContextManifest> = {
|
|
|
405
410
|
codebaseMap: false,
|
|
406
411
|
preferences: "active-only",
|
|
407
412
|
contextMode: "verification",
|
|
408
|
-
// Validation
|
|
409
|
-
//
|
|
410
|
-
|
|
413
|
+
// Validation must persist its durable output through gsd_validate_milestone;
|
|
414
|
+
// generic write/bash tools can create filesystem artifacts that bypass DB
|
|
415
|
+
// state and trigger destructive recovery loops.
|
|
416
|
+
tools: { mode: "workflow-only", allowedSubagents: ["reviewer", "security", "tester"] },
|
|
411
417
|
artifacts: {
|
|
412
418
|
inline: ["roadmap", "requirements", "templates"],
|
|
413
419
|
excerpt: ["slice-summary", "slice-assessment"],
|
|
@@ -774,7 +780,7 @@ export function compileSubagentPermissionContract(
|
|
|
774
780
|
return { allowed: true, allowedSubagents: ["*"], toolsMode: policy.mode };
|
|
775
781
|
}
|
|
776
782
|
if (
|
|
777
|
-
(policy.mode === "planning-dispatch" || policy.mode === "verification") &&
|
|
783
|
+
(policy.mode === "planning-dispatch" || policy.mode === "verification" || policy.mode === "workflow-only") &&
|
|
778
784
|
Array.isArray(policy.allowedSubagents)
|
|
779
785
|
) {
|
|
780
786
|
return {
|
|
@@ -20,8 +20,9 @@
|
|
|
20
20
|
//
|
|
21
21
|
// Not yet declared here (remaining ADR-033 steps): the manifest data
|
|
22
22
|
// (`UNIT_MANIFESTS` stays in unit-context-manifest.ts, already type-enforced
|
|
23
|
-
// against the registry's `UnitType`)
|
|
24
|
-
//
|
|
23
|
+
// against the registry's `UnitType`). Prompt-template association is declared
|
|
24
|
+
// for direct one-template units and verified conditional template sets;
|
|
25
|
+
// composition logic stays with prompt builders.
|
|
25
26
|
|
|
26
27
|
import type { CanonicalWorkflowToolName } from "@opengsd/contracts";
|
|
27
28
|
import { BROWSER_CONTRACT_TOOL_NAMES } from "../shared/browser-contract.js";
|
|
@@ -61,6 +62,17 @@ export interface UnitDescriptor {
|
|
|
61
62
|
* resolves against session defaults).
|
|
62
63
|
*/
|
|
63
64
|
readonly phaseChain: readonly GSDModelPhaseKey[] | null;
|
|
65
|
+
/**
|
|
66
|
+
* Prompt template id passed to loadPrompt for units with a direct
|
|
67
|
+
* one-template builder. Omitted for conditional, composite, or not-yet
|
|
68
|
+
* verified prompt associations.
|
|
69
|
+
*/
|
|
70
|
+
readonly promptTemplate?: string;
|
|
71
|
+
/**
|
|
72
|
+
* Prompt template ids a conditional or composite builder may choose from.
|
|
73
|
+
* Omitted unless every listed association is verified against the builder.
|
|
74
|
+
*/
|
|
75
|
+
readonly promptTemplates?: readonly string[];
|
|
64
76
|
/** `null` = the unit has no scoped gsd-tool contract. */
|
|
65
77
|
readonly toolContract: UnitToolSurfaceContract | null;
|
|
66
78
|
}
|
|
@@ -97,6 +109,7 @@ export const UNIT_REGISTRY = {
|
|
|
97
109
|
kind: "primary",
|
|
98
110
|
scopeClass: "standard",
|
|
99
111
|
phaseChain: ["research"],
|
|
112
|
+
promptTemplate: "research-milestone",
|
|
100
113
|
toolContract: {
|
|
101
114
|
allowedGsdTools: [
|
|
102
115
|
"gsd_summary_save",
|
|
@@ -112,6 +125,7 @@ export const UNIT_REGISTRY = {
|
|
|
112
125
|
kind: "primary",
|
|
113
126
|
scopeClass: "standard",
|
|
114
127
|
phaseChain: ["planning"],
|
|
128
|
+
promptTemplate: "plan-milestone",
|
|
115
129
|
toolContract: {
|
|
116
130
|
allowedGsdTools: [
|
|
117
131
|
"gsd_milestone_status",
|
|
@@ -128,6 +142,7 @@ export const UNIT_REGISTRY = {
|
|
|
128
142
|
kind: "primary",
|
|
129
143
|
scopeClass: "standard",
|
|
130
144
|
phaseChain: ["discuss", "planning"],
|
|
145
|
+
promptTemplates: ["discuss", "discuss-headless", "guided-discuss-milestone"],
|
|
131
146
|
toolContract: {
|
|
132
147
|
allowedGsdTools: [
|
|
133
148
|
"gsd_summary_save",
|
|
@@ -160,6 +175,7 @@ export const UNIT_REGISTRY = {
|
|
|
160
175
|
kind: "primary",
|
|
161
176
|
scopeClass: "section-close",
|
|
162
177
|
phaseChain: ["validation", "planning"],
|
|
178
|
+
promptTemplate: "validate-milestone",
|
|
163
179
|
toolContract: {
|
|
164
180
|
allowedGsdTools: [
|
|
165
181
|
"gsd_milestone_status",
|
|
@@ -177,6 +193,7 @@ export const UNIT_REGISTRY = {
|
|
|
177
193
|
kind: "primary",
|
|
178
194
|
scopeClass: "standard",
|
|
179
195
|
phaseChain: ["completion"],
|
|
196
|
+
promptTemplate: "complete-milestone",
|
|
180
197
|
toolContract: {
|
|
181
198
|
allowedGsdTools: [
|
|
182
199
|
"gsd_milestone_status",
|
|
@@ -200,6 +217,7 @@ export const UNIT_REGISTRY = {
|
|
|
200
217
|
kind: "primary",
|
|
201
218
|
scopeClass: "standard",
|
|
202
219
|
phaseChain: ["research"],
|
|
220
|
+
promptTemplate: "research-slice",
|
|
203
221
|
toolContract: {
|
|
204
222
|
allowedGsdTools: [
|
|
205
223
|
"gsd_milestone_status",
|
|
@@ -216,6 +234,7 @@ export const UNIT_REGISTRY = {
|
|
|
216
234
|
kind: "primary",
|
|
217
235
|
scopeClass: "standard",
|
|
218
236
|
phaseChain: ["planning"],
|
|
237
|
+
promptTemplate: "plan-slice",
|
|
219
238
|
toolContract: {
|
|
220
239
|
allowedGsdTools: [
|
|
221
240
|
"gsd_milestone_status",
|
|
@@ -234,6 +253,7 @@ export const UNIT_REGISTRY = {
|
|
|
234
253
|
kind: "primary",
|
|
235
254
|
scopeClass: "standard",
|
|
236
255
|
phaseChain: ["planning"],
|
|
256
|
+
promptTemplate: "refine-slice",
|
|
237
257
|
toolContract: {
|
|
238
258
|
allowedGsdTools: [
|
|
239
259
|
"gsd_milestone_status",
|
|
@@ -250,6 +270,7 @@ export const UNIT_REGISTRY = {
|
|
|
250
270
|
kind: "primary",
|
|
251
271
|
scopeClass: "standard",
|
|
252
272
|
phaseChain: ["planning"],
|
|
273
|
+
promptTemplate: "replan-slice",
|
|
253
274
|
toolContract: {
|
|
254
275
|
allowedGsdTools: ["gsd_replan_slice", "gsd_decision_save"],
|
|
255
276
|
requiredWorkflowTools: ["gsd_replan_slice"],
|
|
@@ -259,6 +280,7 @@ export const UNIT_REGISTRY = {
|
|
|
259
280
|
kind: "primary",
|
|
260
281
|
scopeClass: "section-close",
|
|
261
282
|
phaseChain: ["completion"],
|
|
283
|
+
promptTemplate: "complete-slice",
|
|
262
284
|
toolContract: {
|
|
263
285
|
allowedGsdTools: [
|
|
264
286
|
"gsd_milestone_status",
|
|
@@ -293,6 +315,7 @@ export const UNIT_REGISTRY = {
|
|
|
293
315
|
kind: "primary",
|
|
294
316
|
scopeClass: "standard",
|
|
295
317
|
phaseChain: ["validation", "planning"],
|
|
318
|
+
promptTemplate: "reassess-roadmap",
|
|
296
319
|
toolContract: {
|
|
297
320
|
allowedGsdTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
298
321
|
requiredWorkflowTools: ["gsd_milestone_status", "gsd_reassess_roadmap"],
|
|
@@ -302,6 +325,7 @@ export const UNIT_REGISTRY = {
|
|
|
302
325
|
kind: "primary",
|
|
303
326
|
scopeClass: "execute-task",
|
|
304
327
|
phaseChain: ["execution"],
|
|
328
|
+
promptTemplate: "execute-task",
|
|
305
329
|
toolContract: {
|
|
306
330
|
allowedGsdTools: [
|
|
307
331
|
"gsd_task_complete",
|
|
@@ -346,6 +370,7 @@ export const UNIT_REGISTRY = {
|
|
|
346
370
|
kind: "primary",
|
|
347
371
|
scopeClass: "execute-task",
|
|
348
372
|
phaseChain: ["execution"],
|
|
373
|
+
promptTemplate: "reactive-execute",
|
|
349
374
|
toolContract: {
|
|
350
375
|
allowedGsdTools: [
|
|
351
376
|
"gsd_milestone_status",
|
|
@@ -361,6 +386,7 @@ export const UNIT_REGISTRY = {
|
|
|
361
386
|
kind: "primary",
|
|
362
387
|
scopeClass: "standard",
|
|
363
388
|
phaseChain: ["uat", "completion"],
|
|
389
|
+
promptTemplate: "run-uat",
|
|
364
390
|
toolContract: {
|
|
365
391
|
allowedGsdTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES, "subagent"],
|
|
366
392
|
requiredWorkflowTools: [...RUN_UAT_WORKFLOW_TOOL_NAMES],
|
|
@@ -375,6 +401,7 @@ export const UNIT_REGISTRY = {
|
|
|
375
401
|
kind: "primary",
|
|
376
402
|
scopeClass: "standard",
|
|
377
403
|
phaseChain: ["validation", "planning"],
|
|
404
|
+
promptTemplate: "gate-evaluate",
|
|
378
405
|
toolContract: {
|
|
379
406
|
allowedGsdTools: ["gsd_save_gate_result"],
|
|
380
407
|
requiredWorkflowTools: ["gsd_save_gate_result"],
|
|
@@ -384,6 +411,7 @@ export const UNIT_REGISTRY = {
|
|
|
384
411
|
kind: "primary",
|
|
385
412
|
scopeClass: "standard",
|
|
386
413
|
phaseChain: ["validation", "planning"],
|
|
414
|
+
promptTemplate: "rewrite-docs",
|
|
387
415
|
toolContract: {
|
|
388
416
|
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save"],
|
|
389
417
|
requiredWorkflowTools: [],
|
|
@@ -408,6 +436,7 @@ export const UNIT_REGISTRY = {
|
|
|
408
436
|
kind: "primary",
|
|
409
437
|
scopeClass: "standard",
|
|
410
438
|
phaseChain: ["discuss", "planning"],
|
|
439
|
+
promptTemplate: "guided-workflow-preferences",
|
|
411
440
|
toolContract: {
|
|
412
441
|
allowedGsdTools: ["gsd_summary_save"],
|
|
413
442
|
requiredWorkflowTools: [],
|
|
@@ -417,6 +446,7 @@ export const UNIT_REGISTRY = {
|
|
|
417
446
|
kind: "primary",
|
|
418
447
|
scopeClass: "standard",
|
|
419
448
|
phaseChain: ["discuss", "planning"],
|
|
449
|
+
promptTemplate: "guided-discuss-project",
|
|
420
450
|
toolContract: {
|
|
421
451
|
allowedGsdTools: ["gsd_summary_save", "gsd_decision_save", "gsd_requirement_save"],
|
|
422
452
|
requiredWorkflowTools: ["ask_user_questions", "gsd_summary_save"],
|
|
@@ -426,6 +456,7 @@ export const UNIT_REGISTRY = {
|
|
|
426
456
|
kind: "primary",
|
|
427
457
|
scopeClass: "standard",
|
|
428
458
|
phaseChain: ["discuss", "planning"],
|
|
459
|
+
promptTemplate: "guided-discuss-requirements",
|
|
429
460
|
toolContract: {
|
|
430
461
|
allowedGsdTools: ["gsd_requirement_save", "gsd_summary_save"],
|
|
431
462
|
requiredWorkflowTools: ["ask_user_questions", "gsd_requirement_save", "gsd_summary_save"],
|
|
@@ -435,6 +466,7 @@ export const UNIT_REGISTRY = {
|
|
|
435
466
|
kind: "primary",
|
|
436
467
|
scopeClass: "standard",
|
|
437
468
|
phaseChain: ["discuss", "planning"],
|
|
469
|
+
promptTemplate: "guided-research-decision",
|
|
438
470
|
toolContract: {
|
|
439
471
|
allowedGsdTools: ["gsd_summary_save"],
|
|
440
472
|
requiredWorkflowTools: ["ask_user_questions"],
|
|
@@ -447,6 +479,7 @@ export const UNIT_REGISTRY = {
|
|
|
447
479
|
kind: "primary",
|
|
448
480
|
scopeClass: "standard",
|
|
449
481
|
phaseChain: ["research"],
|
|
482
|
+
promptTemplate: "guided-research-project",
|
|
450
483
|
toolContract: {
|
|
451
484
|
allowedGsdTools: [],
|
|
452
485
|
requiredWorkflowTools: [],
|
|
@@ -494,3 +527,16 @@ export function getUnitDescriptor(unitType: string): UnitDescriptor | undefined
|
|
|
494
527
|
export function getUnitPhaseChain(unitType: string): readonly GSDModelPhaseKey[] | null {
|
|
495
528
|
return getUnitDescriptor(unitType)?.phaseChain ?? null;
|
|
496
529
|
}
|
|
530
|
+
|
|
531
|
+
/** Prompt template id for units with a direct one-template builder. */
|
|
532
|
+
export function getUnitPromptTemplate(unitType: string): string | undefined {
|
|
533
|
+
return getUnitDescriptor(unitType)?.promptTemplate;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
/** Prompt template ids for any verified direct or conditional prompt builder. */
|
|
537
|
+
export function getUnitPromptTemplates(unitType: string): readonly string[] {
|
|
538
|
+
const descriptor = getUnitDescriptor(unitType);
|
|
539
|
+
if (!descriptor) return [];
|
|
540
|
+
if (descriptor.promptTemplates) return descriptor.promptTemplates;
|
|
541
|
+
return descriptor.promptTemplate ? [descriptor.promptTemplate] : [];
|
|
542
|
+
}
|
|
@@ -100,6 +100,14 @@ export interface ExecuteTaskRecoveryStatus {
|
|
|
100
100
|
mustHavesMentionedInSummary: number;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
export interface UnitHarnessAbortRecord {
|
|
104
|
+
kind: "tool-loop-guard" | "tool-error" | "turn-abort";
|
|
105
|
+
reason: string;
|
|
106
|
+
toolName?: string;
|
|
107
|
+
count?: number;
|
|
108
|
+
recordedAt: number;
|
|
109
|
+
}
|
|
110
|
+
|
|
103
111
|
export interface AutoUnitRuntimeRecord {
|
|
104
112
|
version: 1;
|
|
105
113
|
unitType: string;
|
|
@@ -116,6 +124,7 @@ export interface AutoUnitRuntimeRecord {
|
|
|
116
124
|
recovery?: ExecuteTaskRecoveryStatus;
|
|
117
125
|
recoveryAttempts?: number;
|
|
118
126
|
lastRecoveryReason?: "idle" | "hard";
|
|
127
|
+
harnessAbort?: UnitHarnessAbortRecord;
|
|
119
128
|
}
|
|
120
129
|
|
|
121
130
|
function runtimeDir(basePath: string): string {
|
|
@@ -138,6 +147,8 @@ export function writeUnitRuntimeRecord(
|
|
|
138
147
|
const path = runtimePath(basePath, unitType, unitId);
|
|
139
148
|
return withRecordLock(path, () => {
|
|
140
149
|
const prev = readUnitRuntimeRecord(basePath, unitType, unitId);
|
|
150
|
+
const sameRun = prev?.startedAt === startedAt;
|
|
151
|
+
const updatesHarnessAbort = Object.prototype.hasOwnProperty.call(updates, "harnessAbort");
|
|
141
152
|
const next: AutoUnitRuntimeRecord = {
|
|
142
153
|
version: 1,
|
|
143
154
|
unitType,
|
|
@@ -154,12 +165,32 @@ export function writeUnitRuntimeRecord(
|
|
|
154
165
|
recovery: updates.recovery ?? prev?.recovery,
|
|
155
166
|
recoveryAttempts: updates.recoveryAttempts ?? prev?.recoveryAttempts ?? 0,
|
|
156
167
|
lastRecoveryReason: updates.lastRecoveryReason ?? prev?.lastRecoveryReason,
|
|
168
|
+
harnessAbort: updatesHarnessAbort
|
|
169
|
+
? updates.harnessAbort
|
|
170
|
+
: (sameRun ? prev?.harnessAbort : undefined),
|
|
157
171
|
};
|
|
158
172
|
atomicWriteSync(path, JSON.stringify(next, null, 2) + "\n", "utf-8");
|
|
159
173
|
return next;
|
|
160
174
|
});
|
|
161
175
|
}
|
|
162
176
|
|
|
177
|
+
export function recordUnitHarnessAbort(
|
|
178
|
+
basePath: string,
|
|
179
|
+
unitType: string,
|
|
180
|
+
unitId: string,
|
|
181
|
+
startedAt: number,
|
|
182
|
+
abort: Omit<UnitHarnessAbortRecord, "recordedAt"> & { recordedAt?: number },
|
|
183
|
+
): AutoUnitRuntimeRecord {
|
|
184
|
+
return writeUnitRuntimeRecord(basePath, unitType, unitId, startedAt, {
|
|
185
|
+
harnessAbort: {
|
|
186
|
+
...abort,
|
|
187
|
+
recordedAt: abort.recordedAt ?? Date.now(),
|
|
188
|
+
},
|
|
189
|
+
lastProgressAt: Date.now(),
|
|
190
|
+
lastProgressKind: `harness-abort:${abort.kind}`,
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
|
|
163
194
|
export function readUnitRuntimeRecord(basePath: string, unitType: string, unitId: string): AutoUnitRuntimeRecord | null {
|
|
164
195
|
const path = runtimePath(basePath, unitType, unitId);
|
|
165
196
|
if (!existsSync(path)) return null;
|
|
@@ -170,6 +201,17 @@ export function readUnitRuntimeRecord(basePath: string, unitType: string, unitId
|
|
|
170
201
|
}
|
|
171
202
|
}
|
|
172
203
|
|
|
204
|
+
export function readUnitHarnessAbort(
|
|
205
|
+
basePath: string,
|
|
206
|
+
unitType: string,
|
|
207
|
+
unitId: string,
|
|
208
|
+
startedAt: number,
|
|
209
|
+
): UnitHarnessAbortRecord | null {
|
|
210
|
+
const record = readUnitRuntimeRecord(basePath, unitType, unitId);
|
|
211
|
+
if (!record || record.startedAt !== startedAt) return null;
|
|
212
|
+
return record.harnessAbort ?? null;
|
|
213
|
+
}
|
|
214
|
+
|
|
173
215
|
export function clearUnitRuntimeRecord(basePath: string, unitType: string, unitId: string): void {
|
|
174
216
|
const path = runtimePath(basePath, unitType, unitId);
|
|
175
217
|
if (existsSync(path)) unlinkSync(path);
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
nativeDiffNumstat,
|
|
10
10
|
nativeIsAncestor,
|
|
11
11
|
} from "./native-git-bridge.js";
|
|
12
|
-
import { autoWorktreeBranch } from "./auto-worktree.js";
|
|
12
|
+
import { autoWorktreeBranch } from "./auto-worktree-branch-lifecycle.js";
|
|
13
13
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
14
14
|
import { getAllMilestones } from "./gsd-db.js";
|
|
15
15
|
import { resolveMilestoneIntegrationBranch } from "./git-service.js";
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { isInAutoWorktree } from "./auto-worktree-entry.js";
|
|
7
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
7
8
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
8
9
|
import { refreshWorkflowDatabaseFromDisk } from "./db-workspace.js";
|
|
9
10
|
import { getIsolationMode } from "./preferences.js";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { existsSync, realpathSync } from "node:fs";
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { isSafeToAutoResolve } from "./auto-worktree-conflict-auto-resolve.js";
|
|
7
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
8
8
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
9
9
|
import {
|
|
10
10
|
listMergeStateBlockers,
|