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
|
@@ -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",
|
|
@@ -114,6 +115,7 @@ export const KNOWN_PREFERENCE_KEYS = new Set<string>([
|
|
|
114
115
|
"discuss_web_research",
|
|
115
116
|
"discuss_depth",
|
|
116
117
|
"flat_rate_providers",
|
|
118
|
+
"language",
|
|
117
119
|
]);
|
|
118
120
|
|
|
119
121
|
/** Canonical list of all dispatch unit types. */
|
|
@@ -208,6 +210,35 @@ export interface CmuxPreferences {
|
|
|
208
210
|
browser?: boolean;
|
|
209
211
|
}
|
|
210
212
|
|
|
213
|
+
export type UokTurnActionMode = "commit" | "snapshot" | "status-only";
|
|
214
|
+
|
|
215
|
+
export interface UokPreferences {
|
|
216
|
+
enabled?: boolean;
|
|
217
|
+
legacy_fallback?: {
|
|
218
|
+
enabled?: boolean;
|
|
219
|
+
};
|
|
220
|
+
gates?: {
|
|
221
|
+
enabled?: boolean;
|
|
222
|
+
};
|
|
223
|
+
model_policy?: {
|
|
224
|
+
enabled?: boolean;
|
|
225
|
+
};
|
|
226
|
+
execution_graph?: {
|
|
227
|
+
enabled?: boolean;
|
|
228
|
+
};
|
|
229
|
+
gitops?: {
|
|
230
|
+
enabled?: boolean;
|
|
231
|
+
turn_action?: UokTurnActionMode;
|
|
232
|
+
turn_push?: boolean;
|
|
233
|
+
};
|
|
234
|
+
audit_unified?: {
|
|
235
|
+
enabled?: boolean;
|
|
236
|
+
};
|
|
237
|
+
plan_v2?: {
|
|
238
|
+
enabled?: boolean;
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
211
242
|
/**
|
|
212
243
|
* Opt-in experimental features. All features in this block are disabled by
|
|
213
244
|
* default and must be explicitly enabled. They may change or be removed without
|
|
@@ -256,6 +287,8 @@ export interface GSDPreferences {
|
|
|
256
287
|
post_unit_hooks?: PostUnitHookConfig[];
|
|
257
288
|
pre_dispatch_hooks?: PreDispatchHookConfig[];
|
|
258
289
|
dynamic_routing?: DynamicRoutingConfig;
|
|
290
|
+
/** Unified Orchestration Kernel controls (all flags default off). */
|
|
291
|
+
uok?: UokPreferences;
|
|
259
292
|
/** Per-model capability overrides. Deep-merged with built-in profiles for capability-aware routing (ADR-004). */
|
|
260
293
|
modelOverrides?: Record<string, { capabilities?: Partial<ModelCapabilities> }>;
|
|
261
294
|
context_management?: ContextManagementConfig;
|
|
@@ -371,6 +404,11 @@ export interface GSDPreferences {
|
|
|
371
404
|
* same regardless of model. Case-insensitive.
|
|
372
405
|
*/
|
|
373
406
|
flat_rate_providers?: string[];
|
|
407
|
+
/**
|
|
408
|
+
* Language preference for GSD responses. Accepts any language name or code
|
|
409
|
+
* (e.g. "Chinese", "zh", "German", "de", "ζ₯ζ¬θͺ"). Persists across /clear.
|
|
410
|
+
*/
|
|
411
|
+
language?: string;
|
|
374
412
|
}
|
|
375
413
|
|
|
376
414
|
export interface LoadedGSDPreferences {
|
|
@@ -22,7 +22,12 @@ import {
|
|
|
22
22
|
type GSDSkillRule,
|
|
23
23
|
} from "./preferences-types.js";
|
|
24
24
|
|
|
25
|
-
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality"]);
|
|
25
|
+
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality", "burn-max"]);
|
|
26
|
+
const VALID_UOK_TURN_ACTIONS = new Set<"commit" | "snapshot" | "status-only">([
|
|
27
|
+
"commit",
|
|
28
|
+
"snapshot",
|
|
29
|
+
"status-only",
|
|
30
|
+
]);
|
|
26
31
|
|
|
27
32
|
export function validatePreferences(preferences: GSDPreferences): {
|
|
28
33
|
preferences: GSDPreferences;
|
|
@@ -161,12 +166,112 @@ export function validatePreferences(preferences: GSDPreferences): {
|
|
|
161
166
|
}
|
|
162
167
|
}
|
|
163
168
|
|
|
169
|
+
// βββ UOK Flags ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
170
|
+
if (preferences.uok !== undefined) {
|
|
171
|
+
if (typeof preferences.uok === "object" && preferences.uok !== null) {
|
|
172
|
+
const raw = preferences.uok as Record<string, unknown>;
|
|
173
|
+
const valid: NonNullable<GSDPreferences["uok"]> = {};
|
|
174
|
+
|
|
175
|
+
if (raw.enabled !== undefined) {
|
|
176
|
+
if (typeof raw.enabled === "boolean") valid.enabled = raw.enabled;
|
|
177
|
+
else errors.push("uok.enabled must be a boolean");
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const parseEnabledBlock = (
|
|
181
|
+
key: "legacy_fallback" | "gates" | "model_policy" | "execution_graph" | "audit_unified" | "plan_v2",
|
|
182
|
+
): void => {
|
|
183
|
+
const value = raw[key];
|
|
184
|
+
if (value === undefined) return;
|
|
185
|
+
if (typeof value !== "object" || value === null) {
|
|
186
|
+
errors.push(`uok.${key} must be an object`);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const block = value as Record<string, unknown>;
|
|
190
|
+
const parsed: { enabled?: boolean } = {};
|
|
191
|
+
if (block.enabled !== undefined) {
|
|
192
|
+
if (typeof block.enabled === "boolean") parsed.enabled = block.enabled;
|
|
193
|
+
else errors.push(`uok.${key}.enabled must be a boolean`);
|
|
194
|
+
}
|
|
195
|
+
const unknown = Object.keys(block).filter((k) => k !== "enabled");
|
|
196
|
+
for (const unk of unknown) {
|
|
197
|
+
warnings.push(`unknown uok.${key} key "${unk}" β ignored`);
|
|
198
|
+
}
|
|
199
|
+
if (Object.keys(parsed).length > 0) {
|
|
200
|
+
valid[key] = parsed;
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
parseEnabledBlock("legacy_fallback");
|
|
205
|
+
parseEnabledBlock("gates");
|
|
206
|
+
parseEnabledBlock("model_policy");
|
|
207
|
+
parseEnabledBlock("execution_graph");
|
|
208
|
+
parseEnabledBlock("audit_unified");
|
|
209
|
+
parseEnabledBlock("plan_v2");
|
|
210
|
+
|
|
211
|
+
if (raw.gitops !== undefined) {
|
|
212
|
+
if (typeof raw.gitops !== "object" || raw.gitops === null) {
|
|
213
|
+
errors.push("uok.gitops must be an object");
|
|
214
|
+
} else {
|
|
215
|
+
const gitops = raw.gitops as Record<string, unknown>;
|
|
216
|
+
const parsed: NonNullable<NonNullable<GSDPreferences["uok"]>["gitops"]> = {};
|
|
217
|
+
if (gitops.enabled !== undefined) {
|
|
218
|
+
if (typeof gitops.enabled === "boolean") parsed.enabled = gitops.enabled;
|
|
219
|
+
else errors.push("uok.gitops.enabled must be a boolean");
|
|
220
|
+
}
|
|
221
|
+
if (gitops.turn_action !== undefined) {
|
|
222
|
+
if (
|
|
223
|
+
typeof gitops.turn_action === "string" &&
|
|
224
|
+
VALID_UOK_TURN_ACTIONS.has(gitops.turn_action as "commit" | "snapshot" | "status-only")
|
|
225
|
+
) {
|
|
226
|
+
parsed.turn_action = gitops.turn_action as "commit" | "snapshot" | "status-only";
|
|
227
|
+
} else {
|
|
228
|
+
errors.push("uok.gitops.turn_action must be one of: commit, snapshot, status-only");
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (gitops.turn_push !== undefined) {
|
|
232
|
+
if (typeof gitops.turn_push === "boolean") parsed.turn_push = gitops.turn_push;
|
|
233
|
+
else errors.push("uok.gitops.turn_push must be a boolean");
|
|
234
|
+
}
|
|
235
|
+
const unknown = Object.keys(gitops).filter((k) => !["enabled", "turn_action", "turn_push"].includes(k));
|
|
236
|
+
for (const unk of unknown) {
|
|
237
|
+
warnings.push(`unknown uok.gitops key "${unk}" β ignored`);
|
|
238
|
+
}
|
|
239
|
+
if (Object.keys(parsed).length > 0) {
|
|
240
|
+
valid.gitops = parsed;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
const knownUokKeys = new Set([
|
|
246
|
+
"enabled",
|
|
247
|
+
"legacy_fallback",
|
|
248
|
+
"gates",
|
|
249
|
+
"model_policy",
|
|
250
|
+
"execution_graph",
|
|
251
|
+
"gitops",
|
|
252
|
+
"audit_unified",
|
|
253
|
+
"plan_v2",
|
|
254
|
+
]);
|
|
255
|
+
for (const key of Object.keys(raw)) {
|
|
256
|
+
if (!knownUokKeys.has(key)) {
|
|
257
|
+
warnings.push(`unknown uok key "${key}" β ignored`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
if (Object.keys(valid).length > 0) {
|
|
262
|
+
validated.uok = valid;
|
|
263
|
+
}
|
|
264
|
+
} else {
|
|
265
|
+
errors.push("uok must be an object");
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
164
269
|
// βββ Token Profile βββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
165
270
|
if (preferences.token_profile !== undefined) {
|
|
166
271
|
if (typeof preferences.token_profile === "string" && VALID_TOKEN_PROFILES.has(preferences.token_profile as TokenProfile)) {
|
|
167
272
|
validated.token_profile = preferences.token_profile as TokenProfile;
|
|
168
273
|
} else {
|
|
169
|
-
errors.push(`token_profile must be one of: budget, balanced, quality`);
|
|
274
|
+
errors.push(`token_profile must be one of: budget, balanced, quality, burn-max`);
|
|
170
275
|
}
|
|
171
276
|
}
|
|
172
277
|
|
|
@@ -1002,5 +1107,15 @@ export function validatePreferences(preferences: GSDPreferences): {
|
|
|
1002
1107
|
}
|
|
1003
1108
|
}
|
|
1004
1109
|
|
|
1110
|
+
// βββ Language ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
1111
|
+
if (preferences.language !== undefined) {
|
|
1112
|
+
const trimmed = typeof preferences.language === "string" ? preferences.language.trim() : undefined;
|
|
1113
|
+
if (trimmed && trimmed.length <= 50 && !/[\r\n]/.test(trimmed)) {
|
|
1114
|
+
validated.language = trimmed;
|
|
1115
|
+
} else {
|
|
1116
|
+
errors.push(`language must be a non-empty string up to 50 characters with no newlines (e.g. "Chinese", "de", "ζ₯ζ¬θͺ")`);
|
|
1117
|
+
}
|
|
1118
|
+
}
|
|
1119
|
+
|
|
1005
1120
|
return { preferences: validated, errors, warnings };
|
|
1006
1121
|
}
|
|
@@ -50,6 +50,8 @@ export type {
|
|
|
50
50
|
AutoSupervisorConfig,
|
|
51
51
|
RemoteQuestionsConfig,
|
|
52
52
|
CmuxPreferences,
|
|
53
|
+
UokTurnActionMode,
|
|
54
|
+
UokPreferences,
|
|
53
55
|
CodebaseMapPreferences,
|
|
54
56
|
GSDPreferences,
|
|
55
57
|
LoadedGSDPreferences,
|
|
@@ -378,6 +380,32 @@ function mergePreferences(base: GSDPreferences, override: GSDPreferences): GSDPr
|
|
|
378
380
|
dynamic_routing: (base.dynamic_routing || override.dynamic_routing)
|
|
379
381
|
? { ...(base.dynamic_routing ?? {}), ...(override.dynamic_routing ?? {}) } as DynamicRoutingConfig
|
|
380
382
|
: undefined,
|
|
383
|
+
uok: (base.uok || override.uok)
|
|
384
|
+
? {
|
|
385
|
+
enabled: override.uok?.enabled ?? base.uok?.enabled,
|
|
386
|
+
legacy_fallback: (base.uok?.legacy_fallback || override.uok?.legacy_fallback)
|
|
387
|
+
? { ...(base.uok?.legacy_fallback ?? {}), ...(override.uok?.legacy_fallback ?? {}) }
|
|
388
|
+
: undefined,
|
|
389
|
+
gates: (base.uok?.gates || override.uok?.gates)
|
|
390
|
+
? { ...(base.uok?.gates ?? {}), ...(override.uok?.gates ?? {}) }
|
|
391
|
+
: undefined,
|
|
392
|
+
model_policy: (base.uok?.model_policy || override.uok?.model_policy)
|
|
393
|
+
? { ...(base.uok?.model_policy ?? {}), ...(override.uok?.model_policy ?? {}) }
|
|
394
|
+
: undefined,
|
|
395
|
+
execution_graph: (base.uok?.execution_graph || override.uok?.execution_graph)
|
|
396
|
+
? { ...(base.uok?.execution_graph ?? {}), ...(override.uok?.execution_graph ?? {}) }
|
|
397
|
+
: undefined,
|
|
398
|
+
gitops: (base.uok?.gitops || override.uok?.gitops)
|
|
399
|
+
? { ...(base.uok?.gitops ?? {}), ...(override.uok?.gitops ?? {}) }
|
|
400
|
+
: undefined,
|
|
401
|
+
audit_unified: (base.uok?.audit_unified || override.uok?.audit_unified)
|
|
402
|
+
? { ...(base.uok?.audit_unified ?? {}), ...(override.uok?.audit_unified ?? {}) }
|
|
403
|
+
: undefined,
|
|
404
|
+
plan_v2: (base.uok?.plan_v2 || override.uok?.plan_v2)
|
|
405
|
+
? { ...(base.uok?.plan_v2 ?? {}), ...(override.uok?.plan_v2 ?? {}) }
|
|
406
|
+
: undefined,
|
|
407
|
+
}
|
|
408
|
+
: undefined,
|
|
381
409
|
token_profile: override.token_profile ?? base.token_profile,
|
|
382
410
|
phases: (base.phases || override.phases)
|
|
383
411
|
? { ...(base.phases ?? {}), ...(override.phases ?? {}) }
|
|
@@ -419,6 +447,7 @@ function mergePreferences(base: GSDPreferences, override: GSDPreferences): GSDPr
|
|
|
419
447
|
slice_parallel: (base.slice_parallel || override.slice_parallel)
|
|
420
448
|
? { ...(base.slice_parallel ?? {}), ...(override.slice_parallel ?? {}) }
|
|
421
449
|
: undefined,
|
|
450
|
+
language: override.language ?? base.language,
|
|
422
451
|
};
|
|
423
452
|
}
|
|
424
453
|
|
|
@@ -534,6 +563,11 @@ export function renderPreferencesForSystemPrompt(preferences: GSDPreferences, re
|
|
|
534
563
|
}
|
|
535
564
|
}
|
|
536
565
|
|
|
566
|
+
if (preferences.language) {
|
|
567
|
+
const safeLang = preferences.language.replace(/[\r\n]/g, " ").slice(0, 50);
|
|
568
|
+
lines.push(`- Language: Always respond in ${safeLang}.`);
|
|
569
|
+
}
|
|
570
|
+
|
|
537
571
|
return lines.join("\n");
|
|
538
572
|
}
|
|
539
573
|
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
You are generating tests for recently completed GSD work.
|
|
2
|
+
|
|
3
|
+
## Slice: {{sliceId}} β {{sliceTitle}}
|
|
4
|
+
|
|
5
|
+
### Summary
|
|
6
|
+
|
|
7
|
+
{{sliceSummary}}
|
|
8
|
+
|
|
9
|
+
### Existing Test Patterns
|
|
10
|
+
|
|
11
|
+
{{existingTestPatterns}}
|
|
12
|
+
|
|
13
|
+
## Working Directory
|
|
14
|
+
|
|
15
|
+
`{{workingDirectory}}`
|
|
16
|
+
|
|
17
|
+
## Instructions
|
|
18
|
+
|
|
19
|
+
1. Read the slice summary above to understand what was built
|
|
20
|
+
2. Identify the source files that were created or modified for this slice
|
|
21
|
+
3. Read the implementation code to understand behavior, edge cases, and error paths
|
|
22
|
+
4. Write comprehensive tests following the project's existing test patterns and framework
|
|
23
|
+
5. Run the tests to verify they pass
|
|
24
|
+
6. Fix any failures
|
|
25
|
+
|
|
26
|
+
### Rules
|
|
27
|
+
|
|
28
|
+
- Follow the project's existing test patterns (framework, assertions, file structure)
|
|
29
|
+
- Test behavior, not implementation details
|
|
30
|
+
- Cover: happy path, edge cases, error conditions, boundary values
|
|
31
|
+
- Do NOT modify implementation files β only create or update test files
|
|
32
|
+
- Name test files consistently with the project's conventions
|
|
33
|
+
- Keep tests focused and readable
|
|
34
|
+
|
|
35
|
+
{{skillActivation}}
|
|
@@ -68,11 +68,11 @@ export function getFilePaths(): string[] {
|
|
|
68
68
|
* Record a tool call at dispatch time (before execution).
|
|
69
69
|
* Exit codes and output are filled in by recordToolResult after execution.
|
|
70
70
|
*/
|
|
71
|
-
export function recordToolCall(toolName: string, input: Record<string, unknown>): void {
|
|
71
|
+
export function recordToolCall(toolCallId: string, toolName: string, input: Record<string, unknown>): void {
|
|
72
72
|
if (toolName === "bash" || toolName === "Bash") {
|
|
73
73
|
unitEvidence.push({
|
|
74
74
|
kind: "bash",
|
|
75
|
-
toolCallId
|
|
75
|
+
toolCallId,
|
|
76
76
|
command: String(input.command ?? ""),
|
|
77
77
|
exitCode: -1,
|
|
78
78
|
outputSnippet: "",
|
|
@@ -81,14 +81,14 @@ export function recordToolCall(toolName: string, input: Record<string, unknown>)
|
|
|
81
81
|
} else if (toolName === "write" || toolName === "Write") {
|
|
82
82
|
unitEvidence.push({
|
|
83
83
|
kind: "write",
|
|
84
|
-
toolCallId
|
|
84
|
+
toolCallId,
|
|
85
85
|
path: String(input.file_path ?? input.path ?? ""),
|
|
86
86
|
timestamp: Date.now(),
|
|
87
87
|
});
|
|
88
88
|
} else if (toolName === "edit" || toolName === "Edit") {
|
|
89
89
|
unitEvidence.push({
|
|
90
90
|
kind: "edit",
|
|
91
|
-
toolCallId
|
|
91
|
+
toolCallId,
|
|
92
92
|
path: String(input.file_path ?? input.path ?? ""),
|
|
93
93
|
timestamp: Date.now(),
|
|
94
94
|
});
|
|
@@ -96,8 +96,9 @@ export function recordToolCall(toolName: string, input: Record<string, unknown>)
|
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
/**
|
|
99
|
-
* Record a tool execution result. Matches the
|
|
100
|
-
*
|
|
99
|
+
* Record a tool execution result. Matches the entry by toolCallId (assigned
|
|
100
|
+
* at dispatch time) and fills in exit code + output. Prior versions matched
|
|
101
|
+
* by `kind + empty-string` which corrupted parallel tool calls.
|
|
101
102
|
*/
|
|
102
103
|
export function recordToolResult(
|
|
103
104
|
toolCallId: string,
|
|
@@ -105,36 +106,19 @@ export function recordToolResult(
|
|
|
105
106
|
result: unknown,
|
|
106
107
|
isError: boolean,
|
|
107
108
|
): void {
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
const exitMatch = text.match(/Command exited with code (\d+)/);
|
|
117
|
-
entry.exitCode = exitMatch ? Number(exitMatch[1]) : (isError ? 1 : 0);
|
|
118
|
-
}
|
|
119
|
-
} else if (normalizedName === "write" || normalizedName === "edit") {
|
|
120
|
-
const entry = findLastUnresolved(normalizedName as "write" | "edit");
|
|
121
|
-
if (entry) {
|
|
122
|
-
entry.toolCallId = toolCallId;
|
|
123
|
-
}
|
|
109
|
+
const entry = unitEvidence.find(e => e.toolCallId === toolCallId);
|
|
110
|
+
if (!entry) return;
|
|
111
|
+
|
|
112
|
+
if (entry.kind === "bash") {
|
|
113
|
+
const text = extractResultText(result);
|
|
114
|
+
entry.outputSnippet = text.slice(0, 500);
|
|
115
|
+
const exitMatch = text.match(/Command exited with code (\d+)/);
|
|
116
|
+
entry.exitCode = exitMatch ? Number(exitMatch[1]) : (isError ? 1 : 0);
|
|
124
117
|
}
|
|
125
118
|
}
|
|
126
119
|
|
|
127
120
|
// βββ Internals ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
128
121
|
|
|
129
|
-
function findLastUnresolved(kind: string): EvidenceEntry | undefined {
|
|
130
|
-
for (let i = unitEvidence.length - 1; i >= 0; i--) {
|
|
131
|
-
if (unitEvidence[i].kind === kind && unitEvidence[i].toolCallId === "") {
|
|
132
|
-
return unitEvidence[i];
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
return undefined;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
122
|
function extractResultText(result: unknown): string {
|
|
139
123
|
if (typeof result === "string") return result;
|
|
140
124
|
if (result && typeof result === "object") {
|
|
@@ -52,6 +52,18 @@ export interface SessionLockStatus {
|
|
|
52
52
|
recovered?: boolean;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
interface ProperLockfileApi {
|
|
56
|
+
lockSync(
|
|
57
|
+
path: string,
|
|
58
|
+
options?: {
|
|
59
|
+
realpath?: boolean;
|
|
60
|
+
stale?: number;
|
|
61
|
+
update?: number;
|
|
62
|
+
onCompromised?: () => void;
|
|
63
|
+
},
|
|
64
|
+
): () => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
55
67
|
// βββ Module State βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
56
68
|
|
|
57
69
|
/** Release function from proper-lockfile β calling it releases the OS lock. */
|
|
@@ -277,9 +289,9 @@ export function acquireSessionLock(basePath: string): SessionLockResult {
|
|
|
277
289
|
unitStartedAt: new Date().toISOString(),
|
|
278
290
|
};
|
|
279
291
|
|
|
280
|
-
let lockfile:
|
|
292
|
+
let lockfile: ProperLockfileApi;
|
|
281
293
|
try {
|
|
282
|
-
lockfile = _require("proper-lockfile") as
|
|
294
|
+
lockfile = _require("proper-lockfile") as ProperLockfileApi;
|
|
283
295
|
} catch {
|
|
284
296
|
// proper-lockfile not available β fall back to PID-based check
|
|
285
297
|
return acquireFallbackLock(basePath, lp, lockData);
|
|
@@ -32,6 +32,7 @@ import {
|
|
|
32
32
|
} from "./session-status-io.js";
|
|
33
33
|
import { hasFileConflict } from "./slice-parallel-conflict.js";
|
|
34
34
|
import { getErrorMessage } from "./error-utils.js";
|
|
35
|
+
import { selectConflictFreeBatch } from "./uok/execution-graph.js";
|
|
35
36
|
|
|
36
37
|
// βββ Types βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
37
38
|
|
|
@@ -61,6 +62,7 @@ export interface SliceOrchestratorState {
|
|
|
61
62
|
export interface StartSliceParallelOpts {
|
|
62
63
|
maxWorkers?: number;
|
|
63
64
|
budgetCeiling?: number;
|
|
65
|
+
useExecutionGraph?: boolean;
|
|
64
66
|
}
|
|
65
67
|
|
|
66
68
|
// βββ Module State ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
|
|
@@ -118,7 +120,12 @@ export async function startSliceParallel(
|
|
|
118
120
|
const errors: Array<{ sid: string; error: string }> = [];
|
|
119
121
|
|
|
120
122
|
// Filter out conflicting slices (conservative: check all pairs)
|
|
121
|
-
const safeSlices = filterConflictingSlices(
|
|
123
|
+
const safeSlices = filterConflictingSlices(
|
|
124
|
+
basePath,
|
|
125
|
+
milestoneId,
|
|
126
|
+
eligibleSlices,
|
|
127
|
+
opts.useExecutionGraph === true,
|
|
128
|
+
);
|
|
122
129
|
|
|
123
130
|
// Limit to maxWorkers
|
|
124
131
|
const toSpawn = safeSlices.slice(0, maxWorkers);
|
|
@@ -245,7 +252,19 @@ function filterConflictingSlices(
|
|
|
245
252
|
basePath: string,
|
|
246
253
|
milestoneId: string,
|
|
247
254
|
slices: Array<{ id: string }>,
|
|
255
|
+
useExecutionGraph: boolean,
|
|
248
256
|
): Array<{ id: string }> {
|
|
257
|
+
if (useExecutionGraph) {
|
|
258
|
+
const selectedIds = selectConflictFreeBatch({
|
|
259
|
+
orderedIds: slices.map((slice) => slice.id),
|
|
260
|
+
maxParallel: slices.length,
|
|
261
|
+
hasConflict: (candidate, existing) =>
|
|
262
|
+
hasFileConflict(basePath, milestoneId, candidate, existing),
|
|
263
|
+
});
|
|
264
|
+
const selected = new Set(selectedIds);
|
|
265
|
+
return slices.filter((slice) => selected.has(slice.id));
|
|
266
|
+
}
|
|
267
|
+
|
|
249
268
|
const safe: Array<{ id: string }> = [];
|
|
250
269
|
|
|
251
270
|
for (const candidate of slices) {
|
|
@@ -345,8 +345,15 @@ function reconcileDiskToDb(basePath: string): MilestoneRow[] {
|
|
|
345
345
|
const dbSliceIds = new Set(dbSlices.map(s => s.id));
|
|
346
346
|
|
|
347
347
|
let roadmapContent: string;
|
|
348
|
-
try {
|
|
349
|
-
|
|
348
|
+
try {
|
|
349
|
+
roadmapContent = readFileSync(roadmapPath, "utf-8");
|
|
350
|
+
} catch (err) {
|
|
351
|
+
logWarning("state", "reconcileDiskToDb: roadmap read failed, skipping milestone", {
|
|
352
|
+
mid,
|
|
353
|
+
error: (err as Error).message,
|
|
354
|
+
});
|
|
355
|
+
continue;
|
|
356
|
+
}
|
|
350
357
|
|
|
351
358
|
const parsed = parseRoadmap(roadmapContent);
|
|
352
359
|
for (const s of parsed.slices) {
|
|
@@ -39,6 +39,24 @@ dynamic_routing:
|
|
|
39
39
|
budget_pressure:
|
|
40
40
|
cross_provider:
|
|
41
41
|
hooks:
|
|
42
|
+
uok:
|
|
43
|
+
enabled: true
|
|
44
|
+
legacy_fallback:
|
|
45
|
+
enabled: false
|
|
46
|
+
gates:
|
|
47
|
+
enabled: false
|
|
48
|
+
model_policy:
|
|
49
|
+
enabled: false
|
|
50
|
+
execution_graph:
|
|
51
|
+
enabled: false
|
|
52
|
+
gitops:
|
|
53
|
+
enabled: false
|
|
54
|
+
turn_action: status-only
|
|
55
|
+
turn_push: false
|
|
56
|
+
audit_unified:
|
|
57
|
+
enabled: false
|
|
58
|
+
plan_v2:
|
|
59
|
+
enabled: false
|
|
42
60
|
auto_visualize:
|
|
43
61
|
auto_report:
|
|
44
62
|
parallel:
|
|
@@ -71,6 +89,7 @@ remote_questions:
|
|
|
71
89
|
uat_dispatch:
|
|
72
90
|
post_unit_hooks: []
|
|
73
91
|
pre_dispatch_hooks: []
|
|
92
|
+
# language:
|
|
74
93
|
# experimental:
|
|
75
94
|
# rtk: false
|
|
76
95
|
---
|