gsd-pi 2.73.1-dev.d987996 → 2.74.0-dev.0306a2e
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-web-branch.d.ts +4 -3
- package/dist/cli-web-branch.js +10 -7
- package/dist/cli.js +184 -206
- package/dist/headless-query.js +4 -1
- package/dist/help-text.js +23 -0
- package/dist/logo.d.ts +1 -1
- package/dist/logo.js +1 -1
- package/dist/onboarding.js +59 -53
- package/dist/resource-loader.js +2 -2
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +68 -4
- 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 +173 -13
- package/dist/resources/extensions/gsd/auto/session.js +10 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +22 -4
- package/dist/resources/extensions/gsd/auto-model-selection.js +105 -16
- package/dist/resources/extensions/gsd/auto-post-unit.js +254 -15
- package/dist/resources/extensions/gsd/auto-prompts.js +12 -0
- package/dist/resources/extensions/gsd/auto-start.js +23 -6
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +13 -0
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +18 -0
- package/dist/resources/extensions/gsd/auto-verification.js +186 -3
- package/dist/resources/extensions/gsd/auto.js +65 -12
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +30 -8
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +41 -2
- package/dist/resources/extensions/gsd/commands/catalog.js +26 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +25 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +68 -9
- package/dist/resources/extensions/gsd/commands-add-tests.js +111 -0
- package/dist/resources/extensions/gsd/commands-backlog.js +140 -0
- package/dist/resources/extensions/gsd/commands-do.js +79 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +225 -0
- package/dist/resources/extensions/gsd/commands-handlers.js +8 -2
- package/dist/resources/extensions/gsd/commands-maintenance.js +6 -6
- package/dist/resources/extensions/gsd/commands-pr-branch.js +180 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -1
- package/dist/resources/extensions/gsd/commands-session-report.js +82 -0
- package/dist/resources/extensions/gsd/commands-ship.js +187 -0
- package/dist/resources/extensions/gsd/db-writer.js +3 -5
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +15 -2
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +144 -0
- package/dist/resources/extensions/gsd/ecosystem/loader.js +145 -0
- package/dist/resources/extensions/gsd/git-service.js +49 -1
- package/dist/resources/extensions/gsd/graph-context.js +157 -0
- package/dist/resources/extensions/gsd/gsd-db.js +581 -2
- package/dist/resources/extensions/gsd/guided-flow.js +23 -0
- package/dist/resources/extensions/gsd/index.js +15 -2
- package/dist/resources/extensions/gsd/init-wizard.js +1 -0
- package/dist/resources/extensions/gsd/journal.js +27 -0
- package/dist/resources/extensions/gsd/md-importer.js +3 -4
- package/dist/resources/extensions/gsd/memory-store.js +19 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -0
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +13 -12
- package/dist/resources/extensions/gsd/native-git-bridge.js +7 -4
- package/dist/resources/extensions/gsd/notification-widget.js +2 -2
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +33 -1
- package/dist/resources/extensions/gsd/preferences-models.js +63 -3
- package/dist/resources/extensions/gsd/preferences-types.js +2 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +130 -2
- package/dist/resources/extensions/gsd/preferences.js +26 -0
- package/dist/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +12 -2
- package/dist/resources/extensions/gsd/state.js +66 -15
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +18 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +20 -0
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +39 -4
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +2 -5
- package/dist/resources/extensions/gsd/unit-ownership.js +1 -1
- package/dist/resources/extensions/gsd/uok/audit-toggle.js +7 -0
- package/dist/resources/extensions/gsd/uok/audit.js +40 -0
- package/dist/resources/extensions/gsd/uok/contracts.js +1 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +179 -0
- package/dist/resources/extensions/gsd/uok/flags.js +29 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +109 -0
- package/dist/resources/extensions/gsd/uok/gitops.js +53 -0
- package/dist/resources/extensions/gsd/uok/kernel.js +80 -0
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +133 -0
- package/dist/resources/extensions/gsd/uok/model-policy.js +66 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +132 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +22 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -69
- package/dist/resources/extensions/gsd/workflow-migration.js +21 -22
- package/dist/resources/extensions/gsd/workflow-projections.js +4 -1
- package/dist/resources/extensions/gsd/workflow-reconcile.js +14 -11
- package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -0
- package/dist/update-check.d.ts +1 -0
- package/dist/update-check.js +13 -5
- package/dist/update-cmd.js +4 -3
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- 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 +13 -13
- 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 -3
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/index.d.ts +3 -0
- package/packages/mcp-server/dist/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/index.js +3 -0
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/dist/readers/graph.d.ts +87 -0
- package/packages/mcp-server/dist/readers/graph.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/graph.js +655 -0
- package/packages/mcp-server/dist/readers/graph.js.map +1 -0
- package/packages/mcp-server/dist/readers/index.d.ts +2 -0
- package/packages/mcp-server/dist/readers/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/readers/index.js +1 -0
- package/packages/mcp-server/dist/readers/index.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +65 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/index.ts +15 -0
- package/packages/mcp-server/src/readers/graph.test.ts +604 -0
- package/packages/mcp-server/src/readers/graph.ts +855 -0
- package/packages/mcp-server/src/readers/index.ts +12 -0
- package/packages/mcp-server/src/server.ts +83 -0
- package/packages/mcp-server/tsconfig.json +1 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -0
- package/packages/native/package.json +2 -2
- package/packages/native/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.json +1 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-ai/dist/index.d.ts +2 -9
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +2 -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/dist/utils/overflow.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/overflow.js +12 -0
- package/packages/pi-ai/dist/utils/overflow.js.map +1 -1
- package/packages/pi-ai/dist/utils/tests/overflow.test.d.ts +2 -0
- package/packages/pi-ai/dist/utils/tests/overflow.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/utils/tests/overflow.test.js +50 -0
- package/packages/pi-ai/dist/utils/tests/overflow.test.js.map +1 -0
- 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 +5 -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/src/utils/overflow.ts +14 -1
- package/packages/pi-ai/src/utils/tests/overflow.test.ts +58 -0
- package/packages/pi-ai/tsconfig.json +1 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +721 -8
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction/utils.js +5 -5
- package/packages/pi-coding-agent/dist/core/compaction/utils.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js +45 -0
- package/packages/pi-coding-agent/dist/core/compaction-utils.test.js.map +1 -0
- 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/assistant-message.d.ts +12 -2
- 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 +65 -28
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +2 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +9 -3
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js +52 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.test.js.map +1 -0
- 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 +305 -20
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +38 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +13 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +59 -6
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +884 -8
- package/packages/pi-coding-agent/src/core/compaction/utils.ts +5 -5
- package/packages/pi-coding-agent/src/core/compaction-utils.test.ts +50 -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/assistant-message.ts +78 -32
- package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.test.ts +73 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.ts +9 -3
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +381 -39
- 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 +79 -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/dist/__tests__/tui.test.js +60 -1
- package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
- package/packages/pi-tui/dist/tui.d.ts +8 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +32 -3
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/tui.test.ts +76 -1
- package/packages/pi-tui/src/tui.ts +31 -3
- 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/pkg/package.json +1 -1
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +107 -5
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +111 -2
- 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 +213 -13
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +26 -10
- package/src/resources/extensions/gsd/auto-model-selection.ts +151 -16
- package/src/resources/extensions/gsd/auto-post-unit.ts +278 -16
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -0
- package/src/resources/extensions/gsd/auto-start.ts +30 -6
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +17 -0
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +25 -1
- package/src/resources/extensions/gsd/auto-verification.ts +225 -3
- package/src/resources/extensions/gsd/auto.ts +72 -16
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +38 -8
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +52 -2
- package/src/resources/extensions/gsd/commands/catalog.ts +26 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +25 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +74 -9
- package/src/resources/extensions/gsd/commands-add-tests.ts +137 -0
- package/src/resources/extensions/gsd/commands-backlog.ts +182 -0
- package/src/resources/extensions/gsd/commands-do.ts +109 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +304 -0
- package/src/resources/extensions/gsd/commands-handlers.ts +8 -2
- package/src/resources/extensions/gsd/commands-maintenance.ts +6 -6
- package/src/resources/extensions/gsd/commands-pr-branch.ts +234 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -1
- package/src/resources/extensions/gsd/commands-session-report.ts +101 -0
- package/src/resources/extensions/gsd/commands-ship.ts +219 -0
- package/src/resources/extensions/gsd/db-writer.ts +3 -5
- package/src/resources/extensions/gsd/docs/preferences-reference.md +15 -2
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +228 -0
- package/src/resources/extensions/gsd/ecosystem/loader.ts +201 -0
- package/src/resources/extensions/gsd/git-service.ts +68 -0
- package/src/resources/extensions/gsd/graph-context.ts +212 -0
- package/src/resources/extensions/gsd/gsd-db.ts +788 -3
- package/src/resources/extensions/gsd/guided-flow.ts +32 -0
- package/src/resources/extensions/gsd/index.ts +18 -2
- package/src/resources/extensions/gsd/init-wizard.ts +3 -2
- package/src/resources/extensions/gsd/journal.ts +30 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -5
- package/src/resources/extensions/gsd/memory-store.ts +31 -62
- package/src/resources/extensions/gsd/metrics.ts +26 -0
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +13 -14
- package/src/resources/extensions/gsd/native-git-bridge.ts +11 -12
- package/src/resources/extensions/gsd/notification-widget.ts +2 -2
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +40 -1
- package/src/resources/extensions/gsd/preferences-models.ts +61 -3
- package/src/resources/extensions/gsd/preferences-types.ts +44 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +130 -2
- package/src/resources/extensions/gsd/preferences.ts +28 -0
- package/src/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/src/resources/extensions/gsd/session-lock.ts +14 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +20 -1
- package/src/resources/extensions/gsd/state.ts +80 -17
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +18 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +9 -5
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +51 -2
- 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-milestone-false-merge.test.ts +142 -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/completed-at-reconcile.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +3 -2
- package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +68 -8
- package/src/resources/extensions/gsd/tests/derive-state.test.ts +3 -3
- 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/flat-rate-routing-guard.test.ts +137 -1
- 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/integration/state-machine-edge-cases.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +68 -1
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -3
- package/src/resources/extensions/gsd/tests/model-isolation.test.ts +91 -2
- 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 +47 -0
- 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/state-machine-full-walkthrough.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +9 -6
- 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-stuck-guard.test.ts +179 -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/{cGmbVq2su4f9tMpgIkG8u → tqdo0yKKYz6fJXQnIgbdx}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{cGmbVq2su4f9tMpgIkG8u → tqdo0yKKYz6fJXQnIgbdx}/_ssgManifest.js +0 -0
|
@@ -12,6 +12,7 @@ import { importExtensionModule, type ExtensionAPI, type ExtensionContext } from
|
|
|
12
12
|
import type { AutoSession, SidecarItem } from "./session.js";
|
|
13
13
|
import type { LoopDeps } from "./loop-deps.js";
|
|
14
14
|
import type { PostUnitContext, PreVerificationOpts } from "../auto-post-unit.js";
|
|
15
|
+
import type { Phase } from "../types.js";
|
|
15
16
|
import {
|
|
16
17
|
MAX_RECOVERY_CHARS,
|
|
17
18
|
BUDGET_THRESHOLDS,
|
|
@@ -30,7 +31,15 @@ import { MergeConflictError } from "../git-service.js";
|
|
|
30
31
|
import { setCurrentPhase, clearCurrentPhase } from "../../shared/gsd-phase-state.js";
|
|
31
32
|
import { join, basename, dirname, parse as parsePath } from "node:path";
|
|
32
33
|
import { existsSync, cpSync, readdirSync } from "node:fs";
|
|
33
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
logWarning,
|
|
36
|
+
logError,
|
|
37
|
+
_resetLogs,
|
|
38
|
+
drainLogs,
|
|
39
|
+
drainAndSummarize,
|
|
40
|
+
formatForNotification,
|
|
41
|
+
hasAnyIssues,
|
|
42
|
+
} from "../workflow-logger.js";
|
|
34
43
|
import { gsdRoot } from "../paths.js";
|
|
35
44
|
import { atomicWriteSync } from "../atomic-write.js";
|
|
36
45
|
import { verifyExpectedArtifact, diagnoseExpectedArtifact, buildLoopRemediationSteps } from "../auto-recovery.js";
|
|
@@ -39,6 +48,9 @@ import { withTimeout, FINALIZE_PRE_TIMEOUT_MS, FINALIZE_POST_TIMEOUT_MS } from "
|
|
|
39
48
|
import { getEligibleSlices } from "../slice-parallel-eligibility.js";
|
|
40
49
|
import { startSliceParallel } from "../slice-parallel-orchestrator.js";
|
|
41
50
|
import { isDbAvailable, getMilestoneSlices } from "../gsd-db.js";
|
|
51
|
+
import { ensurePlanV2Graph } from "../uok/plan-v2.js";
|
|
52
|
+
import { resolveUokFlags } from "../uok/flags.js";
|
|
53
|
+
import { UokGateRunner } from "../uok/gate-runner.js";
|
|
42
54
|
import { resetEvidence } from "../safety/evidence-collector.js";
|
|
43
55
|
import { createCheckpoint, cleanupCheckpoint, rollbackToCheckpoint } from "../safety/git-checkpoint.js";
|
|
44
56
|
import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
|
|
@@ -69,6 +81,17 @@ export function _resolveDispatchGuardBasePath(
|
|
|
69
81
|
return s.originalBasePath || s.basePath;
|
|
70
82
|
}
|
|
71
83
|
|
|
84
|
+
const PLAN_V2_GATE_PHASES: ReadonlySet<Phase> = new Set([
|
|
85
|
+
"executing",
|
|
86
|
+
"summarizing",
|
|
87
|
+
"validating-milestone",
|
|
88
|
+
"completing-milestone",
|
|
89
|
+
]);
|
|
90
|
+
|
|
91
|
+
function shouldRunPlanV2Gate(phase: Phase): boolean {
|
|
92
|
+
return PLAN_V2_GATE_PHASES.has(phase);
|
|
93
|
+
}
|
|
94
|
+
|
|
72
95
|
/**
|
|
73
96
|
* Generate and write an HTML milestone report snapshot.
|
|
74
97
|
* Extracted from the milestone-transition block in autoLoop.
|
|
@@ -159,6 +182,29 @@ async function closeoutAndStop(
|
|
|
159
182
|
await deps.stopAuto(ctx, pi, reason);
|
|
160
183
|
}
|
|
161
184
|
|
|
185
|
+
async function emitCancelledUnitEnd(
|
|
186
|
+
ic: IterationContext,
|
|
187
|
+
unitType: string,
|
|
188
|
+
unitId: string,
|
|
189
|
+
unitStartSeq: number,
|
|
190
|
+
errorContext?: { message: string; category: string; stopReason?: string; isTransient?: boolean; retryAfterMs?: number },
|
|
191
|
+
): Promise<void> {
|
|
192
|
+
ic.deps.emitJournalEvent({
|
|
193
|
+
ts: new Date().toISOString(),
|
|
194
|
+
flowId: ic.flowId,
|
|
195
|
+
seq: ic.nextSeq(),
|
|
196
|
+
eventType: "unit-end",
|
|
197
|
+
data: {
|
|
198
|
+
unitType,
|
|
199
|
+
unitId,
|
|
200
|
+
status: "cancelled",
|
|
201
|
+
artifactVerified: false,
|
|
202
|
+
...(errorContext ? { errorContext } : {}),
|
|
203
|
+
},
|
|
204
|
+
causedBy: { flowId: ic.flowId, seq: unitStartSeq },
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
162
208
|
// ─── runPreDispatch ───────────────────────────────────────────────────────────
|
|
163
209
|
|
|
164
210
|
/**
|
|
@@ -171,14 +217,60 @@ export async function runPreDispatch(
|
|
|
171
217
|
loopState: LoopState,
|
|
172
218
|
): Promise<PhaseResult<PreDispatchData>> {
|
|
173
219
|
const { ctx, pi, s, deps, prefs } = ic;
|
|
220
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
221
|
+
const runPreDispatchGate = async (input: {
|
|
222
|
+
gateId: string;
|
|
223
|
+
gateType: string;
|
|
224
|
+
outcome: "pass" | "fail" | "retry" | "manual-attention";
|
|
225
|
+
failureClass: "none" | "policy" | "input" | "execution" | "artifact" | "verification" | "closeout" | "git" | "timeout" | "manual-attention" | "unknown";
|
|
226
|
+
rationale: string;
|
|
227
|
+
findings?: string;
|
|
228
|
+
milestoneId?: string;
|
|
229
|
+
}): Promise<void> => {
|
|
230
|
+
if (!uokFlags.gates) return;
|
|
231
|
+
const gateRunner = new UokGateRunner();
|
|
232
|
+
gateRunner.register({
|
|
233
|
+
id: input.gateId,
|
|
234
|
+
type: input.gateType,
|
|
235
|
+
execute: async () => ({
|
|
236
|
+
outcome: input.outcome,
|
|
237
|
+
failureClass: input.failureClass,
|
|
238
|
+
rationale: input.rationale,
|
|
239
|
+
findings: input.findings ?? "",
|
|
240
|
+
}),
|
|
241
|
+
});
|
|
242
|
+
await gateRunner.run(input.gateId, {
|
|
243
|
+
basePath: s.basePath,
|
|
244
|
+
traceId: `pre-dispatch:${ic.flowId}`,
|
|
245
|
+
turnId: `iter-${ic.iteration}`,
|
|
246
|
+
milestoneId: input.milestoneId ?? s.currentMilestoneId ?? undefined,
|
|
247
|
+
unitType: "pre-dispatch",
|
|
248
|
+
unitId: `iter-${ic.iteration}`,
|
|
249
|
+
});
|
|
250
|
+
};
|
|
174
251
|
|
|
175
252
|
// Resource version guard
|
|
176
253
|
const staleMsg = deps.checkResourcesStale(s.resourceVersionOnStart);
|
|
177
254
|
if (staleMsg) {
|
|
255
|
+
await runPreDispatchGate({
|
|
256
|
+
gateId: "resource-version-guard",
|
|
257
|
+
gateType: "policy",
|
|
258
|
+
outcome: "fail",
|
|
259
|
+
failureClass: "policy",
|
|
260
|
+
rationale: "resource version guard blocked dispatch",
|
|
261
|
+
findings: staleMsg,
|
|
262
|
+
});
|
|
178
263
|
await deps.stopAuto(ctx, pi, staleMsg);
|
|
179
264
|
debugLog("autoLoop", { phase: "exit", reason: "resources-stale" });
|
|
180
265
|
return { action: "break", reason: "resources-stale" };
|
|
181
266
|
}
|
|
267
|
+
await runPreDispatchGate({
|
|
268
|
+
gateId: "resource-version-guard",
|
|
269
|
+
gateType: "policy",
|
|
270
|
+
outcome: "pass",
|
|
271
|
+
failureClass: "none",
|
|
272
|
+
rationale: "resource version guard passed",
|
|
273
|
+
});
|
|
182
274
|
|
|
183
275
|
deps.invalidateAllCaches();
|
|
184
276
|
s.lastPromptCharCount = undefined;
|
|
@@ -194,6 +286,14 @@ export async function runPreDispatch(
|
|
|
194
286
|
);
|
|
195
287
|
}
|
|
196
288
|
if (!healthGate.proceed) {
|
|
289
|
+
await runPreDispatchGate({
|
|
290
|
+
gateId: "pre-dispatch-health-gate",
|
|
291
|
+
gateType: "execution",
|
|
292
|
+
outcome: "manual-attention",
|
|
293
|
+
failureClass: "manual-attention",
|
|
294
|
+
rationale: "pre-dispatch health gate blocked dispatch",
|
|
295
|
+
findings: healthGate.reason,
|
|
296
|
+
});
|
|
197
297
|
ctx.ui.notify(
|
|
198
298
|
healthGate.reason || "Pre-dispatch health check failed — run /gsd doctor for details.",
|
|
199
299
|
"error",
|
|
@@ -202,7 +302,23 @@ export async function runPreDispatch(
|
|
|
202
302
|
debugLog("autoLoop", { phase: "exit", reason: "health-gate-failed" });
|
|
203
303
|
return { action: "break", reason: "health-gate-failed" };
|
|
204
304
|
}
|
|
305
|
+
await runPreDispatchGate({
|
|
306
|
+
gateId: "pre-dispatch-health-gate",
|
|
307
|
+
gateType: "execution",
|
|
308
|
+
outcome: "pass",
|
|
309
|
+
failureClass: "none",
|
|
310
|
+
rationale: "pre-dispatch health gate passed",
|
|
311
|
+
findings: healthGate.fixesApplied.length > 0 ? healthGate.fixesApplied.join(", ") : "",
|
|
312
|
+
});
|
|
205
313
|
} catch (e) {
|
|
314
|
+
await runPreDispatchGate({
|
|
315
|
+
gateId: "pre-dispatch-health-gate",
|
|
316
|
+
gateType: "execution",
|
|
317
|
+
outcome: "manual-attention",
|
|
318
|
+
failureClass: "manual-attention",
|
|
319
|
+
rationale: "pre-dispatch health gate threw unexpectedly",
|
|
320
|
+
findings: String(e),
|
|
321
|
+
});
|
|
206
322
|
logWarning("engine", "Pre-dispatch health gate threw unexpectedly", { error: String(e) });
|
|
207
323
|
}
|
|
208
324
|
|
|
@@ -221,6 +337,32 @@ export async function runPreDispatch(
|
|
|
221
337
|
|
|
222
338
|
// Derive state
|
|
223
339
|
let state = await deps.deriveState(s.basePath);
|
|
340
|
+
if (prefs?.uok?.plan_v2?.enabled && shouldRunPlanV2Gate(state.phase)) {
|
|
341
|
+
const compiled = ensurePlanV2Graph(s.basePath, state);
|
|
342
|
+
if (!compiled.ok) {
|
|
343
|
+
const reason = compiled.reason ?? "Plan v2 compilation failed";
|
|
344
|
+
await runPreDispatchGate({
|
|
345
|
+
gateId: "plan-v2-gate",
|
|
346
|
+
gateType: "policy",
|
|
347
|
+
outcome: "manual-attention",
|
|
348
|
+
failureClass: "manual-attention",
|
|
349
|
+
rationale: "plan v2 compile gate failed",
|
|
350
|
+
findings: reason,
|
|
351
|
+
milestoneId: state.activeMilestone?.id ?? undefined,
|
|
352
|
+
});
|
|
353
|
+
ctx.ui.notify(`Plan gate failed-closed: ${reason}`, "error");
|
|
354
|
+
await deps.pauseAuto(ctx, pi);
|
|
355
|
+
return { action: "break", reason: "plan-v2-gate-failed" };
|
|
356
|
+
}
|
|
357
|
+
await runPreDispatchGate({
|
|
358
|
+
gateId: "plan-v2-gate",
|
|
359
|
+
gateType: "policy",
|
|
360
|
+
outcome: "pass",
|
|
361
|
+
failureClass: "none",
|
|
362
|
+
rationale: "plan v2 compile gate passed",
|
|
363
|
+
milestoneId: state.activeMilestone?.id ?? undefined,
|
|
364
|
+
});
|
|
365
|
+
}
|
|
224
366
|
deps.syncCmuxSidebar(prefs, state);
|
|
225
367
|
let mid = state.activeMilestone?.id;
|
|
226
368
|
let midTitle = state.activeMilestone?.title;
|
|
@@ -266,7 +408,10 @@ export async function runPreDispatch(
|
|
|
266
408
|
s.basePath,
|
|
267
409
|
mid,
|
|
268
410
|
eligible,
|
|
269
|
-
{
|
|
411
|
+
{
|
|
412
|
+
maxWorkers: prefs.slice_parallel.max_workers ?? 2,
|
|
413
|
+
useExecutionGraph: uokFlags.executionGraph,
|
|
414
|
+
},
|
|
270
415
|
);
|
|
271
416
|
if (result.started.length > 0) {
|
|
272
417
|
ctx.ui.notify(
|
|
@@ -481,10 +626,13 @@ export async function runPreDispatch(
|
|
|
481
626
|
);
|
|
482
627
|
} else if (state.phase === "blocked") {
|
|
483
628
|
const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
deps.
|
|
629
|
+
// Pause instead of hard-stop so the session is resumable with `/gsd auto`.
|
|
630
|
+
// Hard-stop here was causing premature termination when slice dependencies
|
|
631
|
+
// were temporarily unresolvable (e.g. after reassessment added new slices).
|
|
632
|
+
await deps.pauseAuto(ctx, pi);
|
|
633
|
+
ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto to resume.`, "warning");
|
|
634
|
+
deps.sendDesktopNotification("GSD", blockerMsg, "warning", "attention", basename(s.originalBasePath || s.basePath));
|
|
635
|
+
deps.logCmuxEvent(prefs, blockerMsg, "warning");
|
|
488
636
|
} else {
|
|
489
637
|
const ids = incomplete.map((m: { id: string }) => m.id).join(", ");
|
|
490
638
|
const diag = `basePath=${s.basePath}, milestones=[${state.registry.map((m: { id: string; status: string }) => `${m.id}:${m.status}`).join(", ")}], phase=${state.phase}`;
|
|
@@ -583,13 +731,23 @@ export async function runPreDispatch(
|
|
|
583
731
|
return { action: "break", reason: "milestone-complete" };
|
|
584
732
|
}
|
|
585
733
|
|
|
586
|
-
// Terminal: blocked
|
|
734
|
+
// Terminal: blocked — pause instead of hard-stop so the session is resumable.
|
|
587
735
|
if (state.phase === "blocked") {
|
|
588
736
|
const blockerMsg = `Blocked: ${state.blockers.join(", ")}`;
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
737
|
+
if (s.currentUnit) {
|
|
738
|
+
await deps.closeoutUnit(
|
|
739
|
+
ctx,
|
|
740
|
+
s.basePath,
|
|
741
|
+
s.currentUnit.type,
|
|
742
|
+
s.currentUnit.id,
|
|
743
|
+
s.currentUnit.startedAt,
|
|
744
|
+
deps.buildSnapshotOpts(s.currentUnit.type, s.currentUnit.id),
|
|
745
|
+
);
|
|
746
|
+
}
|
|
747
|
+
await deps.pauseAuto(ctx, pi);
|
|
748
|
+
ctx.ui.notify(`${blockerMsg}. Fix and run /gsd auto to resume.`, "warning");
|
|
749
|
+
deps.sendDesktopNotification("GSD", blockerMsg, "warning", "attention", basename(s.originalBasePath || s.basePath));
|
|
750
|
+
deps.logCmuxEvent(prefs, blockerMsg, "warning");
|
|
593
751
|
debugLog("autoLoop", { phase: "exit", reason: "blocked" });
|
|
594
752
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId: ic.flowId, seq: ic.nextSeq(), eventType: "terminal", data: { reason: "blocked", blockers: state.blockers } });
|
|
595
753
|
return { action: "break", reason: "blocked" };
|
|
@@ -1068,7 +1226,13 @@ export async function runUnitPhase(
|
|
|
1068
1226
|
);
|
|
1069
1227
|
const previousTier = s.currentUnitRouting?.tier;
|
|
1070
1228
|
|
|
1229
|
+
// Scope workflow-logger buffer to this unit so post-finalize drains are
|
|
1230
|
+
// per-unit. Without this, the module-level _buffer accumulates across every
|
|
1231
|
+
// unit in the same Node process (see workflow-logger.ts module header).
|
|
1232
|
+
_resetLogs();
|
|
1071
1233
|
s.currentUnit = { type: unitType, id: unitId, startedAt: Date.now() };
|
|
1234
|
+
s.lastGitActionFailure = null;
|
|
1235
|
+
s.lastGitActionStatus = null;
|
|
1072
1236
|
setCurrentPhase(unitType);
|
|
1073
1237
|
s.lastToolInvocationError = null; // #2883: clear stale error from previous unit
|
|
1074
1238
|
const unitStartSeq = ic.nextSeq();
|
|
@@ -1334,6 +1498,7 @@ export async function runUnitPhase(
|
|
|
1334
1498
|
// Provider-error pause: pauseAuto already handled cleanup and scheduled
|
|
1335
1499
|
// recovery. Don't hard-stop — just break out of the loop (#2762).
|
|
1336
1500
|
if (unitResult.errorContext?.category === "provider") {
|
|
1501
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
1337
1502
|
debugLog("autoLoop", { phase: "exit", reason: "provider-pause", isTransient: unitResult.errorContext.isTransient });
|
|
1338
1503
|
return { action: "break", reason: "provider-pause" };
|
|
1339
1504
|
}
|
|
@@ -1352,9 +1517,23 @@ export async function runUnitPhase(
|
|
|
1352
1517
|
);
|
|
1353
1518
|
debugLog("autoLoop", { phase: "session-timeout-pause", unitType, unitId });
|
|
1354
1519
|
await deps.pauseAuto(ctx, pi);
|
|
1520
|
+
await deps.autoCommitUnit?.(s.basePath, unitType, unitId, ctx);
|
|
1521
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
1355
1522
|
return { action: "break", reason: "session-timeout" };
|
|
1356
1523
|
}
|
|
1357
1524
|
// All other cancelled states (structural errors, non-transient failures): hard stop
|
|
1525
|
+
if (s.currentUnit) {
|
|
1526
|
+
await deps.closeoutUnit(
|
|
1527
|
+
ctx,
|
|
1528
|
+
s.basePath,
|
|
1529
|
+
unitType,
|
|
1530
|
+
unitId,
|
|
1531
|
+
s.currentUnit.startedAt,
|
|
1532
|
+
deps.buildSnapshotOpts(unitType, unitId),
|
|
1533
|
+
);
|
|
1534
|
+
}
|
|
1535
|
+
await deps.autoCommitUnit?.(s.basePath, unitType, unitId, ctx);
|
|
1536
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
1358
1537
|
ctx.ui.notify(
|
|
1359
1538
|
`Session creation failed for ${unitType} ${unitId}: ${unitResult.errorContext?.message ?? "unknown"}. Stopping auto-mode.`,
|
|
1360
1539
|
"warning",
|
|
@@ -1532,6 +1711,9 @@ export async function runFinalize(
|
|
|
1532
1711
|
// cannot mutate state for the next unit (#3757).
|
|
1533
1712
|
s.currentUnit = null;
|
|
1534
1713
|
clearCurrentPhase();
|
|
1714
|
+
// Drop any logger entries from the timed-out unit so they don't bleed
|
|
1715
|
+
// into the next iteration's drain.
|
|
1716
|
+
drainLogs();
|
|
1535
1717
|
loopState.consecutiveFinalizeTimeouts++;
|
|
1536
1718
|
debugLog("autoLoop", {
|
|
1537
1719
|
phase: "pre-verification-timeout",
|
|
@@ -1559,11 +1741,15 @@ export async function runFinalize(
|
|
|
1559
1741
|
|
|
1560
1742
|
const preResult = preResultGuard.value;
|
|
1561
1743
|
if (preResult === "dispatched") {
|
|
1744
|
+
const dispatchedReason = s.lastGitActionFailure
|
|
1745
|
+
? "git-closeout-failure"
|
|
1746
|
+
: "pre-verification-dispatched";
|
|
1562
1747
|
debugLog("autoLoop", {
|
|
1563
1748
|
phase: "exit",
|
|
1564
|
-
reason:
|
|
1749
|
+
reason: dispatchedReason,
|
|
1750
|
+
gitError: s.lastGitActionFailure ?? undefined,
|
|
1565
1751
|
});
|
|
1566
|
-
return { action: "break", reason:
|
|
1752
|
+
return { action: "break", reason: dispatchedReason };
|
|
1567
1753
|
}
|
|
1568
1754
|
if (preResult === "retry") {
|
|
1569
1755
|
if (sidecarItem) {
|
|
@@ -1630,6 +1816,9 @@ export async function runFinalize(
|
|
|
1630
1816
|
// cannot mutate state for the next unit (#3757).
|
|
1631
1817
|
s.currentUnit = null;
|
|
1632
1818
|
clearCurrentPhase();
|
|
1819
|
+
// Drop any logger entries from the timed-out unit so they don't bleed
|
|
1820
|
+
// into the next iteration's drain.
|
|
1821
|
+
drainLogs();
|
|
1633
1822
|
loopState.consecutiveFinalizeTimeouts++;
|
|
1634
1823
|
debugLog("autoLoop", {
|
|
1635
1824
|
phase: "post-verification-timeout",
|
|
@@ -1674,5 +1863,16 @@ export async function runFinalize(
|
|
|
1674
1863
|
// Both pre and post verification completed without timeout — reset counter
|
|
1675
1864
|
loopState.consecutiveFinalizeTimeouts = 0;
|
|
1676
1865
|
|
|
1866
|
+
// Surface accumulated workflow-logger issues for this unit to the user.
|
|
1867
|
+
// Warnings/errors logged during the unit are buffered in the logger and
|
|
1868
|
+
// drained here so the user sees a single consolidated post-unit alert.
|
|
1869
|
+
if (hasAnyIssues()) {
|
|
1870
|
+
const { logs } = drainAndSummarize();
|
|
1871
|
+
if (logs.length > 0) {
|
|
1872
|
+
const severity = logs.some((e) => e.severity === "error") ? "error" : "warning";
|
|
1873
|
+
ctx.ui.notify(formatForNotification(logs), severity);
|
|
1874
|
+
}
|
|
1875
|
+
}
|
|
1876
|
+
|
|
1677
1877
|
return { action: "next", data: undefined as void };
|
|
1678
1878
|
}
|
|
@@ -106,6 +106,8 @@ export class AutoSession {
|
|
|
106
106
|
|
|
107
107
|
// ── Current unit ─────────────────────────────────────────────────────────
|
|
108
108
|
currentUnit: CurrentUnit | null = null;
|
|
109
|
+
currentTraceId: string | null = null;
|
|
110
|
+
currentTurnId: string | null = null;
|
|
109
111
|
currentUnitRouting: UnitRouting | null = null;
|
|
110
112
|
currentMilestoneId: string | null = null;
|
|
111
113
|
|
|
@@ -137,6 +139,10 @@ export class AutoSession {
|
|
|
137
139
|
/** Set when a GSD tool execution ends with isError due to malformed/truncated
|
|
138
140
|
* JSON arguments. Checked by postUnitPreVerification to break retry loops. */
|
|
139
141
|
lastToolInvocationError: string | null = null;
|
|
142
|
+
/** Set when turn-level git action fails during closeout. */
|
|
143
|
+
lastGitActionFailure: string | null = null;
|
|
144
|
+
/** Last turn-level git action status captured during finalize. */
|
|
145
|
+
lastGitActionStatus: "ok" | "failed" | null = null;
|
|
140
146
|
|
|
141
147
|
// ── Isolation degradation ────────────────────────────────────────────
|
|
142
148
|
/** Set to true when worktree creation fails; prevents merge of nonexistent branch. */
|
|
@@ -219,6 +225,8 @@ export class AutoSession {
|
|
|
219
225
|
|
|
220
226
|
// Unit
|
|
221
227
|
this.currentUnit = null;
|
|
228
|
+
this.currentTraceId = null;
|
|
229
|
+
this.currentTurnId = null;
|
|
222
230
|
this.currentUnitRouting = null;
|
|
223
231
|
this.currentMilestoneId = null;
|
|
224
232
|
|
|
@@ -250,6 +258,8 @@ export class AutoSession {
|
|
|
250
258
|
this.rewriteAttemptCount = 0;
|
|
251
259
|
this.consecutiveCompleteBootstraps = 0;
|
|
252
260
|
this.lastToolInvocationError = null;
|
|
261
|
+
this.lastGitActionFailure = null;
|
|
262
|
+
this.lastGitActionStatus = null;
|
|
253
263
|
this.isolationDegraded = false;
|
|
254
264
|
this.milestoneMergedInPhases = false;
|
|
255
265
|
this.checkpointSha = null;
|
|
@@ -53,6 +53,8 @@ import {
|
|
|
53
53
|
checkNeedsRunUat,
|
|
54
54
|
} from "./auto-prompts.js";
|
|
55
55
|
import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
|
|
56
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
57
|
+
import { selectReactiveDispatchBatch } from "./uok/execution-graph.js";
|
|
56
58
|
|
|
57
59
|
// ─── Types ────────────────────────────────────────────────────────────────
|
|
58
60
|
|
|
@@ -307,8 +309,11 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
307
309
|
{
|
|
308
310
|
name: "reassess-roadmap (post-completion)",
|
|
309
311
|
match: async ({ state, mid, midTitle, basePath, prefs }) => {
|
|
310
|
-
if (prefs?.phases?.skip_reassess
|
|
311
|
-
|
|
312
|
+
if (prefs?.phases?.skip_reassess) return null;
|
|
313
|
+
// Default reassess_after_slice to true — reassessment after slice completion
|
|
314
|
+
// is essential for roadmap integrity. Opt-out via explicit `false`.
|
|
315
|
+
const reassessEnabled = prefs?.phases?.reassess_after_slice ?? true;
|
|
316
|
+
if (!reassessEnabled) return null;
|
|
312
317
|
const needsReassess = await checkNeedsReassessment(basePath, mid, state);
|
|
313
318
|
if (!needsReassess) return null;
|
|
314
319
|
return {
|
|
@@ -581,12 +586,20 @@ export const DISPATCH_RULES: DispatchRule[] = [
|
|
|
581
586
|
// Only activate reactive dispatch when >1 task is ready
|
|
582
587
|
if (readyIds.length <= 1) return null;
|
|
583
588
|
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
589
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
590
|
+
const selected = uokFlags.executionGraph
|
|
591
|
+
? selectReactiveDispatchBatch({
|
|
592
|
+
graph,
|
|
593
|
+
readyIds,
|
|
594
|
+
maxParallel,
|
|
595
|
+
inFlightOutputs: new Set(),
|
|
596
|
+
}).selected
|
|
597
|
+
: chooseNonConflictingSubset(
|
|
598
|
+
readyIds,
|
|
599
|
+
graph,
|
|
600
|
+
maxParallel,
|
|
601
|
+
new Set(),
|
|
602
|
+
);
|
|
590
603
|
if (selected.length <= 1) return null;
|
|
591
604
|
|
|
592
605
|
// Log graph metrics for observability
|
|
@@ -877,11 +890,14 @@ export async function resolveDispatch(
|
|
|
877
890
|
}
|
|
878
891
|
}
|
|
879
892
|
|
|
880
|
-
// No rule matched — unhandled phase
|
|
893
|
+
// No rule matched — unhandled phase.
|
|
894
|
+
// Use level "warning" so the loop pauses (resumable) instead of hard-stopping.
|
|
895
|
+
// Hard-stop here was causing premature termination for transient phase gaps
|
|
896
|
+
// (e.g. after reassessment modifies the roadmap and state needs re-derivation).
|
|
881
897
|
return {
|
|
882
898
|
action: "stop",
|
|
883
899
|
reason: `Unhandled phase "${ctx.state.phase}" — run /gsd doctor to diagnose.`,
|
|
884
|
-
level: "
|
|
900
|
+
level: "warning",
|
|
885
901
|
matchedRule: "<no-match>",
|
|
886
902
|
};
|
|
887
903
|
}
|