@opengsd/gsd-pi 1.3.0-dev.eed73bea → 1.4.0-dev.5fc22c6f
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/cli.js +17 -4
- package/dist/headless-answers.js +1 -1
- package/dist/headless-ui.d.ts +1 -1
- package/dist/headless-ui.js +1 -1
- package/dist/headless.js +1 -1
- 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/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +61 -50
- 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 +431 -0
- package/dist/resources/extensions/gsd/auto/session.js +11 -0
- package/dist/resources/extensions/gsd/auto/verification-retry-policy.js +1 -1
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +28 -1
- package/dist/resources/extensions/gsd/auto-budget.js +5 -1
- package/dist/resources/extensions/gsd/auto-dispatch.js +32 -11
- package/dist/resources/extensions/gsd/auto-model-selection.js +36 -18
- package/dist/resources/extensions/gsd/auto-post-unit.js +1 -1
- package/dist/resources/extensions/gsd/auto-prompts.js +83 -25
- package/dist/resources/extensions/gsd/auto-recovery.js +9 -517
- package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -5
- package/dist/resources/extensions/gsd/auto-start.js +4 -3
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +7 -3
- package/dist/resources/extensions/gsd/auto-verification.js +5 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +38 -11
- package/dist/resources/extensions/gsd/auto.js +32 -10
- package/dist/resources/extensions/gsd/bootstrap/core-session-tools.js +39 -0
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +2 -0
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +147 -23
- package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +56 -36
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +29 -5
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +3 -1
- package/dist/resources/extensions/gsd/codebase-generator.js +157 -19
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +1 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +40 -4
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +154 -2
- package/dist/resources/extensions/gsd/commands-usage.js +1 -1
- package/dist/resources/extensions/gsd/commands-worktree.js +11 -2
- package/dist/resources/extensions/gsd/db/engine.js +4 -1
- package/dist/resources/extensions/gsd/db/queries.js +39 -0
- package/dist/resources/extensions/gsd/db-memory-fts-schema.js +34 -0
- package/dist/resources/extensions/gsd/db-workspace.js +55 -3
- package/dist/resources/extensions/gsd/delegation-policy.js +1 -1
- package/dist/resources/extensions/gsd/discussion-handoff.js +8 -3
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -4
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +227 -5
- package/dist/resources/extensions/gsd/doctor-providers.js +38 -10
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +3 -0
- package/dist/resources/extensions/gsd/doctor.js +93 -3
- package/dist/resources/extensions/gsd/exec-sandbox.js +14 -4
- package/dist/resources/extensions/gsd/flat-phase-migration.js +119 -23
- package/dist/resources/extensions/gsd/git-service.js +61 -8
- package/dist/resources/extensions/gsd/gitignore.js +4 -1
- package/dist/resources/extensions/gsd/guidance.js +1 -0
- package/dist/resources/extensions/gsd/guided-flow-queue.js +20 -13
- package/dist/resources/extensions/gsd/guided-flow.js +40 -2
- package/dist/resources/extensions/gsd/json-persistence.js +20 -0
- package/dist/resources/extensions/gsd/key-manager.js +1 -0
- package/dist/resources/extensions/gsd/knowledge-backfill.js +18 -11
- package/dist/resources/extensions/gsd/layout-policy.js +3 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +27 -15
- package/dist/resources/extensions/gsd/memory-backfill.js +28 -21
- package/dist/resources/extensions/gsd/metrics.js +4 -4
- package/dist/resources/extensions/gsd/migrate-external.js +22 -5
- package/dist/resources/extensions/gsd/migration-auto-check.js +22 -0
- package/dist/resources/extensions/gsd/milestone-ids.js +32 -2
- package/dist/resources/extensions/gsd/orphan-stash-audit.js +92 -16
- 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-validation.js +25 -2
- package/dist/resources/extensions/gsd/preferences.js +29 -2
- package/dist/resources/extensions/gsd/prompts/code-review.md +6 -4
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +5 -3
- package/dist/resources/extensions/gsd/redact-secrets.js +37 -0
- package/dist/resources/extensions/gsd/repository-registry.js +6 -1
- package/dist/resources/extensions/gsd/root-write-leak-guard.js +7 -1
- package/dist/resources/extensions/gsd/safe-fs.js +23 -2
- package/dist/resources/extensions/gsd/safety/destructive-guard.js +8 -1
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +16 -1
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +5 -2
- package/dist/resources/extensions/gsd/skills/gsd-headless/SKILL.md +7 -9
- package/dist/resources/extensions/gsd/skills/gsd-headless/references/commands.md +2 -1
- package/dist/resources/extensions/gsd/state/derive/cache.js +28 -0
- package/dist/resources/extensions/gsd/state/derive/db-open.js +39 -0
- package/dist/resources/extensions/gsd/state/derive/from-db.js +452 -0
- package/dist/resources/extensions/gsd/state/derive/index.js +75 -0
- package/dist/resources/extensions/gsd/state/derive/interrupted-work.js +21 -0
- package/dist/resources/extensions/gsd/state-reconciliation/drift/stale-render.js +27 -33
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +48 -23
- package/dist/resources/extensions/gsd/state-reconciliation/registry.js +32 -28
- package/dist/resources/extensions/gsd/state.js +12 -611
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +4 -2
- package/dist/resources/extensions/gsd/tools/complete-slice.js +3 -34
- package/dist/resources/extensions/gsd/tools/complete-task.js +8 -41
- package/dist/resources/extensions/gsd/tools/plan-slice.js +59 -44
- package/dist/resources/extensions/gsd/tools/plan-task.js +103 -12
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +40 -0
- package/dist/resources/extensions/gsd/undo.js +43 -6
- package/dist/resources/extensions/gsd/unit-context-manifest.js +5 -4
- package/dist/resources/extensions/gsd/unit-registry.js +11 -3
- package/dist/resources/extensions/gsd/unit-runtime.js +21 -0
- package/dist/resources/extensions/gsd/verification-gate.js +7 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +126 -13
- package/dist/resources/extensions/gsd/workflow-projections.js +19 -14
- package/dist/resources/extensions/gsd/workspace.js +26 -8
- package/dist/resources/extensions/gsd/worktree-manager.js +140 -5
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +12 -12
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +9 -9
- 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_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 +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- 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 +2 -2
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +12 -12
- 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-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/{2659.b7b129ee6a769448.js → 2659.58e950899a9bb82f.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/2772.a7c1fcc69a4685ef.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.3c60753b8ffcbd2e.js → 3616.61a2af74bb8833c8.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{4283.8e446784528ed9dc.js → 4283.d0d9e0a955e441cb.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{5826.a46ecdd1cfe8dabc.js → 5826.5421d66c72b9f34e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{8785.481aa5869991b760.js → 8785.e29b3134cab1d153.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/8937.640dc9c2aaa1dfad.js +10 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-6644fc6ee8ca1247.js → page-72a856634ad14c10.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/webpack-9c401904f87ded16.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/pty.target.mk +14 -14
- package/dist/wizard.d.ts +8 -0
- package/dist/wizard.js +8 -1
- package/integrations/hermes/__init__.py +31 -0
- package/integrations/hermes/tests/test_directory_loader.py +37 -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/package.json +5 -5
- package/packages/gsd-agent-core/dist/agent-session.d.ts +1 -0
- package/packages/gsd-agent-core/dist/agent-session.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/agent-session.js +3 -0
- package/packages/gsd-agent-core/dist/agent-session.js.map +1 -1
- 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/extension-ui-snapshot.d.ts +41 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js +62 -0
- package/packages/gsd-agent-core/dist/extension-ui-snapshot.js.map +1 -0
- package/packages/gsd-agent-core/dist/index.d.ts +2 -0
- package/packages/gsd-agent-core/dist/index.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/index.js +2 -0
- package/packages/gsd-agent-core/dist/index.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-events.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts +1 -0
- package/packages/gsd-agent-core/dist/session/agent-session-host.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-host.js.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts +5 -0
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js +60 -3
- package/packages/gsd-agent-core/dist/session/agent-session-prompt.js.map +1 -1
- package/packages/gsd-agent-core/dist/transcript-store.d.ts +58 -0
- package/packages/gsd-agent-core/dist/transcript-store.d.ts.map +1 -0
- package/packages/gsd-agent-core/dist/transcript-store.js +132 -0
- package/packages/gsd-agent-core/dist/transcript-store.js.map +1 -0
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +25 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts +4 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js +7 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller-latency.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts +3 -24
- 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 +26 -841
- 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-handoff-filter.d.ts +58 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js +312 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-handoff-filter.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts +31 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js +130 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-pinned-zone.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts +15 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js +259 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-segment-walker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts +13 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js +118 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-tool-rollup.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts +9 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts +54 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js +20 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode-ui-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts +4 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js +9 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts +56 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js +44 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/streaming-render-state.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts +5 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.d.ts.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js +77 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/tui-transcript-tracker.js.map +1 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts +2 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js +24 -6
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-client.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js +18 -0
- package/packages/gsd-agent-modes/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/workflow-tools.js +1 -1
- package/packages/mcp-server/dist/workflow-tools.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.js +3 -2
- 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/models.generated.d.ts +46 -0
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +38 -0
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +2 -2
- 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/README.md +3 -2
- 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-context.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js +94 -0
- package/packages/pi-coding-agent/dist/core/session-manager-context.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts +8 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js +244 -0
- package/packages/pi-coding-agent/dist/core/session-manager-list.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts +12 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js +84 -0
- package/packages/pi-coding-agent/dist/core/session-manager-migration.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +135 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js +2 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts +6 -154
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +22 -459
- package/packages/pi-coding-agent/dist/core/session-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts +75 -75
- package/packages/pi-coding-agent/dist/theme/theme-schema.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js +1 -1
- package/packages/pi-coding-agent/dist/theme/theme-schema.js.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/theme/theme.js +11 -7
- package/packages/pi-coding-agent/dist/theme/theme.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/theme/theme-schema.d.ts +75 -75
- package/pkg/dist/theme/theme-schema.d.ts.map +1 -1
- package/pkg/dist/theme/theme-schema.js +1 -1
- package/pkg/dist/theme/theme-schema.js.map +1 -1
- package/pkg/dist/theme/theme.d.ts.map +1 -1
- package/pkg/dist/theme/theme.js +11 -7
- package/pkg/dist/theme/theme.js.map +1 -1
- 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/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +67 -49
- package/src/resources/extensions/claude-code-cli/tests/index.test.ts +14 -0
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +159 -0
- 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 +468 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/session.ts +14 -0
- package/src/resources/extensions/gsd/auto/verification-retry-policy.ts +3 -1
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +47 -1
- package/src/resources/extensions/gsd/auto-budget.ts +12 -1
- package/src/resources/extensions/gsd/auto-dispatch.ts +34 -12
- package/src/resources/extensions/gsd/auto-model-selection.ts +49 -18
- package/src/resources/extensions/gsd/auto-post-unit.ts +1 -1
- package/src/resources/extensions/gsd/auto-prompts.ts +80 -25
- package/src/resources/extensions/gsd/auto-recovery.ts +13 -518
- package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -5
- package/src/resources/extensions/gsd/auto-start.ts +4 -3
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +7 -2
- package/src/resources/extensions/gsd/auto-verification.ts +5 -1
- package/src/resources/extensions/gsd/auto-worktree.ts +50 -11
- package/src/resources/extensions/gsd/auto.ts +36 -8
- package/src/resources/extensions/gsd/bootstrap/core-session-tools.ts +44 -0
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -4
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +2 -0
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +171 -23
- package/src/resources/extensions/gsd/bootstrap/tests/write-gate-basepath.test.ts +49 -1
- package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +60 -37
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +39 -5
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +2 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +179 -18
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +1 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +39 -3
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +136 -2
- package/src/resources/extensions/gsd/commands-usage.ts +1 -1
- package/src/resources/extensions/gsd/commands-worktree.ts +13 -2
- package/src/resources/extensions/gsd/db/engine.ts +8 -1
- package/src/resources/extensions/gsd/db/queries.ts +40 -0
- package/src/resources/extensions/gsd/db-memory-fts-schema.ts +45 -0
- package/src/resources/extensions/gsd/db-workspace.ts +61 -3
- package/src/resources/extensions/gsd/delegation-policy.ts +1 -1
- package/src/resources/extensions/gsd/discussion-handoff.ts +10 -2
- package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -4
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +275 -5
- package/src/resources/extensions/gsd/doctor-providers.ts +39 -10
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +3 -0
- package/src/resources/extensions/gsd/doctor-types.ts +8 -1
- package/src/resources/extensions/gsd/doctor.ts +95 -3
- package/src/resources/extensions/gsd/exec-sandbox.ts +13 -4
- package/src/resources/extensions/gsd/flat-phase-migration.ts +142 -22
- package/src/resources/extensions/gsd/git-service.ts +70 -9
- package/src/resources/extensions/gsd/gitignore.ts +4 -1
- package/src/resources/extensions/gsd/guidance.ts +2 -0
- package/src/resources/extensions/gsd/guided-flow-queue.ts +20 -13
- package/src/resources/extensions/gsd/guided-flow.ts +45 -2
- package/src/resources/extensions/gsd/json-persistence.ts +20 -0
- package/src/resources/extensions/gsd/key-manager.ts +1 -0
- package/src/resources/extensions/gsd/knowledge-backfill.ts +16 -10
- package/src/resources/extensions/gsd/layout-policy.ts +2 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +27 -17
- package/src/resources/extensions/gsd/memory-backfill.ts +26 -20
- package/src/resources/extensions/gsd/metrics.ts +4 -4
- package/src/resources/extensions/gsd/migrate-external.ts +17 -4
- package/src/resources/extensions/gsd/migration-auto-check.ts +23 -0
- package/src/resources/extensions/gsd/milestone-ids.ts +31 -2
- package/src/resources/extensions/gsd/model-router.ts +4 -5
- package/src/resources/extensions/gsd/orphan-stash-audit.ts +108 -20
- 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-validation.ts +28 -2
- package/src/resources/extensions/gsd/preferences.ts +38 -4
- package/src/resources/extensions/gsd/prompts/code-review.md +6 -4
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -2
- package/src/resources/extensions/gsd/prompts/plan-slice.md +5 -3
- package/src/resources/extensions/gsd/redact-secrets.ts +40 -0
- package/src/resources/extensions/gsd/repository-registry.ts +7 -1
- package/src/resources/extensions/gsd/root-write-leak-guard.ts +13 -1
- package/src/resources/extensions/gsd/safe-fs.ts +22 -2
- package/src/resources/extensions/gsd/safety/destructive-guard.ts +9 -1
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +16 -1
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +8 -2
- package/src/resources/extensions/gsd/skills/gsd-headless/SKILL.md +7 -9
- package/src/resources/extensions/gsd/skills/gsd-headless/references/commands.md +2 -1
- package/src/resources/extensions/gsd/state/derive/cache.ts +46 -0
- package/src/resources/extensions/gsd/state/derive/db-open.ts +45 -0
- package/src/resources/extensions/gsd/state/derive/from-db.ts +561 -0
- package/src/resources/extensions/gsd/state/derive/index.ts +104 -0
- package/src/resources/extensions/gsd/state/derive/interrupted-work.ts +31 -0
- package/src/resources/extensions/gsd/state-reconciliation/drift/stale-render.ts +36 -30
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +50 -24
- package/src/resources/extensions/gsd/state-reconciliation/registry.ts +43 -28
- package/src/resources/extensions/gsd/state.ts +32 -732
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +98 -1
- package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +14 -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-pause-double-entry-guard.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +182 -4
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +30 -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-timeout-recovery-harness-abort.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +8 -0
- 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/commands-gsd-core.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +62 -1
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +28 -0
- package/src/resources/extensions/gsd/tests/complete-slice-reopen-handoff.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +58 -3
- package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/destructive-guard.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +143 -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 +296 -2
- package/src/resources/extensions/gsd/tests/doctor-workspace.test.ts +207 -0
- package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +74 -2
- 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/gitignore-bg-shell-runtime.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +11 -2
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/json-persistence-atomic.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/metrics-prune-cache-invalidation.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/metrics.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/orphan-stash-audit.test.ts +91 -7
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/plan-slice.test.ts +103 -4
- package/src/resources/extensions/gsd/tests/plan-task.test.ts +307 -1
- package/src/resources/extensions/gsd/tests/post-mutation-hook.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/preferences.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +142 -0
- package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +50 -14
- package/src/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -6
- 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 +378 -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 +20 -1
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +15 -3
- package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +105 -0
- package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/status-per-repo.test.ts +94 -0
- 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 +203 -0
- package/src/resources/extensions/gsd/tests/tool-param-optionality.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/undo.test.ts +74 -0
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +66 -18
- package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +90 -0
- package/src/resources/extensions/gsd/tests/validator-scope-parity.test.ts +53 -1
- package/src/resources/extensions/gsd/tests/verification-retry-policy.test.ts +69 -4
- package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +96 -15
- package/src/resources/extensions/gsd/tests/workflow-mcp-preflight.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +8 -4
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +214 -6
- package/src/resources/extensions/gsd/tests/workspace.test.ts +18 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +31 -1
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +32 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +3 -2
- package/src/resources/extensions/gsd/tools/complete-slice.ts +3 -30
- package/src/resources/extensions/gsd/tools/complete-task.ts +7 -39
- package/src/resources/extensions/gsd/tools/plan-slice.ts +60 -47
- package/src/resources/extensions/gsd/tools/plan-task.ts +135 -12
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +58 -0
- package/src/resources/extensions/gsd/undo.ts +47 -6
- package/src/resources/extensions/gsd/unit-context-manifest.ts +11 -5
- package/src/resources/extensions/gsd/unit-registry.ts +11 -3
- package/src/resources/extensions/gsd/unit-runtime.ts +42 -0
- package/src/resources/extensions/gsd/verification-gate.ts +8 -0
- package/src/resources/extensions/gsd/workflow-manifest.ts +141 -7
- package/src/resources/extensions/gsd/workflow-projections.ts +20 -14
- package/src/resources/extensions/gsd/workspace.ts +42 -8
- package/src/resources/extensions/gsd/worktree-manager.ts +183 -5
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.3976108148518f7d.js +0 -10
- package/dist/web/standalone/.next/static/chunks/webpack-7c1d97e39be2da11.js +0 -1
- /package/dist/web/standalone/.next/static/{SzEuqWX37DR9MEpEuQjP1 → kIEFsCryyGy6RzifULbJl}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{SzEuqWX37DR9MEpEuQjP1 → kIEFsCryyGy6RzifULbJl}/_ssgManifest.js +0 -0
|
@@ -114,7 +114,7 @@ import { detectWorktreeName } from "./worktree.js";
|
|
|
114
114
|
import { probeGitConflictState } from "./git-conflict-state.js";
|
|
115
115
|
import { runTurnGitAction } from "./git-service.js";
|
|
116
116
|
import { parseUnitId } from "./unit-id.js";
|
|
117
|
-
import { resolveExpectedArtifactPath } from "./auto-artifact-paths.js";
|
|
117
|
+
import { resolveExpectedArtifactPath, resolveExistingSliceResearchPath } from "./auto-artifact-paths.js";
|
|
118
118
|
import {
|
|
119
119
|
formatCloseoutProofBlock,
|
|
120
120
|
proveMilestoneCloseout,
|
|
@@ -838,7 +838,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
838
838
|
},
|
|
839
839
|
},
|
|
840
840
|
{
|
|
841
|
-
name: "uat-verdict-gate (non-PASS
|
|
841
|
+
name: "uat-verdict-gate (non-PASS observed; closeout enforces)",
|
|
842
842
|
match: async ({ mid, basePath, prefs }) => {
|
|
843
843
|
// Only applies when UAT dispatch is enabled
|
|
844
844
|
if (!prefs?.uat_dispatch) return null;
|
|
@@ -852,9 +852,9 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
852
852
|
const { verdict, uatType } = result;
|
|
853
853
|
|
|
854
854
|
if (!isAcceptableUatVerdict(verdict, uatType)) {
|
|
855
|
-
//
|
|
856
|
-
// so follow-up slices can remediate, while
|
|
857
|
-
// enforces manual UAT PASS sign-off before closure.
|
|
855
|
+
// Observe non-PASS verdicts without hard-stopping auto-mode. Allow
|
|
856
|
+
// progression so follow-up slices can remediate, while
|
|
857
|
+
// complete-milestone still enforces manual UAT PASS sign-off before closure.
|
|
858
858
|
continue;
|
|
859
859
|
}
|
|
860
860
|
}
|
|
@@ -1130,9 +1130,21 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1130
1130
|
// call site.
|
|
1131
1131
|
const sliceContextFile = resolveSliceFile(basePath, mid, state.activeSlice.id, "CONTEXT");
|
|
1132
1132
|
if (sliceContextFile && existsSync(sliceContextFile)) return null; // discussion already done, proceed
|
|
1133
|
+
|
|
1134
|
+
const closedSliceIds = getClosedSliceIds(mid);
|
|
1135
|
+
const justClosedSliceId = closedSliceIds[closedSliceIds.length - 1];
|
|
1136
|
+
let priorVerdictWarning = "";
|
|
1137
|
+
if (justClosedSliceId) {
|
|
1138
|
+
const prior = await readUatGateVerdict(basePath, mid, justClosedSliceId);
|
|
1139
|
+
if (prior && !isAcceptableUatVerdict(prior.verdict, prior.uatType)) {
|
|
1140
|
+
priorVerdictWarning =
|
|
1141
|
+
` Note: the slice just closed (${justClosedSliceId}) recorded a non-PASS UAT verdict (${prior.verdict.toUpperCase()}); review before continuing.`;
|
|
1142
|
+
}
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1133
1145
|
return {
|
|
1134
1146
|
action: "stop" as const,
|
|
1135
|
-
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
|
|
1147
|
+
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}`,
|
|
1136
1148
|
level: "warning" as const,
|
|
1137
1149
|
};
|
|
1138
1150
|
},
|
|
@@ -1164,7 +1176,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1164
1176
|
for (const slice of dbSlices) {
|
|
1165
1177
|
if (slice.done) continue;
|
|
1166
1178
|
// Skip if already has research
|
|
1167
|
-
if (
|
|
1179
|
+
if (resolveExistingSliceResearchPath(basePath, mid, slice.id)) continue;
|
|
1168
1180
|
// Skip if dependencies aren't done (check for SUMMARY files)
|
|
1169
1181
|
const depsComplete = slice.depends.every((depId) =>
|
|
1170
1182
|
!!resolveExistingExpectedArtifact("complete-slice", `${mid}/${depId}`, basePath),
|
|
@@ -1212,10 +1224,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1212
1224
|
if (!state.activeSlice) return missingSliceStop(mid, state.phase);
|
|
1213
1225
|
const sid = state.activeSlice!.id;
|
|
1214
1226
|
const sTitle = state.activeSlice!.title;
|
|
1215
|
-
|
|
1216
|
-
resolveExistingExpectedArtifact("research-slice", `${mid}/${sid}`, basePath) ??
|
|
1217
|
-
resolveSliceFile(basePath, mid, sid, "RESEARCH");
|
|
1218
|
-
if (researchFile) return null; // has research, fall through
|
|
1227
|
+
if (resolveExistingSliceResearchPath(basePath, mid, sid)) return null; // has research, fall through
|
|
1219
1228
|
return {
|
|
1220
1229
|
action: "dispatch",
|
|
1221
1230
|
unitType: "research-slice",
|
|
@@ -1526,6 +1535,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1526
1535
|
const sid = state.activeSlice!.id;
|
|
1527
1536
|
const sTitle = state.activeSlice!.title;
|
|
1528
1537
|
const tid = state.activeTask.id;
|
|
1538
|
+
const unitId = `${mid}/${sid}`;
|
|
1529
1539
|
const artifactBasePath = resolveArtifactBasePath(basePath, mid, session);
|
|
1530
1540
|
|
|
1531
1541
|
// Guard: if the slice plan exists but the individual task plan files are
|
|
@@ -1565,6 +1575,17 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1565
1575
|
!existsSync(projectionTaskPlanPath) &&
|
|
1566
1576
|
!tasksEmbeddedInSlicePlan
|
|
1567
1577
|
) {
|
|
1578
|
+
const MAX_MISSING_TASK_PLAN_RETRIES = 2;
|
|
1579
|
+
const retryCount = session?.missingTaskPlanRetryCount?.get(unitId) ?? 0;
|
|
1580
|
+
if (retryCount >= MAX_MISSING_TASK_PLAN_RETRIES) {
|
|
1581
|
+
session?.missingTaskPlanRetryCount?.delete(unitId);
|
|
1582
|
+
return {
|
|
1583
|
+
action: "stop",
|
|
1584
|
+
reason: `Missing task-plan recovery failed ${retryCount} times for ${unitId} - manual intervention required. Task plan ${tid} is still missing after regenerating the slice plan. Fix the task-plan files manually, then run /gsd auto to resume.`,
|
|
1585
|
+
level: "error",
|
|
1586
|
+
};
|
|
1587
|
+
}
|
|
1588
|
+
session?.missingTaskPlanRetryCount?.set(unitId, retryCount + 1);
|
|
1568
1589
|
if (isDebugEnabled()) {
|
|
1569
1590
|
const expectedTaskPlanPath = join(artifactBasePath, relTaskFile(artifactBasePath, mid, sid, tid, "PLAN"));
|
|
1570
1591
|
const originalProjectRoot = session?.originalBasePath || basePath;
|
|
@@ -1588,7 +1609,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1588
1609
|
return {
|
|
1589
1610
|
action: "dispatch",
|
|
1590
1611
|
unitType: "plan-slice",
|
|
1591
|
-
unitId
|
|
1612
|
+
unitId,
|
|
1592
1613
|
prompt: await buildPlanSlicePrompt(
|
|
1593
1614
|
mid,
|
|
1594
1615
|
midTitle,
|
|
@@ -1601,6 +1622,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1601
1622
|
};
|
|
1602
1623
|
}
|
|
1603
1624
|
|
|
1625
|
+
session?.missingTaskPlanRetryCount?.delete(unitId);
|
|
1604
1626
|
return null;
|
|
1605
1627
|
},
|
|
1606
1628
|
},
|
|
@@ -409,7 +409,13 @@ export function resolvePreferredModelConfig(
|
|
|
409
409
|
availableModelIds?: string[],
|
|
410
410
|
preferredModelId?: string,
|
|
411
411
|
): PreferredModelConfig | undefined {
|
|
412
|
-
const explicitConfig = resolveModelWithFallbacksForUnit(
|
|
412
|
+
const explicitConfig = resolveModelWithFallbacksForUnit(
|
|
413
|
+
unitType,
|
|
414
|
+
basePath,
|
|
415
|
+
availableModelIds,
|
|
416
|
+
preferredModelId,
|
|
417
|
+
true,
|
|
418
|
+
);
|
|
413
419
|
if (explicitConfig) {
|
|
414
420
|
return {
|
|
415
421
|
...explicitConfig,
|
|
@@ -422,26 +428,55 @@ export function resolvePreferredModelConfig(
|
|
|
422
428
|
if (!isAutoMode) return undefined;
|
|
423
429
|
|
|
424
430
|
const routingConfig = resolveDynamicRoutingConfig();
|
|
425
|
-
if (!routingConfig.enabled
|
|
431
|
+
if (!routingConfig.enabled) return undefined;
|
|
426
432
|
|
|
427
|
-
//
|
|
428
|
-
//
|
|
429
|
-
//
|
|
433
|
+
// Only an explicit flat-rate opt-out suppresses synthesized routing.
|
|
434
|
+
// `dynamic_routing.enabled: true` is user intent to run routing even when
|
|
435
|
+
// the start provider is a flat-rate subscription. Applied ahead of both the
|
|
436
|
+
// tier-pin and profile-derived synthesis paths so the opt-out is uniform.
|
|
430
437
|
if (
|
|
431
|
-
|
|
438
|
+
routingConfig.allow_flat_rate_providers === false &&
|
|
432
439
|
autoModeStartModel &&
|
|
433
440
|
isFlatRateProvider(autoModeStartModel.provider, autoModeStartModel.flatRateCtx)
|
|
434
441
|
) {
|
|
435
442
|
return undefined;
|
|
436
443
|
}
|
|
437
444
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
if (
|
|
445
|
+
// With explicit `tier_models` pins, synthesize a heavy-tier ceiling that
|
|
446
|
+
// dynamic routing downgrades from per unit.
|
|
447
|
+
if (routingConfig.tier_models) {
|
|
448
|
+
const ceilingModel = routingConfig.tier_models.heavy
|
|
449
|
+
?? (autoModeStartModel ? `${autoModeStartModel.provider}/${autoModeStartModel.id}` : undefined);
|
|
450
|
+
if (!ceilingModel) return undefined;
|
|
451
|
+
|
|
452
|
+
return {
|
|
453
|
+
primary: ceilingModel,
|
|
454
|
+
fallbacks: [],
|
|
455
|
+
source: "synthesized",
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// No `tier_models` pins: fall back to the token-profile's per-phase model so
|
|
460
|
+
// profile tier resolution survives. `skipProfileDefaults` is left false here
|
|
461
|
+
// (unlike the explicit-detection call above) precisely because we WANT the
|
|
462
|
+
// profile defaults this time — they are the routing ceiling, not a hard
|
|
463
|
+
// user selection. Labeling the result `synthesized` (not `explicit`) keeps
|
|
464
|
+
// dynamic routing and fallbacks enabled downstream. Without this branch,
|
|
465
|
+
// `resolvePreferredModelConfig` returns undefined for profile-only configs
|
|
466
|
+
// and auto dispatch bleeds the start model onto every unit, silently
|
|
467
|
+
// discarding the profile (#1115: routing/fallbacks disabled when a
|
|
468
|
+
// token_profile is set but no tier_models are pinned).
|
|
469
|
+
const profileConfig = resolveModelWithFallbacksForUnit(
|
|
470
|
+
unitType,
|
|
471
|
+
basePath,
|
|
472
|
+
availableModelIds,
|
|
473
|
+
preferredModelId,
|
|
474
|
+
false,
|
|
475
|
+
);
|
|
476
|
+
if (!profileConfig) return undefined;
|
|
441
477
|
|
|
442
478
|
return {
|
|
443
|
-
|
|
444
|
-
fallbacks: [],
|
|
479
|
+
...profileConfig,
|
|
445
480
|
source: "synthesized",
|
|
446
481
|
};
|
|
447
482
|
}
|
|
@@ -647,15 +682,11 @@ export async function selectAndApplyModel(
|
|
|
647
682
|
}
|
|
648
683
|
}
|
|
649
684
|
|
|
650
|
-
// Disable routing for flat-rate providers
|
|
651
|
-
//
|
|
652
|
-
// model provides no cost benefit — it only degrades quality.
|
|
685
|
+
// Disable routing for flat-rate providers only when the user explicitly
|
|
686
|
+
// opts out with dynamic_routing.allow_flat_rate_providers: false.
|
|
653
687
|
// Fail-closed: if primary model can't be resolved, fall back to
|
|
654
688
|
// provider-level signals rather than allowing unwanted downgrades.
|
|
655
|
-
|
|
656
|
-
// claude-code subscribers can still get intelligent per-task selection
|
|
657
|
-
// across their subscription (#4386).
|
|
658
|
-
if (routingConfig.enabled && !routingConfig.allow_flat_rate_providers) {
|
|
689
|
+
if (routingConfig.enabled && routingConfig.allow_flat_rate_providers === false) {
|
|
659
690
|
const primaryModel = resolveModelId(modelConfig.primary, routingEligibleModels, ctx.model?.provider);
|
|
660
691
|
if (primaryModel) {
|
|
661
692
|
const primaryFlatRateCtx = buildFlatRateContext(primaryModel.provider, ctx, prefs);
|
|
@@ -2212,7 +2212,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
2212
2212
|
saveCustomVerifyRetryCounts(s, { logFailure: err => debugLog("postUnit", { phase: "save-verify-retries-failed", error: err instanceof Error ? err.message : String(err) }) });
|
|
2213
2213
|
s.pendingVerificationRetry = {
|
|
2214
2214
|
unitId: s.currentUnit.id,
|
|
2215
|
-
failureContext:
|
|
2215
|
+
failureContext: failureDetails,
|
|
2216
2216
|
attempt,
|
|
2217
2217
|
};
|
|
2218
2218
|
debugLog("postUnit", { phase: "artifact-verify-retry", unitType: s.currentUnit.type, unitId: s.currentUnit.id, attempt });
|
|
@@ -17,17 +17,18 @@ import {
|
|
|
17
17
|
resolveMilestoneFile, resolveSliceFile, resolveSlicePath,
|
|
18
18
|
resolveTasksDir, resolveTaskFiles, resolveTaskFile,
|
|
19
19
|
relMilestoneFile, relSliceFile, relSlicePath, relMilestonePath,
|
|
20
|
-
resolveGsdRootFile, relGsdRootFile, resolveRuntimeFile,
|
|
20
|
+
relTaskFile, resolveGsdRootFile, relGsdRootFile, resolveRuntimeFile,
|
|
21
21
|
} from "./paths.js";
|
|
22
22
|
import { resolveInlineLevel, loadEffectiveGSDPreferences } from "./preferences.js";
|
|
23
|
+
import { createRepositoryRegistryFromPreferences } from "./repository-registry.js";
|
|
23
24
|
import { isContextModeEnabled } from "./preferences-types.js";
|
|
24
25
|
import { parseRoadmap } from "./parsers-legacy.js";
|
|
25
26
|
import type { GSDState, InlineLevel } from "./types.js";
|
|
26
27
|
import type { GSDPreferences } from "./preferences.js";
|
|
27
|
-
import { join, basename, relative } from "node:path";
|
|
28
|
+
import { join, basename, relative, sep } from "node:path";
|
|
28
29
|
import { existsSync } from "node:fs";
|
|
29
30
|
import { computeBudgets, resolveExecutorContextWindow, truncateAtSectionBoundary, type MinimalModelRegistry } from "./context-budget.js";
|
|
30
|
-
import { getPendingGates, getPendingGatesForTurn } from "./gsd-db.js";
|
|
31
|
+
import { getGateResults, getPendingGates, getPendingGatesForTurn } from "./gsd-db.js";
|
|
31
32
|
import {
|
|
32
33
|
GATE_REGISTRY,
|
|
33
34
|
assertGateCoverage,
|
|
@@ -48,7 +49,7 @@ import {
|
|
|
48
49
|
type ExcerptResolver,
|
|
49
50
|
} from "./unit-context-composer.js";
|
|
50
51
|
import { resolveManifest, type ArtifactKey } from "./unit-context-manifest.js";
|
|
51
|
-
import {
|
|
52
|
+
import { resolveSliceResearchLocation } from "./auto-artifact-paths.js";
|
|
52
53
|
import { compileUnitContextContract, type UnitPromptContextContract } from "./tool-contract.js";
|
|
53
54
|
import { readCompactionSnapshot } from "./compaction-snapshot.js";
|
|
54
55
|
import { logWarning } from "./workflow-logger.js";
|
|
@@ -343,31 +344,15 @@ function renderExecuteTaskOnDemandContext(
|
|
|
343
344
|
if (!artifacts.includes("slice-research")) {
|
|
344
345
|
return { text: "", skipReason: "not declared by contract" };
|
|
345
346
|
}
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
// In worktree layouts the RESEARCH file may live under the project-root .gsd
|
|
349
|
-
// and not have been copied into the worktree projection, so resolveSliceFile
|
|
350
|
-
// (which looks only at gsdProjectionRoot) would miss it while dispatch would
|
|
351
|
-
// still treat research as satisfied.
|
|
352
|
-
const projectedFile = resolveSliceFile(base, mid, sid, "RESEARCH");
|
|
353
|
-
const researchFile: string | null = projectedFile ?? (() => {
|
|
354
|
-
const p = resolveExpectedArtifactPath("research-slice", `${mid}/${sid}`, base);
|
|
355
|
-
return p && existsSync(p) ? p : null;
|
|
356
|
-
})();
|
|
357
|
-
if (!researchFile) {
|
|
347
|
+
const research = resolveSliceResearchLocation(base, mid, sid);
|
|
348
|
+
if (!research.absolutePath || !research.relativePath) {
|
|
358
349
|
return { text: "", skipReason: "missing" };
|
|
359
350
|
}
|
|
360
|
-
// Use the layout-aware relative path when the file is in the worktree
|
|
361
|
-
// projection (relSliceFile), or fall back to node:path relative() when the
|
|
362
|
-
// file was only found via the project-root resolution path.
|
|
363
|
-
const researchPath = projectedFile
|
|
364
|
-
? relSliceFile(base, mid, sid, "RESEARCH")
|
|
365
|
-
: relative(base, researchFile);
|
|
366
351
|
return {
|
|
367
352
|
text: [
|
|
368
353
|
"## On-demand Context",
|
|
369
354
|
"",
|
|
370
|
-
`Slice research is available at \`${
|
|
355
|
+
`Slice research is available at \`${research.relativePath}\`. Read it only if the inlined task plan, slice plan excerpt, and carry-forward context do not explain a required implementation detail.`,
|
|
371
356
|
].join("\n"),
|
|
372
357
|
skipReason: null,
|
|
373
358
|
};
|
|
@@ -409,6 +394,37 @@ function formatExecutorConstraints(
|
|
|
409
394
|
].join("\n");
|
|
410
395
|
}
|
|
411
396
|
|
|
397
|
+
/**
|
|
398
|
+
* Builds the Declared Repositories block for parent-workspace planners.
|
|
399
|
+
* Returns "" for single-repo projects so the common-case prompt is unchanged;
|
|
400
|
+
* only parent mode with declared child repos gets the registry list and the
|
|
401
|
+
* targetRepositories assignment instruction.
|
|
402
|
+
*/
|
|
403
|
+
export function buildRepoRegistryBlock(base: string): string {
|
|
404
|
+
let registry;
|
|
405
|
+
try {
|
|
406
|
+
registry = createRepositoryRegistryFromPreferences(base, loadEffectiveGSDPreferences(base)?.preferences);
|
|
407
|
+
} catch {
|
|
408
|
+
return "";
|
|
409
|
+
}
|
|
410
|
+
const hasChildRepo = registry.repositories.some((repo) => repo.id !== "project");
|
|
411
|
+
if (registry.mode !== "parent" || !hasChildRepo) return "";
|
|
412
|
+
|
|
413
|
+
const lines = registry.repositories.map((repo) => {
|
|
414
|
+
const relPath = relative(registry.projectRoot, repo.root).split(sep).join("/") || ".";
|
|
415
|
+
const role = repo.role ? ` — ${repo.role}` : "";
|
|
416
|
+
const root = repo.id === "project" ? " (root)" : ` (${relPath})`;
|
|
417
|
+
return `- \`${repo.id}\`${root}${role}`;
|
|
418
|
+
});
|
|
419
|
+
return [
|
|
420
|
+
"### Declared Repositories",
|
|
421
|
+
"",
|
|
422
|
+
...lines,
|
|
423
|
+
"",
|
|
424
|
+
"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).",
|
|
425
|
+
].join("\n");
|
|
426
|
+
}
|
|
427
|
+
|
|
412
428
|
/**
|
|
413
429
|
* Returns a markdown bullet list of known context file paths for the given
|
|
414
430
|
* milestone (and optionally slice). Falls back to a generic tool-agnostic
|
|
@@ -2520,6 +2536,7 @@ async function renderSlicePrompt(options: {
|
|
|
2520
2536
|
inlinedContext,
|
|
2521
2537
|
dependencySummaries: depContent,
|
|
2522
2538
|
sourceFilePaths: buildSourceFilePaths(base, mid, sid),
|
|
2539
|
+
repoRegistry: buildRepoRegistryBlock(base),
|
|
2523
2540
|
executorContextConstraints,
|
|
2524
2541
|
commitInstruction,
|
|
2525
2542
|
skillActivation: buildSkillActivationBlock({
|
|
@@ -2678,7 +2695,7 @@ export async function buildExecuteTaskPrompt(
|
|
|
2678
2695
|
|
|
2679
2696
|
const taskPlanPath = resolveTaskFile(base, mid, sid, tid, "PLAN");
|
|
2680
2697
|
const taskPlanContent = taskPlanPath ? await loadFile(taskPlanPath) : null;
|
|
2681
|
-
const taskPlanRelPath =
|
|
2698
|
+
const taskPlanRelPath = relTaskFile(base, mid, sid, tid, "PLAN");
|
|
2682
2699
|
const taskPlanContext = taskPlanContent
|
|
2683
2700
|
? [
|
|
2684
2701
|
"## Inlined Task Plan (authoritative local execution contract)",
|
|
@@ -3378,6 +3395,44 @@ export async function buildValidateMilestonePrompt(
|
|
|
3378
3395
|
trackPromptContext(contextTelemetry, "outstanding-items", "inline", outstandingBlock);
|
|
3379
3396
|
}
|
|
3380
3397
|
|
|
3398
|
+
const persistedGateFlags: string[] = [];
|
|
3399
|
+
try {
|
|
3400
|
+
const gateLabels = {
|
|
3401
|
+
Q3: "Threat Surface",
|
|
3402
|
+
Q4: "Requirement Impact",
|
|
3403
|
+
} as const;
|
|
3404
|
+
for (const sid of seenValSlices) {
|
|
3405
|
+
for (const gate of getGateResults(mid, sid, "slice")) {
|
|
3406
|
+
if (gate.gate_id !== "Q3" && gate.gate_id !== "Q4") continue;
|
|
3407
|
+
const findings = gate.findings.trim();
|
|
3408
|
+
const rationale = gate.rationale.trim();
|
|
3409
|
+
const verdict = gate.verdict ?? "";
|
|
3410
|
+
const hasNonPassVerdict = verdict !== "" && verdict !== "pass" && verdict !== "omitted";
|
|
3411
|
+
if (!findings && !hasNonPassVerdict) continue;
|
|
3412
|
+
|
|
3413
|
+
const displayVerdict = verdict || gate.status;
|
|
3414
|
+
const detail = findings || rationale || "_No findings text recorded; reconcile the persisted non-pass verdict._";
|
|
3415
|
+
persistedGateFlags.push(`- **${sid} / ${gate.gate_id} (${gateLabels[gate.gate_id]}) / ${displayVerdict}:** ${detail}`);
|
|
3416
|
+
if (findings && rationale) persistedGateFlags.push(` - Rationale: ${rationale}`);
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
} catch (err) {
|
|
3420
|
+
logWarning("prompt", `buildValidateMilestonePrompt persisted gate flags lookup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
3421
|
+
}
|
|
3422
|
+
if (persistedGateFlags.length > 0) {
|
|
3423
|
+
const persistedGateFlagsBlock = [
|
|
3424
|
+
"### Persisted Slice-Level Gate Flags (from quality_gates)",
|
|
3425
|
+
"",
|
|
3426
|
+
"These slice gates recorded findings or non-pass verdicts during execution. Reconcile each against the milestone-level evidence before returning MV03/MV04 verdicts.",
|
|
3427
|
+
"",
|
|
3428
|
+
...persistedGateFlags,
|
|
3429
|
+
].join("\n");
|
|
3430
|
+
inlined.push(persistedGateFlagsBlock);
|
|
3431
|
+
trackPromptContext(contextTelemetry, "persisted-slice-gate-flags", "inline", persistedGateFlagsBlock);
|
|
3432
|
+
} else {
|
|
3433
|
+
trackPromptContext(contextTelemetry, "persisted-slice-gate-flags", "skipped", null, "none");
|
|
3434
|
+
}
|
|
3435
|
+
|
|
3381
3436
|
// Inline existing VALIDATION file if this is a re-validation round
|
|
3382
3437
|
const validationPath = resolveMilestoneFile(base, mid, "VALIDATION");
|
|
3383
3438
|
const validationRel = relMilestoneFile(base, mid, "VALIDATION");
|
|
@@ -3917,7 +3972,7 @@ export async function buildReactiveExecutePrompt(
|
|
|
3917
3972
|
|
|
3918
3973
|
const taskPlanPath = resolveTaskFile(base, mid, sid, tid, "PLAN");
|
|
3919
3974
|
const taskPlanContent = taskPlanPath ? await loadFile(taskPlanPath) : null;
|
|
3920
|
-
const taskPlanRelPath =
|
|
3975
|
+
const taskPlanRelPath = relTaskFile(base, mid, sid, tid, "PLAN");
|
|
3921
3976
|
const taskPlanInline = taskPlanContent
|
|
3922
3977
|
? [
|
|
3923
3978
|
"## Inlined Task Plan (authoritative local execution contract)",
|