@opengsd/gsd-pi 1.2.0-dev.844675c9 → 1.2.0-dev.955e4da0
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/dist/cli-web-branch.d.ts +2 -0
- package/dist/cli-web-branch.js +9 -2
- package/dist/help-text.js +5 -0
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/ask-user-questions.js +78 -23
- package/dist/resources/extensions/bg-shell/utilities.js +2 -2
- package/dist/resources/extensions/claude-code-cli/models.js +9 -0
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +92 -230
- package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
- package/dist/resources/extensions/github-sync/templates.js +3 -3
- package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
- package/dist/resources/extensions/gsd/auto/loop.js +74 -56
- package/dist/resources/extensions/gsd/auto/orchestrator.js +142 -15
- package/dist/resources/extensions/gsd/auto/phases.js +34 -4
- package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
- package/dist/resources/extensions/gsd/auto/session.js +3 -0
- package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
- package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
- package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
- package/dist/resources/extensions/gsd/auto-post-unit.js +12 -9
- package/dist/resources/extensions/gsd/auto-prompts.js +81 -8
- package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
- package/dist/resources/extensions/gsd/auto-runtime-state.js +14 -0
- package/dist/resources/extensions/gsd/auto-start.js +20 -36
- package/dist/resources/extensions/gsd/auto-timers.js +16 -2
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +32 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +4 -29
- package/dist/resources/extensions/gsd/auto-verification.js +7 -7
- package/dist/resources/extensions/gsd/auto-worktree-repair.js +10 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +34 -289
- package/dist/resources/extensions/gsd/auto.js +15 -14
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +20 -43
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +131 -140
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +89 -8
- package/dist/resources/extensions/gsd/captures.js +5 -13
- package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
- package/dist/resources/extensions/gsd/closeout-recovery.js +3 -2
- package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +6 -62
- package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
- package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
- package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
- package/dist/resources/extensions/gsd/commands-ship.js +2 -2
- package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
- package/dist/resources/extensions/gsd/db/engine.js +755 -0
- package/dist/resources/extensions/gsd/db/queries.js +372 -0
- package/dist/resources/extensions/gsd/db/sql-constants.js +11 -0
- package/dist/resources/extensions/gsd/db/writers/cascades.js +194 -0
- package/dist/resources/extensions/gsd/db/writers/import-restore.js +182 -0
- package/dist/resources/extensions/gsd/db/writers/memory.js +149 -0
- package/dist/resources/extensions/gsd/db/writers/reconcile.js +458 -0
- package/dist/resources/extensions/gsd/db/writers/status.js +70 -0
- package/dist/resources/extensions/gsd/db-workspace.js +103 -0
- package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
- package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/dist/resources/extensions/gsd/doctor-environment.js +8 -10
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -3
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +9 -2
- package/dist/resources/extensions/gsd/doctor.js +16 -9
- package/dist/resources/extensions/gsd/error-classifier.js +1 -1
- package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
- package/dist/resources/extensions/gsd/git-service.js +1 -0
- package/dist/resources/extensions/gsd/gitignore.js +3 -0
- package/dist/resources/extensions/gsd/gsd-db.js +183 -2048
- package/dist/resources/extensions/gsd/guided-flow.js +68 -471
- package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
- package/dist/resources/extensions/gsd/markdown-renderer.js +2 -1
- package/dist/resources/extensions/gsd/mcp-filter.js +2 -1
- package/dist/resources/extensions/gsd/mcp-tool-name.js +26 -0
- package/dist/resources/extensions/gsd/md-importer.js +4 -3
- package/dist/resources/extensions/gsd/migrate/safety.js +19 -11
- package/dist/resources/extensions/gsd/migration-auto-check.js +27 -5
- package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
- package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
- package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
- package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
- package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
- package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
- package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +1 -0
- package/dist/resources/extensions/gsd/model-router.js +3 -0
- package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
- package/dist/resources/extensions/gsd/parallel-merge.js +14 -11
- package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +7 -5
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/paths.js +10 -24
- package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
- package/dist/resources/extensions/gsd/preferences.js +161 -29
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
- package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -0
- package/dist/resources/extensions/gsd/prompts/system.md +1 -1
- package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
- package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
- package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
- package/dist/resources/extensions/gsd/question-transport.js +86 -0
- package/dist/resources/extensions/gsd/recovery-classification.js +12 -1
- package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +37 -4
- package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +7 -2
- package/dist/resources/extensions/gsd/safety/file-change-validator.js +10 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
- package/dist/resources/extensions/gsd/state-transition-matrix.js +38 -0
- package/dist/resources/extensions/gsd/state.js +13 -5
- package/dist/resources/extensions/gsd/status-guards.js +56 -8
- package/dist/resources/extensions/gsd/templates/plan.md +7 -0
- package/dist/resources/extensions/gsd/templates/project.md +1 -0
- package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/dist/resources/extensions/gsd/templates/uat.md +5 -1
- package/dist/resources/extensions/gsd/tool-contract.js +52 -8
- package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
- package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +24 -43
- package/dist/resources/extensions/gsd/tools/exec-tool.js +5 -5
- package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
- package/dist/resources/extensions/gsd/tools/reopen-milestone.js +11 -29
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +14 -33
- package/dist/resources/extensions/gsd/tools/skip-slice.js +18 -36
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
- package/dist/resources/extensions/gsd/uat-policy.js +16 -10
- package/dist/resources/extensions/gsd/uat-run.js +9 -14
- package/dist/resources/extensions/gsd/undo.js +8 -7
- package/dist/resources/extensions/gsd/unit-context-composer.js +40 -20
- package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
- package/dist/resources/extensions/gsd/unit-tool-contracts.js +2 -1
- package/dist/resources/extensions/gsd/user-input-boundary.js +23 -0
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
- package/dist/resources/extensions/gsd/web-app-uat.js +80 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
- package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
- package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
- package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
- package/dist/resources/extensions/gsd/worktree-git-recovery.js +287 -0
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +9 -1
- package/dist/resources/extensions/gsd/worktree-manager.js +45 -28
- package/dist/resources/extensions/gsd/worktree-placement.js +59 -0
- package/dist/resources/extensions/gsd/worktree-reentry.js +12 -8
- package/dist/resources/extensions/gsd/worktree-root.js +17 -6
- package/dist/resources/extensions/gsd/worktree-safety.js +8 -5
- package/dist/resources/extensions/gsd/worktree-session-state.js +12 -10
- package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
- package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
- package/dist/resources/extensions/shared/interview-ui.js +2 -2
- package/dist/resources/shared/claude-runtime-floor.js +182 -0
- package/dist/resources/skills/gsd-browser/SKILL.md +1 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/update-cmd.js +20 -0
- 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 +8 -8
- 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.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/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- 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-paths-manifest.json +12 -12
- package/dist/web/standalone/.next/server/chunks/{5047.js → 5942.js} +2 -2
- package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/dist/web/standalone/.next/server/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 +1 -0
- package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
- package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
- package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
- package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
- package/dist/web-mode.d.ts +2 -0
- package/dist/web-mode.js +20 -8
- package/dist/worktree-status-banner.js +7 -3
- package/package.json +2 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
- package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- 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 +3 -0
- 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.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +106 -40
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/server.d.ts +10 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +8 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts +41 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +32 -22
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/image-models.generated.d.ts +2 -2
- package/packages/pi-ai/dist/image-models.generated.js +6 -6
- package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +295 -98
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +309 -154
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js +3 -1
- package/packages/pi-coding-agent/dist/core/capability-patches.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/dist/components/input.js +1 -1
- package/packages/pi-tui/dist/components/input.js.map +1 -1
- package/packages/pi-tui/dist/keys.d.ts.map +1 -1
- package/packages/pi-tui/dist/keys.js +39 -30
- package/packages/pi-tui/dist/keys.js.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
- package/packages/pi-tui/dist/stdin-buffer.js +22 -0
- package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +87 -24
- package/src/resources/extensions/bg-shell/utilities.ts +2 -2
- package/src/resources/extensions/claude-code-cli/models.ts +9 -0
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +114 -281
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +268 -0
- package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
- package/src/resources/extensions/github-sync/templates.ts +3 -3
- package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
- package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
- package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
- package/src/resources/extensions/gsd/auto/loop-deps.ts +3 -1
- package/src/resources/extensions/gsd/auto/loop.ts +83 -61
- package/src/resources/extensions/gsd/auto/orchestrator.ts +164 -17
- package/src/resources/extensions/gsd/auto/phases.ts +45 -4
- package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
- package/src/resources/extensions/gsd/auto/session.ts +4 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
- package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
- package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
- package/src/resources/extensions/gsd/auto-post-unit.ts +16 -8
- package/src/resources/extensions/gsd/auto-prompts.ts +107 -9
- package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
- package/src/resources/extensions/gsd/auto-runtime-state.ts +26 -0
- package/src/resources/extensions/gsd/auto-start.ts +25 -34
- package/src/resources/extensions/gsd/auto-timers.ts +16 -2
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +35 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +9 -30
- package/src/resources/extensions/gsd/auto-verification.ts +7 -8
- package/src/resources/extensions/gsd/auto-worktree-repair.ts +13 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +53 -306
- package/src/resources/extensions/gsd/auto.ts +27 -17
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +20 -43
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +147 -153
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +132 -6
- package/src/resources/extensions/gsd/captures.ts +5 -14
- package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
- package/src/resources/extensions/gsd/closeout-recovery.ts +2 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
- package/src/resources/extensions/gsd/commands/catalog.ts +6 -68
- package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
- package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
- package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
- package/src/resources/extensions/gsd/commands-ship.ts +2 -2
- package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
- package/src/resources/extensions/gsd/db/engine.ts +809 -0
- package/src/resources/extensions/gsd/db/queries.ts +453 -0
- package/src/resources/extensions/gsd/db/sql-constants.ts +12 -0
- package/src/resources/extensions/gsd/db/writers/cascades.ts +237 -0
- package/src/resources/extensions/gsd/db/writers/import-restore.ts +310 -0
- package/src/resources/extensions/gsd/db/writers/memory.ts +220 -0
- package/src/resources/extensions/gsd/db/writers/reconcile.ts +500 -0
- package/src/resources/extensions/gsd/db/writers/status.ts +88 -0
- package/src/resources/extensions/gsd/db-workspace.ts +170 -0
- package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
- package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
- package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
- package/src/resources/extensions/gsd/doctor-environment.ts +8 -11
- package/src/resources/extensions/gsd/doctor-git-checks.ts +3 -3
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +10 -3
- package/src/resources/extensions/gsd/doctor.ts +15 -5
- package/src/resources/extensions/gsd/error-classifier.ts +1 -1
- package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
- package/src/resources/extensions/gsd/git-service.ts +1 -0
- package/src/resources/extensions/gsd/gitignore.ts +3 -0
- package/src/resources/extensions/gsd/gsd-db.ts +185 -2373
- package/src/resources/extensions/gsd/guided-flow.ts +81 -561
- package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
- package/src/resources/extensions/gsd/markdown-renderer.ts +2 -1
- package/src/resources/extensions/gsd/mcp-filter.ts +2 -1
- package/src/resources/extensions/gsd/mcp-tool-name.ts +35 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -3
- package/src/resources/extensions/gsd/migrate/safety.ts +17 -9
- package/src/resources/extensions/gsd/migration-auto-check.ts +30 -5
- package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
- package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
- package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
- package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
- package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
- package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
- package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +1 -0
- package/src/resources/extensions/gsd/model-router.ts +3 -0
- package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
- package/src/resources/extensions/gsd/parallel-merge.ts +12 -9
- package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +6 -5
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/paths.ts +9 -22
- package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
- package/src/resources/extensions/gsd/preferences-types.ts +16 -0
- package/src/resources/extensions/gsd/preferences.ts +191 -28
- package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
- package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -0
- package/src/resources/extensions/gsd/prompts/system.md +1 -1
- package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
- package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
- package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
- package/src/resources/extensions/gsd/question-transport.ts +138 -0
- package/src/resources/extensions/gsd/recovery-classification.ts +14 -1
- package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +36 -4
- package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +7 -2
- package/src/resources/extensions/gsd/safety/file-change-validator.ts +14 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
- package/src/resources/extensions/gsd/state-transition-matrix.ts +42 -0
- package/src/resources/extensions/gsd/state.ts +15 -5
- package/src/resources/extensions/gsd/status-guards.ts +59 -8
- package/src/resources/extensions/gsd/templates/plan.md +7 -0
- package/src/resources/extensions/gsd/templates/project.md +1 -0
- package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
- package/src/resources/extensions/gsd/templates/uat.md +5 -1
- package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
- package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +444 -5
- package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +133 -4
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/auto-post-unit-evidence-crossref-4909.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-worktree-repair.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +38 -1
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
- package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +88 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
- package/src/resources/extensions/gsd/tests/evidence-xref-gsd-exec.test.ts +157 -0
- package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/file-change-validator.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
- package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +5 -4
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +143 -1
- package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
- package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
- package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
- package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
- package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
- package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
- package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
- package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/recovery-classification-illegal-transition.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +185 -1
- package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +25 -1
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
- package/src/resources/extensions/gsd/tests/session-switch-clears-pending-autostart.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +144 -7
- package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +36 -0
- package/src/resources/extensions/gsd/tests/status-guards.test.ts +38 -0
- package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
- package/src/resources/extensions/gsd/tests/uat-policy.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +86 -1
- package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +150 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +126 -9
- package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +41 -4
- package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +43 -1
- package/src/resources/extensions/gsd/tests/worktree-placement.test.ts +113 -0
- package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/worktree-teardown-safety.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +121 -0
- package/src/resources/extensions/gsd/tool-contract.ts +86 -8
- package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
- package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +23 -58
- package/src/resources/extensions/gsd/tools/exec-tool.ts +5 -5
- package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
- package/src/resources/extensions/gsd/tools/reopen-milestone.ts +11 -38
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +14 -42
- package/src/resources/extensions/gsd/tools/skip-slice.ts +18 -44
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
- package/src/resources/extensions/gsd/uat-policy.ts +19 -10
- package/src/resources/extensions/gsd/uat-run.ts +10 -14
- package/src/resources/extensions/gsd/undo.ts +9 -8
- package/src/resources/extensions/gsd/unit-context-composer.ts +85 -20
- package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
- package/src/resources/extensions/gsd/unit-tool-contracts.ts +2 -1
- package/src/resources/extensions/gsd/user-input-boundary.ts +18 -0
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
- package/src/resources/extensions/gsd/web-app-uat.ts +101 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
- package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
- package/src/resources/extensions/gsd/workflow-tool-surface.ts +73 -0
- package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
- package/src/resources/extensions/gsd/worktree-git-recovery.ts +308 -0
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +17 -17
- package/src/resources/extensions/gsd/worktree-manager.ts +47 -28
- package/src/resources/extensions/gsd/worktree-placement.ts +63 -0
- package/src/resources/extensions/gsd/worktree-reentry.ts +10 -7
- package/src/resources/extensions/gsd/worktree-root.ts +17 -6
- package/src/resources/extensions/gsd/worktree-safety.ts +8 -5
- package/src/resources/extensions/gsd/worktree-session-state.ts +12 -10
- package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
- package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
- package/src/resources/extensions/shared/interview-ui.ts +15 -2
- package/src/resources/shared/claude-runtime-floor.ts +248 -0
- package/src/resources/skills/gsd-browser/SKILL.md +1 -1
- package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
- package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
- package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
- package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
- /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → C24pqUd-aru-l0Dp0gLZP}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → C24pqUd-aru-l0Dp0gLZP}/_ssgManifest.js +0 -0
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
type PreVerificationOpts,
|
|
21
21
|
} from "../auto-post-unit.js";
|
|
22
22
|
import { lastAssistantText } from "../user-input-boundary.js";
|
|
23
|
+
import { resolveEffectiveUnitIsolationMode } from "../preferences.js";
|
|
23
24
|
import type { Phase } from "../types.js";
|
|
24
25
|
import {
|
|
25
26
|
MAX_RECOVERY_CHARS,
|
|
@@ -60,7 +61,8 @@ import { writeUnitRuntimeRecord } from "../unit-runtime.js";
|
|
|
60
61
|
import { withTimeout, FINALIZE_PRE_TIMEOUT_MS, FINALIZE_POST_TIMEOUT_MS } from "./finalize-timeout.js";
|
|
61
62
|
import { getEligibleSlices } from "../slice-parallel-eligibility.js";
|
|
62
63
|
import { isSliceParallelActive, startSliceParallel } from "../slice-parallel-orchestrator.js";
|
|
63
|
-
import { isDbAvailable, getMilestoneSlices, getSlice, getTask
|
|
64
|
+
import { isDbAvailable, getMilestoneSlices, getSlice, getTask } from "../gsd-db.js";
|
|
65
|
+
import { refreshWorkflowDatabaseFromDisk } from "../db-workspace.js";
|
|
64
66
|
import { isClosedStatus } from "../status-guards.js";
|
|
65
67
|
import { setRuntimeKv } from "../db/runtime-kv.js";
|
|
66
68
|
import { getLatestForUnit } from "../db/unit-dispatches.js";
|
|
@@ -85,7 +87,12 @@ import {
|
|
|
85
87
|
supportsStructuredQuestions,
|
|
86
88
|
} from "../workflow-mcp.js";
|
|
87
89
|
import { prepareWorkflowMcpForProject } from "../workflow-mcp-auto-prep.js";
|
|
88
|
-
import {
|
|
90
|
+
import {
|
|
91
|
+
applyThinkingLevelForModel,
|
|
92
|
+
floorThinkingLevelForUnit,
|
|
93
|
+
getRegisteredToolSnapshot,
|
|
94
|
+
getToolBaselineSnapshot,
|
|
95
|
+
} from "../auto-model-selection.js";
|
|
89
96
|
import type { DispatchAction } from "../auto-dispatch.js";
|
|
90
97
|
import { resolveManifest } from "../unit-context-manifest.js";
|
|
91
98
|
import { createWorktreeSafetyModule, type WorktreeSafetyResult } from "../worktree-safety.js";
|
|
@@ -225,7 +232,7 @@ function rememberRetryDispatch(
|
|
|
225
232
|
|
|
226
233
|
function getAlreadyClosedDispatchReason(unitType: string, unitId: string): string | null {
|
|
227
234
|
if (!isDbAvailable()) return null;
|
|
228
|
-
|
|
235
|
+
refreshWorkflowDatabaseFromDisk();
|
|
229
236
|
const { milestone, slice, task } = parseUnitId(unitId);
|
|
230
237
|
if (unitType === "execute-task" && milestone && slice && task) {
|
|
231
238
|
const row = getTask(milestone, slice, task);
|
|
@@ -356,7 +363,15 @@ async function validateSourceWriteWorktreeSafety(
|
|
|
356
363
|
if (!writesSource) return null;
|
|
357
364
|
|
|
358
365
|
const projectRoot = s.canonicalProjectRoot ?? resolveWorktreeProjectRoot(s.basePath, s.originalBasePath);
|
|
359
|
-
|
|
366
|
+
// A degraded session already fell back to the milestone branch in the
|
|
367
|
+
// project root — validating against the canonical worktree root there
|
|
368
|
+
// would fail every dispatch with a false invalid-root. The same applies
|
|
369
|
+
// to a stranded-recovery session that adopted the milestone branch.
|
|
370
|
+
const isolationMode = resolveEffectiveUnitIsolationMode(
|
|
371
|
+
deps.getIsolationMode(projectRoot),
|
|
372
|
+
s.isolationDegraded,
|
|
373
|
+
s.strandedRecoveryIsolationMode,
|
|
374
|
+
);
|
|
360
375
|
if (isolationMode !== "worktree") return null;
|
|
361
376
|
|
|
362
377
|
const safety = createWorktreeSafetyModule();
|
|
@@ -624,6 +639,16 @@ export async function _runMilestoneMergeWithStashRestore(
|
|
|
624
639
|
);
|
|
625
640
|
if (exitResult.ok) {
|
|
626
641
|
s.milestoneMergedInPhases = true;
|
|
642
|
+
try {
|
|
643
|
+
const projectRoot = s.originalBasePath || s.canonicalProjectRoot || s.basePath;
|
|
644
|
+
const { rebuildMarkdownProjectionsFromDb } = await import("../commands-maintenance.js");
|
|
645
|
+
await rebuildMarkdownProjectionsFromDb(projectRoot);
|
|
646
|
+
} catch (err) {
|
|
647
|
+
logWarning(
|
|
648
|
+
"engine",
|
|
649
|
+
`markdown projection rebuild after milestone merge failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
650
|
+
);
|
|
651
|
+
}
|
|
627
652
|
} else {
|
|
628
653
|
mergeError = exitResult.cause ?? new Error(`exit ${exitResult.reason}`);
|
|
629
654
|
}
|
|
@@ -1232,6 +1257,19 @@ export async function runPreDispatch(
|
|
|
1232
1257
|
} catch (e) {
|
|
1233
1258
|
logWarning("engine", "STATE.md rebuild failed after milestone transition", { error: String(e) });
|
|
1234
1259
|
}
|
|
1260
|
+
|
|
1261
|
+
// Re-project ROADMAP/PLAN markdown from the authoritative DB. Worktree DB
|
|
1262
|
+
// reconciliation during merge can leave main-branch markdown stale relative
|
|
1263
|
+
// to gsd.db (the 3M/3S/10T vs 3M/5S/16T drift class at /gsd startup).
|
|
1264
|
+
try {
|
|
1265
|
+
const { rebuildMarkdownProjectionsFromDb } = await import("../commands-maintenance.js");
|
|
1266
|
+
await rebuildMarkdownProjectionsFromDb(s.canonicalProjectRoot);
|
|
1267
|
+
if (s.basePath !== s.canonicalProjectRoot) {
|
|
1268
|
+
await rebuildMarkdownProjectionsFromDb(s.basePath);
|
|
1269
|
+
}
|
|
1270
|
+
} catch (e) {
|
|
1271
|
+
logWarning("engine", "markdown projection rebuild failed after milestone transition", { error: String(e) });
|
|
1272
|
+
}
|
|
1235
1273
|
}
|
|
1236
1274
|
|
|
1237
1275
|
if (mid) {
|
|
@@ -1458,6 +1496,7 @@ export async function runDispatch(
|
|
|
1458
1496
|
// Checking a stale-narrowed set causes false transport-preflight warnings
|
|
1459
1497
|
// that repeat on every /gsd auto resume (#477 follow-up).
|
|
1460
1498
|
const activeTools = getToolBaselineSnapshot(pi);
|
|
1499
|
+
const registeredTools = getRegisteredToolSnapshot(pi);
|
|
1461
1500
|
// Deep planning intentionally keeps human checkpoints in plain chat. In
|
|
1462
1501
|
// Claude Code/local MCP transports, structured question requests can be
|
|
1463
1502
|
// cancelled outside the normal chat flow, which made approval gates easy to
|
|
@@ -1482,6 +1521,7 @@ export async function runDispatch(
|
|
|
1482
1521
|
sessionProvider: ctx.model?.provider,
|
|
1483
1522
|
modelRegistry: ctx.modelRegistry as MinimalModelRegistry | undefined,
|
|
1484
1523
|
activeTools,
|
|
1524
|
+
registeredTools,
|
|
1485
1525
|
sessionBaseUrl: ctx.model?.baseUrl,
|
|
1486
1526
|
sessionAuthMode: authMode,
|
|
1487
1527
|
});
|
|
@@ -1508,6 +1548,7 @@ export async function runDispatch(
|
|
|
1508
1548
|
sessionProvider: ctx.model?.provider,
|
|
1509
1549
|
modelRegistry: ctx.modelRegistry as MinimalModelRegistry | undefined,
|
|
1510
1550
|
activeTools,
|
|
1551
|
+
registeredTools,
|
|
1511
1552
|
sessionBaseUrl: ctx.model?.baseUrl,
|
|
1512
1553
|
sessionAuthMode: authMode,
|
|
1513
1554
|
});
|
|
@@ -130,7 +130,8 @@ export async function runUnit(
|
|
|
130
130
|
unitId,
|
|
131
131
|
error: msg,
|
|
132
132
|
});
|
|
133
|
-
|
|
133
|
+
const isStructural = sessionErr instanceof TypeError || /is not a function/i.test(msg);
|
|
134
|
+
return { status: "cancelled", errorContext: { message: `Session creation failed: ${msg}`, category: "session-failed", isTransient: !isStructural } };
|
|
134
135
|
}
|
|
135
136
|
if (sessionTimeoutHandle) clearTimeout(sessionTimeoutHandle);
|
|
136
137
|
|
|
@@ -29,6 +29,7 @@ import { resolveWorktreeProjectRoot } from "../worktree-root.js";
|
|
|
29
29
|
import { normalizeRealPath } from "../paths.js";
|
|
30
30
|
import type { MilestoneScope } from "../workspace.js";
|
|
31
31
|
import type { RootDirtySnapshot } from "../root-write-leak-guard.js";
|
|
32
|
+
import type { MilestoneSettlementOutcome } from "../milestone-settlement.js";
|
|
32
33
|
|
|
33
34
|
// ─── Exported Types ──────────────────────────────────────────────────────────
|
|
34
35
|
|
|
@@ -230,6 +231,8 @@ export class AutoSession {
|
|
|
230
231
|
/** Set to true after phases.ts successfully calls mergeAndExit, so that
|
|
231
232
|
* stopAuto does not attempt the same merge a second time (#2645). */
|
|
232
233
|
milestoneMergedInPhases = false;
|
|
234
|
+
/** Last milestone settlement result observed by Auto Orchestration. */
|
|
235
|
+
milestoneSettlement: MilestoneSettlementOutcome | null = null;
|
|
233
236
|
|
|
234
237
|
// #4765 — slice-cadence collapse: main-branch SHAs at the moment each
|
|
235
238
|
// milestone's first slice merge began. Used by resquashMilestoneOnMain at
|
|
@@ -410,6 +413,7 @@ export class AutoSession {
|
|
|
410
413
|
this.strandedRecoveryIsolationMode = null;
|
|
411
414
|
this.rootWriteBaseline = null;
|
|
412
415
|
this.milestoneMergedInPhases = false;
|
|
416
|
+
this.milestoneSettlement = null;
|
|
413
417
|
this.milestoneStartShas = new Map();
|
|
414
418
|
this.checkpointSha = null;
|
|
415
419
|
|
|
@@ -44,6 +44,8 @@ import {
|
|
|
44
44
|
import { logWarning } from "./workflow-logger.js";
|
|
45
45
|
import { formattedShortcutPair } from "./shortcut-defs.js";
|
|
46
46
|
import { readUnitRuntimeRecord, type AutoUnitRuntimeRecord } from "./unit-runtime.js";
|
|
47
|
+
import { describeMilestoneReadinessPhase } from "./milestone-readiness.js";
|
|
48
|
+
import type { ToolSurfaceSnapshot } from "./tool-surface-snapshot.js";
|
|
47
49
|
|
|
48
50
|
const ACTIVE_SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] as const;
|
|
49
51
|
|
|
@@ -85,6 +87,8 @@ export interface AutoDashboardData {
|
|
|
85
87
|
rtkEnabled?: boolean;
|
|
86
88
|
/** Cross-process: another auto-mode session detected via auto.lock (PID, startedAt) */
|
|
87
89
|
remoteSession?: { pid: number; startedAt: string; unitType: string; unitId: string };
|
|
90
|
+
/** Last typed tool-surface snapshot for active auto-mode scoping/debugging. */
|
|
91
|
+
toolSurface?: ToolSurfaceSnapshot | null;
|
|
88
92
|
}
|
|
89
93
|
|
|
90
94
|
export interface CompletionDashboardSnapshot {
|
|
@@ -189,6 +193,18 @@ export function unitPhaseLabel(unitType: string): string {
|
|
|
189
193
|
}
|
|
190
194
|
}
|
|
191
195
|
|
|
196
|
+
export function formatToolSurfaceSnapshot(snapshot: ToolSurfaceSnapshot | null | undefined): string | null {
|
|
197
|
+
if (!snapshot) return null;
|
|
198
|
+
const counts = [
|
|
199
|
+
`model ${snapshot.modelFacingToolNames.length}`,
|
|
200
|
+
`registered ${snapshot.registeredToolNames.length}`,
|
|
201
|
+
`scoped ${snapshot.scopedToolNames.length}`,
|
|
202
|
+
`presented ${snapshot.presentedToolNames.length}`,
|
|
203
|
+
];
|
|
204
|
+
const label = snapshot.unitType ?? snapshot.phase ?? snapshot.source;
|
|
205
|
+
return `${label}: ${counts.join(" / ")}`;
|
|
206
|
+
}
|
|
207
|
+
|
|
192
208
|
function peekNext(unitType: string, state: GSDState): string {
|
|
193
209
|
// Show active hook info in progress display
|
|
194
210
|
const activeHookState = getActiveHook();
|
|
@@ -224,12 +240,10 @@ export function describeNextUnit(state: GSDState): { label: string; description:
|
|
|
224
240
|
const sTitle = state.activeSlice?.title;
|
|
225
241
|
const tid = state.activeTask?.id;
|
|
226
242
|
const tTitle = state.activeTask?.title;
|
|
243
|
+
const readinessDescription = describeMilestoneReadinessPhase(state.phase);
|
|
244
|
+
if (readinessDescription) return readinessDescription;
|
|
227
245
|
|
|
228
246
|
switch (state.phase) {
|
|
229
|
-
case "needs-discussion":
|
|
230
|
-
return { label: "Discuss milestone draft", description: "Milestone has a draft context — needs discussion before planning." };
|
|
231
|
-
case "pre-planning":
|
|
232
|
-
return { label: "Research & plan milestone", description: "Scout the landscape and create the roadmap." };
|
|
233
247
|
case "planning":
|
|
234
248
|
return { label: `Plan ${sid}: ${sTitle}`, description: "Research and decompose into tasks." };
|
|
235
249
|
case "executing":
|
|
@@ -112,9 +112,9 @@ import { runTurnGitAction } from "./git-service.js";
|
|
|
112
112
|
import { parseUnitId } from "./unit-id.js";
|
|
113
113
|
import { resolveExpectedArtifactPath } from "./auto-artifact-paths.js";
|
|
114
114
|
import {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
} from "./closeout-
|
|
115
|
+
formatCloseoutProofBlock,
|
|
116
|
+
proveMilestoneCloseout,
|
|
117
|
+
} from "./milestone-closeout-proof.js";
|
|
118
118
|
|
|
119
119
|
// ─── Types ────────────────────────────────────────────────────────────────
|
|
120
120
|
|
|
@@ -153,6 +153,8 @@ export interface DispatchContext {
|
|
|
153
153
|
sessionProvider?: string;
|
|
154
154
|
/** Active tools in the current session, used for transport preflight checks. */
|
|
155
155
|
activeTools?: string[];
|
|
156
|
+
/** Registered tools in the current session, used for run-uat tools re-scoped at dispatch. */
|
|
157
|
+
registeredTools?: string[];
|
|
156
158
|
/** Session model base URL, used for transport preflight checks. */
|
|
157
159
|
sessionBaseUrl?: string;
|
|
158
160
|
/** Session model auth mode, used for transport preflight checks. */
|
|
@@ -734,7 +736,17 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
734
736
|
},
|
|
735
737
|
{
|
|
736
738
|
name: "run-uat (post-completion)",
|
|
737
|
-
match: async ({
|
|
739
|
+
match: async ({
|
|
740
|
+
state,
|
|
741
|
+
mid,
|
|
742
|
+
basePath,
|
|
743
|
+
prefs,
|
|
744
|
+
sessionProvider,
|
|
745
|
+
sessionAuthMode,
|
|
746
|
+
activeTools,
|
|
747
|
+
registeredTools,
|
|
748
|
+
sessionBaseUrl,
|
|
749
|
+
}) => {
|
|
738
750
|
const needsRunUat = await checkNeedsRunUat(basePath, mid, state, prefs);
|
|
739
751
|
if (!needsRunUat) return null;
|
|
740
752
|
const { sliceId, uatType } = needsRunUat;
|
|
@@ -753,6 +765,7 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
753
765
|
const browserToolError = getUatBrowserToolSupportError({
|
|
754
766
|
uatType,
|
|
755
767
|
activeTools,
|
|
768
|
+
registeredTools,
|
|
756
769
|
milestoneId: mid,
|
|
757
770
|
sliceId,
|
|
758
771
|
});
|
|
@@ -1745,11 +1758,11 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
1745
1758
|
};
|
|
1746
1759
|
}
|
|
1747
1760
|
if (milestone) {
|
|
1748
|
-
const
|
|
1749
|
-
if (!
|
|
1761
|
+
const closeoutProof = proveMilestoneCloseout(mid, { refreshFromDisk: true });
|
|
1762
|
+
if (!closeoutProof.ok) {
|
|
1750
1763
|
return {
|
|
1751
1764
|
action: "stop",
|
|
1752
|
-
reason:
|
|
1765
|
+
reason: formatCloseoutProofBlock(closeoutProof),
|
|
1753
1766
|
level: "warning",
|
|
1754
1767
|
};
|
|
1755
1768
|
}
|
|
@@ -122,6 +122,14 @@ export function getToolBaselineSnapshot(pi: ExtensionAPI): string[] {
|
|
|
122
122
|
return [...new Set([...baseline, ...live])];
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
export function getRegisteredToolSnapshot(pi: ExtensionAPI): string[] {
|
|
126
|
+
if (typeof pi.getAllTools !== "function") return getToolBaselineSnapshot(pi);
|
|
127
|
+
const names = pi.getAllTools()
|
|
128
|
+
.map((tool) => tool.name)
|
|
129
|
+
.filter((name): name is string => typeof name === "string" && name.length > 0);
|
|
130
|
+
return [...new Set(names)];
|
|
131
|
+
}
|
|
132
|
+
|
|
125
133
|
/**
|
|
126
134
|
* Models eligible for the pre-dispatch policy gate. Prefer registry-available
|
|
127
135
|
* models; when that list is empty (common after worktree resume before registry
|
|
@@ -49,7 +49,8 @@ import { regenerateIfMissing } from "./workflow-projections.js";
|
|
|
49
49
|
import { WorktreeStateProjection } from "./worktree-state-projection.js";
|
|
50
50
|
import { createWorkspace, scopeMilestone } from "./workspace.js";
|
|
51
51
|
import { normalizeWorktreePathForCompare } from "./worktree-root.js";
|
|
52
|
-
import { isDbAvailable,
|
|
52
|
+
import { isDbAvailable, getTask, getSlice, getMilestone, getMilestoneSlices, updateTaskStatus, _getAdapter, getVerificationEvidence } from "./gsd-db.js";
|
|
53
|
+
import { getWorkflowDatabasePath, refreshWorkflowDatabaseFromDisk } from "./db-workspace.js";
|
|
53
54
|
import { renderPlanCheckboxes, renderRoadmapFromDb } from "./markdown-renderer.js";
|
|
54
55
|
import { parseRoadmap as parseLegacyRoadmap } from "./parsers-legacy.js";
|
|
55
56
|
import { consumeSignal } from "./session-status-io.js";
|
|
@@ -71,7 +72,7 @@ import {
|
|
|
71
72
|
} from "./milestone-closeout.js";
|
|
72
73
|
import type { AutoSession, SidecarItem } from "./auto/session.js";
|
|
73
74
|
import { getEvidence, clearEvidenceFromDisk, isExecutionToolName } from "./safety/evidence-collector.js";
|
|
74
|
-
import { validateFileChanges } from "./safety/file-change-validator.js";
|
|
75
|
+
import { validateFileChanges, effectiveFileChangeAllowlist } from "./safety/file-change-validator.js";
|
|
75
76
|
import { crossReferenceEvidence, type ClaimedEvidence } from "./safety/evidence-cross-ref.js";
|
|
76
77
|
import { validateContent } from "./safety/content-validator.js";
|
|
77
78
|
import { resolveSafetyHarnessConfig } from "./safety/safety-harness.js";
|
|
@@ -618,8 +619,10 @@ export function _hasExecutionToolCallsInSessionForTest(entries: readonly unknown
|
|
|
618
619
|
return true;
|
|
619
620
|
}
|
|
620
621
|
|
|
621
|
-
|
|
622
|
-
|
|
622
|
+
// Accept both session-manager entries ({type: "message", message}) and
|
|
623
|
+
// bare agent-end messages ({role, content}) — the auto loop passes the
|
|
624
|
+
// latter via opts.agentEndMessages.
|
|
625
|
+
const msg = e?.type === "message" ? e?.message : e;
|
|
623
626
|
if (!msg || msg.role !== "assistant" || !Array.isArray(msg.content)) continue;
|
|
624
627
|
for (const block of msg.content) {
|
|
625
628
|
if (block?.type !== "toolCall") continue;
|
|
@@ -1273,9 +1276,9 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1273
1276
|
await new Promise(r => setTimeout(r, 100));
|
|
1274
1277
|
}
|
|
1275
1278
|
|
|
1276
|
-
const dbPath =
|
|
1279
|
+
const dbPath = getWorkflowDatabasePath();
|
|
1277
1280
|
if (isDbAvailable() && dbPath && dbPath !== ":memory:") {
|
|
1278
|
-
const refreshed =
|
|
1281
|
+
const refreshed = refreshWorkflowDatabaseFromDisk();
|
|
1279
1282
|
if (!refreshed) {
|
|
1280
1283
|
logWarning("db", "post-unit database refresh failed; derived state may be stale");
|
|
1281
1284
|
}
|
|
@@ -1534,6 +1537,11 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1534
1537
|
if (safetyConfig.enabled) {
|
|
1535
1538
|
const { milestone: sMid, slice: sSid, task: sTid } = parseUnitId(s.currentUnit.id);
|
|
1536
1539
|
|
|
1540
|
+
const fileChangeAllowlist = effectiveFileChangeAllowlist(
|
|
1541
|
+
safetyConfig.file_change_allowlist,
|
|
1542
|
+
(prefs?.git as { manage_gitignore?: boolean } | undefined)?.manage_gitignore,
|
|
1543
|
+
);
|
|
1544
|
+
|
|
1537
1545
|
// File change validation (execute-task only, after unit execution)
|
|
1538
1546
|
if (safetyConfig.file_change_validation && s.currentUnit.type === "execute-task" && sMid && sSid && sTid) {
|
|
1539
1547
|
try {
|
|
@@ -1553,7 +1561,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1553
1561
|
files: taskRow.files,
|
|
1554
1562
|
})),
|
|
1555
1563
|
);
|
|
1556
|
-
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles,
|
|
1564
|
+
const audit = validateFileChanges(s.basePath, expectedOutput, plannedFiles, fileChangeAllowlist);
|
|
1557
1565
|
if (audit && audit.violations.length > 0) {
|
|
1558
1566
|
const warnings = audit.violations.filter(v => v.severity === "warning");
|
|
1559
1567
|
for (const v of warnings) {
|
|
@@ -1575,7 +1583,7 @@ export async function postUnitPreVerification(pctx: PostUnitContext, opts?: PreV
|
|
|
1575
1583
|
s.basePath,
|
|
1576
1584
|
expectedOutput,
|
|
1577
1585
|
plannedFiles,
|
|
1578
|
-
|
|
1586
|
+
fileChangeAllowlist,
|
|
1579
1587
|
);
|
|
1580
1588
|
if (audit && audit.violations.length > 0) {
|
|
1581
1589
|
const warnings = audit.violations.filter(v => v.severity === "warning");
|
|
@@ -36,8 +36,18 @@ import {
|
|
|
36
36
|
} from "./gate-registry.js";
|
|
37
37
|
import { formatDecisionsCompact, formatRequirementsCompact } from "./structured-data-formatter.js";
|
|
38
38
|
import { readPhaseAnchor, formatAnchorForPrompt } from "./phase-anchor.js";
|
|
39
|
-
import {
|
|
40
|
-
|
|
39
|
+
import {
|
|
40
|
+
composeContextModeInstructions,
|
|
41
|
+
composeContractedUnitContext,
|
|
42
|
+
composeInlinedContext,
|
|
43
|
+
composeUnitContext,
|
|
44
|
+
type ArtifactResolver,
|
|
45
|
+
type ComposedUnitContextBlock,
|
|
46
|
+
type ContextModeRenderMode,
|
|
47
|
+
type ExcerptResolver,
|
|
48
|
+
} from "./unit-context-composer.js";
|
|
49
|
+
import { resolveManifest, type ArtifactKey } from "./unit-context-manifest.js";
|
|
50
|
+
import { compileUnitContextContract, type UnitPromptContextContract } from "./tool-contract.js";
|
|
41
51
|
import { readCompactionSnapshot } from "./compaction-snapshot.js";
|
|
42
52
|
import { logWarning } from "./workflow-logger.js";
|
|
43
53
|
import { inlineGraphSubgraph } from "./graph-context.js";
|
|
@@ -48,6 +58,7 @@ import { buildSkillActivationBlock, buildSkillDiscoveryVars } from "./skill-acti
|
|
|
48
58
|
import { findMilestoneIds } from "./milestone-ids.js";
|
|
49
59
|
import { buildRunUatPresentationForType, RUN_UAT_TOOL_PRESENTATION_PLAN_ID } from "./tool-presentation-plan.js";
|
|
50
60
|
import { resolveEffectiveUatType, shouldDispatchUatForContent, type UatType } from "./uat-policy.js";
|
|
61
|
+
import { buildWebAppUatGuidanceBlock } from "./web-app-uat.js";
|
|
51
62
|
|
|
52
63
|
export { buildSkillActivationBlock, buildSkillDiscoveryVars };
|
|
53
64
|
|
|
@@ -287,6 +298,39 @@ function prependContextModeToBlock(
|
|
|
287
298
|
return `${contextMode}\n\n${block}`;
|
|
288
299
|
}
|
|
289
300
|
|
|
301
|
+
function requireUnitPromptContextContract(unitType: string): UnitPromptContextContract {
|
|
302
|
+
const result = compileUnitContextContract(unitType);
|
|
303
|
+
if (result.ok) return result.contract;
|
|
304
|
+
throw new Error(result.detail);
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
function requireComposedArtifactBlock(
|
|
308
|
+
blocks: readonly ComposedUnitContextBlock[],
|
|
309
|
+
unitType: string,
|
|
310
|
+
key: ArtifactKey,
|
|
311
|
+
): string {
|
|
312
|
+
const block = blocks.find((item) => item.key === key);
|
|
313
|
+
if (!block) {
|
|
314
|
+
throw new Error(`Unit Context Contract for ${unitType} did not compose required artifact ${key}`);
|
|
315
|
+
}
|
|
316
|
+
return block.body;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
function renderExecuteTaskOnDemandContext(
|
|
320
|
+
base: string,
|
|
321
|
+
mid: string,
|
|
322
|
+
sid: string,
|
|
323
|
+
artifacts: readonly ArtifactKey[],
|
|
324
|
+
): string {
|
|
325
|
+
if (!artifacts.includes("slice-research")) return "";
|
|
326
|
+
const researchPath = relSliceFile(base, mid, sid, "RESEARCH");
|
|
327
|
+
return [
|
|
328
|
+
"## On-demand Context",
|
|
329
|
+
"",
|
|
330
|
+
`Slice research is available at \`${researchPath}\`. Read it only if the inlined task plan, slice plan excerpt, and carry-forward context do not explain a required implementation detail.`,
|
|
331
|
+
].join("\n");
|
|
332
|
+
}
|
|
333
|
+
|
|
290
334
|
// ─── Executor Constraints ─────────────────────────────────────────────────────
|
|
291
335
|
|
|
292
336
|
/**
|
|
@@ -1976,6 +2020,12 @@ export async function buildPlanMilestonePrompt(mid: string, midTitle: string, ba
|
|
|
1976
2020
|
} else {
|
|
1977
2021
|
trackPromptContext(contextTelemetry, "knowledge", "skipped", null, "missing");
|
|
1978
2022
|
}
|
|
2023
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
2024
|
+
if (webAppUatGuidance) {
|
|
2025
|
+
pushTracked("web-app-uat", webAppUatGuidance);
|
|
2026
|
+
} else {
|
|
2027
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, "not a web app");
|
|
2028
|
+
}
|
|
1979
2029
|
pushTracked("templates", inlineTemplate("roadmap", "Roadmap"));
|
|
1980
2030
|
if (inlineLevel === "full") {
|
|
1981
2031
|
pushTracked("templates", inlineTemplate("decisions", "Decisions"));
|
|
@@ -2306,6 +2356,14 @@ async function renderSlicePrompt(options: {
|
|
|
2306
2356
|
trackPromptContext(contextTelemetry, "graph-subgraph", "skipped", null, "missing");
|
|
2307
2357
|
}
|
|
2308
2358
|
|
|
2359
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
2360
|
+
if (webAppUatGuidance) {
|
|
2361
|
+
inlined.push(webAppUatGuidance);
|
|
2362
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "inline", webAppUatGuidance);
|
|
2363
|
+
} else {
|
|
2364
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, "not a web app");
|
|
2365
|
+
}
|
|
2366
|
+
|
|
2309
2367
|
const planTemplateInline = level === "minimal" ? inlineCompactTemplate("plan", "Slice Plan") : inlineTemplate("plan", "Slice Plan");
|
|
2310
2368
|
inlined.push(planTemplateInline);
|
|
2311
2369
|
trackPromptContext(contextTelemetry, "templates", "inline", planTemplateInline);
|
|
@@ -2510,7 +2568,7 @@ export async function buildExecuteTaskPrompt(
|
|
|
2510
2568
|
const taskPlanPath = resolveTaskFile(base, mid, sid, tid, "PLAN");
|
|
2511
2569
|
const taskPlanContent = taskPlanPath ? await loadFile(taskPlanPath) : null;
|
|
2512
2570
|
const taskPlanRelPath = relSlicePath(base, mid, sid) + `/tasks/${tid}-PLAN.md`;
|
|
2513
|
-
const
|
|
2571
|
+
const taskPlanContext = taskPlanContent
|
|
2514
2572
|
? [
|
|
2515
2573
|
"## Inlined Task Plan (authoritative local execution contract)",
|
|
2516
2574
|
`Source: \`${taskPlanRelPath}\``,
|
|
@@ -2521,12 +2579,12 @@ export async function buildExecuteTaskPrompt(
|
|
|
2521
2579
|
"## Inlined Task Plan (authoritative local execution contract)",
|
|
2522
2580
|
`Task plan not found at dispatch time. Read \`${taskPlanRelPath}\` before executing.`,
|
|
2523
2581
|
].join("\n");
|
|
2524
|
-
trackPromptContext(contextTelemetry, "task-plan", taskPlanContent ? "inline" : "on-demand",
|
|
2582
|
+
trackPromptContext(contextTelemetry, "task-plan", taskPlanContent ? "inline" : "on-demand", taskPlanContext, taskPlanContent ? undefined : "missing at dispatch");
|
|
2525
2583
|
|
|
2526
2584
|
const slicePlanPath = resolveSliceFile(base, mid, sid, "PLAN");
|
|
2527
2585
|
const slicePlanContent = slicePlanPath ? await loadFile(slicePlanPath) : null;
|
|
2528
|
-
const
|
|
2529
|
-
trackPromptContext(contextTelemetry, "slice-plan",
|
|
2586
|
+
const slicePlanContext = extractSliceExecutionExcerpt(slicePlanContent, relSliceFile(base, mid, sid, "PLAN"));
|
|
2587
|
+
trackPromptContext(contextTelemetry, "slice-plan", slicePlanContext ? "excerpt" : "skipped", slicePlanContext, slicePlanContext ? undefined : "missing");
|
|
2530
2588
|
|
|
2531
2589
|
// Check for continue file (new naming or legacy)
|
|
2532
2590
|
const continueFile = resolveSliceFile(base, mid, sid, "CONTINUE");
|
|
@@ -2657,6 +2715,37 @@ export async function buildExecuteTaskPrompt(
|
|
|
2657
2715
|
}
|
|
2658
2716
|
trackPromptContext(contextTelemetry, "templates", "inline", inlinedTemplates, inlineLevel);
|
|
2659
2717
|
|
|
2718
|
+
const contextContract = requireUnitPromptContextContract("execute-task");
|
|
2719
|
+
const contractedContext = await composeContractedUnitContext(contextContract, {
|
|
2720
|
+
base: { unitType: "execute-task", basePath: base, milestoneId: mid, sliceId: sid, taskId: tid },
|
|
2721
|
+
resolveArtifact: async (key) => {
|
|
2722
|
+
switch (key) {
|
|
2723
|
+
case "task-plan":
|
|
2724
|
+
return taskPlanContext;
|
|
2725
|
+
case "slice-plan":
|
|
2726
|
+
return slicePlanContext;
|
|
2727
|
+
case "prior-task-summaries":
|
|
2728
|
+
return finalCarryForward;
|
|
2729
|
+
case "templates":
|
|
2730
|
+
return inlinedTemplates;
|
|
2731
|
+
default:
|
|
2732
|
+
return null;
|
|
2733
|
+
}
|
|
2734
|
+
},
|
|
2735
|
+
});
|
|
2736
|
+
const taskPlanInline = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "task-plan");
|
|
2737
|
+
const slicePlanExcerpt = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "slice-plan");
|
|
2738
|
+
const contractedCarryForward = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "prior-task-summaries");
|
|
2739
|
+
const contractedTemplates = requireComposedArtifactBlock(contractedContext.blocks, "execute-task", "templates");
|
|
2740
|
+
const onDemandContext = renderExecuteTaskOnDemandContext(base, mid, sid, contractedContext.onDemand);
|
|
2741
|
+
trackPromptContext(
|
|
2742
|
+
contextTelemetry,
|
|
2743
|
+
"slice-research",
|
|
2744
|
+
onDemandContext ? "on-demand" : "skipped",
|
|
2745
|
+
onDemandContext,
|
|
2746
|
+
onDemandContext ? undefined : "not declared by contract",
|
|
2747
|
+
);
|
|
2748
|
+
|
|
2660
2749
|
const prompt = loadPrompt("execute-task", {
|
|
2661
2750
|
overridesSection,
|
|
2662
2751
|
runtimeContext,
|
|
@@ -2668,11 +2757,12 @@ export async function buildExecuteTaskPrompt(
|
|
|
2668
2757
|
taskPlanPath: taskPlanRelPath,
|
|
2669
2758
|
taskPlanInline,
|
|
2670
2759
|
slicePlanExcerpt,
|
|
2671
|
-
carryForwardSection:
|
|
2760
|
+
carryForwardSection: contractedCarryForward,
|
|
2672
2761
|
resumeSection,
|
|
2673
2762
|
priorTaskLines: priorLines,
|
|
2763
|
+
onDemandContext,
|
|
2674
2764
|
taskSummaryPath,
|
|
2675
|
-
inlinedTemplates,
|
|
2765
|
+
inlinedTemplates: contractedTemplates,
|
|
2676
2766
|
verificationBudget,
|
|
2677
2767
|
gatesToClose,
|
|
2678
2768
|
skillActivation: buildSkillActivationBlock({
|
|
@@ -2683,7 +2773,7 @@ export async function buildExecuteTaskPrompt(
|
|
|
2683
2773
|
taskId: tid,
|
|
2684
2774
|
taskTitle: tTitle,
|
|
2685
2775
|
taskPlanContent,
|
|
2686
|
-
extraContext: [taskPlanInline, slicePlanExcerpt,
|
|
2776
|
+
extraContext: [taskPlanInline, slicePlanExcerpt, contractedCarryForward, resumeSection],
|
|
2687
2777
|
unitType: "execute-task",
|
|
2688
2778
|
}),
|
|
2689
2779
|
});
|
|
@@ -2803,6 +2893,14 @@ export async function buildCompleteSlicePrompt(
|
|
|
2803
2893
|
}
|
|
2804
2894
|
}
|
|
2805
2895
|
|
|
2896
|
+
const webAppUatGuidance = buildWebAppUatGuidanceBlock(base);
|
|
2897
|
+
if (webAppUatGuidance && body) {
|
|
2898
|
+
body = `${webAppUatGuidance}\n\n---\n\n${body}`;
|
|
2899
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "inline", webAppUatGuidance);
|
|
2900
|
+
} else {
|
|
2901
|
+
trackPromptContext(contextTelemetry, "web-app-uat", "skipped", null, webAppUatGuidance ? "missing composed body" : "not a web app");
|
|
2902
|
+
}
|
|
2903
|
+
|
|
2806
2904
|
// Overrides section prepends to the top of the inlined context —
|
|
2807
2905
|
// standard pattern for slice-level builders (until composer v2 lands
|
|
2808
2906
|
// the prepend contract).
|