gsd-pi 2.74.0-dev.2b524c3 → 2.74.0-dev.658744a
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 +209 -10
- 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 +54 -8
- 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-recovery.js +24 -10
- 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-worktree.js +2 -0
- package/dist/resources/extensions/gsd/auto.js +36 -4
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +30 -8
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +61 -9
- package/dist/resources/extensions/gsd/cache.js +16 -5
- package/dist/resources/extensions/gsd/commands/catalog.js +31 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +5 -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 +51 -4
- 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 +16 -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 +31 -6
- 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 +2 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +118 -2
- package/dist/resources/extensions/gsd/preferences.js +31 -0
- package/dist/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +15 -30
- 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 +19 -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 +9 -9
- 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 +9 -9
- 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/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +88 -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/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/src/workflow-tools.ts +95 -10
- 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 +8 -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 +68 -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 +14 -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 +70 -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 +83 -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 +92 -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 +261 -10
- 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 +69 -8
- 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-recovery.ts +29 -9
- 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-worktree.ts +1 -0
- package/src/resources/extensions/gsd/auto.ts +41 -2
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +5 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +38 -8
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +72 -8
- package/src/resources/extensions/gsd/cache.ts +16 -5
- package/src/resources/extensions/gsd/commands/catalog.ts +31 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +5 -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 +58 -4
- 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 +16 -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 +36 -2
- 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 +38 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +117 -2
- package/src/resources/extensions/gsd/preferences.ts +34 -0
- package/src/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +15 -31
- 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 +19 -0
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +177 -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/auto-retry-mcp-churn-fixes.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +117 -0
- 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 +71 -4
- 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/preferences.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +57 -2
- 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 → Es_JWCfFZjIvYZShmjyye}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{YzIEI9sxJy4t5xgClF08g → Es_JWCfFZjIvYZShmjyye}/_ssgManifest.js +0 -0
|
@@ -26,6 +26,8 @@ import { nativeIsRepo, nativeInit } from "./native-git-bridge.js";
|
|
|
26
26
|
import { isInheritedRepo } from "./repo-identity.js";
|
|
27
27
|
import { ensureGitignore, ensurePreferences, untrackRuntimeFiles } from "./gitignore.js";
|
|
28
28
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
29
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
30
|
+
import { ensurePlanV2Graph } from "./uok/plan-v2.js";
|
|
29
31
|
import { detectProjectState } from "./detection.js";
|
|
30
32
|
import { showProjectInit, offerMigration } from "./init-wizard.js";
|
|
31
33
|
import { validateDirectory } from "./validate-directory.js";
|
|
@@ -53,6 +55,25 @@ function nextMilestoneIdReserved(existingIds, uniqueEnabled) {
|
|
|
53
55
|
reserveMilestoneId(id);
|
|
54
56
|
return id;
|
|
55
57
|
}
|
|
58
|
+
function needsPlanV2Gate(state) {
|
|
59
|
+
return state.phase === "executing"
|
|
60
|
+
|| state.phase === "summarizing"
|
|
61
|
+
|| state.phase === "validating-milestone"
|
|
62
|
+
|| state.phase === "completing-milestone";
|
|
63
|
+
}
|
|
64
|
+
function runPlanV2Gate(ctx, basePath, state) {
|
|
65
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
66
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
67
|
+
if (!uokFlags.planV2 || !needsPlanV2Gate(state))
|
|
68
|
+
return true;
|
|
69
|
+
const compiled = ensurePlanV2Graph(basePath, state);
|
|
70
|
+
if (!compiled.ok) {
|
|
71
|
+
const reason = compiled.reason ?? "plan-v2 compilation failed";
|
|
72
|
+
ctx.ui.notify(`Plan gate failed-closed: ${reason}. Complete plan/discuss artifacts before execution.`, "error");
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
56
77
|
// ─── Commit Instruction Helpers ──────────────────────────────────────────────
|
|
57
78
|
/** Build commit instruction for planning prompts. .gsd/ is managed externally and always gitignored. */
|
|
58
79
|
function buildDocsCommitInstruction(_message) {
|
|
@@ -191,14 +212,16 @@ export function checkAutoStartAfterDiscuss() {
|
|
|
191
212
|
logWarning("guided", `CONTEXT-DRAFT.md unlink failed: ${e.message}`);
|
|
192
213
|
}
|
|
193
214
|
// Cleanup: remove discussion manifest after auto-start (only needed during discussion)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
215
|
+
if (existsSync(manifestPath)) {
|
|
216
|
+
try {
|
|
217
|
+
unlinkSync(manifestPath);
|
|
218
|
+
}
|
|
219
|
+
catch (e) {
|
|
220
|
+
logWarning("guided", `manifest unlink failed: ${e.message}`);
|
|
221
|
+
}
|
|
199
222
|
}
|
|
200
223
|
pendingAutoStartMap.delete(basePath);
|
|
201
|
-
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "
|
|
224
|
+
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "success");
|
|
202
225
|
startAutoDetached(ctx, pi, basePath, false, { step });
|
|
203
226
|
return true;
|
|
204
227
|
}
|
|
@@ -1110,6 +1133,8 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1110
1133
|
catch (err) {
|
|
1111
1134
|
logWarning("guided", `STATE.md rebuild failed: ${err.message}`);
|
|
1112
1135
|
}
|
|
1136
|
+
if (!runPlanV2Gate(ctx, basePath, state))
|
|
1137
|
+
return;
|
|
1113
1138
|
if (!state.activeMilestone?.id) {
|
|
1114
1139
|
// Guard: if a discuss session is already in flight, don't re-inject the prompt.
|
|
1115
1140
|
// Both /gsd and /gsd auto reach this branch when no milestone exists yet.
|
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
export { isDepthConfirmationAnswer, isDepthVerified, isGateQuestionId, isQueuePhaseActive, setQueuePhaseActive, shouldBlockContextWrite, shouldBlockPendingGate, shouldBlockPendingGateBash, shouldBlockQueueExecution, setPendingGate, clearPendingGate, getPendingGate, } from "./bootstrap/write-gate.js";
|
|
2
2
|
export default async function registerExtension(pi) {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
// Always register the core /gsd command first, in isolation.
|
|
4
|
+
// This ensures /gsd is available even if the full bootstrap (shortcuts,
|
|
5
|
+
// tools, hooks) fails — e.g. due to a Windows-specific import error.
|
|
6
|
+
const { registerGSDCommand } = await import("./commands/index.js");
|
|
7
|
+
registerGSDCommand(pi);
|
|
8
|
+
// Full setup (shortcuts, tools, hooks) in a separate try/catch so that
|
|
9
|
+
// any platform-specific load failure doesn't take out the core command.
|
|
10
|
+
try {
|
|
11
|
+
const { registerGsdExtension } = await import("./bootstrap/register-extension.js");
|
|
12
|
+
registerGsdExtension(pi);
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
const { logWarning } = await import("./workflow-logger.js");
|
|
16
|
+
logWarning("bootstrap", `Extension setup partially failed — /gsd commands are available but shortcuts/tools may be missing: ${err instanceof Error ? err.message : String(err)}`);
|
|
17
|
+
}
|
|
5
18
|
}
|
|
@@ -336,6 +336,7 @@ async function customizeAdvancedPrefs(ctx, prefs) {
|
|
|
336
336
|
{ id: "balanced", label: "Balanced", description: "Good trade-off (default)", recommended: true },
|
|
337
337
|
{ id: "budget", label: "Budget", description: "Minimize token usage" },
|
|
338
338
|
{ id: "quality", label: "Quality", description: "Maximize thoroughness" },
|
|
339
|
+
{ id: "burn-max", label: "Burn Max", description: "Maximum depth, no phase skips" },
|
|
339
340
|
],
|
|
340
341
|
});
|
|
341
342
|
if (profileChoice !== "not_yet") {
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
import { appendFileSync, mkdirSync, readdirSync, readFileSync } from "node:fs";
|
|
15
15
|
import { join } from "node:path";
|
|
16
16
|
import { gsdRoot } from "./paths.js";
|
|
17
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
18
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
17
19
|
// ─── Emit ─────────────────────────────────────────────────────────────────────
|
|
18
20
|
/**
|
|
19
21
|
* Append a journal event to the daily JSONL file.
|
|
@@ -34,6 +36,31 @@ export function emitJournalEvent(basePath, entry) {
|
|
|
34
36
|
catch {
|
|
35
37
|
// Silent failure — journal must never break auto-mode
|
|
36
38
|
}
|
|
39
|
+
if (!isUnifiedAuditEnabled())
|
|
40
|
+
return;
|
|
41
|
+
try {
|
|
42
|
+
const causedBy = entry.causedBy
|
|
43
|
+
? `${entry.causedBy.flowId}:${entry.causedBy.seq}`
|
|
44
|
+
: undefined;
|
|
45
|
+
const turnId = typeof entry.data?.turnId === "string"
|
|
46
|
+
? entry.data.turnId
|
|
47
|
+
: undefined;
|
|
48
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
49
|
+
traceId: entry.flowId,
|
|
50
|
+
turnId,
|
|
51
|
+
causedBy,
|
|
52
|
+
category: "orchestration",
|
|
53
|
+
type: `journal-${entry.eventType}`,
|
|
54
|
+
payload: {
|
|
55
|
+
seq: entry.seq,
|
|
56
|
+
rule: entry.rule,
|
|
57
|
+
data: entry.data ?? {},
|
|
58
|
+
},
|
|
59
|
+
}));
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Best-effort: audit projection must never block journal writes.
|
|
63
|
+
}
|
|
37
64
|
}
|
|
38
65
|
// ─── Query ────────────────────────────────────────────────────────────────────
|
|
39
66
|
/**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// Exports: parseDecisionsTable, parseRequirementsSections, migrateFromMarkdown
|
|
6
6
|
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
7
7
|
import { join } from 'node:path';
|
|
8
|
-
import { upsertDecision, upsertRequirement, insertArtifact, insertMilestone, insertSlice, insertTask, openDatabase, transaction, _getAdapter, } from './gsd-db.js';
|
|
8
|
+
import { upsertDecision, upsertRequirement, insertArtifact, insertMilestone, insertSlice, insertTask, openDatabase, transaction, updateSliceStatus, _getAdapter, } from './gsd-db.js';
|
|
9
9
|
import { resolveGsdRootFile, resolveMilestoneFile, resolveSliceFile, resolveTasksDir, milestonesDir, gsdRoot, resolveTaskFiles, } from './paths.js';
|
|
10
10
|
import { findMilestoneIds } from './guided-flow.js';
|
|
11
11
|
import { parseRoadmap, parsePlan } from './parsers-legacy.js';
|
|
@@ -571,9 +571,8 @@ export function migrateHierarchyToDb(basePath) {
|
|
|
571
571
|
return t.done && existsSync(summaryFile);
|
|
572
572
|
});
|
|
573
573
|
if (allTasksDone && hasSliceSummary) {
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
adapter.prepare(`UPDATE slices SET status = 'complete' WHERE id = :sid AND milestone_id = :mid`).run({ ':sid': sliceEntry.id, ':mid': milestoneId });
|
|
574
|
+
if (_getAdapter()) {
|
|
575
|
+
updateSliceStatus(milestoneId, sliceEntry.id, 'complete');
|
|
577
576
|
process.stderr.write(`gsd-migrate: ${milestoneId}/${sliceEntry.id} all tasks + slice summary complete — upgrading slice to complete\n`);
|
|
578
577
|
}
|
|
579
578
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
//
|
|
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
|
-
import { isDbAvailable, _getAdapter, transaction } from './gsd-db.js';
|
|
5
|
+
import { isDbAvailable, _getAdapter, transaction, insertMemoryRow, rewriteMemoryId, updateMemoryContentRow, incrementMemoryHitCount, supersedeMemoryRow, markMemoryUnitProcessed, decayMemoriesBefore, supersedeLowestRankedMemories, } from './gsd-db.js';
|
|
6
6
|
// ─── Category Display Order ─────────────────────────────────────────────────
|
|
7
7
|
const CATEGORY_PRIORITY = {
|
|
8
8
|
gotcha: 0,
|
|
@@ -112,27 +112,23 @@ export function createMemory(fields) {
|
|
|
112
112
|
const now = new Date().toISOString();
|
|
113
113
|
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
114
114
|
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
':updated_at': now,
|
|
115
|
+
insertMemoryRow({
|
|
116
|
+
id: placeholder,
|
|
117
|
+
category: fields.category,
|
|
118
|
+
content: fields.content,
|
|
119
|
+
confidence: fields.confidence ?? 0.8,
|
|
120
|
+
sourceUnitType: fields.source_unit_type ?? null,
|
|
121
|
+
sourceUnitId: fields.source_unit_id ?? null,
|
|
122
|
+
createdAt: now,
|
|
123
|
+
updatedAt: now,
|
|
125
124
|
});
|
|
126
|
-
// Derive the real ID from the assigned seq
|
|
125
|
+
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
127
126
|
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
128
127
|
if (!row)
|
|
129
128
|
return placeholder; // fallback — should not happen
|
|
130
129
|
const seq = row['seq'];
|
|
131
130
|
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
132
|
-
|
|
133
|
-
':real_id': realId,
|
|
134
|
-
':placeholder': placeholder,
|
|
135
|
-
});
|
|
131
|
+
rewriteMemoryId(placeholder, realId);
|
|
136
132
|
return realId;
|
|
137
133
|
}
|
|
138
134
|
catch {
|
|
@@ -145,17 +141,8 @@ export function createMemory(fields) {
|
|
|
145
141
|
export function updateMemoryContent(id, content, confidence) {
|
|
146
142
|
if (!isDbAvailable())
|
|
147
143
|
return false;
|
|
148
|
-
const adapter = _getAdapter();
|
|
149
|
-
if (!adapter)
|
|
150
|
-
return false;
|
|
151
144
|
try {
|
|
152
|
-
|
|
153
|
-
if (confidence != null) {
|
|
154
|
-
adapter.prepare('UPDATE memories SET content = :content, confidence = :confidence, updated_at = :updated_at WHERE id = :id').run({ ':content': content, ':confidence': confidence, ':updated_at': now, ':id': id });
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
adapter.prepare('UPDATE memories SET content = :content, updated_at = :updated_at WHERE id = :id').run({ ':content': content, ':updated_at': now, ':id': id });
|
|
158
|
-
}
|
|
145
|
+
updateMemoryContentRow(id, content, confidence, new Date().toISOString());
|
|
159
146
|
return true;
|
|
160
147
|
}
|
|
161
148
|
catch {
|
|
@@ -168,11 +155,8 @@ export function updateMemoryContent(id, content, confidence) {
|
|
|
168
155
|
export function reinforceMemory(id) {
|
|
169
156
|
if (!isDbAvailable())
|
|
170
157
|
return false;
|
|
171
|
-
const adapter = _getAdapter();
|
|
172
|
-
if (!adapter)
|
|
173
|
-
return false;
|
|
174
158
|
try {
|
|
175
|
-
|
|
159
|
+
incrementMemoryHitCount(id, new Date().toISOString());
|
|
176
160
|
return true;
|
|
177
161
|
}
|
|
178
162
|
catch {
|
|
@@ -185,11 +169,8 @@ export function reinforceMemory(id) {
|
|
|
185
169
|
export function supersedeMemory(oldId, newId) {
|
|
186
170
|
if (!isDbAvailable())
|
|
187
171
|
return false;
|
|
188
|
-
const adapter = _getAdapter();
|
|
189
|
-
if (!adapter)
|
|
190
|
-
return false;
|
|
191
172
|
try {
|
|
192
|
-
|
|
173
|
+
supersedeMemoryRow(oldId, newId, new Date().toISOString());
|
|
193
174
|
return true;
|
|
194
175
|
}
|
|
195
176
|
catch {
|
|
@@ -220,12 +201,8 @@ export function isUnitProcessed(unitKey) {
|
|
|
220
201
|
export function markUnitProcessed(unitKey, activityFile) {
|
|
221
202
|
if (!isDbAvailable())
|
|
222
203
|
return false;
|
|
223
|
-
const adapter = _getAdapter();
|
|
224
|
-
if (!adapter)
|
|
225
|
-
return false;
|
|
226
204
|
try {
|
|
227
|
-
|
|
228
|
-
VALUES (:key, :file, :at)`).run({ ':key': unitKey, ':file': activityFile, ':at': new Date().toISOString() });
|
|
205
|
+
markMemoryUnitProcessed(unitKey, activityFile, new Date().toISOString());
|
|
229
206
|
return true;
|
|
230
207
|
}
|
|
231
208
|
catch {
|
|
@@ -244,16 +221,14 @@ export function decayStaleMemories(thresholdUnits = 20) {
|
|
|
244
221
|
if (!adapter)
|
|
245
222
|
return;
|
|
246
223
|
try {
|
|
247
|
-
// Find the timestamp of the Nth most recent processed unit
|
|
224
|
+
// Find the timestamp of the Nth most recent processed unit (read-only SELECT)
|
|
248
225
|
const row = adapter.prepare(`SELECT processed_at FROM memory_processed_units
|
|
249
226
|
ORDER BY processed_at DESC
|
|
250
227
|
LIMIT 1 OFFSET :offset`).get({ ':offset': thresholdUnits - 1 });
|
|
251
228
|
if (!row)
|
|
252
229
|
return; // not enough processed units yet
|
|
253
230
|
const cutoff = row['processed_at'];
|
|
254
|
-
|
|
255
|
-
SET confidence = MAX(0.1, confidence - 0.1), updated_at = :now
|
|
256
|
-
WHERE superseded_by IS NULL AND updated_at < :cutoff AND confidence > 0.1`).run({ ':now': new Date().toISOString(), ':cutoff': cutoff });
|
|
231
|
+
decayMemoriesBefore(cutoff, new Date().toISOString());
|
|
257
232
|
}
|
|
258
233
|
catch {
|
|
259
234
|
// non-fatal
|
|
@@ -274,14 +249,7 @@ export function enforceMemoryCap(max = 50) {
|
|
|
274
249
|
if (count <= max)
|
|
275
250
|
return;
|
|
276
251
|
const excess = count - max;
|
|
277
|
-
|
|
278
|
-
adapter.prepare(`UPDATE memories SET superseded_by = 'CAP_EXCEEDED', updated_at = :now
|
|
279
|
-
WHERE id IN (
|
|
280
|
-
SELECT id FROM memories
|
|
281
|
-
WHERE superseded_by IS NULL
|
|
282
|
-
ORDER BY (confidence * (1.0 + hit_count * 0.1)) ASC
|
|
283
|
-
LIMIT :limit
|
|
284
|
-
)`).run({ ':now': new Date().toISOString(), ':limit': excess });
|
|
252
|
+
supersedeLowestRankedMemories(excess, new Date().toISOString());
|
|
285
253
|
}
|
|
286
254
|
catch {
|
|
287
255
|
// non-fatal
|
|
@@ -17,6 +17,8 @@ import { gsdRoot } from "./paths.js";
|
|
|
17
17
|
import { getAndClearSkills } from "./skill-telemetry.js";
|
|
18
18
|
import { loadJsonFile, loadJsonFileOrNull, saveJsonFile } from "./json-persistence.js";
|
|
19
19
|
import { parseUnitId } from "./unit-id.js";
|
|
20
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
21
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
20
22
|
// Re-export from shared — import directly from format-utils to avoid pulling
|
|
21
23
|
// in the full barrel (mod.js → ui.js → @gsd/pi-tui) which breaks when loaded
|
|
22
24
|
// outside jiti's alias resolution (e.g. dynamic import in auto-loop reports).
|
|
@@ -152,6 +154,23 @@ export function snapshotUnitMetrics(ctx, unitType, unitId, startedAt, model, opt
|
|
|
152
154
|
ledger.units.push(unit);
|
|
153
155
|
}
|
|
154
156
|
saveLedger(basePath, ledger);
|
|
157
|
+
if (isUnifiedAuditEnabled()) {
|
|
158
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
159
|
+
traceId: opts?.traceId ?? `metrics:${unitType}:${unitId}`,
|
|
160
|
+
turnId: opts?.turnId,
|
|
161
|
+
causedBy: opts?.causedBy,
|
|
162
|
+
category: "metrics",
|
|
163
|
+
type: "unit-metrics-snapshot",
|
|
164
|
+
payload: {
|
|
165
|
+
unitType,
|
|
166
|
+
unitId,
|
|
167
|
+
model,
|
|
168
|
+
tokens: unit.tokens,
|
|
169
|
+
cost: unit.cost,
|
|
170
|
+
toolCalls: unit.toolCalls,
|
|
171
|
+
},
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
155
174
|
return unit;
|
|
156
175
|
}
|
|
157
176
|
/**
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* gate registry so the definitions stay in lockstep with prompt builders,
|
|
11
11
|
* dispatch rules, and state derivation. See gate-registry.ts.
|
|
12
12
|
*/
|
|
13
|
-
import {
|
|
13
|
+
import { isDbAvailable, upsertQualityGate } from "./gsd-db.js";
|
|
14
14
|
import { getGatesForTurn } from "./gate-registry.js";
|
|
15
15
|
/**
|
|
16
16
|
* Insert milestone-level quality_gates records for a validation run.
|
|
@@ -24,21 +24,22 @@ import { getGatesForTurn } from "./gate-registry.js";
|
|
|
24
24
|
* in gate-registry.ts automatically flows through here.
|
|
25
25
|
*/
|
|
26
26
|
export function insertMilestoneValidationGates(milestoneId, sliceId, verdict, evaluatedAt) {
|
|
27
|
-
|
|
28
|
-
if (!db)
|
|
27
|
+
if (!isDbAvailable())
|
|
29
28
|
return;
|
|
30
29
|
const gateVerdict = verdict === "pass" ? "pass" : "flag";
|
|
31
30
|
const milestoneGates = getGatesForTurn("validate-milestone");
|
|
32
31
|
for (const def of milestoneGates) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
32
|
+
upsertQualityGate({
|
|
33
|
+
milestoneId,
|
|
34
|
+
sliceId,
|
|
35
|
+
gateId: def.id,
|
|
36
|
+
scope: "milestone",
|
|
37
|
+
taskId: "",
|
|
38
|
+
status: "complete",
|
|
39
|
+
verdict: gateVerdict,
|
|
40
|
+
rationale: `${def.promptSection} — milestone validation verdict: ${verdict}`,
|
|
41
|
+
findings: "",
|
|
42
|
+
evaluatedAt,
|
|
42
43
|
});
|
|
43
44
|
}
|
|
44
45
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Both READ and WRITE operations are native — push operations remain as
|
|
6
6
|
// execSync calls because git2 credential handling is too complex.
|
|
7
|
-
import {
|
|
7
|
+
import { execFileSync } from "node:child_process";
|
|
8
8
|
import { GSDError, GSD_GIT_ERROR } from "./errors.js";
|
|
9
9
|
import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
|
|
10
10
|
import { getErrorMessage } from "./error-utils.js";
|
|
@@ -206,7 +206,7 @@ export function nativeIsRepo(basePath) {
|
|
|
206
206
|
return native.gitIsRepo(basePath);
|
|
207
207
|
}
|
|
208
208
|
try {
|
|
209
|
-
|
|
209
|
+
execFileSync("git", ["rev-parse", "--git-dir"], { cwd: basePath, stdio: "pipe" });
|
|
210
210
|
return true;
|
|
211
211
|
}
|
|
212
212
|
catch {
|
|
@@ -629,7 +629,10 @@ export function nativeCommit(basePath, message, options) {
|
|
|
629
629
|
}
|
|
630
630
|
// Fallback: use git commit with stdin pipe for safe multi-line messages
|
|
631
631
|
try {
|
|
632
|
-
const
|
|
632
|
+
const args = ["commit", "--no-verify", "-F", "-"];
|
|
633
|
+
if (options?.allowEmpty)
|
|
634
|
+
args.push("--allow-empty");
|
|
635
|
+
const result = execFileSync("git", args, {
|
|
633
636
|
cwd: basePath,
|
|
634
637
|
stdio: ["pipe", "pipe", "pipe"],
|
|
635
638
|
encoding: "utf-8",
|
|
@@ -767,7 +770,7 @@ export function nativeResetHard(basePath) {
|
|
|
767
770
|
native.gitResetHard(basePath);
|
|
768
771
|
return;
|
|
769
772
|
}
|
|
770
|
-
|
|
773
|
+
execFileSync("git", ["reset", "--hard", "HEAD"], { cwd: basePath, stdio: "pipe" });
|
|
771
774
|
}
|
|
772
775
|
/**
|
|
773
776
|
* Soft reset to a target ref (git reset --soft <ref>).
|
|
@@ -20,8 +20,13 @@ import { writeSessionStatus, readAllSessionStatuses, readSessionStatus, removeSe
|
|
|
20
20
|
import { analyzeParallelEligibility, } from "./parallel-eligibility.js";
|
|
21
21
|
import { getErrorMessage } from "./error-utils.js";
|
|
22
22
|
import { logWarning } from "./workflow-logger.js";
|
|
23
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
24
|
+
import { selectConflictFreeBatch } from "./uok/execution-graph.js";
|
|
23
25
|
// ─── Module State ──────────────────────────────────────────────────────────
|
|
24
26
|
let state = null;
|
|
27
|
+
function overlapKey(a, b) {
|
|
28
|
+
return a < b ? `${a}::${b}` : `${b}::${a}`;
|
|
29
|
+
}
|
|
25
30
|
// ─── Persistence ──────────────────────────────────────────────────────────
|
|
26
31
|
const ORCHESTRATOR_STATE_FILE = "orchestrator.json";
|
|
27
32
|
const TMP_SUFFIX = ".tmp";
|
|
@@ -277,6 +282,7 @@ export async function startParallel(basePath, milestoneIds, prefs) {
|
|
|
277
282
|
return { started: [], errors: [{ mid: "all", error: "Cannot start parallel from within a parallel worker" }] };
|
|
278
283
|
}
|
|
279
284
|
const config = resolveParallelConfig(prefs);
|
|
285
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
280
286
|
// Release any leftover state from a previous session before reassigning
|
|
281
287
|
if (state) {
|
|
282
288
|
for (const w of state.workers.values()) {
|
|
@@ -324,8 +330,34 @@ export async function startParallel(basePath, milestoneIds, prefs) {
|
|
|
324
330
|
};
|
|
325
331
|
const started = [];
|
|
326
332
|
const errors = [];
|
|
333
|
+
let filteredMilestoneIds = milestoneIds;
|
|
334
|
+
if (uokFlags.executionGraph && milestoneIds.length > 1) {
|
|
335
|
+
try {
|
|
336
|
+
const requestedIds = new Set(milestoneIds);
|
|
337
|
+
const candidates = await analyzeParallelEligibility(basePath);
|
|
338
|
+
const overlapPairs = new Set();
|
|
339
|
+
for (const overlap of candidates.fileOverlaps) {
|
|
340
|
+
if (!requestedIds.has(overlap.mid1) || !requestedIds.has(overlap.mid2))
|
|
341
|
+
continue;
|
|
342
|
+
overlapPairs.add(overlapKey(overlap.mid1, overlap.mid2));
|
|
343
|
+
}
|
|
344
|
+
filteredMilestoneIds = selectConflictFreeBatch({
|
|
345
|
+
orderedIds: milestoneIds,
|
|
346
|
+
maxParallel: milestoneIds.length,
|
|
347
|
+
hasConflict: (candidate, existing) => overlapPairs.has(overlapKey(candidate, existing)),
|
|
348
|
+
});
|
|
349
|
+
if (filteredMilestoneIds.length < milestoneIds.length) {
|
|
350
|
+
const skipped = milestoneIds.filter((mid) => !filteredMilestoneIds.includes(mid));
|
|
351
|
+
logWarning("parallel", `uok execution graph filtered ${skipped.length} conflicting milestone(s): ${skipped.join(", ")}`);
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
catch (e) {
|
|
355
|
+
logWarning("parallel", `uok execution graph overlap analysis failed; using legacy milestone selection: ${e.message}`);
|
|
356
|
+
filteredMilestoneIds = milestoneIds;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
327
359
|
// Cap to max_workers
|
|
328
|
-
const toStart =
|
|
360
|
+
const toStart = filteredMilestoneIds.slice(0, config.max_workers);
|
|
329
361
|
for (const mid of toStart) {
|
|
330
362
|
// Check budget ceiling before each spawn
|
|
331
363
|
if (isBudgetExceeded()) {
|
|
@@ -321,7 +321,7 @@ export function resolveAutoSupervisorConfig() {
|
|
|
321
321
|
};
|
|
322
322
|
}
|
|
323
323
|
// ─── Token Profile Resolution ─────────────────────────────────────────────
|
|
324
|
-
const VALID_TOKEN_PROFILES = new Set(["budget", "balanced", "quality"]);
|
|
324
|
+
const VALID_TOKEN_PROFILES = new Set(["budget", "balanced", "quality", "burn-max"]);
|
|
325
325
|
/**
|
|
326
326
|
* Resolve profile defaults for a given token profile tier.
|
|
327
327
|
* Returns a partial GSDPreferences that is used as the base layer --
|
|
@@ -365,6 +365,22 @@ export function resolveProfileDefaults(profile) {
|
|
|
365
365
|
skip_reassess: true,
|
|
366
366
|
},
|
|
367
367
|
};
|
|
368
|
+
case "burn-max":
|
|
369
|
+
return {
|
|
370
|
+
// Quality-first profile: keep user-selected models, disable downgrade routing.
|
|
371
|
+
// Policy constraints still apply at dispatch time.
|
|
372
|
+
dynamic_routing: {
|
|
373
|
+
enabled: false,
|
|
374
|
+
},
|
|
375
|
+
context_selection: "full",
|
|
376
|
+
phases: {
|
|
377
|
+
skip_research: false,
|
|
378
|
+
skip_slice_research: false,
|
|
379
|
+
skip_reassess: false,
|
|
380
|
+
skip_milestone_validation: false,
|
|
381
|
+
reassess_after_slice: true,
|
|
382
|
+
},
|
|
383
|
+
};
|
|
368
384
|
}
|
|
369
385
|
}
|
|
370
386
|
/**
|
|
@@ -380,7 +396,7 @@ export function resolveEffectiveProfile() {
|
|
|
380
396
|
}
|
|
381
397
|
/**
|
|
382
398
|
* Resolve the inline level from the active token profile.
|
|
383
|
-
* budget -> minimal, balanced -> standard, quality -> full.
|
|
399
|
+
* budget -> minimal, balanced -> standard, quality/burn-max -> full.
|
|
384
400
|
*/
|
|
385
401
|
export function resolveInlineLevel() {
|
|
386
402
|
const profile = resolveEffectiveProfile();
|
|
@@ -388,11 +404,12 @@ export function resolveInlineLevel() {
|
|
|
388
404
|
case "budget": return "minimal";
|
|
389
405
|
case "balanced": return "standard";
|
|
390
406
|
case "quality": return "full";
|
|
407
|
+
case "burn-max": return "full";
|
|
391
408
|
}
|
|
392
409
|
}
|
|
393
410
|
/**
|
|
394
411
|
* Resolve the context selection mode from the active token profile.
|
|
395
|
-
* budget -> "smart", balanced/quality -> "full".
|
|
412
|
+
* budget -> "smart", balanced/quality/burn-max -> "full".
|
|
396
413
|
* Explicit preference always wins.
|
|
397
414
|
*/
|
|
398
415
|
export function resolveContextSelection() {
|
|
@@ -53,6 +53,7 @@ export const KNOWN_PREFERENCE_KEYS = new Set([
|
|
|
53
53
|
"post_unit_hooks",
|
|
54
54
|
"pre_dispatch_hooks",
|
|
55
55
|
"dynamic_routing",
|
|
56
|
+
"uok",
|
|
56
57
|
"token_profile",
|
|
57
58
|
"phases",
|
|
58
59
|
"auto_visualize",
|
|
@@ -84,6 +85,7 @@ export const KNOWN_PREFERENCE_KEYS = new Set([
|
|
|
84
85
|
"discuss_web_research",
|
|
85
86
|
"discuss_depth",
|
|
86
87
|
"flat_rate_providers",
|
|
88
|
+
"language",
|
|
87
89
|
]);
|
|
88
90
|
/** Canonical list of all dispatch unit types. */
|
|
89
91
|
export const KNOWN_UNIT_TYPES = [
|