gsd-pi 2.77.0-dev.eaa4973bc → 2.78.0-dev.aeeb2ca00
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 +53 -17
- package/dist/claude-cli-check.js +46 -10
- package/dist/headless.js +49 -4
- package/dist/resource-loader.d.ts +40 -0
- package/dist/resource-loader.js +32 -13
- package/dist/resources/extensions/browser-tools/capture.js +9 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
- package/dist/resources/extensions/browser-tools/tools/forms.js +5 -1
- package/dist/resources/extensions/browser-tools/tools/intent.js +5 -1
- package/dist/resources/extensions/claude-code-cli/readiness.js +72 -16
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +481 -17
- package/dist/resources/extensions/github-sync/templates.js +103 -0
- package/dist/resources/extensions/google-search/index.js +3 -2
- package/dist/resources/extensions/gsd/auto/loop.js +124 -2
- package/dist/resources/extensions/gsd/auto/phases.js +57 -39
- package/dist/resources/extensions/gsd/auto/session.js +6 -2
- package/dist/resources/extensions/gsd/auto-dispatch.js +142 -29
- package/dist/resources/extensions/gsd/auto-model-selection.js +124 -4
- package/dist/resources/extensions/gsd/auto-post-unit.js +150 -64
- package/dist/resources/extensions/gsd/auto-prompts.js +372 -104
- package/dist/resources/extensions/gsd/auto-recovery.js +197 -48
- package/dist/resources/extensions/gsd/auto-start.js +107 -29
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +47 -7
- package/dist/resources/extensions/gsd/auto-worktree.js +122 -26
- package/dist/resources/extensions/gsd/auto.js +76 -21
- package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +19 -1
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +209 -0
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +3 -6
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -3
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +127 -9
- package/dist/resources/extensions/gsd/component-loader.js +447 -0
- package/dist/resources/extensions/gsd/component-types.js +69 -0
- package/dist/resources/extensions/gsd/context-store.js +23 -7
- package/dist/resources/extensions/gsd/detection.js +49 -1
- package/dist/resources/extensions/gsd/dispatch-guard.js +2 -17
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/dist/resources/extensions/gsd/forensics.js +106 -0
- package/dist/resources/extensions/gsd/gate-registry.js +2 -2
- package/dist/resources/extensions/gsd/git-constants.js +28 -1
- package/dist/resources/extensions/gsd/git-self-heal.js +27 -0
- package/dist/resources/extensions/gsd/git-service.js +126 -2
- package/dist/resources/extensions/gsd/gsd-db.js +6 -3
- package/dist/resources/extensions/gsd/guided-flow.js +39 -13
- package/dist/resources/extensions/gsd/memory-extractor.js +7 -1
- package/dist/resources/extensions/gsd/milestone-scope-classifier.js +299 -0
- package/dist/resources/extensions/gsd/milestone-summary-classifier.js +37 -0
- package/dist/resources/extensions/gsd/model-cost-table.js +3 -0
- package/dist/resources/extensions/gsd/model-router.js +6 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +34 -4
- package/dist/resources/extensions/gsd/preferences-validation.js +23 -0
- package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +4 -0
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
- package/dist/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
- package/dist/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +15 -2
- package/dist/resources/extensions/gsd/safety/git-checkpoint.js +11 -0
- package/dist/resources/extensions/gsd/service-tier.js +5 -2
- package/dist/resources/extensions/gsd/session-lock.js +19 -10
- package/dist/resources/extensions/gsd/skill-manifest.js +168 -0
- package/dist/resources/extensions/gsd/slice-cadence.js +238 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +278 -8
- package/dist/resources/extensions/gsd/state-transition-matrix.js +118 -0
- package/dist/resources/extensions/gsd/state.js +69 -58
- package/dist/resources/extensions/gsd/sync-lock.js +98 -42
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +7 -2
- package/dist/resources/extensions/gsd/unit-context-composer.js +147 -0
- package/dist/resources/extensions/gsd/unit-context-manifest.js +370 -0
- package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +33 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +10 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +53 -5
- package/dist/resources/extensions/gsd/uok/gitops.js +2 -1
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +37 -10
- package/dist/resources/extensions/gsd/uok/parity-report.js +58 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +10 -4
- package/dist/resources/extensions/gsd/uok/writer.js +82 -0
- package/dist/resources/extensions/gsd/workflow-mcp.js +6 -0
- package/dist/resources/extensions/gsd/worktree-manager.js +85 -8
- package/dist/resources/extensions/gsd/worktree-resolver.js +86 -7
- package/dist/resources/extensions/gsd/worktree-telemetry.js +198 -0
- package/dist/resources/extensions/mcp-client/index.js +3 -1
- package/dist/resources/extensions/ollama/index.js +5 -1
- package/dist/resources/extensions/remote-questions/manager.js +11 -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 +11 -11
- package/dist/web/standalone/.next/build-manifest.json +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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/git/route.js +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 +11 -11
- package/dist/web/standalone/.next/server/chunks/1926.js +1 -1
- package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- 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/package.json +2 -3
- package/packages/daemon/package.json +2 -2
- package/packages/daemon/src/logger.ts +4 -3
- package/packages/mcp-server/dist/server.d.ts +24 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +88 -87
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +15 -6
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/mcp-server.test.ts +25 -3
- package/packages/mcp-server/src/readers/graph.test.ts +87 -15
- package/packages/mcp-server/src/secure-env-collect.test.ts +232 -237
- package/packages/mcp-server/src/server.ts +131 -105
- package/packages/mcp-server/src/workflow-tools.test.ts +85 -0
- package/packages/mcp-server/src/workflow-tools.ts +19 -6
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +2 -2
- package/packages/native/src/__tests__/_test-coverage-guard.test.mjs +98 -0
- package/packages/native/src/__tests__/module-compat.test.mjs +59 -27
- package/packages/native/src/__tests__/ps.test.mjs +14 -8
- package/packages/native/src/__tests__/stream-process.test.mjs +23 -2
- package/packages/native/src/__tests__/truncate.test.mjs +17 -2
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +5 -15
- package/packages/pi-agent-core/src/agent.test.ts +96 -102
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.js +9 -2
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/index.d.ts +34 -0
- package/packages/pi-ai/dist/models/generated/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai-codex.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai.d.ts +17 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -1
- package/packages/pi-ai/dist/models/generated/openai.js +17 -0
- package/packages/pi-ai/dist/models/generated/openai.js.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +43 -70
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/models.test.js +36 -11
- package/packages/pi-ai/dist/models.test.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +44 -0
- package/packages/pi-ai/src/models/capability-patches.ts +10 -2
- package/packages/pi-ai/src/models/generated/openai-codex.ts +17 -0
- package/packages/pi-ai/src/models/generated/openai.ts +17 -0
- package/packages/pi-ai/src/models.generated.test.ts +46 -73
- package/packages/pi-ai/src/models.test.ts +48 -11
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js +96 -32
- package/packages/pi-coding-agent/dist/core/agent-session-abort-order.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js +75 -12
- package/packages/pi-coding-agent/dist/core/agent-session-model-switch.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js +99 -31
- package/packages/pi-coding-agent/dist/core/agent-session-tool-refresh.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +5 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/extensions/loader.js +61 -0
- package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js +30 -4
- package/packages/pi-coding-agent/dist/core/lsp/lsp-integration.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +17 -0
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js +76 -18
- package/packages/pi-coding-agent/dist/core/resource-loader-cache-reset.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.js +2 -6
- package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js +5 -1
- package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts +18 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.js +18 -0
- package/packages/pi-coding-agent/dist/core/retryable-error-regex.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +20 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -2
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +36 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +20 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +30 -12
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +18 -3
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +125 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +105 -13
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js +130 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-skill-filter.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session-abort-order.test.ts +113 -37
- package/packages/pi-coding-agent/src/core/agent-session-model-switch.test.ts +89 -17
- package/packages/pi-coding-agent/src/core/agent-session-tool-refresh.test.ts +112 -43
- package/packages/pi-coding-agent/src/core/extensions/loader.ts +58 -0
- package/packages/pi-coding-agent/src/core/lsp/lsp-integration.test.ts +35 -4
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +20 -0
- package/packages/pi-coding-agent/src/core/resource-loader-cache-reset.test.ts +93 -28
- package/packages/pi-coding-agent/src/core/retry-handler.test.ts +5 -1
- package/packages/pi-coding-agent/src/core/retry-handler.ts +2 -8
- package/packages/pi-coding-agent/src/core/retryable-error-regex.ts +18 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +35 -1
- package/packages/pi-coding-agent/src/index.ts +1 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +49 -3
- package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +26 -20
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +48 -9
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +146 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +20 -3
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +2 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +119 -13
- package/packages/pi-coding-agent/src/tests/system-prompt-skill-filter.test.ts +157 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +18 -8
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js +128 -17
- package/packages/pi-tui/dist/__tests__/overlay-layout.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js +37 -11
- package/packages/pi-tui/dist/__tests__/stdin-buffer.test.js.map +1 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js +18 -30
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/input.test.js +10 -3
- package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/loader.test.js +53 -9
- package/packages/pi-tui/dist/components/__tests__/loader.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +6 -2
- package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -1
- package/packages/pi-tui/dist/components/editor.d.ts +14 -0
- package/packages/pi-tui/dist/components/editor.d.ts.map +1 -1
- package/packages/pi-tui/dist/components/editor.js +19 -0
- package/packages/pi-tui/dist/components/editor.js.map +1 -1
- package/packages/pi-tui/dist/components/image.test.js +6 -5
- package/packages/pi-tui/dist/components/image.test.js.map +1 -1
- package/packages/pi-tui/dist/editor-component.d.ts +2 -0
- package/packages/pi-tui/dist/editor-component.d.ts.map +1 -1
- package/packages/pi-tui/dist/editor-component.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +24 -8
- package/packages/pi-tui/src/__tests__/overlay-layout.test.ts +140 -17
- package/packages/pi-tui/src/__tests__/stdin-buffer.test.ts +42 -11
- package/packages/pi-tui/src/__tests__/tui.test.ts +18 -37
- package/packages/pi-tui/src/components/__tests__/input.test.ts +19 -3
- package/packages/pi-tui/src/components/__tests__/loader.test.ts +112 -35
- package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +9 -2
- package/packages/pi-tui/src/components/editor.ts +22 -0
- package/packages/pi-tui/src/components/image.test.ts +10 -5
- package/packages/pi-tui/src/editor-component.ts +3 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/dist/rpc-client.test.js +101 -51
- package/packages/rpc-client/dist/rpc-client.test.js.map +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/src/rpc-client.test.ts +109 -52
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
- package/pkg/package.json +1 -1
- package/scripts/install.js +15 -1
- package/src/resources/extensions/browser-tools/capture.ts +12 -0
- package/src/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +8 -59
- package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +36 -24
- package/src/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +69 -71
- package/src/resources/extensions/browser-tools/tools/forms.ts +5 -1
- package/src/resources/extensions/browser-tools/tools/intent.ts +5 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +75 -16
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +518 -19
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +919 -75
- package/src/resources/extensions/github-sync/templates.ts +151 -0
- package/src/resources/extensions/github-sync/tests/cli.test.ts +76 -7
- package/src/resources/extensions/github-sync/tests/templates.test.ts +92 -1
- package/src/resources/extensions/google-search/index.ts +3 -2
- package/src/resources/extensions/gsd/auto/loop.ts +142 -2
- package/src/resources/extensions/gsd/auto/phases.ts +62 -38
- package/src/resources/extensions/gsd/auto/session.ts +7 -2
- package/src/resources/extensions/gsd/auto-dispatch.ts +156 -29
- package/src/resources/extensions/gsd/auto-model-selection.ts +131 -4
- package/src/resources/extensions/gsd/auto-post-unit.ts +163 -73
- package/src/resources/extensions/gsd/auto-prompts.ts +385 -93
- package/src/resources/extensions/gsd/auto-recovery.ts +230 -51
- package/src/resources/extensions/gsd/auto-start.ts +127 -9
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +51 -7
- package/src/resources/extensions/gsd/auto-worktree.ts +130 -26
- package/src/resources/extensions/gsd/auto.ts +90 -23
- package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +20 -1
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +221 -0
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +3 -7
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -3
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +158 -9
- package/src/resources/extensions/gsd/component-loader.ts +598 -0
- package/src/resources/extensions/gsd/component-types.ts +362 -0
- package/src/resources/extensions/gsd/context-store.ts +25 -8
- package/src/resources/extensions/gsd/detection.ts +58 -1
- package/src/resources/extensions/gsd/dispatch-guard.ts +2 -20
- package/src/resources/extensions/gsd/docs/preferences-reference.md +1 -1
- package/src/resources/extensions/gsd/forensics.ts +118 -1
- package/src/resources/extensions/gsd/gate-registry.ts +2 -2
- package/src/resources/extensions/gsd/git-constants.ts +30 -1
- package/src/resources/extensions/gsd/git-self-heal.ts +31 -0
- package/src/resources/extensions/gsd/git-service.ts +149 -2
- package/src/resources/extensions/gsd/gsd-db.ts +6 -3
- package/src/resources/extensions/gsd/guided-flow.ts +57 -14
- package/src/resources/extensions/gsd/journal.ts +11 -1
- package/src/resources/extensions/gsd/memory-extractor.ts +11 -3
- package/src/resources/extensions/gsd/milestone-scope-classifier.ts +366 -0
- package/src/resources/extensions/gsd/milestone-summary-classifier.ts +42 -0
- package/src/resources/extensions/gsd/model-cost-table.ts +3 -0
- package/src/resources/extensions/gsd/model-router.ts +6 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +34 -4
- package/src/resources/extensions/gsd/preferences-validation.ts +21 -0
- package/src/resources/extensions/gsd/prompt-cache-optimizer.ts +4 -0
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +6 -2
- package/src/resources/extensions/gsd/prompts/discuss-headless.md +23 -4
- package/src/resources/extensions/gsd/prompts/doctor-heal.md +5 -4
- package/src/resources/extensions/gsd/prompts/plan-slice.md +15 -2
- package/src/resources/extensions/gsd/safety/git-checkpoint.ts +15 -0
- package/src/resources/extensions/gsd/service-tier.ts +5 -2
- package/src/resources/extensions/gsd/session-lock.ts +20 -10
- package/src/resources/extensions/gsd/skill-manifest.ts +175 -0
- package/src/resources/extensions/gsd/slice-cadence.ts +299 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +309 -8
- package/src/resources/extensions/gsd/state-transition-matrix.ts +152 -0
- package/src/resources/extensions/gsd/state.ts +76 -66
- package/src/resources/extensions/gsd/sync-lock.ts +97 -39
- package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +270 -0
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +341 -0
- package/src/resources/extensions/gsd/tests/auto-discuss-milestone-deadlock-4973.test.ts +264 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +133 -292
- package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +742 -0
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +78 -0
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +61 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/auto-remediate-slice-status.test.ts +4 -1
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +8 -194
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-start-cold-db-bootstrap.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +15 -58
- package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/auto-thinking-restore.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +17 -21
- package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +108 -0
- package/src/resources/extensions/gsd/tests/complete-milestone-excerpt.test.ts +263 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/complete-slice-composer.test.ts +192 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +16 -8
- package/src/resources/extensions/gsd/tests/component-loader.test.ts +589 -0
- package/src/resources/extensions/gsd/tests/component-types.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/context-store.test.ts +79 -0
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +50 -1
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +159 -0
- package/src/resources/extensions/gsd/tests/db-access-guardrails.test.ts +1 -0
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/derive-state-db-disk-reconcile.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +91 -3
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +25 -0
- package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/dispatcher-stuck-planning.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +173 -0
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +139 -129
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +8 -104
- package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +102 -0
- package/src/resources/extensions/gsd/tests/gate-storage.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +4 -55
- package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +7 -56
- package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +18 -2
- package/src/resources/extensions/gsd/tests/integration/queue-completed-milestone-perf.test.ts +10 -4
- package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +144 -7
- package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +2 -16
- package/src/resources/extensions/gsd/tests/interactive-routing-bypass.test.ts +9 -3
- package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +6 -9
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +64 -0
- package/src/resources/extensions/gsd/tests/knowledge.test.ts +93 -1
- package/src/resources/extensions/gsd/tests/mcp-client-security.test.ts +8 -37
- package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +5 -15
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +227 -55
- package/src/resources/extensions/gsd/tests/milestone-scope-classifier.test.ts +187 -0
- package/src/resources/extensions/gsd/tests/milestone-summary-classifier.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +9 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +6 -48
- package/src/resources/extensions/gsd/tests/notification-widget.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +59 -2
- package/src/resources/extensions/gsd/tests/parallel-research-dispatch.test.ts +273 -130
- package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +301 -0
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +32 -1
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +15 -4
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +23 -24
- package/src/resources/extensions/gsd/tests/queue-auto-guard.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/queued-discuss-fast-path.test.ts +4 -5
- package/src/resources/extensions/gsd/tests/ready-phrase-no-files-4573.test.ts +75 -2
- package/src/resources/extensions/gsd/tests/reassess-default-optin.test.ts +132 -0
- package/src/resources/extensions/gsd/tests/recovery-attempts-reset.test.ts +8 -40
- package/src/resources/extensions/gsd/tests/regex-hardening.test.ts +136 -256
- package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/restore-tools-after-discuss.test.ts +6 -3
- package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +148 -0
- package/src/resources/extensions/gsd/tests/service-tier.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/silent-catch-diagnostics.test.ts +55 -95
- package/src/resources/extensions/gsd/tests/single-writer-v3-tool-surface.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/skill-activation.test.ts +120 -1
- package/src/resources/extensions/gsd/tests/skill-manifest.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/slice-cadence.test.ts +242 -0
- package/src/resources/extensions/gsd/tests/slice-context-injection.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +164 -1
- package/src/resources/extensions/gsd/tests/smart-entry-draft.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/stale-dirlistcache-4648.test.ts +112 -0
- package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +29 -5
- package/src/resources/extensions/gsd/tests/state-transition-matrix.test.ts +44 -0
- package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/structured-data-formatter.test.ts +11 -92
- package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +7 -6
- package/src/resources/extensions/gsd/tests/survivor-branch-complete.test.ts +102 -101
- package/src/resources/extensions/gsd/tests/sync-lock.test.ts +31 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +4 -3
- package/src/resources/extensions/gsd/tests/test-helpers.test.ts +98 -0
- package/src/resources/extensions/gsd/tests/test-helpers.ts +153 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +61 -1
- package/src/resources/extensions/gsd/tests/tool-naming.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +355 -0
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +258 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +51 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +49 -26
- package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +65 -0
- package/src/resources/extensions/gsd/tests/uok-parity-report.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +19 -2
- package/src/resources/extensions/gsd/tests/uok-writer.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/verify-artifact-tightened.test.ts +144 -80
- package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -54
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +342 -277
- package/src/resources/extensions/gsd/tests/worker-model-override.test.ts +37 -29
- package/src/resources/extensions/gsd/tests/worktree-db.test.ts +226 -266
- package/src/resources/extensions/gsd/tests/worktree-health-monorepo.test.ts +103 -67
- package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +92 -90
- package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +238 -59
- package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +113 -161
- package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +210 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +262 -0
- package/src/resources/extensions/gsd/tests/write-gate-predicates.test.ts +186 -0
- package/src/resources/extensions/gsd/tests/write-gate.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +80 -96
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +8 -2
- package/src/resources/extensions/gsd/types.ts +3 -3
- package/src/resources/extensions/gsd/unit-context-composer.ts +218 -0
- package/src/resources/extensions/gsd/unit-context-manifest.ts +574 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +65 -0
- package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +56 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +22 -0
- package/src/resources/extensions/gsd/uok/gate-runner.ts +65 -5
- package/src/resources/extensions/gsd/uok/gitops.ts +6 -1
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +45 -10
- package/src/resources/extensions/gsd/uok/parity-report.ts +84 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +13 -5
- package/src/resources/extensions/gsd/uok/writer.ts +113 -0
- package/src/resources/extensions/gsd/workflow-mcp.ts +6 -0
- package/src/resources/extensions/gsd/worktree-manager.ts +108 -7
- package/src/resources/extensions/gsd/worktree-resolver.ts +96 -9
- package/src/resources/extensions/gsd/worktree-telemetry.ts +322 -0
- package/src/resources/extensions/mcp-client/index.ts +3 -1
- package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +70 -36
- package/src/resources/extensions/ollama/index.ts +5 -1
- package/src/resources/extensions/ollama/ollama-auth-mode.test.ts +123 -15
- package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +206 -19
- package/src/resources/extensions/remote-questions/manager.ts +36 -4
- package/src/resources/extensions/remote-questions/tests/command-polling.test.ts +200 -190
- package/src/resources/extensions/shared/tests/interview-preview.test.ts +11 -3
- package/src/resources/extensions/voice/tests/linux-ready.test.ts +129 -113
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts +0 -2
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js +0 -289
- package/packages/pi-ai/dist/utils/oauth/oauth-providers.test.js.map +0 -1
- package/packages/pi-ai/src/utils/oauth/oauth-providers.test.ts +0 -363
- package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +0 -143
- package/src/resources/extensions/gsd/tests/complete-milestone-false-merge.test.ts +0 -157
- package/src/resources/extensions/gsd/tests/dashboard-model-label-ordering.test.ts +0 -107
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed.test.ts +0 -48
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -159
- package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
- package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -79
- package/src/resources/extensions/gsd/tests/forensics-hook-key-parse.test.ts +0 -74
- package/src/resources/extensions/gsd/tests/forensics-journal.test.ts +0 -162
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell.test.ts +0 -38
- package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +0 -73
- package/src/resources/extensions/gsd/tests/idle-watchdog-stall-override.test.ts +0 -125
- package/src/resources/extensions/gsd/tests/import-done-milestones.test.ts +0 -42
- /package/dist/web/standalone/.next/static/{5wbu35_C2_MQ3Jj1lEVDx → cAJH99yNS1UPbeSEiNRrV}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{5wbu35_C2_MQ3Jj1lEVDx → cAJH99yNS1UPbeSEiNRrV}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,574 @@
|
|
|
1
|
+
// GSD-2 — UnitContextManifest (#4782 phase 1).
|
|
2
|
+
//
|
|
3
|
+
// Declarative description of what context each auto-mode unit type needs
|
|
4
|
+
// in its system prompt. Establishes the contract that later phases will
|
|
5
|
+
// use to drive a single composeSystemPromptForUnit() — replacing the
|
|
6
|
+
// per-unit-type branching currently spread across `auto-prompts.ts`.
|
|
7
|
+
//
|
|
8
|
+
// **Phase 1 ships the type + the data + a CI coverage guard.** It adds
|
|
9
|
+
// zero wiring — no caller reads a manifest yet. Every unit type gets a
|
|
10
|
+
// manifest that describes today's behavior as faithfully as possible, so
|
|
11
|
+
// when the composer lands in phase 2 the migration can proceed manifest-
|
|
12
|
+
// by-manifest without behavior change.
|
|
13
|
+
//
|
|
14
|
+
// Phased rollout tracking:
|
|
15
|
+
// - Phase 1 (this PR): schema + manifests + coverage test.
|
|
16
|
+
// - Phase 2: add composeSystemPromptForUnit(); migrate one low-risk
|
|
17
|
+
// unit type (e.g. reassess-roadmap) as the pilot.
|
|
18
|
+
// - Phase 3: migrate remaining unit types, tighten manifests per
|
|
19
|
+
// empirical usage, introduce skipWhen predicates absorbing the
|
|
20
|
+
// reassess opt-in gate from #4778.
|
|
21
|
+
// - Phase 4: introduce pipeline variants as declared sequences,
|
|
22
|
+
// absorbing the scope-classifier gates from #4781.
|
|
23
|
+
//
|
|
24
|
+
// Naming:
|
|
25
|
+
// - Artifact keys are STABLE strings (not paths). Path resolution is
|
|
26
|
+
// the composer's job; manifests describe intent, not disk layout.
|
|
27
|
+
// - Char budgets are nominal — blown budgets log a telemetry event,
|
|
28
|
+
// they do not truncate or error (the composer decides fallback).
|
|
29
|
+
|
|
30
|
+
// ─── Artifact registry ────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Stable identifiers for every artifact class a unit might inline, excerpt,
|
|
34
|
+
* or reference on-demand. Adding a new artifact class requires (a) a key
|
|
35
|
+
* here, (b) path/body resolution in the composer, and (c) updates to any
|
|
36
|
+
* manifest that should surface it.
|
|
37
|
+
*/
|
|
38
|
+
export const ARTIFACT_KEYS = [
|
|
39
|
+
// Milestone-scoped
|
|
40
|
+
"roadmap",
|
|
41
|
+
"milestone-context",
|
|
42
|
+
"milestone-summary",
|
|
43
|
+
"milestone-validation",
|
|
44
|
+
"milestone-research",
|
|
45
|
+
"milestone-plan",
|
|
46
|
+
// Slice-scoped
|
|
47
|
+
"slice-context",
|
|
48
|
+
"slice-research",
|
|
49
|
+
"slice-plan",
|
|
50
|
+
"slice-summary",
|
|
51
|
+
"slice-uat",
|
|
52
|
+
"slice-assessment",
|
|
53
|
+
// Task-scoped
|
|
54
|
+
"task-plan",
|
|
55
|
+
"task-summary",
|
|
56
|
+
"prior-task-summaries",
|
|
57
|
+
"dependency-summaries",
|
|
58
|
+
// Project-scoped
|
|
59
|
+
"requirements",
|
|
60
|
+
"decisions",
|
|
61
|
+
"project",
|
|
62
|
+
"templates",
|
|
63
|
+
] as const;
|
|
64
|
+
|
|
65
|
+
export type ArtifactKey = typeof ARTIFACT_KEYS[number];
|
|
66
|
+
|
|
67
|
+
// ─── Policy types ─────────────────────────────────────────────────────────
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Skill catalog policy. `all` preserves today's default: the full catalog
|
|
71
|
+
* is stamped into the prompt. `allowlist` narrows to the named skills.
|
|
72
|
+
* `none` suppresses the catalog entirely.
|
|
73
|
+
*
|
|
74
|
+
* The allowlist mode pairs with `skill-manifest.ts` (#4779) — entries
|
|
75
|
+
* there are the source of truth for "which skills are dispatched for a
|
|
76
|
+
* unit type"; this manifest carries the policy shape so the composer
|
|
77
|
+
* can unify the two surfaces in phase 2.
|
|
78
|
+
*/
|
|
79
|
+
export type SkillsPolicy =
|
|
80
|
+
| { readonly mode: "none" }
|
|
81
|
+
| { readonly mode: "all" }
|
|
82
|
+
| { readonly mode: "allowlist"; readonly skills: readonly string[] };
|
|
83
|
+
|
|
84
|
+
/** Knowledge block policy — see `bootstrap/system-context.ts` loadKnowledgeBlock. */
|
|
85
|
+
export type KnowledgePolicy = "none" | "critical-only" | "scoped" | "full";
|
|
86
|
+
|
|
87
|
+
/** Memory store policy — see `bootstrap/system-context.ts` loadMemoryBlock. */
|
|
88
|
+
export type MemoryPolicy = "none" | "critical-only" | "prompt-relevant";
|
|
89
|
+
|
|
90
|
+
/** Preferences block policy. */
|
|
91
|
+
export type PreferencesPolicy = "none" | "active-only" | "full";
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Tool-access policy per unit type (#4934).
|
|
95
|
+
*
|
|
96
|
+
* Declarative-only in this PR — runtime enforcement (write-gate.ts predicate
|
|
97
|
+
* + dispatch-time isolation) lands in follow-up PRs. The shape is the
|
|
98
|
+
* agreement between manifest authors and enforcement; surfacing it now lets
|
|
99
|
+
* reviewers ratify per-unit policy intent before any blocking logic ships.
|
|
100
|
+
*
|
|
101
|
+
* Modes:
|
|
102
|
+
* - "all" — Read + Edit/Write/MultiEdit/NotebookEdit + Bash + Task.
|
|
103
|
+
* The unit may modify any file in the working tree.
|
|
104
|
+
* Reserved for execute-task / reactive-execute, which run
|
|
105
|
+
* in worktrees today and whose writes are committed.
|
|
106
|
+
* - "read-only" — Read tools only. No file mutation. No shell. No subagent
|
|
107
|
+
* dispatch. Reserved for future units that should be
|
|
108
|
+
* strictly observational (none today).
|
|
109
|
+
* - "planning" — Read tools always; writes restricted to .gsd/** under
|
|
110
|
+
* basePath; Bash limited to a per-unit safe allowlist;
|
|
111
|
+
* Task subagent dispatch denied. Catches the bug class
|
|
112
|
+
* where a discuss-milestone turn modifies user source
|
|
113
|
+
* files (forensics: ~/Github/test-apps/b23, #4934).
|
|
114
|
+
* - "docs" — Read tools always; writes restricted to .gsd/** AND
|
|
115
|
+
* the explicit `allowedPathGlobs` set; Bash safe-allowlist;
|
|
116
|
+
* no subagents. Reserved for rewrite-docs, which legitimately
|
|
117
|
+
* edits project markdown outside .gsd/.
|
|
118
|
+
*
|
|
119
|
+
* The allowlist for "docs" is declared per-manifest rather than hardcoded so
|
|
120
|
+
* projects with non-standard doc layouts can extend it without forking the
|
|
121
|
+
* enforcement code (open question for the wiring PR — exact representation
|
|
122
|
+
* may shift). Globs are interpreted relative to the project basePath.
|
|
123
|
+
*/
|
|
124
|
+
export type ToolsPolicy =
|
|
125
|
+
| { readonly mode: "all" }
|
|
126
|
+
| { readonly mode: "read-only" }
|
|
127
|
+
| { readonly mode: "planning" }
|
|
128
|
+
| { readonly mode: "docs"; readonly allowedPathGlobs: readonly string[] };
|
|
129
|
+
|
|
130
|
+
// ─── Computed-artifact registry (#4924 v2 contract) ───────────────────────
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Typed registry of computed-artifact ids → their per-call input shape.
|
|
134
|
+
*
|
|
135
|
+
* **This is the core anti-`extra: Record<string, unknown>` surface.** Each
|
|
136
|
+
* computed block a unit may emit is registered here with an explicit input
|
|
137
|
+
* type. Adding a new computed block requires extending this interface — a
|
|
138
|
+
* deliberate, reviewable change rather than a silent ad-hoc field.
|
|
139
|
+
*
|
|
140
|
+
* Consumers extend via module augmentation if a downstream package needs to
|
|
141
|
+
* register new computed ids (rare in-tree; no public API today). The repo's
|
|
142
|
+
* own computed blocks are declared inline below.
|
|
143
|
+
*
|
|
144
|
+
* Invariant: the value type for each id MUST be a plain serializable shape.
|
|
145
|
+
* No closures, no class instances, no `any`. If a builder needs framework
|
|
146
|
+
* state, declare the specific fields it needs — don't smuggle objects.
|
|
147
|
+
*/
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
149
|
+
export interface ComputedArtifactInputs {
|
|
150
|
+
// Phase 3.5 (v2 contract PR — #4924): no computed ids are registered yet.
|
|
151
|
+
// Each follow-up batch (slice prompt, replan-slice, gate-evaluate, etc.)
|
|
152
|
+
// adds the ids it needs as part of its migration commit.
|
|
153
|
+
//
|
|
154
|
+
// Example shape an upcoming batch will register:
|
|
155
|
+
// "slice-handoff-anchors": { sliceId: string; phase: string };
|
|
156
|
+
// "roadmap-excerpt": { milestoneId: string; aroundSlice: string };
|
|
157
|
+
// "graph-subgraph": { rootArtifact: ArtifactKey };
|
|
158
|
+
// "blocker-task-summary": { sliceId: string };
|
|
159
|
+
// "overrides-banner": { /* basePath via BaseResolverContext */ };
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** Stable string ids for registered computed artifacts. */
|
|
163
|
+
export type ComputedArtifactId = keyof ComputedArtifactInputs & string;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Always-present context the composer hands every computed-artifact builder.
|
|
167
|
+
* Carries unit-shape fields that don't belong in per-id input types because
|
|
168
|
+
* every builder needs them (path resolution, dispatch identity).
|
|
169
|
+
*/
|
|
170
|
+
export interface BaseResolverContext {
|
|
171
|
+
readonly unitType: string;
|
|
172
|
+
readonly basePath: string;
|
|
173
|
+
readonly milestoneId?: string;
|
|
174
|
+
readonly sliceId?: string;
|
|
175
|
+
readonly taskId?: string;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Builder signature for one computed artifact id. Returns the rendered
|
|
180
|
+
* block body (joined into the composed prompt at the manifest-declared
|
|
181
|
+
* position) or `null` to omit the block entirely.
|
|
182
|
+
*/
|
|
183
|
+
export type ComputedArtifactBuilder<K extends ComputedArtifactId> = (
|
|
184
|
+
inputs: ComputedArtifactInputs[K],
|
|
185
|
+
base: BaseResolverContext,
|
|
186
|
+
) => Promise<string | null>;
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Per-call registry: for each computed id the manifest declares, the
|
|
190
|
+
* caller supplies the matching builder + the input value for this call.
|
|
191
|
+
*
|
|
192
|
+
* Runtime shape: `{ [id]: { build, inputs } }`. Type narrowing per key is
|
|
193
|
+
* handled inside the composer via the `ComputedArtifactInputs` map — calls
|
|
194
|
+
* stay type-safe across the registration boundary.
|
|
195
|
+
*/
|
|
196
|
+
export type ComputedArtifactRegistry = {
|
|
197
|
+
readonly [K in ComputedArtifactId]?: {
|
|
198
|
+
readonly build: ComputedArtifactBuilder<K>;
|
|
199
|
+
readonly inputs: ComputedArtifactInputs[K];
|
|
200
|
+
};
|
|
201
|
+
};
|
|
202
|
+
|
|
203
|
+
// ─── Manifest ─────────────────────────────────────────────────────────────
|
|
204
|
+
|
|
205
|
+
export interface UnitContextManifest {
|
|
206
|
+
/** Skills catalog shape to surface. */
|
|
207
|
+
readonly skills: SkillsPolicy;
|
|
208
|
+
/** Knowledge block policy. */
|
|
209
|
+
readonly knowledge: KnowledgePolicy;
|
|
210
|
+
/** Memory store policy. */
|
|
211
|
+
readonly memory: MemoryPolicy;
|
|
212
|
+
/** Whether CODEBASE.md is inlined. */
|
|
213
|
+
readonly codebaseMap: boolean;
|
|
214
|
+
/** Preferences block policy. */
|
|
215
|
+
readonly preferences: PreferencesPolicy;
|
|
216
|
+
/**
|
|
217
|
+
* Tool-access policy (#4934). Declarative in this PR; runtime enforcement
|
|
218
|
+
* (path-scoped write blocking + subagent denial + bash allowlist) lands
|
|
219
|
+
* in follow-ups. Required on every manifest so missing entries fail loud
|
|
220
|
+
* via the CI invariant test rather than defaulting to "all" silently.
|
|
221
|
+
*/
|
|
222
|
+
readonly tools: ToolsPolicy;
|
|
223
|
+
/** Artifact handling: inline (full body), excerpt (compact), or on-demand (path only). */
|
|
224
|
+
readonly artifacts: {
|
|
225
|
+
readonly inline: readonly ArtifactKey[];
|
|
226
|
+
readonly excerpt: readonly ArtifactKey[];
|
|
227
|
+
readonly onDemand: readonly ArtifactKey[];
|
|
228
|
+
/**
|
|
229
|
+
* Ordered list of computed-block ids emitted in the inline position
|
|
230
|
+
* (interleaved with `inline` in declared order — see composer for the
|
|
231
|
+
* exact merge rule). v2 contract addition (#4924). Unknown ids fail
|
|
232
|
+
* the manifest validator; absent registry entries are skipped silently.
|
|
233
|
+
*/
|
|
234
|
+
readonly computed?: readonly ComputedArtifactId[];
|
|
235
|
+
};
|
|
236
|
+
/**
|
|
237
|
+
* Ordered list of computed-block ids emitted ABOVE the main inlined
|
|
238
|
+
* context block. Models the existing pattern of overrides / banners
|
|
239
|
+
* that some builders prepend with `inlined.unshift(...)`. v2 contract
|
|
240
|
+
* addition (#4924).
|
|
241
|
+
*/
|
|
242
|
+
readonly prepend?: readonly ComputedArtifactId[];
|
|
243
|
+
/**
|
|
244
|
+
* Nominal upper bound for composer-generated system prompt size, in
|
|
245
|
+
* characters. Phase 2 composer logs telemetry when a unit exceeds its
|
|
246
|
+
* budget; truncation is not enforced. Set conservatively — today's
|
|
247
|
+
* observed maxima come from `complete-milestone` (~1.2M tokens cached;
|
|
248
|
+
* ~4.8M chars) and `validate-milestone` (~300K tokens; ~1.2M chars).
|
|
249
|
+
*/
|
|
250
|
+
readonly maxSystemPromptChars: number;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// ─── Manifests ────────────────────────────────────────────────────────────
|
|
254
|
+
|
|
255
|
+
// Phase 1 policy: every manifest encodes today's behavior. Skills = "all"
|
|
256
|
+
// unless the unit type was already narrowed via the existing skill-manifest
|
|
257
|
+
// resolver (#4779). Memory/knowledge policies reflect the defaults in
|
|
258
|
+
// `bootstrap/system-context.ts`. Artifact classifications follow what
|
|
259
|
+
// `auto-prompts.ts` inlines today for each unit type.
|
|
260
|
+
|
|
261
|
+
const COMMON_BUDGET_LARGE = 1_500_000; // ~400K tokens
|
|
262
|
+
const COMMON_BUDGET_MEDIUM = 750_000; // ~200K tokens
|
|
263
|
+
const COMMON_BUDGET_SMALL = 250_000; // ~65K tokens
|
|
264
|
+
|
|
265
|
+
// ─── Tool policy constants (#4934) ────────────────────────────────────────
|
|
266
|
+
// Reused across manifests so per-unit assignment stays declarative and the
|
|
267
|
+
// allowed-path set for the docs policy lives in one reviewable place.
|
|
268
|
+
|
|
269
|
+
const TOOLS_ALL: ToolsPolicy = { mode: "all" };
|
|
270
|
+
const TOOLS_PLANNING: ToolsPolicy = { mode: "planning" };
|
|
271
|
+
const TOOLS_DOCS: ToolsPolicy = {
|
|
272
|
+
mode: "docs",
|
|
273
|
+
// Globs are resolved relative to project basePath. The set is intentionally
|
|
274
|
+
// narrow: top-level docs/, README, CHANGELOG, and any markdown at the
|
|
275
|
+
// project root. Projects with non-standard layouts (e.g. mintlify-docs/)
|
|
276
|
+
// will need this list extended in a follow-up; landed conservative now,
|
|
277
|
+
// expand on demand.
|
|
278
|
+
allowedPathGlobs: [
|
|
279
|
+
"docs/**",
|
|
280
|
+
"README.md",
|
|
281
|
+
"README.*.md",
|
|
282
|
+
"CHANGELOG.md",
|
|
283
|
+
"*.md",
|
|
284
|
+
],
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Canonical unit types handled by auto-mode dispatch. The coverage test
|
|
289
|
+
* enumerates these against `UNIT_MANIFESTS` to catch manifest drift when
|
|
290
|
+
* a new unit type lands.
|
|
291
|
+
*/
|
|
292
|
+
export const KNOWN_UNIT_TYPES = [
|
|
293
|
+
"research-milestone",
|
|
294
|
+
"plan-milestone",
|
|
295
|
+
"discuss-milestone",
|
|
296
|
+
"validate-milestone",
|
|
297
|
+
"complete-milestone",
|
|
298
|
+
"research-slice",
|
|
299
|
+
"plan-slice",
|
|
300
|
+
"refine-slice",
|
|
301
|
+
"replan-slice",
|
|
302
|
+
"complete-slice",
|
|
303
|
+
"reassess-roadmap",
|
|
304
|
+
"execute-task",
|
|
305
|
+
"reactive-execute",
|
|
306
|
+
"run-uat",
|
|
307
|
+
"gate-evaluate",
|
|
308
|
+
"rewrite-docs",
|
|
309
|
+
] as const;
|
|
310
|
+
|
|
311
|
+
export type UnitType = typeof KNOWN_UNIT_TYPES[number];
|
|
312
|
+
|
|
313
|
+
export const UNIT_MANIFESTS: Record<UnitType, UnitContextManifest> = {
|
|
314
|
+
// ─── Milestone-scoped ────────────────────────────────────────────────
|
|
315
|
+
"research-milestone": {
|
|
316
|
+
skills: { mode: "all" },
|
|
317
|
+
knowledge: "full",
|
|
318
|
+
memory: "prompt-relevant",
|
|
319
|
+
codebaseMap: true,
|
|
320
|
+
preferences: "active-only",
|
|
321
|
+
tools: TOOLS_PLANNING,
|
|
322
|
+
artifacts: {
|
|
323
|
+
// Phase 3 migration (#4782): matches today's actual
|
|
324
|
+
// buildResearchMilestonePrompt inlining order.
|
|
325
|
+
inline: ["milestone-context", "project", "requirements", "decisions", "templates"],
|
|
326
|
+
excerpt: [],
|
|
327
|
+
onDemand: [],
|
|
328
|
+
},
|
|
329
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
330
|
+
},
|
|
331
|
+
"plan-milestone": {
|
|
332
|
+
skills: { mode: "all" },
|
|
333
|
+
knowledge: "full",
|
|
334
|
+
memory: "prompt-relevant",
|
|
335
|
+
codebaseMap: true,
|
|
336
|
+
preferences: "active-only",
|
|
337
|
+
tools: TOOLS_PLANNING,
|
|
338
|
+
artifacts: {
|
|
339
|
+
inline: ["project", "requirements", "decisions", "milestone-research", "templates"],
|
|
340
|
+
excerpt: [],
|
|
341
|
+
onDemand: [],
|
|
342
|
+
},
|
|
343
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
344
|
+
},
|
|
345
|
+
"discuss-milestone": {
|
|
346
|
+
skills: { mode: "all" },
|
|
347
|
+
knowledge: "full",
|
|
348
|
+
memory: "prompt-relevant",
|
|
349
|
+
codebaseMap: true,
|
|
350
|
+
preferences: "active-only",
|
|
351
|
+
tools: TOOLS_PLANNING,
|
|
352
|
+
artifacts: {
|
|
353
|
+
inline: ["project", "requirements", "decisions", "milestone-context", "templates"],
|
|
354
|
+
excerpt: [],
|
|
355
|
+
onDemand: [],
|
|
356
|
+
},
|
|
357
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
358
|
+
},
|
|
359
|
+
"validate-milestone": {
|
|
360
|
+
skills: { mode: "all" },
|
|
361
|
+
knowledge: "scoped",
|
|
362
|
+
memory: "prompt-relevant",
|
|
363
|
+
codebaseMap: false,
|
|
364
|
+
preferences: "active-only",
|
|
365
|
+
tools: TOOLS_PLANNING,
|
|
366
|
+
artifacts: {
|
|
367
|
+
inline: ["roadmap", "slice-summary", "slice-uat", "requirements", "decisions", "templates"],
|
|
368
|
+
excerpt: [],
|
|
369
|
+
onDemand: [],
|
|
370
|
+
},
|
|
371
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
372
|
+
},
|
|
373
|
+
"complete-milestone": {
|
|
374
|
+
skills: { mode: "all" },
|
|
375
|
+
knowledge: "scoped",
|
|
376
|
+
memory: "prompt-relevant",
|
|
377
|
+
codebaseMap: false,
|
|
378
|
+
preferences: "active-only",
|
|
379
|
+
tools: TOOLS_PLANNING,
|
|
380
|
+
artifacts: {
|
|
381
|
+
// #4780 landed slice-summary as excerpt for this unit; phase 2 of
|
|
382
|
+
// the architecture will read this manifest as the source of truth
|
|
383
|
+
// and retire the special-case wiring in auto-prompts.ts.
|
|
384
|
+
inline: ["roadmap", "milestone-context", "requirements", "decisions", "project", "templates"],
|
|
385
|
+
excerpt: ["slice-summary"],
|
|
386
|
+
onDemand: ["slice-summary"],
|
|
387
|
+
},
|
|
388
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
389
|
+
},
|
|
390
|
+
|
|
391
|
+
// ─── Slice-scoped ────────────────────────────────────────────────────
|
|
392
|
+
"research-slice": {
|
|
393
|
+
skills: { mode: "all" },
|
|
394
|
+
knowledge: "full",
|
|
395
|
+
memory: "prompt-relevant",
|
|
396
|
+
codebaseMap: true,
|
|
397
|
+
preferences: "active-only",
|
|
398
|
+
tools: TOOLS_PLANNING,
|
|
399
|
+
artifacts: {
|
|
400
|
+
inline: ["roadmap", "milestone-research", "dependency-summaries", "templates"],
|
|
401
|
+
excerpt: [],
|
|
402
|
+
onDemand: [],
|
|
403
|
+
},
|
|
404
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
405
|
+
},
|
|
406
|
+
"plan-slice": {
|
|
407
|
+
skills: { mode: "all" },
|
|
408
|
+
knowledge: "full",
|
|
409
|
+
memory: "prompt-relevant",
|
|
410
|
+
codebaseMap: true,
|
|
411
|
+
preferences: "active-only",
|
|
412
|
+
tools: TOOLS_PLANNING,
|
|
413
|
+
artifacts: {
|
|
414
|
+
inline: ["roadmap", "slice-research", "dependency-summaries", "requirements", "decisions", "templates"],
|
|
415
|
+
excerpt: [],
|
|
416
|
+
onDemand: [],
|
|
417
|
+
},
|
|
418
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
419
|
+
},
|
|
420
|
+
"refine-slice": {
|
|
421
|
+
skills: { mode: "all" },
|
|
422
|
+
knowledge: "scoped",
|
|
423
|
+
memory: "prompt-relevant",
|
|
424
|
+
codebaseMap: true,
|
|
425
|
+
preferences: "active-only",
|
|
426
|
+
tools: TOOLS_PLANNING,
|
|
427
|
+
artifacts: {
|
|
428
|
+
inline: ["slice-plan", "slice-research", "dependency-summaries", "templates"],
|
|
429
|
+
excerpt: [],
|
|
430
|
+
onDemand: [],
|
|
431
|
+
},
|
|
432
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
433
|
+
},
|
|
434
|
+
"replan-slice": {
|
|
435
|
+
skills: { mode: "all" },
|
|
436
|
+
knowledge: "scoped",
|
|
437
|
+
memory: "prompt-relevant",
|
|
438
|
+
codebaseMap: true,
|
|
439
|
+
preferences: "active-only",
|
|
440
|
+
tools: TOOLS_PLANNING,
|
|
441
|
+
artifacts: {
|
|
442
|
+
inline: ["slice-plan", "slice-research", "dependency-summaries", "prior-task-summaries", "templates"],
|
|
443
|
+
excerpt: [],
|
|
444
|
+
onDemand: [],
|
|
445
|
+
},
|
|
446
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
447
|
+
},
|
|
448
|
+
"complete-slice": {
|
|
449
|
+
skills: { mode: "all" },
|
|
450
|
+
knowledge: "scoped",
|
|
451
|
+
memory: "prompt-relevant",
|
|
452
|
+
codebaseMap: false,
|
|
453
|
+
preferences: "active-only",
|
|
454
|
+
tools: TOOLS_PLANNING,
|
|
455
|
+
artifacts: {
|
|
456
|
+
// Phase 3 migration (#4782): matches today's actual
|
|
457
|
+
// buildCompleteSlicePrompt inlining order. Overrides prepend +
|
|
458
|
+
// knowledge splice stay in the builder imperatively (see RFC
|
|
459
|
+
// #4924 — computed/prepend blocks are phase-4 composer work).
|
|
460
|
+
inline: ["roadmap", "slice-context", "slice-plan", "requirements", "prior-task-summaries", "templates"],
|
|
461
|
+
excerpt: [],
|
|
462
|
+
onDemand: [],
|
|
463
|
+
},
|
|
464
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
465
|
+
},
|
|
466
|
+
"reassess-roadmap": {
|
|
467
|
+
skills: { mode: "all" },
|
|
468
|
+
knowledge: "scoped",
|
|
469
|
+
memory: "critical-only",
|
|
470
|
+
codebaseMap: false,
|
|
471
|
+
preferences: "none",
|
|
472
|
+
tools: TOOLS_PLANNING,
|
|
473
|
+
artifacts: {
|
|
474
|
+
// Phase 2 pilot (#4782): manifest now matches today's actual
|
|
475
|
+
// buildReassessRoadmapPrompt behavior for equivalence. Phase 3
|
|
476
|
+
// will tighten this list once the composer reports real telemetry.
|
|
477
|
+
inline: ["roadmap", "slice-context", "slice-summary", "project", "requirements", "decisions"],
|
|
478
|
+
excerpt: [],
|
|
479
|
+
onDemand: [],
|
|
480
|
+
},
|
|
481
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
482
|
+
},
|
|
483
|
+
|
|
484
|
+
// ─── Task-scoped ─────────────────────────────────────────────────────
|
|
485
|
+
"execute-task": {
|
|
486
|
+
skills: { mode: "all" },
|
|
487
|
+
knowledge: "scoped",
|
|
488
|
+
memory: "prompt-relevant",
|
|
489
|
+
codebaseMap: true,
|
|
490
|
+
preferences: "active-only",
|
|
491
|
+
tools: TOOLS_ALL,
|
|
492
|
+
artifacts: {
|
|
493
|
+
inline: ["task-plan", "slice-plan", "prior-task-summaries", "templates"],
|
|
494
|
+
excerpt: [],
|
|
495
|
+
onDemand: ["slice-research"],
|
|
496
|
+
},
|
|
497
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
498
|
+
},
|
|
499
|
+
"reactive-execute": {
|
|
500
|
+
skills: { mode: "all" },
|
|
501
|
+
knowledge: "scoped",
|
|
502
|
+
memory: "prompt-relevant",
|
|
503
|
+
codebaseMap: true,
|
|
504
|
+
preferences: "active-only",
|
|
505
|
+
tools: TOOLS_ALL,
|
|
506
|
+
artifacts: {
|
|
507
|
+
inline: ["slice-plan", "prior-task-summaries", "templates"],
|
|
508
|
+
excerpt: [],
|
|
509
|
+
onDemand: ["slice-research"],
|
|
510
|
+
},
|
|
511
|
+
maxSystemPromptChars: COMMON_BUDGET_LARGE,
|
|
512
|
+
},
|
|
513
|
+
|
|
514
|
+
// ─── Ancillary units ─────────────────────────────────────────────────
|
|
515
|
+
"run-uat": {
|
|
516
|
+
skills: { mode: "all" },
|
|
517
|
+
knowledge: "critical-only",
|
|
518
|
+
memory: "critical-only",
|
|
519
|
+
codebaseMap: false,
|
|
520
|
+
preferences: "active-only",
|
|
521
|
+
tools: TOOLS_PLANNING,
|
|
522
|
+
artifacts: {
|
|
523
|
+
// Phase 3 migration (#4782): manifest matches today's actual
|
|
524
|
+
// buildRunUatPrompt inlining. Prior phase-1 entry listed
|
|
525
|
+
// `slice-plan` aspirationally — the real builder inlines the UAT
|
|
526
|
+
// file, the slice SUMMARY (optional), and the project row.
|
|
527
|
+
inline: ["slice-uat", "slice-summary", "project"],
|
|
528
|
+
excerpt: [],
|
|
529
|
+
onDemand: [],
|
|
530
|
+
},
|
|
531
|
+
maxSystemPromptChars: COMMON_BUDGET_SMALL,
|
|
532
|
+
},
|
|
533
|
+
"gate-evaluate": {
|
|
534
|
+
skills: { mode: "all" },
|
|
535
|
+
knowledge: "critical-only",
|
|
536
|
+
memory: "critical-only",
|
|
537
|
+
codebaseMap: false,
|
|
538
|
+
preferences: "active-only",
|
|
539
|
+
tools: TOOLS_PLANNING,
|
|
540
|
+
artifacts: {
|
|
541
|
+
inline: ["slice-plan", "prior-task-summaries"],
|
|
542
|
+
excerpt: [],
|
|
543
|
+
onDemand: [],
|
|
544
|
+
},
|
|
545
|
+
maxSystemPromptChars: COMMON_BUDGET_SMALL,
|
|
546
|
+
},
|
|
547
|
+
"rewrite-docs": {
|
|
548
|
+
skills: { mode: "all" },
|
|
549
|
+
knowledge: "scoped",
|
|
550
|
+
memory: "prompt-relevant",
|
|
551
|
+
codebaseMap: true,
|
|
552
|
+
preferences: "active-only",
|
|
553
|
+
tools: TOOLS_DOCS,
|
|
554
|
+
artifacts: {
|
|
555
|
+
inline: ["project", "requirements", "decisions", "templates"],
|
|
556
|
+
excerpt: [],
|
|
557
|
+
onDemand: [],
|
|
558
|
+
},
|
|
559
|
+
maxSystemPromptChars: COMMON_BUDGET_MEDIUM,
|
|
560
|
+
},
|
|
561
|
+
};
|
|
562
|
+
|
|
563
|
+
// ─── Lookup helper ────────────────────────────────────────────────────────
|
|
564
|
+
|
|
565
|
+
/**
|
|
566
|
+
* Return the manifest for a unit type, or null when the type is unknown.
|
|
567
|
+
*
|
|
568
|
+
* Callers MUST treat null as "fall through to today's default behavior"
|
|
569
|
+
* rather than erroring — unknown unit types may be experimental and
|
|
570
|
+
* should not crash the composer.
|
|
571
|
+
*/
|
|
572
|
+
export function resolveManifest(unitType: string): UnitContextManifest | null {
|
|
573
|
+
return (UNIT_MANIFESTS as Record<string, UnitContextManifest>)[unitType] ?? null;
|
|
574
|
+
}
|
|
@@ -13,6 +13,15 @@ export type FailureClass =
|
|
|
13
13
|
|
|
14
14
|
export type GateOutcome = "pass" | "fail" | "retry" | "manual-attention";
|
|
15
15
|
|
|
16
|
+
export type DispatchReasonCode =
|
|
17
|
+
| "policy"
|
|
18
|
+
| "state"
|
|
19
|
+
| "recovery"
|
|
20
|
+
| "manual"
|
|
21
|
+
| "dependency"
|
|
22
|
+
| "conflict"
|
|
23
|
+
| "retry";
|
|
24
|
+
|
|
16
25
|
export interface GateResult {
|
|
17
26
|
gateId: string;
|
|
18
27
|
gateType: string;
|
|
@@ -88,6 +97,38 @@ export interface TurnResult {
|
|
|
88
97
|
finishedAt: string;
|
|
89
98
|
}
|
|
90
99
|
|
|
100
|
+
export interface DispatchExplanation {
|
|
101
|
+
reasonCode: DispatchReasonCode;
|
|
102
|
+
summary: string;
|
|
103
|
+
evidence?: Record<string, unknown>;
|
|
104
|
+
blockedBy?: Array<{
|
|
105
|
+
kind: "gate" | "state" | "dependency" | "conflict" | "policy" | "manual";
|
|
106
|
+
id: string;
|
|
107
|
+
detail?: string;
|
|
108
|
+
}>;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export interface UokDispatchEnvelope {
|
|
112
|
+
action: "dispatch" | "stop" | "skip";
|
|
113
|
+
nodeKind?: UokNodeKind;
|
|
114
|
+
unitType?: string;
|
|
115
|
+
unitId?: string;
|
|
116
|
+
prompt?: string;
|
|
117
|
+
reason: DispatchExplanation;
|
|
118
|
+
gateVerdict?: GateResult;
|
|
119
|
+
constraints?: {
|
|
120
|
+
reads?: string[];
|
|
121
|
+
writes?: string[];
|
|
122
|
+
dependsOn?: string[];
|
|
123
|
+
maxWorkers?: number;
|
|
124
|
+
};
|
|
125
|
+
trace?: {
|
|
126
|
+
traceId?: string;
|
|
127
|
+
turnId?: string;
|
|
128
|
+
causedBy?: string;
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
91
132
|
export interface AuditEventEnvelope {
|
|
92
133
|
eventId: string;
|
|
93
134
|
traceId: string;
|
|
@@ -125,6 +166,30 @@ export interface UokGraphNode {
|
|
|
125
166
|
metadata?: Record<string, unknown>;
|
|
126
167
|
}
|
|
127
168
|
|
|
169
|
+
export interface WriterToken {
|
|
170
|
+
tokenId: string;
|
|
171
|
+
traceId: string;
|
|
172
|
+
turnId: string;
|
|
173
|
+
acquiredAt: string;
|
|
174
|
+
owner: "uok" | "legacy-compat" | "manual";
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
export interface WriteSequence {
|
|
178
|
+
traceId: string;
|
|
179
|
+
turnId: string;
|
|
180
|
+
sequence: number;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface WriteRecord {
|
|
184
|
+
writerToken: WriterToken;
|
|
185
|
+
sequence: WriteSequence;
|
|
186
|
+
category: "state" | "audit" | "gitops" | "gate" | "artifact" | "other";
|
|
187
|
+
path?: string;
|
|
188
|
+
operation: "append" | "replace" | "insert" | "update" | "delete" | "noop";
|
|
189
|
+
ts: string;
|
|
190
|
+
metadata?: Record<string, unknown>;
|
|
191
|
+
}
|
|
192
|
+
|
|
128
193
|
export interface UokTurnObserver {
|
|
129
194
|
onTurnStart(contract: TurnContract): void;
|
|
130
195
|
onPhaseResult(
|