gsd-pi 2.74.0-dev.2b524c3 → 2.74.0-dev.703eabc
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.js +85 -0
- package/dist/headless-query.js +4 -1
- package/dist/help-text.js +23 -0
- package/dist/resources/extensions/gsd/activity-log.js +16 -0
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +11 -4
- package/dist/resources/extensions/gsd/auto/loop.js +147 -10
- package/dist/resources/extensions/gsd/auto/phases.js +158 -4
- package/dist/resources/extensions/gsd/auto/session.js +10 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +11 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +51 -5
- package/dist/resources/extensions/gsd/auto-post-unit.js +220 -17
- package/dist/resources/extensions/gsd/auto-prompts.js +12 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +18 -0
- package/dist/resources/extensions/gsd/auto-verification.js +100 -2
- package/dist/resources/extensions/gsd/auto.js +36 -4
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +30 -8
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +45 -4
- package/dist/resources/extensions/gsd/commands/catalog.js +26 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +25 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +68 -9
- package/dist/resources/extensions/gsd/commands-add-tests.js +111 -0
- package/dist/resources/extensions/gsd/commands-backlog.js +140 -0
- package/dist/resources/extensions/gsd/commands-do.js +79 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +225 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +6 -6
- package/dist/resources/extensions/gsd/commands-pr-branch.js +180 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- package/dist/resources/extensions/gsd/commands-session-report.js +82 -0
- package/dist/resources/extensions/gsd/commands-ship.js +187 -0
- package/dist/resources/extensions/gsd/db-writer.js +3 -5
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +14 -1
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +144 -0
- package/dist/resources/extensions/gsd/ecosystem/loader.js +145 -0
- package/dist/resources/extensions/gsd/git-service.js +49 -1
- package/dist/resources/extensions/gsd/graph-context.js +157 -0
- package/dist/resources/extensions/gsd/gsd-db.js +581 -2
- package/dist/resources/extensions/gsd/guided-flow.js +23 -0
- package/dist/resources/extensions/gsd/index.js +15 -2
- package/dist/resources/extensions/gsd/init-wizard.js +1 -0
- package/dist/resources/extensions/gsd/journal.js +27 -0
- package/dist/resources/extensions/gsd/md-importer.js +3 -4
- package/dist/resources/extensions/gsd/memory-store.js +19 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -0
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +13 -12
- package/dist/resources/extensions/gsd/native-git-bridge.js +7 -4
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +33 -1
- package/dist/resources/extensions/gsd/preferences-models.js +20 -3
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +108 -2
- package/dist/resources/extensions/gsd/preferences.js +26 -0
- package/dist/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +12 -2
- package/dist/resources/extensions/gsd/state.js +5 -1
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +18 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +20 -0
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +39 -4
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +2 -5
- package/dist/resources/extensions/gsd/unit-ownership.js +1 -1
- package/dist/resources/extensions/gsd/uok/audit-toggle.js +7 -0
- package/dist/resources/extensions/gsd/uok/audit.js +40 -0
- package/dist/resources/extensions/gsd/uok/contracts.js +1 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +179 -0
- package/dist/resources/extensions/gsd/uok/flags.js +29 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +109 -0
- package/dist/resources/extensions/gsd/uok/gitops.js +53 -0
- package/dist/resources/extensions/gsd/uok/kernel.js +80 -0
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +133 -0
- package/dist/resources/extensions/gsd/uok/model-policy.js +66 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +132 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +22 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -69
- package/dist/resources/extensions/gsd/workflow-migration.js +21 -22
- package/dist/resources/extensions/gsd/workflow-projections.js +4 -1
- package/dist/resources/extensions/gsd/workflow-reconcile.js +14 -11
- package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -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 +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/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/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 +12 -12
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- 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 +3 -2
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/index.d.ts +3 -0
- package/packages/mcp-server/dist/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/index.js +3 -0
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/dist/readers/graph.d.ts +87 -0
- package/packages/mcp-server/dist/readers/graph.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/graph.js +655 -0
- package/packages/mcp-server/dist/readers/graph.js.map +1 -0
- package/packages/mcp-server/dist/readers/index.d.ts +2 -0
- package/packages/mcp-server/dist/readers/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/readers/index.js +1 -0
- package/packages/mcp-server/dist/readers/index.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +65 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/index.ts +15 -0
- package/packages/mcp-server/src/readers/graph.test.ts +604 -0
- package/packages/mcp-server/src/readers/graph.ts +855 -0
- package/packages/mcp-server/src/readers/index.ts +12 -0
- package/packages/mcp-server/src/server.ts +83 -0
- package/packages/mcp-server/tsconfig.json +1 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -0
- package/packages/native/package.json +2 -2
- package/packages/native/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.json +1 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-ai/dist/index.d.ts +1 -9
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -9
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts +19 -0
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/capability-patches.js +36 -0
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -0
- package/packages/pi-ai/dist/{models.custom.d.ts → models/custom.d.ts} +1 -1
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -0
- package/packages/pi-ai/dist/{models.custom.js → models/custom.js} +4 -4
- package/packages/pi-ai/dist/models/custom.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +1482 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +1484 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts +377 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js +379 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts +700 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.js +702 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/cerebras.d.ts +71 -0
- package/packages/pi-ai/dist/models/generated/cerebras.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/cerebras.js +73 -0
- package/packages/pi-ai/dist/models/generated/cerebras.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.d.ts +590 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.js +444 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +156 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js +158 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.js +107 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.d.ts +207 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.js +209 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google.d.ts +462 -0
- package/packages/pi-ai/dist/models/generated/google.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google.js +464 -0
- package/packages/pi-ai/dist/models/generated/google.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/groq.d.ts +309 -0
- package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/groq.js +311 -0
- package/packages/pi-ai/dist/models/generated/groq.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/huggingface.d.ts +383 -0
- package/packages/pi-ai/dist/models/generated/huggingface.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/huggingface.js +347 -0
- package/packages/pi-ai/dist/models/generated/huggingface.js.map +1 -0
- package/packages/pi-ai/dist/{models.generated.d.ts → models/generated/index.d.ts} +1 -1
- package/packages/pi-ai/dist/{models.generated.d.ts.map → models/generated/index.d.ts.map} +1 -1
- package/packages/pi-ai/dist/models/generated/index.js +51 -0
- package/packages/pi-ai/dist/models/generated/index.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts +37 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.js +39 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.js +107 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/minimax.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax.js +107 -0
- package/packages/pi-ai/dist/models/generated/minimax.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/mistral.d.ts +445 -0
- package/packages/pi-ai/dist/models/generated/mistral.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/mistral.js +447 -0
- package/packages/pi-ai/dist/models/generated/mistral.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +139 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js +141 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts +700 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai.js +702 -0
- package/packages/pi-ai/dist/models/generated/openai.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.d.ts +122 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.js +124 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode.d.ts +530 -0
- package/packages/pi-ai/dist/models/generated/opencode.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode.js +532 -0
- package/packages/pi-ai/dist/models/generated/opencode.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts +4270 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js +4272 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts +2604 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js +2606 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/xai.d.ts +411 -0
- package/packages/pi-ai/dist/models/generated/xai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/xai.js +413 -0
- package/packages/pi-ai/dist/models/generated/xai.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/zai.d.ts +276 -0
- package/packages/pi-ai/dist/models/generated/zai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/zai.js +239 -0
- package/packages/pi-ai/dist/models/generated/zai.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts +27 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/index.js +80 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -0
- package/packages/pi-ai/dist/models.d.ts +1 -36
- package/packages/pi-ai/dist/models.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +1 -2
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/models.js +3 -112
- package/packages/pi-ai/dist/models.js.map +1 -1
- package/packages/pi-ai/dist/models.test.js +6 -5
- 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 +74 -40
- package/packages/pi-ai/src/index.ts +1 -9
- package/packages/pi-ai/src/models/capability-patches.ts +40 -0
- package/packages/pi-ai/src/{models.custom.ts → models/custom.ts} +4 -4
- package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +1486 -0
- package/packages/pi-ai/src/models/generated/anthropic.ts +381 -0
- package/packages/pi-ai/src/models/generated/azure-openai-responses.ts +704 -0
- package/packages/pi-ai/src/models/generated/cerebras.ts +75 -0
- package/packages/pi-ai/src/models/generated/github-copilot.ts +446 -0
- package/packages/pi-ai/src/models/generated/google-antigravity.ts +160 -0
- package/packages/pi-ai/src/models/generated/google-gemini-cli.ts +109 -0
- package/packages/pi-ai/src/models/generated/google-vertex.ts +211 -0
- package/packages/pi-ai/src/models/generated/google.ts +466 -0
- package/packages/pi-ai/src/models/generated/groq.ts +313 -0
- package/packages/pi-ai/src/models/generated/huggingface.ts +349 -0
- package/packages/pi-ai/src/models/generated/index.ts +52 -0
- package/packages/pi-ai/src/models/generated/kimi-coding.ts +41 -0
- package/packages/pi-ai/src/models/generated/minimax-cn.ts +109 -0
- package/packages/pi-ai/src/models/generated/minimax.ts +109 -0
- package/packages/pi-ai/src/models/generated/mistral.ts +449 -0
- package/packages/pi-ai/src/models/generated/openai-codex.ts +143 -0
- package/packages/pi-ai/src/models/generated/openai.ts +704 -0
- package/packages/pi-ai/src/models/generated/opencode-go.ts +126 -0
- package/packages/pi-ai/src/models/generated/opencode.ts +534 -0
- package/packages/pi-ai/src/models/generated/openrouter.ts +4274 -0
- package/packages/pi-ai/src/models/generated/vercel-ai-gateway.ts +2608 -0
- package/packages/pi-ai/src/models/generated/xai.ts +415 -0
- package/packages/pi-ai/src/models/generated/zai.ts +241 -0
- package/packages/pi-ai/src/models/index.ts +106 -0
- package/packages/pi-ai/src/models.generated.test.ts +1 -2
- package/packages/pi-ai/src/models.test.ts +6 -5
- package/packages/pi-ai/src/models.ts +3 -153
- package/packages/pi-ai/tsconfig.json +1 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +8 -2
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +472 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js +52 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +11 -0
- 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/assistant-message.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +23 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +47 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -0
- 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 +51 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +22 -22
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +232 -18
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +38 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +13 -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 +53 -6
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +12 -6
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +612 -0
- package/packages/pi-coding-agent/src/core/model-registry-env-fallback.test.ts +59 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +19 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +25 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +67 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +66 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +23 -26
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +298 -41
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +73 -6
- package/packages/pi-coding-agent/src/types/ambient-modules.d.ts +69 -0
- package/packages/pi-coding-agent/tsconfig.json +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/tsconfig.json +1 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -0
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.json +1 -0
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -0
- package/src/resources/extensions/gsd/activity-log.ts +21 -0
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +12 -4
- package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -0
- package/src/resources/extensions/gsd/auto/loop.ts +159 -10
- package/src/resources/extensions/gsd/auto/phases.ts +191 -4
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +16 -6
- package/src/resources/extensions/gsd/auto-model-selection.ts +66 -5
- package/src/resources/extensions/gsd/auto-post-unit.ts +238 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +25 -1
- package/src/resources/extensions/gsd/auto-verification.ts +129 -2
- package/src/resources/extensions/gsd/auto.ts +41 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +38 -8
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +56 -3
- package/src/resources/extensions/gsd/commands/catalog.ts +26 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +25 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +74 -9
- package/src/resources/extensions/gsd/commands-add-tests.ts +137 -0
- package/src/resources/extensions/gsd/commands-backlog.ts +182 -0
- package/src/resources/extensions/gsd/commands-do.ts +109 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +304 -0
- package/src/resources/extensions/gsd/commands-maintenance.ts +6 -6
- package/src/resources/extensions/gsd/commands-pr-branch.ts +234 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- package/src/resources/extensions/gsd/commands-session-report.ts +101 -0
- package/src/resources/extensions/gsd/commands-ship.ts +219 -0
- package/src/resources/extensions/gsd/db-writer.ts +3 -5
- package/src/resources/extensions/gsd/docs/preferences-reference.md +14 -1
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +228 -0
- package/src/resources/extensions/gsd/ecosystem/loader.ts +201 -0
- package/src/resources/extensions/gsd/git-service.ts +68 -0
- package/src/resources/extensions/gsd/graph-context.ts +212 -0
- package/src/resources/extensions/gsd/gsd-db.ts +788 -3
- package/src/resources/extensions/gsd/guided-flow.ts +32 -0
- package/src/resources/extensions/gsd/index.ts +18 -2
- package/src/resources/extensions/gsd/init-wizard.ts +3 -2
- package/src/resources/extensions/gsd/journal.ts +30 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -5
- package/src/resources/extensions/gsd/memory-store.ts +31 -62
- package/src/resources/extensions/gsd/metrics.ts +26 -0
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +13 -14
- package/src/resources/extensions/gsd/native-git-bridge.ts +11 -12
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +40 -1
- package/src/resources/extensions/gsd/preferences-models.ts +20 -3
- package/src/resources/extensions/gsd/preferences-types.ts +32 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +107 -2
- package/src/resources/extensions/gsd/preferences.ts +28 -0
- package/src/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/src/resources/extensions/gsd/session-lock.ts +14 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +20 -1
- package/src/resources/extensions/gsd/state.ts +9 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +18 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/commands-backlog.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/commands-do.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +340 -0
- package/src/resources/extensions/gsd/tests/commands-pr-branch.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/commands-session-report.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/commands-ship.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +154 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +10 -7
- package/src/resources/extensions/gsd/tests/graph-context.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -3
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +180 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -5
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +101 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/uok-model-policy.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/uok-preferences.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +223 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +26 -0
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +48 -3
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +3 -11
- package/src/resources/extensions/gsd/triage-resolution.ts +2 -7
- package/src/resources/extensions/gsd/types.ts +14 -1
- package/src/resources/extensions/gsd/unit-ownership.ts +2 -2
- package/src/resources/extensions/gsd/uok/audit-toggle.ts +9 -0
- package/src/resources/extensions/gsd/uok/audit.ts +51 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +135 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +241 -0
- package/src/resources/extensions/gsd/uok/flags.ts +45 -0
- package/src/resources/extensions/gsd/uok/gate-runner.ts +146 -0
- package/src/resources/extensions/gsd/uok/gitops.ts +75 -0
- package/src/resources/extensions/gsd/uok/kernel.ts +105 -0
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +162 -0
- package/src/resources/extensions/gsd/uok/model-policy.ts +112 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +156 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +27 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +9 -104
- package/src/resources/extensions/gsd/workflow-migration.ts +21 -29
- package/src/resources/extensions/gsd/workflow-projections.ts +8 -1
- package/src/resources/extensions/gsd/workflow-reconcile.ts +15 -15
- package/src/resources/extensions/ttsr/ttsr-manager.ts +10 -5
- package/packages/pi-ai/dist/models.custom.d.ts.map +0 -1
- package/packages/pi-ai/dist/models.custom.js.map +0 -1
- package/packages/pi-ai/dist/models.generated.js +0 -14343
- package/packages/pi-ai/dist/models.generated.js.map +0 -1
- package/packages/pi-ai/src/models.generated.ts +0 -14345
- /package/dist/web/standalone/.next/static/{YzIEI9sxJy4t5xgClF08g → 3U-oZ5FT59BM7sm2GInic}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{YzIEI9sxJy4t5xgClF08g → 3U-oZ5FT59BM7sm2GInic}/_ssgManifest.js +0 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { ExtensionAPI, ExtensionContext, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
10
|
+
import type { GSDState } from "./types.js";
|
|
10
11
|
import { showNextAction } from "../shared/tui.js";
|
|
11
12
|
import { loadFile, saveFile } from "./files.js";
|
|
12
13
|
import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
|
|
@@ -36,6 +37,8 @@ import { nativeIsRepo, nativeInit } from "./native-git-bridge.js";
|
|
|
36
37
|
import { isInheritedRepo } from "./repo-identity.js";
|
|
37
38
|
import { ensureGitignore, ensurePreferences, untrackRuntimeFiles } from "./gitignore.js";
|
|
38
39
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
40
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
41
|
+
import { ensurePlanV2Graph } from "./uok/plan-v2.js";
|
|
39
42
|
import { detectProjectState } from "./detection.js";
|
|
40
43
|
import { showProjectInit, offerMigration } from "./init-wizard.js";
|
|
41
44
|
import { validateDirectory } from "./validate-directory.js";
|
|
@@ -83,6 +86,33 @@ function nextMilestoneIdReserved(existingIds: string[], uniqueEnabled: boolean):
|
|
|
83
86
|
return id;
|
|
84
87
|
}
|
|
85
88
|
|
|
89
|
+
function needsPlanV2Gate(state: GSDState): boolean {
|
|
90
|
+
return state.phase === "executing"
|
|
91
|
+
|| state.phase === "summarizing"
|
|
92
|
+
|| state.phase === "validating-milestone"
|
|
93
|
+
|| state.phase === "completing-milestone";
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function runPlanV2Gate(
|
|
97
|
+
ctx: ExtensionContext,
|
|
98
|
+
basePath: string,
|
|
99
|
+
state: GSDState,
|
|
100
|
+
): boolean {
|
|
101
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
102
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
103
|
+
if (!uokFlags.planV2 || !needsPlanV2Gate(state)) return true;
|
|
104
|
+
const compiled = ensurePlanV2Graph(basePath, state);
|
|
105
|
+
if (!compiled.ok) {
|
|
106
|
+
const reason = compiled.reason ?? "plan-v2 compilation failed";
|
|
107
|
+
ctx.ui.notify(
|
|
108
|
+
`Plan gate failed-closed: ${reason}. Complete plan/discuss artifacts before execution.`,
|
|
109
|
+
"error",
|
|
110
|
+
);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
|
|
86
116
|
// ─── Commit Instruction Helpers ──────────────────────────────────────────────
|
|
87
117
|
|
|
88
118
|
/** Build commit instruction for planning prompts. .gsd/ is managed externally and always gitignored. */
|
|
@@ -1320,6 +1350,8 @@ export async function showSmartEntry(
|
|
|
1320
1350
|
logWarning("guided", `STATE.md rebuild failed: ${(err as Error).message}`);
|
|
1321
1351
|
}
|
|
1322
1352
|
|
|
1353
|
+
if (!runPlanV2Gate(ctx, basePath, state)) return;
|
|
1354
|
+
|
|
1323
1355
|
if (!state.activeMilestone?.id) {
|
|
1324
1356
|
// Guard: if a discuss session is already in flight, don't re-inject the prompt.
|
|
1325
1357
|
// Both /gsd and /gsd auto reach this branch when no milestone exists yet.
|
|
@@ -16,6 +16,22 @@ export {
|
|
|
16
16
|
} from "./bootstrap/write-gate.js";
|
|
17
17
|
|
|
18
18
|
export default async function registerExtension(pi: ExtensionAPI) {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// Always register the core /gsd command first, in isolation.
|
|
20
|
+
// This ensures /gsd is available even if the full bootstrap (shortcuts,
|
|
21
|
+
// tools, hooks) fails — e.g. due to a Windows-specific import error.
|
|
22
|
+
const { registerGSDCommand } = await import("./commands/index.js");
|
|
23
|
+
registerGSDCommand(pi);
|
|
24
|
+
|
|
25
|
+
// Full setup (shortcuts, tools, hooks) in a separate try/catch so that
|
|
26
|
+
// any platform-specific load failure doesn't take out the core command.
|
|
27
|
+
try {
|
|
28
|
+
const { registerGsdExtension } = await import("./bootstrap/register-extension.js");
|
|
29
|
+
registerGsdExtension(pi);
|
|
30
|
+
} catch (err) {
|
|
31
|
+
const { logWarning } = await import("./workflow-logger.js");
|
|
32
|
+
logWarning(
|
|
33
|
+
"bootstrap",
|
|
34
|
+
`Extension setup partially failed — /gsd commands are available but shortcuts/tools may be missing: ${err instanceof Error ? err.message : String(err)}`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
21
37
|
}
|
|
@@ -33,7 +33,7 @@ interface ProjectPreferences {
|
|
|
33
33
|
mainBranch: string;
|
|
34
34
|
verificationCommands: string[];
|
|
35
35
|
customInstructions: string[];
|
|
36
|
-
tokenProfile: "budget" | "balanced" | "quality";
|
|
36
|
+
tokenProfile: "budget" | "balanced" | "quality" | "burn-max";
|
|
37
37
|
skipResearch: boolean;
|
|
38
38
|
autoPush: boolean;
|
|
39
39
|
}
|
|
@@ -413,10 +413,11 @@ async function customizeAdvancedPrefs(
|
|
|
413
413
|
{ id: "balanced", label: "Balanced", description: "Good trade-off (default)", recommended: true },
|
|
414
414
|
{ id: "budget", label: "Budget", description: "Minimize token usage" },
|
|
415
415
|
{ id: "quality", label: "Quality", description: "Maximize thoroughness" },
|
|
416
|
+
{ id: "burn-max", label: "Burn Max", description: "Maximum depth, no phase skips" },
|
|
416
417
|
],
|
|
417
418
|
});
|
|
418
419
|
if (profileChoice !== "not_yet") {
|
|
419
|
-
prefs.tokenProfile = profileChoice as "budget" | "balanced" | "quality";
|
|
420
|
+
prefs.tokenProfile = profileChoice as "budget" | "balanced" | "quality" | "burn-max";
|
|
420
421
|
}
|
|
421
422
|
|
|
422
423
|
// Skip research
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
import { appendFileSync, mkdirSync, readdirSync, readFileSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
import { gsdRoot } from "./paths.js";
|
|
18
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
19
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
18
20
|
|
|
19
21
|
// ─── Types ────────────────────────────────────────────────────────────────────
|
|
20
22
|
|
|
@@ -90,6 +92,34 @@ export function emitJournalEvent(basePath: string, entry: JournalEntry): void {
|
|
|
90
92
|
} catch {
|
|
91
93
|
// Silent failure — journal must never break auto-mode
|
|
92
94
|
}
|
|
95
|
+
|
|
96
|
+
if (!isUnifiedAuditEnabled()) return;
|
|
97
|
+
try {
|
|
98
|
+
const causedBy = entry.causedBy
|
|
99
|
+
? `${entry.causedBy.flowId}:${entry.causedBy.seq}`
|
|
100
|
+
: undefined;
|
|
101
|
+
const turnId =
|
|
102
|
+
typeof entry.data?.turnId === "string"
|
|
103
|
+
? entry.data.turnId
|
|
104
|
+
: undefined;
|
|
105
|
+
emitUokAuditEvent(
|
|
106
|
+
basePath,
|
|
107
|
+
buildAuditEnvelope({
|
|
108
|
+
traceId: entry.flowId,
|
|
109
|
+
turnId,
|
|
110
|
+
causedBy,
|
|
111
|
+
category: "orchestration",
|
|
112
|
+
type: `journal-${entry.eventType}`,
|
|
113
|
+
payload: {
|
|
114
|
+
seq: entry.seq,
|
|
115
|
+
rule: entry.rule,
|
|
116
|
+
data: entry.data ?? {},
|
|
117
|
+
},
|
|
118
|
+
}),
|
|
119
|
+
);
|
|
120
|
+
} catch {
|
|
121
|
+
// Best-effort: audit projection must never block journal writes.
|
|
122
|
+
}
|
|
93
123
|
}
|
|
94
124
|
|
|
95
125
|
// ─── Query ────────────────────────────────────────────────────────────────────
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
insertTask,
|
|
17
17
|
openDatabase,
|
|
18
18
|
transaction,
|
|
19
|
+
updateSliceStatus,
|
|
19
20
|
_getAdapter,
|
|
20
21
|
} from './gsd-db.js';
|
|
21
22
|
import {
|
|
@@ -672,11 +673,8 @@ export function migrateHierarchyToDb(basePath: string): {
|
|
|
672
673
|
return t.done && existsSync(summaryFile);
|
|
673
674
|
});
|
|
674
675
|
if (allTasksDone && hasSliceSummary) {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
adapter.prepare(
|
|
678
|
-
`UPDATE slices SET status = 'complete' WHERE id = :sid AND milestone_id = :mid`,
|
|
679
|
-
).run({ ':sid': sliceEntry.id, ':mid': milestoneId });
|
|
676
|
+
if (_getAdapter()) {
|
|
677
|
+
updateSliceStatus(milestoneId, sliceEntry.id, 'complete');
|
|
680
678
|
process.stderr.write(
|
|
681
679
|
`gsd-migrate: ${milestoneId}/${sliceEntry.id} all tasks + slice summary complete — upgrading slice to complete\n`,
|
|
682
680
|
);
|
|
@@ -3,7 +3,19 @@
|
|
|
3
3
|
// Storage layer for auto-learned project memories. Follows context-store.ts patterns.
|
|
4
4
|
// All functions degrade gracefully: return empty results when DB unavailable, never throw.
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
isDbAvailable,
|
|
8
|
+
_getAdapter,
|
|
9
|
+
transaction,
|
|
10
|
+
insertMemoryRow,
|
|
11
|
+
rewriteMemoryId,
|
|
12
|
+
updateMemoryContentRow,
|
|
13
|
+
incrementMemoryHitCount,
|
|
14
|
+
supersedeMemoryRow,
|
|
15
|
+
markMemoryUnitProcessed,
|
|
16
|
+
decayMemoriesBefore,
|
|
17
|
+
supersedeLowestRankedMemories,
|
|
18
|
+
} from './gsd-db.js';
|
|
7
19
|
|
|
8
20
|
// ─── Types ──────────────────────────────────────────────────────────────────
|
|
9
21
|
|
|
@@ -170,28 +182,22 @@ export function createMemory(fields: {
|
|
|
170
182
|
const now = new Date().toISOString();
|
|
171
183
|
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
172
184
|
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
':source_unit_id': fields.source_unit_id ?? null,
|
|
183
|
-
':created_at': now,
|
|
184
|
-
':updated_at': now,
|
|
185
|
+
insertMemoryRow({
|
|
186
|
+
id: placeholder,
|
|
187
|
+
category: fields.category,
|
|
188
|
+
content: fields.content,
|
|
189
|
+
confidence: fields.confidence ?? 0.8,
|
|
190
|
+
sourceUnitType: fields.source_unit_type ?? null,
|
|
191
|
+
sourceUnitId: fields.source_unit_id ?? null,
|
|
192
|
+
createdAt: now,
|
|
193
|
+
updatedAt: now,
|
|
185
194
|
});
|
|
186
|
-
// Derive the real ID from the assigned seq
|
|
195
|
+
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
187
196
|
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
188
197
|
if (!row) return placeholder; // fallback — should not happen
|
|
189
198
|
const seq = row['seq'] as number;
|
|
190
199
|
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
191
|
-
|
|
192
|
-
':real_id': realId,
|
|
193
|
-
':placeholder': placeholder,
|
|
194
|
-
});
|
|
200
|
+
rewriteMemoryId(placeholder, realId);
|
|
195
201
|
return realId;
|
|
196
202
|
} catch {
|
|
197
203
|
return null;
|
|
@@ -203,20 +209,9 @@ export function createMemory(fields: {
|
|
|
203
209
|
*/
|
|
204
210
|
export function updateMemoryContent(id: string, content: string, confidence?: number): boolean {
|
|
205
211
|
if (!isDbAvailable()) return false;
|
|
206
|
-
const adapter = _getAdapter();
|
|
207
|
-
if (!adapter) return false;
|
|
208
212
|
|
|
209
213
|
try {
|
|
210
|
-
|
|
211
|
-
if (confidence != null) {
|
|
212
|
-
adapter.prepare(
|
|
213
|
-
'UPDATE memories SET content = :content, confidence = :confidence, updated_at = :updated_at WHERE id = :id',
|
|
214
|
-
).run({ ':content': content, ':confidence': confidence, ':updated_at': now, ':id': id });
|
|
215
|
-
} else {
|
|
216
|
-
adapter.prepare(
|
|
217
|
-
'UPDATE memories SET content = :content, updated_at = :updated_at WHERE id = :id',
|
|
218
|
-
).run({ ':content': content, ':updated_at': now, ':id': id });
|
|
219
|
-
}
|
|
214
|
+
updateMemoryContentRow(id, content, confidence, new Date().toISOString());
|
|
220
215
|
return true;
|
|
221
216
|
} catch {
|
|
222
217
|
return false;
|
|
@@ -228,13 +223,9 @@ export function updateMemoryContent(id: string, content: string, confidence?: nu
|
|
|
228
223
|
*/
|
|
229
224
|
export function reinforceMemory(id: string): boolean {
|
|
230
225
|
if (!isDbAvailable()) return false;
|
|
231
|
-
const adapter = _getAdapter();
|
|
232
|
-
if (!adapter) return false;
|
|
233
226
|
|
|
234
227
|
try {
|
|
235
|
-
|
|
236
|
-
'UPDATE memories SET hit_count = hit_count + 1, updated_at = :updated_at WHERE id = :id',
|
|
237
|
-
).run({ ':updated_at': new Date().toISOString(), ':id': id });
|
|
228
|
+
incrementMemoryHitCount(id, new Date().toISOString());
|
|
238
229
|
return true;
|
|
239
230
|
} catch {
|
|
240
231
|
return false;
|
|
@@ -246,13 +237,9 @@ export function reinforceMemory(id: string): boolean {
|
|
|
246
237
|
*/
|
|
247
238
|
export function supersedeMemory(oldId: string, newId: string): boolean {
|
|
248
239
|
if (!isDbAvailable()) return false;
|
|
249
|
-
const adapter = _getAdapter();
|
|
250
|
-
if (!adapter) return false;
|
|
251
240
|
|
|
252
241
|
try {
|
|
253
|
-
|
|
254
|
-
'UPDATE memories SET superseded_by = :new_id, updated_at = :updated_at WHERE id = :old_id',
|
|
255
|
-
).run({ ':new_id': newId, ':updated_at': new Date().toISOString(), ':old_id': oldId });
|
|
242
|
+
supersedeMemoryRow(oldId, newId, new Date().toISOString());
|
|
256
243
|
return true;
|
|
257
244
|
} catch {
|
|
258
245
|
return false;
|
|
@@ -284,14 +271,9 @@ export function isUnitProcessed(unitKey: string): boolean {
|
|
|
284
271
|
*/
|
|
285
272
|
export function markUnitProcessed(unitKey: string, activityFile: string): boolean {
|
|
286
273
|
if (!isDbAvailable()) return false;
|
|
287
|
-
const adapter = _getAdapter();
|
|
288
|
-
if (!adapter) return false;
|
|
289
274
|
|
|
290
275
|
try {
|
|
291
|
-
|
|
292
|
-
`INSERT OR IGNORE INTO memory_processed_units (unit_key, activity_file, processed_at)
|
|
293
|
-
VALUES (:key, :file, :at)`,
|
|
294
|
-
).run({ ':key': unitKey, ':file': activityFile, ':at': new Date().toISOString() });
|
|
276
|
+
markMemoryUnitProcessed(unitKey, activityFile, new Date().toISOString());
|
|
295
277
|
return true;
|
|
296
278
|
} catch {
|
|
297
279
|
return false;
|
|
@@ -310,7 +292,7 @@ export function decayStaleMemories(thresholdUnits = 20): void {
|
|
|
310
292
|
if (!adapter) return;
|
|
311
293
|
|
|
312
294
|
try {
|
|
313
|
-
// Find the timestamp of the Nth most recent processed unit
|
|
295
|
+
// Find the timestamp of the Nth most recent processed unit (read-only SELECT)
|
|
314
296
|
const row = adapter.prepare(
|
|
315
297
|
`SELECT processed_at FROM memory_processed_units
|
|
316
298
|
ORDER BY processed_at DESC
|
|
@@ -320,11 +302,7 @@ export function decayStaleMemories(thresholdUnits = 20): void {
|
|
|
320
302
|
if (!row) return; // not enough processed units yet
|
|
321
303
|
|
|
322
304
|
const cutoff = row['processed_at'] as string;
|
|
323
|
-
|
|
324
|
-
`UPDATE memories
|
|
325
|
-
SET confidence = MAX(0.1, confidence - 0.1), updated_at = :now
|
|
326
|
-
WHERE superseded_by IS NULL AND updated_at < :cutoff AND confidence > 0.1`,
|
|
327
|
-
).run({ ':now': new Date().toISOString(), ':cutoff': cutoff });
|
|
305
|
+
decayMemoriesBefore(cutoff, new Date().toISOString());
|
|
328
306
|
} catch {
|
|
329
307
|
// non-fatal
|
|
330
308
|
}
|
|
@@ -346,16 +324,7 @@ export function enforceMemoryCap(max = 50): void {
|
|
|
346
324
|
if (count <= max) return;
|
|
347
325
|
|
|
348
326
|
const excess = count - max;
|
|
349
|
-
|
|
350
|
-
adapter.prepare(
|
|
351
|
-
`UPDATE memories SET superseded_by = 'CAP_EXCEEDED', updated_at = :now
|
|
352
|
-
WHERE id IN (
|
|
353
|
-
SELECT id FROM memories
|
|
354
|
-
WHERE superseded_by IS NULL
|
|
355
|
-
ORDER BY (confidence * (1.0 + hit_count * 0.1)) ASC
|
|
356
|
-
LIMIT :limit
|
|
357
|
-
)`,
|
|
358
|
-
).run({ ':now': new Date().toISOString(), ':limit': excess });
|
|
327
|
+
supersedeLowestRankedMemories(excess, new Date().toISOString());
|
|
359
328
|
} catch {
|
|
360
329
|
// non-fatal
|
|
361
330
|
}
|
|
@@ -19,6 +19,8 @@ import { gsdRoot } from "./paths.js";
|
|
|
19
19
|
import { getAndClearSkills } from "./skill-telemetry.js";
|
|
20
20
|
import { loadJsonFile, loadJsonFileOrNull, saveJsonFile } from "./json-persistence.js";
|
|
21
21
|
import { parseUnitId } from "./unit-id.js";
|
|
22
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
23
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
22
24
|
|
|
23
25
|
// Re-export from shared — import directly from format-utils to avoid pulling
|
|
24
26
|
// in the full barrel (mod.js → ui.js → @gsd/pi-tui) which breaks when loaded
|
|
@@ -143,6 +145,9 @@ export function snapshotUnitMetrics(
|
|
|
143
145
|
promptCharCount?: number;
|
|
144
146
|
baselineCharCount?: number;
|
|
145
147
|
autoSessionKey?: string;
|
|
148
|
+
traceId?: string;
|
|
149
|
+
turnId?: string;
|
|
150
|
+
causedBy?: string;
|
|
146
151
|
},
|
|
147
152
|
): UnitMetrics | null {
|
|
148
153
|
if (!ledger) return null;
|
|
@@ -235,6 +240,27 @@ export function snapshotUnitMetrics(
|
|
|
235
240
|
}
|
|
236
241
|
saveLedger(basePath, ledger);
|
|
237
242
|
|
|
243
|
+
if (isUnifiedAuditEnabled()) {
|
|
244
|
+
emitUokAuditEvent(
|
|
245
|
+
basePath,
|
|
246
|
+
buildAuditEnvelope({
|
|
247
|
+
traceId: opts?.traceId ?? `metrics:${unitType}:${unitId}`,
|
|
248
|
+
turnId: opts?.turnId,
|
|
249
|
+
causedBy: opts?.causedBy,
|
|
250
|
+
category: "metrics",
|
|
251
|
+
type: "unit-metrics-snapshot",
|
|
252
|
+
payload: {
|
|
253
|
+
unitType,
|
|
254
|
+
unitId,
|
|
255
|
+
model,
|
|
256
|
+
tokens: unit.tokens,
|
|
257
|
+
cost: unit.cost,
|
|
258
|
+
toolCalls: unit.toolCalls,
|
|
259
|
+
},
|
|
260
|
+
}),
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
238
264
|
return unit;
|
|
239
265
|
}
|
|
240
266
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* dispatch rules, and state derivation. See gate-registry.ts.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { isDbAvailable, upsertQualityGate } from "./gsd-db.js";
|
|
15
15
|
import { getGatesForTurn } from "./gate-registry.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -31,24 +31,23 @@ export function insertMilestoneValidationGates(
|
|
|
31
31
|
verdict: string,
|
|
32
32
|
evaluatedAt: string,
|
|
33
33
|
): void {
|
|
34
|
-
|
|
35
|
-
if (!db) return;
|
|
34
|
+
if (!isDbAvailable()) return;
|
|
36
35
|
|
|
37
36
|
const gateVerdict = verdict === "pass" ? "pass" : "flag";
|
|
38
37
|
const milestoneGates = getGatesForTurn("validate-milestone");
|
|
39
38
|
|
|
40
39
|
for (const def of milestoneGates) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
upsertQualityGate({
|
|
41
|
+
milestoneId,
|
|
42
|
+
sliceId,
|
|
43
|
+
gateId: def.id,
|
|
44
|
+
scope: "milestone",
|
|
45
|
+
taskId: "",
|
|
46
|
+
status: "complete",
|
|
47
|
+
verdict: gateVerdict,
|
|
48
|
+
rationale: `${def.promptSection} — milestone validation verdict: ${verdict}`,
|
|
49
|
+
findings: "",
|
|
50
|
+
evaluatedAt,
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
53
|
}
|
|
@@ -323,7 +323,7 @@ export function nativeIsRepo(basePath: string): boolean {
|
|
|
323
323
|
return native.gitIsRepo(basePath);
|
|
324
324
|
}
|
|
325
325
|
try {
|
|
326
|
-
|
|
326
|
+
execFileSync("git", ["rev-parse", "--git-dir"], { cwd: basePath, stdio: "pipe" });
|
|
327
327
|
return true;
|
|
328
328
|
} catch {
|
|
329
329
|
return false;
|
|
@@ -790,16 +790,15 @@ export function nativeCommit(
|
|
|
790
790
|
|
|
791
791
|
// Fallback: use git commit with stdin pipe for safe multi-line messages
|
|
792
792
|
try {
|
|
793
|
-
const
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
).trim();
|
|
793
|
+
const args = ["commit", "--no-verify", "-F", "-"];
|
|
794
|
+
if (options?.allowEmpty) args.push("--allow-empty");
|
|
795
|
+
const result = execFileSync("git", args, {
|
|
796
|
+
cwd: basePath,
|
|
797
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
798
|
+
encoding: "utf-8",
|
|
799
|
+
env: GIT_NO_PROMPT_ENV,
|
|
800
|
+
input: message,
|
|
801
|
+
}).trim();
|
|
803
802
|
return result;
|
|
804
803
|
} catch (err: unknown) {
|
|
805
804
|
const errObj = err as { stdout?: string; stderr?: string; message?: string };
|
|
@@ -940,7 +939,7 @@ export function nativeResetHard(basePath: string): void {
|
|
|
940
939
|
native.gitResetHard(basePath);
|
|
941
940
|
return;
|
|
942
941
|
}
|
|
943
|
-
|
|
942
|
+
execFileSync("git", ["reset", "--hard", "HEAD"], { cwd: basePath, stdio: "pipe" });
|
|
944
943
|
}
|
|
945
944
|
|
|
946
945
|
/**
|
|
@@ -42,6 +42,8 @@ import {
|
|
|
42
42
|
} from "./parallel-eligibility.js";
|
|
43
43
|
import { getErrorMessage } from "./error-utils.js";
|
|
44
44
|
import { logWarning } from "./workflow-logger.js";
|
|
45
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
46
|
+
import { selectConflictFreeBatch } from "./uok/execution-graph.js";
|
|
45
47
|
|
|
46
48
|
// ─── Types ─────────────────────────────────────────────────────────────────
|
|
47
49
|
|
|
@@ -69,6 +71,10 @@ export interface OrchestratorState {
|
|
|
69
71
|
|
|
70
72
|
let state: OrchestratorState | null = null;
|
|
71
73
|
|
|
74
|
+
function overlapKey(a: string, b: string): string {
|
|
75
|
+
return a < b ? `${a}::${b}` : `${b}::${a}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
72
78
|
// ─── Persistence ──────────────────────────────────────────────────────────
|
|
73
79
|
|
|
74
80
|
const ORCHESTRATOR_STATE_FILE = "orchestrator.json";
|
|
@@ -365,6 +371,7 @@ export async function startParallel(
|
|
|
365
371
|
}
|
|
366
372
|
|
|
367
373
|
const config = resolveParallelConfig(prefs);
|
|
374
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
368
375
|
|
|
369
376
|
// Release any leftover state from a previous session before reassigning
|
|
370
377
|
if (state) {
|
|
@@ -418,8 +425,40 @@ export async function startParallel(
|
|
|
418
425
|
const started: string[] = [];
|
|
419
426
|
const errors: Array<{ mid: string; error: string }> = [];
|
|
420
427
|
|
|
428
|
+
let filteredMilestoneIds = milestoneIds;
|
|
429
|
+
if (uokFlags.executionGraph && milestoneIds.length > 1) {
|
|
430
|
+
try {
|
|
431
|
+
const requestedIds = new Set(milestoneIds);
|
|
432
|
+
const candidates = await analyzeParallelEligibility(basePath);
|
|
433
|
+
const overlapPairs = new Set<string>();
|
|
434
|
+
for (const overlap of candidates.fileOverlaps) {
|
|
435
|
+
if (!requestedIds.has(overlap.mid1) || !requestedIds.has(overlap.mid2)) continue;
|
|
436
|
+
overlapPairs.add(overlapKey(overlap.mid1, overlap.mid2));
|
|
437
|
+
}
|
|
438
|
+
filteredMilestoneIds = selectConflictFreeBatch({
|
|
439
|
+
orderedIds: milestoneIds,
|
|
440
|
+
maxParallel: milestoneIds.length,
|
|
441
|
+
hasConflict: (candidate, existing) =>
|
|
442
|
+
overlapPairs.has(overlapKey(candidate, existing)),
|
|
443
|
+
});
|
|
444
|
+
if (filteredMilestoneIds.length < milestoneIds.length) {
|
|
445
|
+
const skipped = milestoneIds.filter((mid) => !filteredMilestoneIds.includes(mid));
|
|
446
|
+
logWarning(
|
|
447
|
+
"parallel",
|
|
448
|
+
`uok execution graph filtered ${skipped.length} conflicting milestone(s): ${skipped.join(", ")}`,
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
} catch (e) {
|
|
452
|
+
logWarning(
|
|
453
|
+
"parallel",
|
|
454
|
+
`uok execution graph overlap analysis failed; using legacy milestone selection: ${(e as Error).message}`,
|
|
455
|
+
);
|
|
456
|
+
filteredMilestoneIds = milestoneIds;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
421
460
|
// Cap to max_workers
|
|
422
|
-
const toStart =
|
|
461
|
+
const toStart = filteredMilestoneIds.slice(0, config.max_workers);
|
|
423
462
|
|
|
424
463
|
for (const mid of toStart) {
|
|
425
464
|
// Check budget ceiling before each spawn
|
|
@@ -355,7 +355,7 @@ export function resolveAutoSupervisorConfig(): AutoSupervisorConfig {
|
|
|
355
355
|
|
|
356
356
|
// ─── Token Profile Resolution ─────────────────────────────────────────────
|
|
357
357
|
|
|
358
|
-
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality"]);
|
|
358
|
+
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality", "burn-max"]);
|
|
359
359
|
|
|
360
360
|
/**
|
|
361
361
|
* Resolve profile defaults for a given token profile tier.
|
|
@@ -400,6 +400,22 @@ export function resolveProfileDefaults(profile: TokenProfile): Partial<GSDPrefer
|
|
|
400
400
|
skip_reassess: true,
|
|
401
401
|
},
|
|
402
402
|
};
|
|
403
|
+
case "burn-max":
|
|
404
|
+
return {
|
|
405
|
+
// Quality-first profile: keep user-selected models, disable downgrade routing.
|
|
406
|
+
// Policy constraints still apply at dispatch time.
|
|
407
|
+
dynamic_routing: {
|
|
408
|
+
enabled: false,
|
|
409
|
+
},
|
|
410
|
+
context_selection: "full",
|
|
411
|
+
phases: {
|
|
412
|
+
skip_research: false,
|
|
413
|
+
skip_slice_research: false,
|
|
414
|
+
skip_reassess: false,
|
|
415
|
+
skip_milestone_validation: false,
|
|
416
|
+
reassess_after_slice: true,
|
|
417
|
+
},
|
|
418
|
+
};
|
|
403
419
|
}
|
|
404
420
|
}
|
|
405
421
|
|
|
@@ -416,7 +432,7 @@ export function resolveEffectiveProfile(): TokenProfile {
|
|
|
416
432
|
|
|
417
433
|
/**
|
|
418
434
|
* Resolve the inline level from the active token profile.
|
|
419
|
-
* budget -> minimal, balanced -> standard, quality -> full.
|
|
435
|
+
* budget -> minimal, balanced -> standard, quality/burn-max -> full.
|
|
420
436
|
*/
|
|
421
437
|
export function resolveInlineLevel(): InlineLevel {
|
|
422
438
|
const profile = resolveEffectiveProfile();
|
|
@@ -424,12 +440,13 @@ export function resolveInlineLevel(): InlineLevel {
|
|
|
424
440
|
case "budget": return "minimal";
|
|
425
441
|
case "balanced": return "standard";
|
|
426
442
|
case "quality": return "full";
|
|
443
|
+
case "burn-max": return "full";
|
|
427
444
|
}
|
|
428
445
|
}
|
|
429
446
|
|
|
430
447
|
/**
|
|
431
448
|
* Resolve the context selection mode from the active token profile.
|
|
432
|
-
* budget -> "smart", balanced/quality -> "full".
|
|
449
|
+
* budget -> "smart", balanced/quality/burn-max -> "full".
|
|
433
450
|
* Explicit preference always wins.
|
|
434
451
|
*/
|
|
435
452
|
export function resolveContextSelection(): import("./types.js").ContextSelectionMode {
|
|
@@ -83,6 +83,7 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
|
|
|
83
83
|
"post_unit_hooks",
|
|
84
84
|
"pre_dispatch_hooks",
|
|
85
85
|
"dynamic_routing",
|
|
86
|
+
"uok",
|
|
86
87
|
"token_profile",
|
|
87
88
|
"phases",
|
|
88
89
|
"auto_visualize",
|
|
@@ -208,6 +209,35 @@ export interface CmuxPreferences {
|
|
|
208
209
|
browser?: boolean;
|
|
209
210
|
}
|
|
210
211
|
|
|
212
|
+
export type UokTurnActionMode = "commit" | "snapshot" | "status-only";
|
|
213
|
+
|
|
214
|
+
export interface UokPreferences {
|
|
215
|
+
enabled?: boolean;
|
|
216
|
+
legacy_fallback?: {
|
|
217
|
+
enabled?: boolean;
|
|
218
|
+
};
|
|
219
|
+
gates?: {
|
|
220
|
+
enabled?: boolean;
|
|
221
|
+
};
|
|
222
|
+
model_policy?: {
|
|
223
|
+
enabled?: boolean;
|
|
224
|
+
};
|
|
225
|
+
execution_graph?: {
|
|
226
|
+
enabled?: boolean;
|
|
227
|
+
};
|
|
228
|
+
gitops?: {
|
|
229
|
+
enabled?: boolean;
|
|
230
|
+
turn_action?: UokTurnActionMode;
|
|
231
|
+
turn_push?: boolean;
|
|
232
|
+
};
|
|
233
|
+
audit_unified?: {
|
|
234
|
+
enabled?: boolean;
|
|
235
|
+
};
|
|
236
|
+
plan_v2?: {
|
|
237
|
+
enabled?: boolean;
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
211
241
|
/**
|
|
212
242
|
* Opt-in experimental features. All features in this block are disabled by
|
|
213
243
|
* default and must be explicitly enabled. They may change or be removed without
|
|
@@ -256,6 +286,8 @@ export interface GSDPreferences {
|
|
|
256
286
|
post_unit_hooks?: PostUnitHookConfig[];
|
|
257
287
|
pre_dispatch_hooks?: PreDispatchHookConfig[];
|
|
258
288
|
dynamic_routing?: DynamicRoutingConfig;
|
|
289
|
+
/** Unified Orchestration Kernel controls (all flags default off). */
|
|
290
|
+
uok?: UokPreferences;
|
|
259
291
|
/** Per-model capability overrides. Deep-merged with built-in profiles for capability-aware routing (ADR-004). */
|
|
260
292
|
modelOverrides?: Record<string, { capabilities?: Partial<ModelCapabilities> }>;
|
|
261
293
|
context_management?: ContextManagementConfig;
|