gsd-pi 2.74.0 → 2.75.0-dev.063e5a3
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 +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- 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/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- 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 +3 -3
- 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/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- 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 +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- 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/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- 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/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +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__/chat-frame-compaction-tone.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +61 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -0
- 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 +53 -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/compaction-summary-message.d.ts +8 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +27 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- 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/package.json +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__/chat-frame-compaction-tone.test.ts +92 -0
- 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 +75 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/compaction-summary-message.ts +36 -15
- 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/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -2
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/tui.ts +9 -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/pkg/package.json +1 -1
- 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/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- 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/{JpjdI2QtmIkQr4xz6gbhM → j7IBD35UgrL2b298GLK3V}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{JpjdI2QtmIkQr4xz6gbhM → j7IBD35UgrL2b298GLK3V}/_ssgManifest.js +0 -0
|
@@ -14,9 +14,11 @@ import { debugLog } from "../debug-logger.js";
|
|
|
14
14
|
import { PROJECT_FILES } from "../detection.js";
|
|
15
15
|
import { MergeConflictError } from "../git-service.js";
|
|
16
16
|
import { setCurrentPhase, clearCurrentPhase } from "../../shared/gsd-phase-state.js";
|
|
17
|
+
import { pauseAutoForProviderError } from "../provider-error-pause.js";
|
|
18
|
+
import { resumeAutoAfterProviderDelay } from "../bootstrap/provider-error-resume.js";
|
|
17
19
|
import { join, basename, dirname, parse as parsePath } from "node:path";
|
|
18
20
|
import { existsSync, cpSync, readdirSync } from "node:fs";
|
|
19
|
-
import { logWarning, logError } from "../workflow-logger.js";
|
|
21
|
+
import { logWarning, logError, _resetLogs, drainLogs, drainAndSummarize, formatForNotification, hasAnyIssues, } from "../workflow-logger.js";
|
|
20
22
|
import { gsdRoot } from "../paths.js";
|
|
21
23
|
import { atomicWriteSync } from "../atomic-write.js";
|
|
22
24
|
import { verifyExpectedArtifact, diagnoseExpectedArtifact, buildLoopRemediationSteps } from "../auto-recovery.js";
|
|
@@ -25,10 +27,19 @@ import { withTimeout, FINALIZE_PRE_TIMEOUT_MS, FINALIZE_POST_TIMEOUT_MS } from "
|
|
|
25
27
|
import { getEligibleSlices } from "../slice-parallel-eligibility.js";
|
|
26
28
|
import { startSliceParallel } from "../slice-parallel-orchestrator.js";
|
|
27
29
|
import { isDbAvailable, getMilestoneSlices } from "../gsd-db.js";
|
|
30
|
+
import { ensurePlanV2Graph } from "../uok/plan-v2.js";
|
|
31
|
+
import { resolveUokFlags } from "../uok/flags.js";
|
|
32
|
+
import { UokGateRunner } from "../uok/gate-runner.js";
|
|
28
33
|
import { resetEvidence } from "../safety/evidence-collector.js";
|
|
29
34
|
import { createCheckpoint, cleanupCheckpoint, rollbackToCheckpoint } from "../safety/git-checkpoint.js";
|
|
30
35
|
import { resolveSafetyHarnessConfig } from "../safety/safety-harness.js";
|
|
31
36
|
import { getWorkflowTransportSupportError, getRequiredWorkflowToolsForAutoUnit, } from "../workflow-mcp.js";
|
|
37
|
+
// ─── Session timeout auto-resume state ────────────────────────────────────────
|
|
38
|
+
let consecutiveSessionTimeouts = 0;
|
|
39
|
+
const MAX_SESSION_TIMEOUT_AUTO_RESUMES = 3;
|
|
40
|
+
export function resetSessionTimeoutState() {
|
|
41
|
+
consecutiveSessionTimeouts = 0;
|
|
42
|
+
}
|
|
32
43
|
// ─── generateMilestoneReport ──────────────────────────────────────────────────
|
|
33
44
|
/**
|
|
34
45
|
* Resolve the base path for milestone reports.
|
|
@@ -46,6 +57,15 @@ export function _resolveReportBasePath(s) {
|
|
|
46
57
|
export function _resolveDispatchGuardBasePath(s) {
|
|
47
58
|
return s.originalBasePath || s.basePath;
|
|
48
59
|
}
|
|
60
|
+
const PLAN_V2_GATE_PHASES = new Set([
|
|
61
|
+
"executing",
|
|
62
|
+
"summarizing",
|
|
63
|
+
"validating-milestone",
|
|
64
|
+
"completing-milestone",
|
|
65
|
+
]);
|
|
66
|
+
function shouldRunPlanV2Gate(phase) {
|
|
67
|
+
return PLAN_V2_GATE_PHASES.has(phase);
|
|
68
|
+
}
|
|
49
69
|
/**
|
|
50
70
|
* Generate and write an HTML milestone report snapshot.
|
|
51
71
|
* Extracted from the milestone-transition block in autoLoop.
|
|
@@ -100,6 +120,22 @@ async function closeoutAndStop(ctx, pi, s, deps, reason) {
|
|
|
100
120
|
}
|
|
101
121
|
await deps.stopAuto(ctx, pi, reason);
|
|
102
122
|
}
|
|
123
|
+
async function emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, errorContext) {
|
|
124
|
+
ic.deps.emitJournalEvent({
|
|
125
|
+
ts: new Date().toISOString(),
|
|
126
|
+
flowId: ic.flowId,
|
|
127
|
+
seq: ic.nextSeq(),
|
|
128
|
+
eventType: "unit-end",
|
|
129
|
+
data: {
|
|
130
|
+
unitType,
|
|
131
|
+
unitId,
|
|
132
|
+
status: "cancelled",
|
|
133
|
+
artifactVerified: false,
|
|
134
|
+
...(errorContext ? { errorContext } : {}),
|
|
135
|
+
},
|
|
136
|
+
causedBy: { flowId: ic.flowId, seq: unitStartSeq },
|
|
137
|
+
});
|
|
138
|
+
}
|
|
103
139
|
// ─── runPreDispatch ───────────────────────────────────────────────────────────
|
|
104
140
|
/**
|
|
105
141
|
* Phase 1: Pre-dispatch — resource guard, health gate, state derivation,
|
|
@@ -108,13 +144,52 @@ async function closeoutAndStop(ctx, pi, s, deps, reason) {
|
|
|
108
144
|
*/
|
|
109
145
|
export async function runPreDispatch(ic, loopState) {
|
|
110
146
|
const { ctx, pi, s, deps, prefs } = ic;
|
|
147
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
148
|
+
const runPreDispatchGate = async (input) => {
|
|
149
|
+
if (!uokFlags.gates)
|
|
150
|
+
return;
|
|
151
|
+
const gateRunner = new UokGateRunner();
|
|
152
|
+
gateRunner.register({
|
|
153
|
+
id: input.gateId,
|
|
154
|
+
type: input.gateType,
|
|
155
|
+
execute: async () => ({
|
|
156
|
+
outcome: input.outcome,
|
|
157
|
+
failureClass: input.failureClass,
|
|
158
|
+
rationale: input.rationale,
|
|
159
|
+
findings: input.findings ?? "",
|
|
160
|
+
}),
|
|
161
|
+
});
|
|
162
|
+
await gateRunner.run(input.gateId, {
|
|
163
|
+
basePath: s.basePath,
|
|
164
|
+
traceId: `pre-dispatch:${ic.flowId}`,
|
|
165
|
+
turnId: `iter-${ic.iteration}`,
|
|
166
|
+
milestoneId: input.milestoneId ?? s.currentMilestoneId ?? undefined,
|
|
167
|
+
unitType: "pre-dispatch",
|
|
168
|
+
unitId: `iter-${ic.iteration}`,
|
|
169
|
+
});
|
|
170
|
+
};
|
|
111
171
|
// Resource version guard
|
|
112
172
|
const staleMsg = deps.checkResourcesStale(s.resourceVersionOnStart);
|
|
113
173
|
if (staleMsg) {
|
|
174
|
+
await runPreDispatchGate({
|
|
175
|
+
gateId: "resource-version-guard",
|
|
176
|
+
gateType: "policy",
|
|
177
|
+
outcome: "fail",
|
|
178
|
+
failureClass: "policy",
|
|
179
|
+
rationale: "resource version guard blocked dispatch",
|
|
180
|
+
findings: staleMsg,
|
|
181
|
+
});
|
|
114
182
|
await deps.stopAuto(ctx, pi, staleMsg);
|
|
115
183
|
debugLog("autoLoop", { phase: "exit", reason: "resources-stale" });
|
|
116
184
|
return { action: "break", reason: "resources-stale" };
|
|
117
185
|
}
|
|
186
|
+
await runPreDispatchGate({
|
|
187
|
+
gateId: "resource-version-guard",
|
|
188
|
+
gateType: "policy",
|
|
189
|
+
outcome: "pass",
|
|
190
|
+
failureClass: "none",
|
|
191
|
+
rationale: "resource version guard passed",
|
|
192
|
+
});
|
|
118
193
|
deps.invalidateAllCaches();
|
|
119
194
|
s.lastPromptCharCount = undefined;
|
|
120
195
|
s.lastBaselineCharCount = undefined;
|
|
@@ -125,13 +200,37 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
125
200
|
ctx.ui.notify(`Pre-dispatch: ${healthGate.fixesApplied.join(", ")}`, "info");
|
|
126
201
|
}
|
|
127
202
|
if (!healthGate.proceed) {
|
|
203
|
+
await runPreDispatchGate({
|
|
204
|
+
gateId: "pre-dispatch-health-gate",
|
|
205
|
+
gateType: "execution",
|
|
206
|
+
outcome: "manual-attention",
|
|
207
|
+
failureClass: "manual-attention",
|
|
208
|
+
rationale: "pre-dispatch health gate blocked dispatch",
|
|
209
|
+
findings: healthGate.reason,
|
|
210
|
+
});
|
|
128
211
|
ctx.ui.notify(healthGate.reason || "Pre-dispatch health check failed — run /gsd doctor for details.", "error");
|
|
129
212
|
await deps.pauseAuto(ctx, pi);
|
|
130
213
|
debugLog("autoLoop", { phase: "exit", reason: "health-gate-failed" });
|
|
131
214
|
return { action: "break", reason: "health-gate-failed" };
|
|
132
215
|
}
|
|
216
|
+
await runPreDispatchGate({
|
|
217
|
+
gateId: "pre-dispatch-health-gate",
|
|
218
|
+
gateType: "execution",
|
|
219
|
+
outcome: "pass",
|
|
220
|
+
failureClass: "none",
|
|
221
|
+
rationale: "pre-dispatch health gate passed",
|
|
222
|
+
findings: healthGate.fixesApplied.length > 0 ? healthGate.fixesApplied.join(", ") : "",
|
|
223
|
+
});
|
|
133
224
|
}
|
|
134
225
|
catch (e) {
|
|
226
|
+
await runPreDispatchGate({
|
|
227
|
+
gateId: "pre-dispatch-health-gate",
|
|
228
|
+
gateType: "execution",
|
|
229
|
+
outcome: "manual-attention",
|
|
230
|
+
failureClass: "manual-attention",
|
|
231
|
+
rationale: "pre-dispatch health gate threw unexpectedly",
|
|
232
|
+
findings: String(e),
|
|
233
|
+
});
|
|
135
234
|
logWarning("engine", "Pre-dispatch health gate threw unexpectedly", { error: String(e) });
|
|
136
235
|
}
|
|
137
236
|
// Sync project root artifacts into worktree
|
|
@@ -142,6 +241,32 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
142
241
|
}
|
|
143
242
|
// Derive state
|
|
144
243
|
let state = await deps.deriveState(s.basePath);
|
|
244
|
+
if (prefs?.uok?.plan_v2?.enabled && shouldRunPlanV2Gate(state.phase)) {
|
|
245
|
+
const compiled = ensurePlanV2Graph(s.basePath, state);
|
|
246
|
+
if (!compiled.ok) {
|
|
247
|
+
const reason = compiled.reason ?? "Plan v2 compilation failed";
|
|
248
|
+
await runPreDispatchGate({
|
|
249
|
+
gateId: "plan-v2-gate",
|
|
250
|
+
gateType: "policy",
|
|
251
|
+
outcome: "manual-attention",
|
|
252
|
+
failureClass: "manual-attention",
|
|
253
|
+
rationale: "plan v2 compile gate failed",
|
|
254
|
+
findings: reason,
|
|
255
|
+
milestoneId: state.activeMilestone?.id ?? undefined,
|
|
256
|
+
});
|
|
257
|
+
ctx.ui.notify(`Plan gate failed-closed: ${reason}`, "error");
|
|
258
|
+
await deps.pauseAuto(ctx, pi);
|
|
259
|
+
return { action: "break", reason: "plan-v2-gate-failed" };
|
|
260
|
+
}
|
|
261
|
+
await runPreDispatchGate({
|
|
262
|
+
gateId: "plan-v2-gate",
|
|
263
|
+
gateType: "policy",
|
|
264
|
+
outcome: "pass",
|
|
265
|
+
failureClass: "none",
|
|
266
|
+
rationale: "plan v2 compile gate passed",
|
|
267
|
+
milestoneId: state.activeMilestone?.id ?? undefined,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
145
270
|
deps.syncCmuxSidebar(prefs, state);
|
|
146
271
|
let mid = state.activeMilestone?.id;
|
|
147
272
|
let midTitle = state.activeMilestone?.title;
|
|
@@ -177,7 +302,10 @@ export async function runPreDispatch(ic, loopState) {
|
|
|
177
302
|
eligibleSlices: eligible.map(e => e.id),
|
|
178
303
|
});
|
|
179
304
|
ctx.ui.notify(`Slice-parallel: dispatching ${eligible.length} eligible slices for ${mid}.`, "info");
|
|
180
|
-
const result = await startSliceParallel(s.basePath, mid, eligible, {
|
|
305
|
+
const result = await startSliceParallel(s.basePath, mid, eligible, {
|
|
306
|
+
maxWorkers: prefs.slice_parallel.max_workers ?? 2,
|
|
307
|
+
useExecutionGraph: uokFlags.executionGraph,
|
|
308
|
+
});
|
|
181
309
|
if (result.started.length > 0) {
|
|
182
310
|
ctx.ui.notify(`Slice-parallel: started ${result.started.length} worker(s): ${result.started.join(", ")}.`, "info");
|
|
183
311
|
await deps.stopAuto(ctx, pi, `Slice-parallel dispatched for ${mid}`);
|
|
@@ -776,7 +904,13 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
776
904
|
s.currentUnit.type === unitType &&
|
|
777
905
|
s.currentUnit.id === unitId);
|
|
778
906
|
const previousTier = s.currentUnitRouting?.tier;
|
|
907
|
+
// Scope workflow-logger buffer to this unit so post-finalize drains are
|
|
908
|
+
// per-unit. Without this, the module-level _buffer accumulates across every
|
|
909
|
+
// unit in the same Node process (see workflow-logger.ts module header).
|
|
910
|
+
_resetLogs();
|
|
779
911
|
s.currentUnit = { type: unitType, id: unitId, startedAt: Date.now() };
|
|
912
|
+
s.lastGitActionFailure = null;
|
|
913
|
+
s.lastGitActionStatus = null;
|
|
780
914
|
setCurrentPhase(unitType);
|
|
781
915
|
s.lastToolInvocationError = null; // #2883: clear stale error from previous unit
|
|
782
916
|
const unitStartSeq = ic.nextSeq();
|
|
@@ -975,22 +1109,65 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
975
1109
|
// Provider-error pause: pauseAuto already handled cleanup and scheduled
|
|
976
1110
|
// recovery. Don't hard-stop — just break out of the loop (#2762).
|
|
977
1111
|
if (unitResult.errorContext?.category === "provider") {
|
|
1112
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
978
1113
|
debugLog("autoLoop", { phase: "exit", reason: "provider-pause", isTransient: unitResult.errorContext.isTransient });
|
|
979
1114
|
return { action: "break", reason: "provider-pause" };
|
|
980
1115
|
}
|
|
981
|
-
//
|
|
982
|
-
//
|
|
983
|
-
//
|
|
1116
|
+
// Timeout category covers two distinct scenarios:
|
|
1117
|
+
// 1. Session creation timeout (120s) — transient, auto-resume with backoff
|
|
1118
|
+
// 2. Unit hard timeout (30min+) — stuck agent, pause for manual review
|
|
984
1119
|
// Structural errors (TypeError, is not a function) are NOT transient
|
|
985
1120
|
// and must hard-stop to avoid infinite retry loops.
|
|
986
1121
|
if (unitResult.errorContext?.isTransient &&
|
|
987
1122
|
unitResult.errorContext?.category === "timeout") {
|
|
988
|
-
|
|
989
|
-
|
|
1123
|
+
const isSessionCreationTimeout = unitResult.errorContext.message?.includes("Session creation timed out");
|
|
1124
|
+
if (isSessionCreationTimeout) {
|
|
1125
|
+
consecutiveSessionTimeouts += 1;
|
|
1126
|
+
const baseRetryAfterMs = 30_000;
|
|
1127
|
+
const retryAfterMs = baseRetryAfterMs * 2 ** Math.max(0, consecutiveSessionTimeouts - 1);
|
|
1128
|
+
const allowAutoResume = consecutiveSessionTimeouts <= MAX_SESSION_TIMEOUT_AUTO_RESUMES;
|
|
1129
|
+
if (!allowAutoResume) {
|
|
1130
|
+
ctx.ui.notify(`Session creation timed out ${consecutiveSessionTimeouts} consecutive times for ${unitType} ${unitId}. Pausing for manual review.`, "warning");
|
|
1131
|
+
}
|
|
1132
|
+
debugLog("autoLoop", {
|
|
1133
|
+
phase: "session-timeout-pause",
|
|
1134
|
+
unitType, unitId,
|
|
1135
|
+
consecutiveSessionTimeouts,
|
|
1136
|
+
retryAfterMs,
|
|
1137
|
+
allowAutoResume,
|
|
1138
|
+
});
|
|
1139
|
+
const errorDetail = ` for ${unitType} ${unitId}`;
|
|
1140
|
+
await pauseAutoForProviderError(ctx.ui, errorDetail, () => deps.pauseAuto(ctx, pi), {
|
|
1141
|
+
isRateLimit: false,
|
|
1142
|
+
isTransient: allowAutoResume,
|
|
1143
|
+
retryAfterMs,
|
|
1144
|
+
resume: allowAutoResume
|
|
1145
|
+
? () => {
|
|
1146
|
+
void resumeAutoAfterProviderDelay(pi, ctx).catch((err) => {
|
|
1147
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1148
|
+
ctx.ui.notify(`Session timeout recovery failed: ${message}`, "error");
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
: undefined,
|
|
1152
|
+
});
|
|
1153
|
+
await deps.autoCommitUnit?.(s.basePath, unitType, unitId, ctx);
|
|
1154
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
1155
|
+
return { action: "break", reason: "session-timeout" };
|
|
1156
|
+
}
|
|
1157
|
+
// Unit hard timeout (30min+): pause without auto-resume — stuck agent
|
|
1158
|
+
ctx.ui.notify(`Unit timed out for ${unitType} ${unitId} (supervision may have failed). Pausing auto-mode.`, "warning");
|
|
1159
|
+
debugLog("autoLoop", { phase: "unit-hard-timeout-pause", unitType, unitId });
|
|
990
1160
|
await deps.pauseAuto(ctx, pi);
|
|
991
|
-
|
|
1161
|
+
await deps.autoCommitUnit?.(s.basePath, unitType, unitId, ctx);
|
|
1162
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
1163
|
+
return { action: "break", reason: "unit-hard-timeout" };
|
|
992
1164
|
}
|
|
993
1165
|
// All other cancelled states (structural errors, non-transient failures): hard stop
|
|
1166
|
+
if (s.currentUnit) {
|
|
1167
|
+
await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
|
|
1168
|
+
}
|
|
1169
|
+
await deps.autoCommitUnit?.(s.basePath, unitType, unitId, ctx);
|
|
1170
|
+
await emitCancelledUnitEnd(ic, unitType, unitId, unitStartSeq, unitResult.errorContext);
|
|
994
1171
|
ctx.ui.notify(`Session creation failed for ${unitType} ${unitId}: ${unitResult.errorContext?.message ?? "unknown"}. Stopping auto-mode.`, "warning");
|
|
995
1172
|
await deps.stopAuto(ctx, pi, `Session creation failed: ${unitResult.errorContext?.message ?? "unknown"}`);
|
|
996
1173
|
debugLog("autoLoop", { phase: "exit", reason: "session-failed" });
|
|
@@ -1002,6 +1179,8 @@ export async function runUnitPhase(ic, iterData, loopState, sidecarItem) {
|
|
|
1002
1179
|
// Guard: stopAuto() may have nulled s.currentUnit via s.reset() while
|
|
1003
1180
|
// this coroutine was suspended at `await runUnit(...)` (#2939).
|
|
1004
1181
|
if (s.currentUnit) {
|
|
1182
|
+
// Reset session timeout counter — any successful unit clears the slate
|
|
1183
|
+
consecutiveSessionTimeouts = 0;
|
|
1005
1184
|
await deps.closeoutUnit(ctx, s.basePath, unitType, unitId, s.currentUnit.startedAt, deps.buildSnapshotOpts(unitType, unitId));
|
|
1006
1185
|
}
|
|
1007
1186
|
// ── Zero tool-call guard (#1833, #2653) ──────────────────────────
|
|
@@ -1124,6 +1303,9 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
|
|
|
1124
1303
|
// cannot mutate state for the next unit (#3757).
|
|
1125
1304
|
s.currentUnit = null;
|
|
1126
1305
|
clearCurrentPhase();
|
|
1306
|
+
// Drop any logger entries from the timed-out unit so they don't bleed
|
|
1307
|
+
// into the next iteration's drain.
|
|
1308
|
+
drainLogs();
|
|
1127
1309
|
loopState.consecutiveFinalizeTimeouts++;
|
|
1128
1310
|
debugLog("autoLoop", {
|
|
1129
1311
|
phase: "pre-verification-timeout",
|
|
@@ -1142,11 +1324,15 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
|
|
|
1142
1324
|
}
|
|
1143
1325
|
const preResult = preResultGuard.value;
|
|
1144
1326
|
if (preResult === "dispatched") {
|
|
1327
|
+
const dispatchedReason = s.lastGitActionFailure
|
|
1328
|
+
? "git-closeout-failure"
|
|
1329
|
+
: "pre-verification-dispatched";
|
|
1145
1330
|
debugLog("autoLoop", {
|
|
1146
1331
|
phase: "exit",
|
|
1147
|
-
reason:
|
|
1332
|
+
reason: dispatchedReason,
|
|
1333
|
+
gitError: s.lastGitActionFailure ?? undefined,
|
|
1148
1334
|
});
|
|
1149
|
-
return { action: "break", reason:
|
|
1335
|
+
return { action: "break", reason: dispatchedReason };
|
|
1150
1336
|
}
|
|
1151
1337
|
if (preResult === "retry") {
|
|
1152
1338
|
if (sidecarItem) {
|
|
@@ -1199,6 +1385,9 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
|
|
|
1199
1385
|
// cannot mutate state for the next unit (#3757).
|
|
1200
1386
|
s.currentUnit = null;
|
|
1201
1387
|
clearCurrentPhase();
|
|
1388
|
+
// Drop any logger entries from the timed-out unit so they don't bleed
|
|
1389
|
+
// into the next iteration's drain.
|
|
1390
|
+
drainLogs();
|
|
1202
1391
|
loopState.consecutiveFinalizeTimeouts++;
|
|
1203
1392
|
debugLog("autoLoop", {
|
|
1204
1393
|
phase: "post-verification-timeout",
|
|
@@ -1230,5 +1419,15 @@ export async function runFinalize(ic, iterData, loopState, sidecarItem) {
|
|
|
1230
1419
|
}
|
|
1231
1420
|
// Both pre and post verification completed without timeout — reset counter
|
|
1232
1421
|
loopState.consecutiveFinalizeTimeouts = 0;
|
|
1422
|
+
// Surface accumulated workflow-logger issues for this unit to the user.
|
|
1423
|
+
// Warnings/errors logged during the unit are buffered in the logger and
|
|
1424
|
+
// drained here so the user sees a single consolidated post-unit alert.
|
|
1425
|
+
if (hasAnyIssues()) {
|
|
1426
|
+
const { logs } = drainAndSummarize();
|
|
1427
|
+
if (logs.length > 0) {
|
|
1428
|
+
const severity = logs.some((e) => e.severity === "error") ? "error" : "warning";
|
|
1429
|
+
ctx.ui.notify(formatForNotification(logs), severity);
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1233
1432
|
return { action: "next", data: undefined };
|
|
1234
1433
|
}
|
|
@@ -52,6 +52,8 @@ export class AutoSession {
|
|
|
52
52
|
continueHereHandle = null;
|
|
53
53
|
// ── Current unit ─────────────────────────────────────────────────────────
|
|
54
54
|
currentUnit = null;
|
|
55
|
+
currentTraceId = null;
|
|
56
|
+
currentTurnId = null;
|
|
55
57
|
currentUnitRouting = null;
|
|
56
58
|
currentMilestoneId = null;
|
|
57
59
|
// ── Model state ──────────────────────────────────────────────────────────
|
|
@@ -79,6 +81,10 @@ export class AutoSession {
|
|
|
79
81
|
/** Set when a GSD tool execution ends with isError due to malformed/truncated
|
|
80
82
|
* JSON arguments. Checked by postUnitPreVerification to break retry loops. */
|
|
81
83
|
lastToolInvocationError = null;
|
|
84
|
+
/** Set when turn-level git action fails during closeout. */
|
|
85
|
+
lastGitActionFailure = null;
|
|
86
|
+
/** Last turn-level git action status captured during finalize. */
|
|
87
|
+
lastGitActionStatus = null;
|
|
82
88
|
// ── Isolation degradation ────────────────────────────────────────────
|
|
83
89
|
/** Set to true when worktree creation fails; prevents merge of nonexistent branch. */
|
|
84
90
|
isolationDegraded = false;
|
|
@@ -157,6 +163,8 @@ export class AutoSession {
|
|
|
157
163
|
this.unitRecoveryCount.clear();
|
|
158
164
|
// Unit
|
|
159
165
|
this.currentUnit = null;
|
|
166
|
+
this.currentTraceId = null;
|
|
167
|
+
this.currentTurnId = null;
|
|
160
168
|
this.currentUnitRouting = null;
|
|
161
169
|
this.currentMilestoneId = null;
|
|
162
170
|
// Model
|
|
@@ -185,6 +193,8 @@ export class AutoSession {
|
|
|
185
193
|
this.rewriteAttemptCount = 0;
|
|
186
194
|
this.consecutiveCompleteBootstraps = 0;
|
|
187
195
|
this.lastToolInvocationError = null;
|
|
196
|
+
this.lastGitActionFailure = null;
|
|
197
|
+
this.lastGitActionStatus = null;
|
|
188
198
|
this.isolationDegraded = false;
|
|
189
199
|
this.milestoneMergedInPhases = false;
|
|
190
200
|
this.checkpointSha = null;
|
|
@@ -19,6 +19,8 @@ import { join } from "node:path";
|
|
|
19
19
|
import { hasImplementationArtifacts } from "./auto-recovery.js";
|
|
20
20
|
import { buildDiscussMilestonePrompt, buildResearchMilestonePrompt, buildPlanMilestonePrompt, buildResearchSlicePrompt, buildPlanSlicePrompt, buildExecuteTaskPrompt, buildCompleteSlicePrompt, buildCompleteMilestonePrompt, buildValidateMilestonePrompt, buildReplanSlicePrompt, buildRunUatPrompt, buildReassessRoadmapPrompt, buildRewriteDocsPrompt, buildReactiveExecutePrompt, buildGateEvaluatePrompt, buildParallelResearchSlicesPrompt, checkNeedsReassessment, checkNeedsRunUat, } from "./auto-prompts.js";
|
|
21
21
|
import { resolveModelWithFallbacksForUnit } from "./preferences-models.js";
|
|
22
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
23
|
+
import { selectReactiveDispatchBatch } from "./uok/execution-graph.js";
|
|
22
24
|
function missingSliceStop(mid, phase) {
|
|
23
25
|
return {
|
|
24
26
|
action: "stop",
|
|
@@ -461,7 +463,15 @@ export const DISPATCH_RULES = [
|
|
|
461
463
|
// Only activate reactive dispatch when >1 task is ready
|
|
462
464
|
if (readyIds.length <= 1)
|
|
463
465
|
return null;
|
|
464
|
-
const
|
|
466
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
467
|
+
const selected = uokFlags.executionGraph
|
|
468
|
+
? selectReactiveDispatchBatch({
|
|
469
|
+
graph,
|
|
470
|
+
readyIds,
|
|
471
|
+
maxParallel,
|
|
472
|
+
inFlightOutputs: new Set(),
|
|
473
|
+
}).selected
|
|
474
|
+
: chooseNonConflictingSubset(readyIds, graph, maxParallel, new Set());
|
|
465
475
|
if (selected.length <= 1)
|
|
466
476
|
return null;
|
|
467
477
|
// Log graph metrics for observability
|
|
@@ -4,12 +4,14 @@
|
|
|
4
4
|
* and fallback chains.
|
|
5
5
|
*/
|
|
6
6
|
import { resolveModelWithFallbacksForUnit, resolveDynamicRoutingConfig } from "./preferences.js";
|
|
7
|
-
import { classifyUnitComplexity, tierLabel } from "./complexity-classifier.js";
|
|
7
|
+
import { classifyUnitComplexity, extractTaskMetadata, tierLabel } from "./complexity-classifier.js";
|
|
8
8
|
import { resolveModelForComplexity, escalateTier, getEligibleModels, loadCapabilityOverrides, adjustToolSet } from "./model-router.js";
|
|
9
9
|
import { getLedger, getProjectTotals } from "./metrics.js";
|
|
10
10
|
import { unitPhaseLabel } from "./auto-dashboard.js";
|
|
11
11
|
import { getSessionModelOverride } from "./session-model-override.js";
|
|
12
12
|
import { logWarning } from "./workflow-logger.js";
|
|
13
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
14
|
+
import { applyModelPolicyFilter } from "./uok/model-policy.js";
|
|
13
15
|
export function resolvePreferredModelConfig(unitType, autoModeStartModel, isAutoMode = true) {
|
|
14
16
|
const explicitConfig = resolveModelWithFallbacksForUnit(unitType);
|
|
15
17
|
if (explicitConfig)
|
|
@@ -46,6 +48,7 @@ export async function selectAndApplyModel(ctx, pi, unitType, unitId, basePath, p
|
|
|
46
48
|
isAutoMode = true,
|
|
47
49
|
/** Explicit /gsd model pin captured at bootstrap for long-running auto loops. */
|
|
48
50
|
sessionModelOverride) {
|
|
51
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
49
52
|
const effectiveSessionModelOverride = sessionModelOverride === undefined
|
|
50
53
|
? getSessionModelOverride(ctx.sessionManager.getSessionId())
|
|
51
54
|
: (sessionModelOverride ?? undefined);
|
|
@@ -67,6 +70,9 @@ sessionModelOverride) {
|
|
|
67
70
|
let appliedModel = null;
|
|
68
71
|
if (modelConfig) {
|
|
69
72
|
const availableModels = ctx.modelRegistry.getAvailable();
|
|
73
|
+
const modelPolicyTraceId = `model:${ctx.sessionManager.getSessionId()}:${Date.now()}`;
|
|
74
|
+
const modelPolicyTurnId = `${unitType}:${unitId}`;
|
|
75
|
+
let policyAllowedModelKeys = null;
|
|
70
76
|
// ─── Dynamic Model Routing ─────────────────────────────────────────
|
|
71
77
|
// Dynamic routing (complexity-based downgrading) only applies in auto-mode.
|
|
72
78
|
// Interactive/guided-flow dispatches use the user's session model directly,
|
|
@@ -75,15 +81,40 @@ sessionModelOverride) {
|
|
|
75
81
|
if (!isAutoMode) {
|
|
76
82
|
routingConfig.enabled = false;
|
|
77
83
|
}
|
|
84
|
+
// burn-max defaults to quality-first dispatch (no downgrade routing).
|
|
85
|
+
if (prefs?.token_profile === "burn-max") {
|
|
86
|
+
routingConfig.enabled = false;
|
|
87
|
+
}
|
|
78
88
|
let effectiveModelConfig = modelConfig;
|
|
79
89
|
let routingTierLabel = "";
|
|
90
|
+
let routingEligibleModels = availableModels;
|
|
91
|
+
const taskMetadataForPolicy = unitType === "execute-task"
|
|
92
|
+
? extractTaskMetadata(unitId, basePath)
|
|
93
|
+
: undefined;
|
|
94
|
+
if (uokFlags.modelPolicy) {
|
|
95
|
+
const policy = applyModelPolicyFilter(availableModels, {
|
|
96
|
+
basePath,
|
|
97
|
+
traceId: modelPolicyTraceId,
|
|
98
|
+
turnId: modelPolicyTurnId,
|
|
99
|
+
unitType,
|
|
100
|
+
taskMetadata: taskMetadataForPolicy,
|
|
101
|
+
currentProvider: ctx.model?.provider,
|
|
102
|
+
allowCrossProvider: routingConfig.cross_provider !== false,
|
|
103
|
+
requiredTools: pi.getActiveTools(),
|
|
104
|
+
});
|
|
105
|
+
routingEligibleModels = policy.eligible;
|
|
106
|
+
policyAllowedModelKeys = new Set(policy.eligible.map((m) => `${m.provider.toLowerCase()}/${m.id.toLowerCase()}`));
|
|
107
|
+
if (routingEligibleModels.length === 0) {
|
|
108
|
+
throw new Error(`Model policy denied all candidate models for ${unitType}/${unitId}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
80
111
|
// Disable routing for flat-rate providers like GitHub Copilot (#3453).
|
|
81
112
|
// All models cost the same per request, so downgrading to a cheaper
|
|
82
113
|
// model provides no cost benefit — it only degrades quality.
|
|
83
114
|
// Fail-closed: if primary model can't be resolved, fall back to
|
|
84
115
|
// provider-level signals rather than allowing unwanted downgrades.
|
|
85
116
|
if (routingConfig.enabled) {
|
|
86
|
-
const primaryModel = resolveModelId(modelConfig.primary,
|
|
117
|
+
const primaryModel = resolveModelId(modelConfig.primary, routingEligibleModels, ctx.model?.provider);
|
|
87
118
|
if (primaryModel) {
|
|
88
119
|
const primaryFlatRateCtx = buildFlatRateContext(primaryModel.provider, ctx, prefs);
|
|
89
120
|
if (isFlatRateProvider(primaryModel.provider, primaryFlatRateCtx)) {
|
|
@@ -110,8 +141,8 @@ sessionModelOverride) {
|
|
|
110
141
|
const isHook = unitType.startsWith("hook/");
|
|
111
142
|
const shouldClassify = !isHook || routingConfig.hooks !== false;
|
|
112
143
|
if (shouldClassify) {
|
|
113
|
-
let classification = classifyUnitComplexity(unitType, unitId, basePath, budgetPct);
|
|
114
|
-
const availableModelIds =
|
|
144
|
+
let classification = classifyUnitComplexity(unitType, unitId, basePath, budgetPct, taskMetadataForPolicy);
|
|
145
|
+
const availableModelIds = routingEligibleModels.map(m => m.id);
|
|
115
146
|
// Escalate tier on retry when escalate_on_failure is enabled (default: true)
|
|
116
147
|
if (retryContext?.isRetry &&
|
|
117
148
|
retryContext.previousTier &&
|
|
@@ -191,13 +222,25 @@ sessionModelOverride) {
|
|
|
191
222
|
}
|
|
192
223
|
}
|
|
193
224
|
const modelsToTry = [effectiveModelConfig.primary, ...effectiveModelConfig.fallbacks];
|
|
225
|
+
let attemptedPolicyEligible = false;
|
|
194
226
|
for (const modelId of modelsToTry) {
|
|
195
|
-
const
|
|
227
|
+
const resolutionPool = uokFlags.modelPolicy ? routingEligibleModels : availableModels;
|
|
228
|
+
const model = resolveModelId(modelId, resolutionPool, ctx.model?.provider);
|
|
196
229
|
if (!model) {
|
|
197
230
|
if (verbose)
|
|
198
231
|
ctx.ui.notify(`Model ${modelId} not found, trying fallback.`, "info");
|
|
199
232
|
continue;
|
|
200
233
|
}
|
|
234
|
+
if (policyAllowedModelKeys) {
|
|
235
|
+
const key = `${model.provider.toLowerCase()}/${model.id.toLowerCase()}`;
|
|
236
|
+
if (!policyAllowedModelKeys.has(key)) {
|
|
237
|
+
if (verbose) {
|
|
238
|
+
ctx.ui.notify(`Model policy denied ${model.provider}/${model.id}; trying fallback.`, "warning");
|
|
239
|
+
}
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
attemptedPolicyEligible = true;
|
|
243
|
+
}
|
|
201
244
|
// Warn if the ID is ambiguous across providers
|
|
202
245
|
if (!modelId.includes("/")) {
|
|
203
246
|
const providers = availableModels.filter(m => m.id === modelId).map(m => m.provider);
|
|
@@ -255,6 +298,9 @@ sessionModelOverride) {
|
|
|
255
298
|
}
|
|
256
299
|
}
|
|
257
300
|
}
|
|
301
|
+
if (uokFlags.modelPolicy && policyAllowedModelKeys && !attemptedPolicyEligible) {
|
|
302
|
+
throw new Error(`Model policy denied dispatch for ${unitType}/${unitId} before prompt send`);
|
|
303
|
+
}
|
|
258
304
|
}
|
|
259
305
|
else if (autoModeStartModel) {
|
|
260
306
|
// No model preference for this unit type — re-apply the model captured
|
|
@@ -359,10 +405,10 @@ export function isFlatRateProvider(provider, opts) {
|
|
|
359
405
|
*/
|
|
360
406
|
export function buildFlatRateContext(provider, ctx, prefs) {
|
|
361
407
|
let authMode;
|
|
362
|
-
const
|
|
363
|
-
if (typeof
|
|
408
|
+
const registry = ctx?.modelRegistry;
|
|
409
|
+
if (registry && typeof registry.getProviderAuthMode === "function") {
|
|
364
410
|
try {
|
|
365
|
-
const mode =
|
|
411
|
+
const mode = registry.getProviderAuthMode(provider);
|
|
366
412
|
if (mode === "apiKey" || mode === "oauth" || mode === "externalCli" || mode === "none") {
|
|
367
413
|
authMode = mode;
|
|
368
414
|
}
|