gsd-pi 2.73.1 → 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 +10 -10
- 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 +10 -10
- 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 -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/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/{Qr27MOHx0lxRGnJvlhxxu → tqdo0yKKYz6fJXQnIgbdx}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{Qr27MOHx0lxRGnJvlhxxu → tqdo0yKKYz6fJXQnIgbdx}/_ssgManifest.js +0 -0
package/dist/onboarding.js
CHANGED
|
@@ -71,8 +71,8 @@ const OTHER_PROVIDERS = [
|
|
|
71
71
|
];
|
|
72
72
|
// ─── Dynamic imports ──────────────────────────────────────────────────────────
|
|
73
73
|
/**
|
|
74
|
-
* Dynamically import @clack/prompts
|
|
75
|
-
* Dynamic import with fallback so the module doesn't crash if
|
|
74
|
+
* Dynamically import @clack/prompts.
|
|
75
|
+
* Dynamic import with fallback so the module doesn't crash if it's missing.
|
|
76
76
|
*/
|
|
77
77
|
async function loadClack() {
|
|
78
78
|
try {
|
|
@@ -82,10 +82,23 @@ async function loadClack() {
|
|
|
82
82
|
throw new Error('[gsd] @clack/prompts not found — onboarding wizard requires this dependency');
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Build the PicoModule color surface from chalk. Chalk is already a
|
|
87
|
+
* dependency of the CLI; this adapter keeps the onboarding call sites stable
|
|
88
|
+
* while removing the redundant picocolors dep.
|
|
89
|
+
*/
|
|
85
90
|
async function loadPico() {
|
|
86
91
|
try {
|
|
87
|
-
const
|
|
88
|
-
return
|
|
92
|
+
const { default: chalk } = await import('chalk');
|
|
93
|
+
return {
|
|
94
|
+
cyan: (s) => chalk.cyan(s),
|
|
95
|
+
green: (s) => chalk.green(s),
|
|
96
|
+
yellow: (s) => chalk.yellow(s),
|
|
97
|
+
dim: (s) => chalk.dim(s),
|
|
98
|
+
bold: (s) => chalk.bold(s),
|
|
99
|
+
red: (s) => chalk.red(s),
|
|
100
|
+
reset: (s) => chalk.reset(s),
|
|
101
|
+
};
|
|
89
102
|
}
|
|
90
103
|
catch {
|
|
91
104
|
// Fallback: return identity functions
|
|
@@ -105,9 +118,29 @@ function openBrowser(url) {
|
|
|
105
118
|
execFile(cmd, [url], () => { });
|
|
106
119
|
}
|
|
107
120
|
}
|
|
108
|
-
/**
|
|
109
|
-
|
|
110
|
-
|
|
121
|
+
/** Sentinel returned by runStep when the user cancels — tells the caller
|
|
122
|
+
* to abort the entire wizard. */
|
|
123
|
+
const STEP_CANCELLED = Symbol('step-cancelled');
|
|
124
|
+
/**
|
|
125
|
+
* Run a single onboarding step with shared error handling:
|
|
126
|
+
* - user cancel (Ctrl+C) → p.cancel(cancelMessage), returns STEP_CANCELLED
|
|
127
|
+
* - other error → p.log.warn + optional info follow-up, returns null
|
|
128
|
+
* - success → the step's return value
|
|
129
|
+
*/
|
|
130
|
+
async function runStep(p, warnLabel, fn, opts = {}) {
|
|
131
|
+
try {
|
|
132
|
+
return await fn();
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
if (p.isCancel(err)) {
|
|
136
|
+
p.cancel(opts.cancelMessage ?? 'Setup cancelled.');
|
|
137
|
+
return STEP_CANCELLED;
|
|
138
|
+
}
|
|
139
|
+
p.log.warn(`${warnLabel}: ${err instanceof Error ? err.message : String(err)}`);
|
|
140
|
+
if (opts.errorInfo)
|
|
141
|
+
p.log.info(opts.errorInfo);
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
111
144
|
}
|
|
112
145
|
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
113
146
|
/**
|
|
@@ -160,55 +193,28 @@ export async function runOnboarding(authStorage) {
|
|
|
160
193
|
process.stderr.write(renderLogo(pc.cyan));
|
|
161
194
|
p.intro(pc.bold('Welcome to GSD — let\'s get you set up'));
|
|
162
195
|
// ── LLM Provider Selection ────────────────────────────────────────────────
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
p.cancel('Setup cancelled — you can run /login inside GSD later.');
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
p.log.warn(`LLM setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
174
|
-
p.log.info('You can configure your LLM provider later with /login inside GSD.');
|
|
175
|
-
}
|
|
196
|
+
const llmResult = await runStep(p, 'LLM setup failed', () => runLlmStep(p, pc, authStorage), {
|
|
197
|
+
cancelMessage: 'Setup cancelled — you can run /login inside GSD later.',
|
|
198
|
+
errorInfo: 'You can configure your LLM provider later with /login inside GSD.',
|
|
199
|
+
});
|
|
200
|
+
if (llmResult === STEP_CANCELLED)
|
|
201
|
+
return;
|
|
202
|
+
const llmConfigured = llmResult ?? false;
|
|
176
203
|
// ── Web Search Provider ──────────────────────────────────────────────────
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
catch (err) {
|
|
182
|
-
if (isCancelError(p, err)) {
|
|
183
|
-
p.cancel('Setup cancelled.');
|
|
184
|
-
return;
|
|
185
|
-
}
|
|
186
|
-
p.log.warn(`Web search setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
187
|
-
}
|
|
204
|
+
const searchResult = await runStep(p, 'Web search setup failed', () => runWebSearchStep(p, pc, authStorage, llmConfigured));
|
|
205
|
+
if (searchResult === STEP_CANCELLED)
|
|
206
|
+
return;
|
|
207
|
+
const searchConfigured = searchResult;
|
|
188
208
|
// ── Remote Questions ─────────────────────────────────────────────────────
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
catch (err) {
|
|
194
|
-
if (isCancelError(p, err)) {
|
|
195
|
-
p.cancel('Setup cancelled.');
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
p.log.warn(`Remote questions setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
199
|
-
}
|
|
209
|
+
const remoteResult = await runStep(p, 'Remote questions setup failed', () => runRemoteQuestionsStep(p, pc, authStorage));
|
|
210
|
+
if (remoteResult === STEP_CANCELLED)
|
|
211
|
+
return;
|
|
212
|
+
const remoteConfigured = remoteResult;
|
|
200
213
|
// ── Tool API Keys ─────────────────────────────────────────────────────────
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
catch (err) {
|
|
206
|
-
if (isCancelError(p, err)) {
|
|
207
|
-
p.cancel('Setup cancelled.');
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
p.log.warn(`Tool key setup failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
211
|
-
}
|
|
214
|
+
const toolResult = await runStep(p, 'Tool key setup failed', () => runToolKeysStep(p, pc, authStorage));
|
|
215
|
+
if (toolResult === STEP_CANCELLED)
|
|
216
|
+
return;
|
|
217
|
+
const toolKeyCount = toolResult ?? 0;
|
|
212
218
|
// ── Summary ───────────────────────────────────────────────────────────────
|
|
213
219
|
const summaryLines = [];
|
|
214
220
|
if (llmConfigured) {
|
package/dist/resource-loader.js
CHANGED
|
@@ -358,7 +358,7 @@ function reconcileMergedNodeModules(agentNodeModules, hoisted, internal) {
|
|
|
358
358
|
if (entry.name.startsWith('.'))
|
|
359
359
|
continue;
|
|
360
360
|
try {
|
|
361
|
-
symlinkSync(join(hoisted, entry.name), join(agentNodeModules, entry.name));
|
|
361
|
+
symlinkSync(join(hoisted, entry.name), join(agentNodeModules, entry.name), 'junction');
|
|
362
362
|
linkedCount++;
|
|
363
363
|
}
|
|
364
364
|
catch { /* skip individual */ }
|
|
@@ -382,7 +382,7 @@ function reconcileMergedNodeModules(agentNodeModules, hoisted, internal) {
|
|
|
382
382
|
}
|
|
383
383
|
catch { /* didn't exist — will create below */ }
|
|
384
384
|
try {
|
|
385
|
-
symlinkSync(join(internal, entry.name), link);
|
|
385
|
+
symlinkSync(join(internal, entry.name), link, 'junction');
|
|
386
386
|
linkedCount++;
|
|
387
387
|
}
|
|
388
388
|
catch { /* skip individual */ }
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* AssistantMessageEvents for TUI rendering, then strips tool-call blocks from
|
|
7
7
|
* the final AssistantMessage so GSD's agent loop doesn't try to dispatch them.
|
|
8
8
|
*/
|
|
9
|
-
import { EventStream } from "@gsd/pi-ai";
|
|
9
|
+
import { EventStream, mapThinkingLevelToEffort, supportsAdaptiveThinking } from "@gsd/pi-ai";
|
|
10
10
|
import { execSync } from "node:child_process";
|
|
11
11
|
import { PartialMessageBuilder, ZERO_USAGE, mapUsage } from "./partial-builder.js";
|
|
12
12
|
import { buildWorkflowMcpServers } from "../gsd/workflow-mcp.js";
|
|
@@ -123,6 +123,63 @@ export function buildPromptFromContext(context) {
|
|
|
123
123
|
}
|
|
124
124
|
return parts.join("\n\n");
|
|
125
125
|
}
|
|
126
|
+
function stripDataUriPrefix(value) {
|
|
127
|
+
const commaIndex = value.indexOf(",");
|
|
128
|
+
if (value.startsWith("data:") && commaIndex !== -1) {
|
|
129
|
+
return value.slice(commaIndex + 1);
|
|
130
|
+
}
|
|
131
|
+
return value;
|
|
132
|
+
}
|
|
133
|
+
function inferMimeTypeFromDataUri(value) {
|
|
134
|
+
const match = /^data:([^;,]+);base64,/.exec(value);
|
|
135
|
+
return match?.[1] ?? null;
|
|
136
|
+
}
|
|
137
|
+
export function extractImageBlocksFromContext(context) {
|
|
138
|
+
const imageBlocks = [];
|
|
139
|
+
for (const msg of context.messages) {
|
|
140
|
+
if (msg.role !== "user" || !Array.isArray(msg.content))
|
|
141
|
+
continue;
|
|
142
|
+
for (const part of msg.content) {
|
|
143
|
+
if (!part || typeof part !== "object")
|
|
144
|
+
continue;
|
|
145
|
+
const block = part;
|
|
146
|
+
if (block.type !== "image" || typeof block.data !== "string")
|
|
147
|
+
continue;
|
|
148
|
+
const mimeType = typeof block.mimeType === "string" && block.mimeType.length > 0
|
|
149
|
+
? block.mimeType
|
|
150
|
+
: inferMimeTypeFromDataUri(block.data);
|
|
151
|
+
if (!mimeType)
|
|
152
|
+
continue;
|
|
153
|
+
imageBlocks.push({
|
|
154
|
+
type: "image",
|
|
155
|
+
source: {
|
|
156
|
+
type: "base64",
|
|
157
|
+
media_type: mimeType,
|
|
158
|
+
data: stripDataUriPrefix(block.data),
|
|
159
|
+
},
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return imageBlocks;
|
|
164
|
+
}
|
|
165
|
+
export function buildSdkQueryPrompt(context, textPrompt = buildPromptFromContext(context)) {
|
|
166
|
+
const imageBlocks = extractImageBlocksFromContext(context);
|
|
167
|
+
if (imageBlocks.length === 0) {
|
|
168
|
+
return textPrompt;
|
|
169
|
+
}
|
|
170
|
+
const content = [...imageBlocks];
|
|
171
|
+
if (textPrompt) {
|
|
172
|
+
content.push({ type: "text", text: textPrompt });
|
|
173
|
+
}
|
|
174
|
+
const sdkMessage = {
|
|
175
|
+
type: "user",
|
|
176
|
+
message: { role: "user", content },
|
|
177
|
+
parent_tool_use_id: null,
|
|
178
|
+
};
|
|
179
|
+
return (async function* () {
|
|
180
|
+
yield sdkMessage;
|
|
181
|
+
})();
|
|
182
|
+
}
|
|
126
183
|
// ---------------------------------------------------------------------------
|
|
127
184
|
// Error helper
|
|
128
185
|
// ---------------------------------------------------------------------------
|
|
@@ -437,6 +494,7 @@ export async function resolveClaudePermissionMode(env = process.env) {
|
|
|
437
494
|
* behaviour pass `permissionMode: "bypassPermissions"` explicitly.
|
|
438
495
|
*/
|
|
439
496
|
export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
497
|
+
const { reasoning, ...sdkExtraOptions } = extraOptions;
|
|
440
498
|
const mcpServers = buildWorkflowMcpServers();
|
|
441
499
|
const permissionMode = overrides?.permissionMode ?? "bypassPermissions";
|
|
442
500
|
const disallowedTools = ["AskUserQuestion"];
|
|
@@ -455,6 +513,9 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
455
513
|
"Bash(pwd)",
|
|
456
514
|
...(mcpServers ? Object.keys(mcpServers).map((serverName) => `mcp__${serverName}__*`) : []),
|
|
457
515
|
];
|
|
516
|
+
const effort = reasoning && supportsAdaptiveThinking(modelId)
|
|
517
|
+
? mapThinkingLevelToEffort(reasoning, modelId)
|
|
518
|
+
: undefined;
|
|
458
519
|
return {
|
|
459
520
|
pathToClaudeCodeExecutable: getClaudePath(),
|
|
460
521
|
model: modelId,
|
|
@@ -469,7 +530,8 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
469
530
|
...(allowedTools.length > 0 ? { allowedTools } : {}),
|
|
470
531
|
...(mcpServers ? { mcpServers } : {}),
|
|
471
532
|
betas: modelId.includes("sonnet") ? ["context-1m-2025-08-07"] : [],
|
|
472
|
-
...
|
|
533
|
+
...(effort ? { effort } : {}),
|
|
534
|
+
...sdkExtraOptions,
|
|
473
535
|
};
|
|
474
536
|
}
|
|
475
537
|
function normalizeToolResultContent(content) {
|
|
@@ -617,14 +679,16 @@ async function pumpSdkMessages(model, context, options, stream) {
|
|
|
617
679
|
options.signal.addEventListener("abort", () => controller.abort(), { once: true });
|
|
618
680
|
}
|
|
619
681
|
const prompt = buildPromptFromContext(context);
|
|
682
|
+
const queryPrompt = buildSdkQueryPrompt(context, prompt);
|
|
620
683
|
const permissionMode = await resolveClaudePermissionMode();
|
|
621
684
|
const sdkOpts = buildSdkOptions(modelId, prompt, { permissionMode }, typeof options?.extensionUIContext === "object"
|
|
622
685
|
? {
|
|
686
|
+
reasoning: options?.reasoning,
|
|
623
687
|
onElicitation: createClaudeCodeElicitationHandler(options?.extensionUIContext),
|
|
624
688
|
}
|
|
625
|
-
: {});
|
|
689
|
+
: { reasoning: options?.reasoning });
|
|
626
690
|
const queryResult = sdk.query({
|
|
627
|
-
prompt,
|
|
691
|
+
prompt: queryPrompt,
|
|
628
692
|
options: {
|
|
629
693
|
...sdkOpts,
|
|
630
694
|
abortController: controller,
|
|
@@ -13,6 +13,8 @@ import { join } from "node:path";
|
|
|
13
13
|
import { GSDError, GSD_IO_ERROR } from "./errors.js";
|
|
14
14
|
const SEQ_PREFIX_RE = /^(\d+)-/;
|
|
15
15
|
import { gsdRoot } from "./paths.js";
|
|
16
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
17
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
16
18
|
const activityLogState = new Map();
|
|
17
19
|
/**
|
|
18
20
|
* Clear accumulated activity log state (#611).
|
|
@@ -110,6 +112,20 @@ export function saveActivityLog(ctx, basePath, unitType, unitId) {
|
|
|
110
112
|
}
|
|
111
113
|
state.nextSeq += 1;
|
|
112
114
|
state.lastSnapshotKeyByUnit.set(unitKey, key);
|
|
115
|
+
if (isUnifiedAuditEnabled()) {
|
|
116
|
+
emitUokAuditEvent(basePath, buildAuditEnvelope({
|
|
117
|
+
traceId: `activity:${unitType}:${unitId}`,
|
|
118
|
+
turnId: unitId,
|
|
119
|
+
category: "execution",
|
|
120
|
+
type: "activity-log-saved",
|
|
121
|
+
payload: {
|
|
122
|
+
unitType,
|
|
123
|
+
unitId,
|
|
124
|
+
filePath,
|
|
125
|
+
entryCount: entries.length,
|
|
126
|
+
},
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
113
129
|
return filePath;
|
|
114
130
|
}
|
|
115
131
|
catch (e) {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Leaf node in the import DAG.
|
|
5
5
|
*/
|
|
6
|
+
import { summarizeLogs } from "../workflow-logger.js";
|
|
6
7
|
/**
|
|
7
8
|
* Pattern matching ENOENT errors with a file path.
|
|
8
9
|
* Matches: "ENOENT: no such file or directory, access '/path/to/file'"
|
|
@@ -22,13 +23,19 @@ const ENOENT_PATH_RE = /ENOENT[^']*'([^']+)'/;
|
|
|
22
23
|
export function detectStuck(window) {
|
|
23
24
|
if (window.length < 2)
|
|
24
25
|
return null;
|
|
26
|
+
// Peek (not drain) the workflow-logger buffer so stuck reasons can surface
|
|
27
|
+
// the underlying diagnostic context (projection failures, DB degradations,
|
|
28
|
+
// reconcile warnings) that usually explains *why* the loop is stuck. The
|
|
29
|
+
// auto-loop's finalize step owns the buffer lifecycle — this is read-only.
|
|
30
|
+
const loggerSummary = summarizeLogs();
|
|
31
|
+
const suffix = loggerSummary ? ` — ${loggerSummary}` : "";
|
|
25
32
|
const last = window[window.length - 1];
|
|
26
33
|
const prev = window[window.length - 2];
|
|
27
34
|
// Rule 1: Same error repeated consecutively
|
|
28
35
|
if (last.error && prev.error && last.error === prev.error) {
|
|
29
36
|
return {
|
|
30
37
|
stuck: true,
|
|
31
|
-
reason: `Same error repeated: ${last.error.slice(0, 200)}`,
|
|
38
|
+
reason: `Same error repeated: ${last.error.slice(0, 200)}${suffix}`,
|
|
32
39
|
};
|
|
33
40
|
}
|
|
34
41
|
// Rule 2: Same unit 3+ consecutive times
|
|
@@ -37,7 +44,7 @@ export function detectStuck(window) {
|
|
|
37
44
|
if (lastThree.every((u) => u.key === last.key)) {
|
|
38
45
|
return {
|
|
39
46
|
stuck: true,
|
|
40
|
-
reason: `${last.key} derived 3 consecutive times without progress`,
|
|
47
|
+
reason: `${last.key} derived 3 consecutive times without progress${suffix}`,
|
|
41
48
|
};
|
|
42
49
|
}
|
|
43
50
|
}
|
|
@@ -49,7 +56,7 @@ export function detectStuck(window) {
|
|
|
49
56
|
w[0].key !== w[1].key) {
|
|
50
57
|
return {
|
|
51
58
|
stuck: true,
|
|
52
|
-
reason: `Oscillation detected: ${w[0].key} ↔ ${w[1].key}`,
|
|
59
|
+
reason: `Oscillation detected: ${w[0].key} ↔ ${w[1].key}${suffix}`,
|
|
53
60
|
};
|
|
54
61
|
}
|
|
55
62
|
}
|
|
@@ -67,7 +74,7 @@ export function detectStuck(window) {
|
|
|
67
74
|
if (count >= 2) {
|
|
68
75
|
return {
|
|
69
76
|
stuck: true,
|
|
70
|
-
reason: `Missing file referenced twice: ${filePath} (ENOENT)`,
|
|
77
|
+
reason: `Missing file referenced twice: ${filePath} (ENOENT)${suffix}`,
|
|
71
78
|
};
|
|
72
79
|
}
|
|
73
80
|
enoentPaths.set(filePath, count);
|
|
@@ -15,6 +15,8 @@ import { isInfrastructureError, isTransientCooldownError, getCooldownRetryAfterM
|
|
|
15
15
|
import { resolveEngine } from "../engine-resolver.js";
|
|
16
16
|
import { logWarning } from "../workflow-logger.js";
|
|
17
17
|
import { gsdRoot } from "../paths.js";
|
|
18
|
+
import { resolveUokFlags } from "../uok/flags.js";
|
|
19
|
+
import { scheduleSidecarQueue } from "../uok/execution-graph.js";
|
|
18
20
|
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
19
21
|
import { join } from "node:path";
|
|
20
22
|
// ── Stuck detection persistence (#3704) ──────────────────────────────────
|
|
@@ -104,6 +106,40 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
104
106
|
const flowId = randomUUID();
|
|
105
107
|
let seqCounter = 0;
|
|
106
108
|
const nextSeq = () => ++seqCounter;
|
|
109
|
+
const turnId = randomUUID();
|
|
110
|
+
s.currentTraceId = flowId;
|
|
111
|
+
s.currentTurnId = turnId;
|
|
112
|
+
const turnStartedAt = new Date().toISOString();
|
|
113
|
+
let observedUnitType;
|
|
114
|
+
let observedUnitId;
|
|
115
|
+
let turnFinished = false;
|
|
116
|
+
const finishTurn = (status, failureClass = "none", error) => {
|
|
117
|
+
if (turnFinished)
|
|
118
|
+
return;
|
|
119
|
+
turnFinished = true;
|
|
120
|
+
deps.uokObserver?.onTurnResult({
|
|
121
|
+
traceId: flowId,
|
|
122
|
+
turnId,
|
|
123
|
+
iteration,
|
|
124
|
+
unitType: observedUnitType,
|
|
125
|
+
unitId: observedUnitId,
|
|
126
|
+
status,
|
|
127
|
+
failureClass,
|
|
128
|
+
phaseResults: [],
|
|
129
|
+
error,
|
|
130
|
+
startedAt: turnStartedAt,
|
|
131
|
+
finishedAt: new Date().toISOString(),
|
|
132
|
+
});
|
|
133
|
+
s.currentTraceId = null;
|
|
134
|
+
s.currentTurnId = null;
|
|
135
|
+
};
|
|
136
|
+
deps.uokObserver?.onTurnStart({
|
|
137
|
+
traceId: flowId,
|
|
138
|
+
turnId,
|
|
139
|
+
iteration,
|
|
140
|
+
basePath: s.basePath,
|
|
141
|
+
startedAt: turnStartedAt,
|
|
142
|
+
});
|
|
107
143
|
if (iteration > MAX_LOOP_ITERATIONS) {
|
|
108
144
|
debugLog("autoLoop", {
|
|
109
145
|
phase: "exit",
|
|
@@ -111,6 +147,7 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
111
147
|
iteration,
|
|
112
148
|
});
|
|
113
149
|
await deps.stopAuto(ctx, pi, `Safety: loop exceeded ${MAX_LOOP_ITERATIONS} iterations — possible runaway`);
|
|
150
|
+
finishTurn("stopped", "manual-attention", "max-iterations");
|
|
114
151
|
break;
|
|
115
152
|
}
|
|
116
153
|
// ── Memory pressure check (#3331) ──
|
|
@@ -123,19 +160,30 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
123
160
|
await deps.stopAuto(ctx, pi, `Memory pressure: heap at ${mem.heapMB}MB / ${mem.limitMB}MB (${Math.round(mem.pct * 100)}%). ` +
|
|
124
161
|
`Stopping gracefully to prevent OOM kill after ${iteration} iterations. ` +
|
|
125
162
|
`Resume with /gsd auto to continue from where you left off.`);
|
|
163
|
+
finishTurn("stopped", "timeout", "memory-pressure");
|
|
126
164
|
break;
|
|
127
165
|
}
|
|
128
166
|
}
|
|
129
167
|
if (!s.cmdCtx) {
|
|
130
168
|
debugLog("autoLoop", { phase: "exit", reason: "no-cmdCtx" });
|
|
169
|
+
finishTurn("stopped", "manual-attention", "missing-command-context");
|
|
131
170
|
break;
|
|
132
171
|
}
|
|
133
172
|
try {
|
|
134
173
|
// ── Blanket try/catch: one bad iteration must not kill the session
|
|
135
174
|
const prefs = deps.loadEffectiveGSDPreferences()?.preferences;
|
|
175
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
136
176
|
// ── Check sidecar queue before deriveState ──
|
|
137
177
|
let sidecarItem;
|
|
138
178
|
if (s.sidecarQueue.length > 0) {
|
|
179
|
+
if (uokFlags.executionGraph && s.sidecarQueue.length > 1) {
|
|
180
|
+
try {
|
|
181
|
+
s.sidecarQueue = await scheduleSidecarQueue(s.sidecarQueue);
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
logWarning("dispatch", `sidecar queue scheduling failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
139
187
|
sidecarItem = s.sidecarQueue.shift();
|
|
140
188
|
debugLog("autoLoop", {
|
|
141
189
|
phase: "sidecar-dequeue",
|
|
@@ -210,25 +258,49 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
210
258
|
isRetry: false,
|
|
211
259
|
previousTier: undefined,
|
|
212
260
|
};
|
|
261
|
+
observedUnitType = iterData.unitType;
|
|
262
|
+
observedUnitId = iterData.unitId;
|
|
213
263
|
// ── Progress widget (mirrors dev path in runDispatch) ──
|
|
214
264
|
deps.updateProgressWidget(ctx, iterData.unitType, iterData.unitId, iterData.state);
|
|
215
265
|
// ── Guards (shared with dev path) ──
|
|
216
266
|
const guardsResult = await runGuards(ic, s.currentMilestoneId ?? "workflow");
|
|
217
|
-
|
|
267
|
+
deps.uokObserver?.onPhaseResult("guard", guardsResult.action, {
|
|
268
|
+
unitType: iterData.unitType,
|
|
269
|
+
unitId: iterData.unitId,
|
|
270
|
+
});
|
|
271
|
+
if (guardsResult.action === "break") {
|
|
272
|
+
finishTurn("stopped", "manual-attention", "guard-break");
|
|
218
273
|
break;
|
|
274
|
+
}
|
|
219
275
|
// ── Unit execution (shared with dev path) ──
|
|
220
276
|
const unitPhaseResult = await runUnitPhase(ic, iterData, loopState);
|
|
221
|
-
|
|
277
|
+
deps.uokObserver?.onPhaseResult("unit", unitPhaseResult.action, {
|
|
278
|
+
unitType: iterData.unitType,
|
|
279
|
+
unitId: iterData.unitId,
|
|
280
|
+
});
|
|
281
|
+
if (unitPhaseResult.action === "break") {
|
|
282
|
+
finishTurn("stopped", "execution", "unit-break");
|
|
222
283
|
break;
|
|
284
|
+
}
|
|
223
285
|
// ── Verify first, then reconcile (only mark complete on pass) ──
|
|
224
286
|
debugLog("autoLoop", { phase: "custom-engine-verify", iteration, unitId: iterData.unitId });
|
|
225
287
|
const verifyResult = await policy.verify(iterData.unitType, iterData.unitId, { basePath: s.basePath });
|
|
226
288
|
if (verifyResult === "pause") {
|
|
227
289
|
await deps.pauseAuto(ctx, pi);
|
|
290
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "pause", {
|
|
291
|
+
unitType: iterData.unitType,
|
|
292
|
+
unitId: iterData.unitId,
|
|
293
|
+
});
|
|
294
|
+
finishTurn("paused", "manual-attention", "custom-engine-verify-pause");
|
|
228
295
|
break;
|
|
229
296
|
}
|
|
230
297
|
if (verifyResult === "retry") {
|
|
231
298
|
debugLog("autoLoop", { phase: "custom-engine-verify-retry", iteration, unitId: iterData.unitId });
|
|
299
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "retry", {
|
|
300
|
+
unitType: iterData.unitType,
|
|
301
|
+
unitId: iterData.unitId,
|
|
302
|
+
});
|
|
303
|
+
finishTurn("retry");
|
|
232
304
|
continue;
|
|
233
305
|
}
|
|
234
306
|
// Verification passed — mark step complete
|
|
@@ -248,37 +320,73 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
248
320
|
debugLog("autoLoop", { phase: "iteration-complete", iteration });
|
|
249
321
|
if (reconcileResult.outcome === "milestone-complete") {
|
|
250
322
|
await deps.stopAuto(ctx, pi, "Workflow complete");
|
|
323
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "milestone-complete", {
|
|
324
|
+
unitType: iterData.unitType,
|
|
325
|
+
unitId: iterData.unitId,
|
|
326
|
+
});
|
|
327
|
+
finishTurn("completed");
|
|
251
328
|
break;
|
|
252
329
|
}
|
|
253
330
|
if (reconcileResult.outcome === "pause") {
|
|
254
331
|
await deps.pauseAuto(ctx, pi);
|
|
332
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "pause", {
|
|
333
|
+
unitType: iterData.unitType,
|
|
334
|
+
unitId: iterData.unitId,
|
|
335
|
+
});
|
|
336
|
+
finishTurn("paused", "manual-attention");
|
|
255
337
|
break;
|
|
256
338
|
}
|
|
257
339
|
if (reconcileResult.outcome === "stop") {
|
|
258
340
|
await deps.stopAuto(ctx, pi, reconcileResult.reason ?? "Engine stopped");
|
|
341
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "stop", {
|
|
342
|
+
unitType: iterData.unitType,
|
|
343
|
+
unitId: iterData.unitId,
|
|
344
|
+
reason: reconcileResult.reason,
|
|
345
|
+
});
|
|
346
|
+
finishTurn("stopped", "manual-attention", reconcileResult.reason);
|
|
259
347
|
break;
|
|
260
348
|
}
|
|
349
|
+
deps.uokObserver?.onPhaseResult("custom-engine", "continue", {
|
|
350
|
+
unitType: iterData.unitType,
|
|
351
|
+
unitId: iterData.unitId,
|
|
352
|
+
});
|
|
353
|
+
finishTurn("completed");
|
|
261
354
|
continue;
|
|
262
355
|
}
|
|
263
356
|
if (!sidecarItem) {
|
|
264
357
|
// ── Phase 1: Pre-dispatch ─────────────────────────────────────────
|
|
265
358
|
const preDispatchResult = await runPreDispatch(ic, loopState);
|
|
266
|
-
|
|
359
|
+
deps.uokObserver?.onPhaseResult("pre-dispatch", preDispatchResult.action);
|
|
360
|
+
if (preDispatchResult.action === "break") {
|
|
361
|
+
finishTurn("stopped", "manual-attention", "pre-dispatch-break");
|
|
267
362
|
break;
|
|
268
|
-
|
|
363
|
+
}
|
|
364
|
+
if (preDispatchResult.action === "continue") {
|
|
365
|
+
finishTurn("skipped");
|
|
269
366
|
continue;
|
|
367
|
+
}
|
|
270
368
|
const preData = preDispatchResult.data;
|
|
271
369
|
// ── Phase 2: Guards ───────────────────────────────────────────────
|
|
272
370
|
const guardsResult = await runGuards(ic, preData.mid);
|
|
273
|
-
|
|
371
|
+
deps.uokObserver?.onPhaseResult("guard", guardsResult.action);
|
|
372
|
+
if (guardsResult.action === "break") {
|
|
373
|
+
finishTurn("stopped", "manual-attention", "guard-break");
|
|
274
374
|
break;
|
|
375
|
+
}
|
|
275
376
|
// ── Phase 3: Dispatch ─────────────────────────────────────────────
|
|
276
377
|
const dispatchResult = await runDispatch(ic, preData, loopState);
|
|
277
|
-
|
|
378
|
+
deps.uokObserver?.onPhaseResult("dispatch", dispatchResult.action);
|
|
379
|
+
if (dispatchResult.action === "break") {
|
|
380
|
+
finishTurn("stopped", "manual-attention", "dispatch-break");
|
|
278
381
|
break;
|
|
279
|
-
|
|
382
|
+
}
|
|
383
|
+
if (dispatchResult.action === "continue") {
|
|
384
|
+
finishTurn("skipped");
|
|
280
385
|
continue;
|
|
386
|
+
}
|
|
281
387
|
iterData = dispatchResult.data;
|
|
388
|
+
observedUnitType = iterData.unitType;
|
|
389
|
+
observedUnitId = iterData.unitId;
|
|
282
390
|
}
|
|
283
391
|
else {
|
|
284
392
|
// ── Sidecar path: use values from the sidecar item directly ──
|
|
@@ -294,21 +402,46 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
294
402
|
midTitle: sidecarState.activeMilestone?.title,
|
|
295
403
|
isRetry: false, previousTier: undefined,
|
|
296
404
|
};
|
|
405
|
+
observedUnitType = iterData.unitType;
|
|
406
|
+
observedUnitId = iterData.unitId;
|
|
407
|
+
deps.uokObserver?.onPhaseResult("dispatch", "sidecar", {
|
|
408
|
+
unitType: iterData.unitType,
|
|
409
|
+
unitId: iterData.unitId,
|
|
410
|
+
sidecarKind: sidecarItem.kind,
|
|
411
|
+
});
|
|
297
412
|
}
|
|
298
413
|
const unitPhaseResult = await runUnitPhase(ic, iterData, loopState, sidecarItem);
|
|
299
|
-
|
|
414
|
+
deps.uokObserver?.onPhaseResult("unit", unitPhaseResult.action, {
|
|
415
|
+
unitType: iterData.unitType,
|
|
416
|
+
unitId: iterData.unitId,
|
|
417
|
+
});
|
|
418
|
+
if (unitPhaseResult.action === "break") {
|
|
419
|
+
finishTurn("stopped", "execution", "unit-break");
|
|
300
420
|
break;
|
|
421
|
+
}
|
|
301
422
|
// ── Phase 5: Finalize ───────────────────────────────────────────────
|
|
302
423
|
const finalizeResult = await runFinalize(ic, iterData, loopState, sidecarItem);
|
|
303
|
-
|
|
424
|
+
deps.uokObserver?.onPhaseResult("finalize", finalizeResult.action, {
|
|
425
|
+
unitType: iterData.unitType,
|
|
426
|
+
unitId: iterData.unitId,
|
|
427
|
+
});
|
|
428
|
+
if (finalizeResult.action === "break") {
|
|
429
|
+
const finalizeFailureClass = finalizeResult.reason === "git-closeout-failure"
|
|
430
|
+
? "git"
|
|
431
|
+
: "closeout";
|
|
432
|
+
finishTurn("stopped", finalizeFailureClass, "finalize-break");
|
|
304
433
|
break;
|
|
305
|
-
|
|
434
|
+
}
|
|
435
|
+
if (finalizeResult.action === "continue") {
|
|
436
|
+
finishTurn("retry");
|
|
306
437
|
continue;
|
|
438
|
+
}
|
|
307
439
|
consecutiveErrors = 0; // Iteration completed successfully
|
|
308
440
|
consecutiveCooldowns = 0;
|
|
309
441
|
recentErrorMessages.length = 0;
|
|
310
442
|
deps.emitJournalEvent({ ts: new Date().toISOString(), flowId, seq: nextSeq(), eventType: "iteration-end", data: { iteration } });
|
|
311
443
|
debugLog("autoLoop", { phase: "iteration-complete", iteration });
|
|
444
|
+
finishTurn("completed");
|
|
312
445
|
}
|
|
313
446
|
catch (loopErr) {
|
|
314
447
|
// ── Blanket catch: absorb unexpected exceptions, apply graduated recovery ──
|
|
@@ -330,6 +463,7 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
330
463
|
});
|
|
331
464
|
ctx.ui.notify(`Auto-mode stopped: infrastructure error ${infraCode} — ${msg}`, "error");
|
|
332
465
|
await deps.stopAuto(ctx, pi, `Infrastructure error (${infraCode}): not recoverable by retry`);
|
|
466
|
+
finishTurn("failed", "execution", msg);
|
|
333
467
|
break;
|
|
334
468
|
}
|
|
335
469
|
// ── Credential cooldown: wait and retry with bounded budget ──
|
|
@@ -358,6 +492,7 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
358
492
|
: COOLDOWN_FALLBACK_WAIT_MS;
|
|
359
493
|
ctx.ui.notify(`Credentials in cooldown (${consecutiveCooldowns}/${MAX_COOLDOWN_RETRIES}) — waiting ${Math.round(waitMs / 1000)}s before retrying.`, "warning");
|
|
360
494
|
await new Promise(resolve => setTimeout(resolve, waitMs));
|
|
495
|
+
finishTurn("retry", "timeout", msg);
|
|
361
496
|
continue; // Retry iteration without incrementing consecutiveErrors
|
|
362
497
|
}
|
|
363
498
|
consecutiveErrors++;
|
|
@@ -375,6 +510,7 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
375
510
|
.join("\n");
|
|
376
511
|
ctx.ui.notify(`Auto-mode stopped: ${consecutiveErrors} consecutive iteration failures:\n${errorHistory}`, "error");
|
|
377
512
|
await deps.stopAuto(ctx, pi, `${consecutiveErrors} consecutive iteration failures`);
|
|
513
|
+
finishTurn("failed", "execution", msg);
|
|
378
514
|
break;
|
|
379
515
|
}
|
|
380
516
|
else if (consecutiveErrors === 2) {
|
|
@@ -386,6 +522,7 @@ export async function autoLoop(ctx, pi, s, deps) {
|
|
|
386
522
|
// 1st error: log and retry — transient failures happen
|
|
387
523
|
ctx.ui.notify(`Iteration error: ${msg}. Retrying.`, "warning");
|
|
388
524
|
}
|
|
525
|
+
finishTurn("retry", "execution", msg);
|
|
389
526
|
}
|
|
390
527
|
}
|
|
391
528
|
_clearCurrentResolve();
|