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