gsd-pi 2.74.0 → 2.75.0-dev.063e5a3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +85 -0
- package/dist/headless-query.js +4 -1
- package/dist/help-text.js +23 -0
- package/dist/resources/extensions/gsd/activity-log.js +16 -0
- package/dist/resources/extensions/gsd/auto/detect-stuck.js +11 -4
- package/dist/resources/extensions/gsd/auto/loop.js +147 -10
- package/dist/resources/extensions/gsd/auto/phases.js +209 -10
- package/dist/resources/extensions/gsd/auto/session.js +10 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +11 -1
- package/dist/resources/extensions/gsd/auto-model-selection.js +54 -8
- package/dist/resources/extensions/gsd/auto-post-unit.js +220 -17
- package/dist/resources/extensions/gsd/auto-prompts.js +12 -0
- package/dist/resources/extensions/gsd/auto-recovery.js +24 -10
- package/dist/resources/extensions/gsd/auto-unit-closeout.js +18 -0
- package/dist/resources/extensions/gsd/auto-verification.js +100 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +2 -0
- package/dist/resources/extensions/gsd/auto.js +36 -4
- package/dist/resources/extensions/gsd/bootstrap/provider-error-resume.js +5 -3
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +30 -8
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +61 -9
- package/dist/resources/extensions/gsd/cache.js +16 -5
- package/dist/resources/extensions/gsd/commands/catalog.js +31 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +5 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +25 -0
- package/dist/resources/extensions/gsd/commands/handlers/workflow.js +68 -9
- package/dist/resources/extensions/gsd/commands-add-tests.js +111 -0
- package/dist/resources/extensions/gsd/commands-backlog.js +140 -0
- package/dist/resources/extensions/gsd/commands-do.js +79 -0
- package/dist/resources/extensions/gsd/commands-extract-learnings.js +225 -0
- package/dist/resources/extensions/gsd/commands-maintenance.js +6 -6
- package/dist/resources/extensions/gsd/commands-pr-branch.js +180 -0
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +51 -4
- package/dist/resources/extensions/gsd/commands-session-report.js +82 -0
- package/dist/resources/extensions/gsd/commands-ship.js +187 -0
- package/dist/resources/extensions/gsd/db-writer.js +3 -5
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +16 -1
- package/dist/resources/extensions/gsd/ecosystem/gsd-extension-api.js +144 -0
- package/dist/resources/extensions/gsd/ecosystem/loader.js +145 -0
- package/dist/resources/extensions/gsd/git-service.js +49 -1
- package/dist/resources/extensions/gsd/graph-context.js +157 -0
- package/dist/resources/extensions/gsd/gsd-db.js +581 -2
- package/dist/resources/extensions/gsd/guided-flow.js +31 -6
- package/dist/resources/extensions/gsd/index.js +15 -2
- package/dist/resources/extensions/gsd/init-wizard.js +1 -0
- package/dist/resources/extensions/gsd/journal.js +27 -0
- package/dist/resources/extensions/gsd/md-importer.js +3 -4
- package/dist/resources/extensions/gsd/memory-store.js +19 -51
- package/dist/resources/extensions/gsd/metrics.js +19 -0
- package/dist/resources/extensions/gsd/milestone-validation-gates.js +13 -12
- package/dist/resources/extensions/gsd/native-git-bridge.js +7 -4
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +33 -1
- package/dist/resources/extensions/gsd/preferences-models.js +20 -3
- package/dist/resources/extensions/gsd/preferences-types.js +2 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +118 -2
- package/dist/resources/extensions/gsd/preferences.js +31 -0
- package/dist/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/dist/resources/extensions/gsd/safety/evidence-collector.js +15 -30
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +12 -2
- package/dist/resources/extensions/gsd/state.js +5 -1
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +19 -0
- package/dist/resources/extensions/gsd/tools/complete-slice.js +20 -0
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +39 -4
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +3 -14
- package/dist/resources/extensions/gsd/triage-resolution.js +2 -5
- package/dist/resources/extensions/gsd/unit-ownership.js +1 -1
- package/dist/resources/extensions/gsd/uok/audit-toggle.js +7 -0
- package/dist/resources/extensions/gsd/uok/audit.js +40 -0
- package/dist/resources/extensions/gsd/uok/contracts.js +1 -0
- package/dist/resources/extensions/gsd/uok/execution-graph.js +179 -0
- package/dist/resources/extensions/gsd/uok/flags.js +29 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +109 -0
- package/dist/resources/extensions/gsd/uok/gitops.js +53 -0
- package/dist/resources/extensions/gsd/uok/kernel.js +80 -0
- package/dist/resources/extensions/gsd/uok/loop-adapter.js +133 -0
- package/dist/resources/extensions/gsd/uok/model-policy.js +66 -0
- package/dist/resources/extensions/gsd/uok/plan-v2.js +132 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +22 -0
- package/dist/resources/extensions/gsd/workflow-manifest.js +8 -69
- package/dist/resources/extensions/gsd/workflow-migration.js +21 -22
- package/dist/resources/extensions/gsd/workflow-projections.js +4 -1
- package/dist/resources/extensions/gsd/workflow-reconcile.js +14 -11
- package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
- package/dist/tsconfig.extensions.tsbuildinfo +1 -0
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +13 -13
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +13 -13
- package/dist/web/standalone/.next/server/chunks/63.js +3 -3
- package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
- package/dist/web/standalone/.next/server/middleware.js +2 -2
- package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
- package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
- package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/package.json +3 -2
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/index.d.ts +3 -0
- package/packages/mcp-server/dist/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/index.js +3 -0
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/dist/readers/graph.d.ts +87 -0
- package/packages/mcp-server/dist/readers/graph.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/graph.js +655 -0
- package/packages/mcp-server/dist/readers/graph.js.map +1 -0
- package/packages/mcp-server/dist/readers/index.d.ts +2 -0
- package/packages/mcp-server/dist/readers/index.d.ts.map +1 -1
- package/packages/mcp-server/dist/readers/index.js +1 -0
- package/packages/mcp-server/dist/readers/index.js.map +1 -1
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +65 -0
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +88 -6
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/index.ts +15 -0
- package/packages/mcp-server/src/readers/graph.test.ts +604 -0
- package/packages/mcp-server/src/readers/graph.ts +855 -0
- package/packages/mcp-server/src/readers/index.ts +12 -0
- package/packages/mcp-server/src/server.ts +83 -0
- package/packages/mcp-server/src/workflow-tools.ts +95 -10
- package/packages/mcp-server/tsconfig.json +1 -0
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -0
- package/packages/native/package.json +2 -2
- package/packages/native/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.json +1 -0
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-ai/dist/index.d.ts +1 -9
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -9
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/models/capability-patches.d.ts +19 -0
- package/packages/pi-ai/dist/models/capability-patches.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/capability-patches.js +36 -0
- package/packages/pi-ai/dist/models/capability-patches.js.map +1 -0
- package/packages/pi-ai/dist/{models.custom.d.ts → models/custom.d.ts} +1 -1
- package/packages/pi-ai/dist/models/custom.d.ts.map +1 -0
- package/packages/pi-ai/dist/{models.custom.js → models/custom.js} +4 -4
- package/packages/pi-ai/dist/models/custom.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts +1482 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js +1484 -0
- package/packages/pi-ai/dist/models/generated/amazon-bedrock.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts +377 -0
- package/packages/pi-ai/dist/models/generated/anthropic.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js +379 -0
- package/packages/pi-ai/dist/models/generated/anthropic.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts +700 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.js +702 -0
- package/packages/pi-ai/dist/models/generated/azure-openai-responses.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/cerebras.d.ts +71 -0
- package/packages/pi-ai/dist/models/generated/cerebras.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/cerebras.js +73 -0
- package/packages/pi-ai/dist/models/generated/cerebras.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.d.ts +590 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.js +444 -0
- package/packages/pi-ai/dist/models/generated/github-copilot.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts +156 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js +158 -0
- package/packages/pi-ai/dist/models/generated/google-antigravity.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.js +107 -0
- package/packages/pi-ai/dist/models/generated/google-gemini-cli.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.d.ts +207 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.js +209 -0
- package/packages/pi-ai/dist/models/generated/google-vertex.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/google.d.ts +462 -0
- package/packages/pi-ai/dist/models/generated/google.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/google.js +464 -0
- package/packages/pi-ai/dist/models/generated/google.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/groq.d.ts +309 -0
- package/packages/pi-ai/dist/models/generated/groq.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/groq.js +311 -0
- package/packages/pi-ai/dist/models/generated/groq.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/huggingface.d.ts +383 -0
- package/packages/pi-ai/dist/models/generated/huggingface.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/huggingface.js +347 -0
- package/packages/pi-ai/dist/models/generated/huggingface.js.map +1 -0
- package/packages/pi-ai/dist/{models.generated.d.ts → models/generated/index.d.ts} +1 -1
- package/packages/pi-ai/dist/{models.generated.d.ts.map → models/generated/index.d.ts.map} +1 -1
- package/packages/pi-ai/dist/models/generated/index.js +51 -0
- package/packages/pi-ai/dist/models/generated/index.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts +37 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.js +39 -0
- package/packages/pi-ai/dist/models/generated/kimi-coding.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.js +107 -0
- package/packages/pi-ai/dist/models/generated/minimax-cn.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax.d.ts +105 -0
- package/packages/pi-ai/dist/models/generated/minimax.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/minimax.js +107 -0
- package/packages/pi-ai/dist/models/generated/minimax.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/mistral.d.ts +445 -0
- package/packages/pi-ai/dist/models/generated/mistral.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/mistral.js +447 -0
- package/packages/pi-ai/dist/models/generated/mistral.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts +139 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js +141 -0
- package/packages/pi-ai/dist/models/generated/openai-codex.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts +700 -0
- package/packages/pi-ai/dist/models/generated/openai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openai.js +702 -0
- package/packages/pi-ai/dist/models/generated/openai.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.d.ts +122 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.js +124 -0
- package/packages/pi-ai/dist/models/generated/opencode-go.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode.d.ts +530 -0
- package/packages/pi-ai/dist/models/generated/opencode.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/opencode.js +532 -0
- package/packages/pi-ai/dist/models/generated/opencode.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts +4270 -0
- package/packages/pi-ai/dist/models/generated/openrouter.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js +4272 -0
- package/packages/pi-ai/dist/models/generated/openrouter.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts +2604 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js +2606 -0
- package/packages/pi-ai/dist/models/generated/vercel-ai-gateway.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/xai.d.ts +411 -0
- package/packages/pi-ai/dist/models/generated/xai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/xai.js +413 -0
- package/packages/pi-ai/dist/models/generated/xai.js.map +1 -0
- package/packages/pi-ai/dist/models/generated/zai.d.ts +276 -0
- package/packages/pi-ai/dist/models/generated/zai.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/generated/zai.js +239 -0
- package/packages/pi-ai/dist/models/generated/zai.js.map +1 -0
- package/packages/pi-ai/dist/models/index.d.ts +27 -0
- package/packages/pi-ai/dist/models/index.d.ts.map +1 -0
- package/packages/pi-ai/dist/models/index.js +80 -0
- package/packages/pi-ai/dist/models/index.js.map +1 -0
- package/packages/pi-ai/dist/models.d.ts +1 -36
- package/packages/pi-ai/dist/models.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.test.js +1 -2
- package/packages/pi-ai/dist/models.generated.test.js.map +1 -1
- package/packages/pi-ai/dist/models.js +3 -112
- package/packages/pi-ai/dist/models.js.map +1 -1
- package/packages/pi-ai/dist/models.test.js +6 -5
- package/packages/pi-ai/dist/models.test.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/scripts/generate-models.ts +74 -40
- package/packages/pi-ai/src/index.ts +1 -9
- package/packages/pi-ai/src/models/capability-patches.ts +40 -0
- package/packages/pi-ai/src/{models.custom.ts → models/custom.ts} +4 -4
- package/packages/pi-ai/src/models/generated/amazon-bedrock.ts +1486 -0
- package/packages/pi-ai/src/models/generated/anthropic.ts +381 -0
- package/packages/pi-ai/src/models/generated/azure-openai-responses.ts +704 -0
- package/packages/pi-ai/src/models/generated/cerebras.ts +75 -0
- package/packages/pi-ai/src/models/generated/github-copilot.ts +446 -0
- package/packages/pi-ai/src/models/generated/google-antigravity.ts +160 -0
- package/packages/pi-ai/src/models/generated/google-gemini-cli.ts +109 -0
- package/packages/pi-ai/src/models/generated/google-vertex.ts +211 -0
- package/packages/pi-ai/src/models/generated/google.ts +466 -0
- package/packages/pi-ai/src/models/generated/groq.ts +313 -0
- package/packages/pi-ai/src/models/generated/huggingface.ts +349 -0
- package/packages/pi-ai/src/models/generated/index.ts +52 -0
- package/packages/pi-ai/src/models/generated/kimi-coding.ts +41 -0
- package/packages/pi-ai/src/models/generated/minimax-cn.ts +109 -0
- package/packages/pi-ai/src/models/generated/minimax.ts +109 -0
- package/packages/pi-ai/src/models/generated/mistral.ts +449 -0
- package/packages/pi-ai/src/models/generated/openai-codex.ts +143 -0
- package/packages/pi-ai/src/models/generated/openai.ts +704 -0
- package/packages/pi-ai/src/models/generated/opencode-go.ts +126 -0
- package/packages/pi-ai/src/models/generated/opencode.ts +534 -0
- package/packages/pi-ai/src/models/generated/openrouter.ts +4274 -0
- package/packages/pi-ai/src/models/generated/vercel-ai-gateway.ts +2608 -0
- package/packages/pi-ai/src/models/generated/xai.ts +415 -0
- package/packages/pi-ai/src/models/generated/zai.ts +241 -0
- package/packages/pi-ai/src/models/index.ts +106 -0
- package/packages/pi-ai/src/models.generated.test.ts +1 -2
- package/packages/pi-ai/src/models.test.ts +6 -5
- package/packages/pi-ai/src/models.ts +3 -153
- package/packages/pi-ai/tsconfig.json +1 -0
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +8 -2
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +472 -0
- package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js +52 -0
- package/packages/pi-coding-agent/dist/core/model-registry-env-fallback.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +2 -2
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js +61 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js +23 -9
- package/packages/pi-coding-agent/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts +11 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +53 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts +8 -5
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js +27 -13
- package/packages/pi-coding-agent/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +8 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +68 -8
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js +22 -22
- package/packages/pi-coding-agent/dist/modes/interactive/components/user-message.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +232 -18
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +38 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +14 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +70 -6
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +12 -6
- package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +612 -0
- package/packages/pi-coding-agent/src/core/model-registry-env-fallback.test.ts +59 -0
- package/packages/pi-coding-agent/src/core/model-registry.ts +2 -1
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/chat-frame-compaction-tone.test.ts +92 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +19 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/assistant-message.ts +25 -10
- package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +75 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/compaction-summary-message.ts +36 -15
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +83 -7
- package/packages/pi-coding-agent/src/modes/interactive/components/user-message.ts +23 -26
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +298 -41
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +44 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +92 -6
- package/packages/pi-coding-agent/src/types/ambient-modules.d.ts +69 -0
- package/packages/pi-coding-agent/tsconfig.json +3 -2
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -0
- package/packages/pi-tui/dist/tui.d.ts.map +1 -1
- package/packages/pi-tui/dist/tui.js +9 -2
- package/packages/pi-tui/dist/tui.js.map +1 -1
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/tui.ts +9 -1
- package/packages/pi-tui/tsconfig.json +1 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -0
- package/packages/rpc-client/package.json +1 -1
- package/packages/rpc-client/tsconfig.json +1 -0
- package/packages/rpc-client/tsconfig.tsbuildinfo +1 -0
- package/pkg/package.json +1 -1
- package/src/resources/extensions/gsd/activity-log.ts +21 -0
- package/src/resources/extensions/gsd/auto/detect-stuck.ts +12 -4
- package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -0
- package/src/resources/extensions/gsd/auto/loop.ts +159 -10
- package/src/resources/extensions/gsd/auto/phases.ts +261 -10
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +16 -6
- package/src/resources/extensions/gsd/auto-model-selection.ts +69 -8
- package/src/resources/extensions/gsd/auto-post-unit.ts +238 -18
- package/src/resources/extensions/gsd/auto-prompts.ts +13 -0
- package/src/resources/extensions/gsd/auto-recovery.ts +29 -9
- package/src/resources/extensions/gsd/auto-unit-closeout.ts +25 -1
- package/src/resources/extensions/gsd/auto-verification.ts +129 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +1 -0
- package/src/resources/extensions/gsd/auto.ts +41 -2
- package/src/resources/extensions/gsd/bootstrap/provider-error-resume.ts +5 -3
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +38 -8
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +72 -8
- package/src/resources/extensions/gsd/cache.ts +16 -5
- package/src/resources/extensions/gsd/commands/catalog.ts +31 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +5 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +25 -0
- package/src/resources/extensions/gsd/commands/handlers/workflow.ts +74 -9
- package/src/resources/extensions/gsd/commands-add-tests.ts +137 -0
- package/src/resources/extensions/gsd/commands-backlog.ts +182 -0
- package/src/resources/extensions/gsd/commands-do.ts +109 -0
- package/src/resources/extensions/gsd/commands-extract-learnings.ts +304 -0
- package/src/resources/extensions/gsd/commands-maintenance.ts +6 -6
- package/src/resources/extensions/gsd/commands-pr-branch.ts +234 -0
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +58 -4
- package/src/resources/extensions/gsd/commands-session-report.ts +101 -0
- package/src/resources/extensions/gsd/commands-ship.ts +219 -0
- package/src/resources/extensions/gsd/db-writer.ts +3 -5
- package/src/resources/extensions/gsd/docs/preferences-reference.md +16 -1
- package/src/resources/extensions/gsd/ecosystem/gsd-extension-api.ts +228 -0
- package/src/resources/extensions/gsd/ecosystem/loader.ts +201 -0
- package/src/resources/extensions/gsd/git-service.ts +68 -0
- package/src/resources/extensions/gsd/graph-context.ts +212 -0
- package/src/resources/extensions/gsd/gsd-db.ts +788 -3
- package/src/resources/extensions/gsd/guided-flow.ts +36 -2
- package/src/resources/extensions/gsd/index.ts +18 -2
- package/src/resources/extensions/gsd/init-wizard.ts +3 -2
- package/src/resources/extensions/gsd/journal.ts +30 -0
- package/src/resources/extensions/gsd/md-importer.ts +3 -5
- package/src/resources/extensions/gsd/memory-store.ts +31 -62
- package/src/resources/extensions/gsd/metrics.ts +26 -0
- package/src/resources/extensions/gsd/milestone-validation-gates.ts +13 -14
- package/src/resources/extensions/gsd/native-git-bridge.ts +11 -12
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +40 -1
- package/src/resources/extensions/gsd/preferences-models.ts +20 -3
- package/src/resources/extensions/gsd/preferences-types.ts +38 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +117 -2
- package/src/resources/extensions/gsd/preferences.ts +34 -0
- package/src/resources/extensions/gsd/prompts/add-tests.md +35 -0
- package/src/resources/extensions/gsd/safety/evidence-collector.ts +15 -31
- package/src/resources/extensions/gsd/session-lock.ts +14 -2
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +20 -1
- package/src/resources/extensions/gsd/state.ts +9 -2
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +19 -0
- package/src/resources/extensions/gsd/tests/artifacts-table-preserved-on-cache-invalidate.test.ts +177 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +7 -3
- package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +272 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +6 -2
- package/src/resources/extensions/gsd/tests/commands-backlog.test.ts +158 -0
- package/src/resources/extensions/gsd/tests/commands-do.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/commands-extract-learnings.test.ts +340 -0
- package/src/resources/extensions/gsd/tests/commands-pr-branch.test.ts +68 -0
- package/src/resources/extensions/gsd/tests/commands-session-report.test.ts +82 -0
- package/src/resources/extensions/gsd/tests/commands-ship.test.ts +71 -0
- package/src/resources/extensions/gsd/tests/commands-workflow-custom.test.ts +14 -0
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/complete-task.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/extension-bootstrap-isolation.test.ts +154 -0
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +10 -7
- package/src/resources/extensions/gsd/tests/graph-context.test.ts +337 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +71 -4
- package/src/resources/extensions/gsd/tests/md-importer.test.ts +1 -2
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +2 -3
- package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
- package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +40 -1
- package/src/resources/extensions/gsd/tests/preferences.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +57 -2
- package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +180 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +8 -5
- package/src/resources/extensions/gsd/tests/uok-audit-unified.test.ts +101 -0
- package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/uok-execution-graph.test.ts +69 -0
- package/src/resources/extensions/gsd/tests/uok-flags.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/uok-gitops-wiring.test.ts +35 -0
- package/src/resources/extensions/gsd/tests/uok-model-policy.test.ts +89 -0
- package/src/resources/extensions/gsd/tests/uok-plan-v2-wiring.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/uok-preferences.test.ts +42 -0
- package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/workflow-logger-wiring.test.ts +223 -0
- package/src/resources/extensions/gsd/tools/complete-slice.ts +26 -0
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +48 -3
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +3 -11
- package/src/resources/extensions/gsd/triage-resolution.ts +2 -7
- package/src/resources/extensions/gsd/types.ts +14 -1
- package/src/resources/extensions/gsd/unit-ownership.ts +2 -2
- package/src/resources/extensions/gsd/uok/audit-toggle.ts +9 -0
- package/src/resources/extensions/gsd/uok/audit.ts +51 -0
- package/src/resources/extensions/gsd/uok/contracts.ts +135 -0
- package/src/resources/extensions/gsd/uok/execution-graph.ts +241 -0
- package/src/resources/extensions/gsd/uok/flags.ts +45 -0
- package/src/resources/extensions/gsd/uok/gate-runner.ts +146 -0
- package/src/resources/extensions/gsd/uok/gitops.ts +75 -0
- package/src/resources/extensions/gsd/uok/kernel.ts +105 -0
- package/src/resources/extensions/gsd/uok/loop-adapter.ts +162 -0
- package/src/resources/extensions/gsd/uok/model-policy.ts +112 -0
- package/src/resources/extensions/gsd/uok/plan-v2.ts +156 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +27 -1
- package/src/resources/extensions/gsd/workflow-manifest.ts +9 -104
- package/src/resources/extensions/gsd/workflow-migration.ts +21 -29
- package/src/resources/extensions/gsd/workflow-projections.ts +8 -1
- package/src/resources/extensions/gsd/workflow-reconcile.ts +15 -15
- package/src/resources/extensions/ttsr/ttsr-manager.ts +10 -5
- package/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/packages/pi-ai/dist/models.custom.d.ts.map +0 -1
- package/packages/pi-ai/dist/models.custom.js.map +0 -1
- package/packages/pi-ai/dist/models.generated.js +0 -14343
- package/packages/pi-ai/dist/models.generated.js.map +0 -1
- package/packages/pi-ai/src/models.generated.ts +0 -14345
- /package/dist/web/standalone/.next/static/{JpjdI2QtmIkQr4xz6gbhM → j7IBD35UgrL2b298GLK3V}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{JpjdI2QtmIkQr4xz6gbhM → j7IBD35UgrL2b298GLK3V}/_ssgManifest.js +0 -0
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import type { ExtensionAPI, ExtensionContext, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
10
|
+
import type { GSDState } from "./types.js";
|
|
10
11
|
import { showNextAction } from "../shared/tui.js";
|
|
11
12
|
import { loadFile, saveFile } from "./files.js";
|
|
12
13
|
import { isDbAvailable, getMilestoneSlices } from "./gsd-db.js";
|
|
@@ -36,6 +37,8 @@ import { nativeIsRepo, nativeInit } from "./native-git-bridge.js";
|
|
|
36
37
|
import { isInheritedRepo } from "./repo-identity.js";
|
|
37
38
|
import { ensureGitignore, ensurePreferences, untrackRuntimeFiles } from "./gitignore.js";
|
|
38
39
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
40
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
41
|
+
import { ensurePlanV2Graph } from "./uok/plan-v2.js";
|
|
39
42
|
import { detectProjectState } from "./detection.js";
|
|
40
43
|
import { showProjectInit, offerMigration } from "./init-wizard.js";
|
|
41
44
|
import { validateDirectory } from "./validate-directory.js";
|
|
@@ -83,6 +86,33 @@ function nextMilestoneIdReserved(existingIds: string[], uniqueEnabled: boolean):
|
|
|
83
86
|
return id;
|
|
84
87
|
}
|
|
85
88
|
|
|
89
|
+
function needsPlanV2Gate(state: GSDState): boolean {
|
|
90
|
+
return state.phase === "executing"
|
|
91
|
+
|| state.phase === "summarizing"
|
|
92
|
+
|| state.phase === "validating-milestone"
|
|
93
|
+
|| state.phase === "completing-milestone";
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function runPlanV2Gate(
|
|
97
|
+
ctx: ExtensionContext,
|
|
98
|
+
basePath: string,
|
|
99
|
+
state: GSDState,
|
|
100
|
+
): boolean {
|
|
101
|
+
const prefs = loadEffectiveGSDPreferences()?.preferences;
|
|
102
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
103
|
+
if (!uokFlags.planV2 || !needsPlanV2Gate(state)) return true;
|
|
104
|
+
const compiled = ensurePlanV2Graph(basePath, state);
|
|
105
|
+
if (!compiled.ok) {
|
|
106
|
+
const reason = compiled.reason ?? "plan-v2 compilation failed";
|
|
107
|
+
ctx.ui.notify(
|
|
108
|
+
`Plan gate failed-closed: ${reason}. Complete plan/discuss artifacts before execution.`,
|
|
109
|
+
"error",
|
|
110
|
+
);
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
|
|
86
116
|
// ─── Commit Instruction Helpers ──────────────────────────────────────────────
|
|
87
117
|
|
|
88
118
|
/** Build commit instruction for planning prompts. .gsd/ is managed externally and always gitignored. */
|
|
@@ -239,10 +269,12 @@ export function checkAutoStartAfterDiscuss(): boolean {
|
|
|
239
269
|
} catch (e) { logWarning("guided", `CONTEXT-DRAFT.md unlink failed: ${(e as Error).message}`); }
|
|
240
270
|
|
|
241
271
|
// Cleanup: remove discussion manifest after auto-start (only needed during discussion)
|
|
242
|
-
|
|
272
|
+
if (existsSync(manifestPath)) {
|
|
273
|
+
try { unlinkSync(manifestPath); } catch (e) { logWarning("guided", `manifest unlink failed: ${(e as Error).message}`); }
|
|
274
|
+
}
|
|
243
275
|
|
|
244
276
|
pendingAutoStartMap.delete(basePath);
|
|
245
|
-
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "
|
|
277
|
+
ctx.ui.notify(`Milestone ${milestoneId} ready.`, "success");
|
|
246
278
|
startAutoDetached(ctx, pi, basePath, false, { step });
|
|
247
279
|
return true;
|
|
248
280
|
}
|
|
@@ -1320,6 +1352,8 @@ export async function showSmartEntry(
|
|
|
1320
1352
|
logWarning("guided", `STATE.md rebuild failed: ${(err as Error).message}`);
|
|
1321
1353
|
}
|
|
1322
1354
|
|
|
1355
|
+
if (!runPlanV2Gate(ctx, basePath, state)) return;
|
|
1356
|
+
|
|
1323
1357
|
if (!state.activeMilestone?.id) {
|
|
1324
1358
|
// Guard: if a discuss session is already in flight, don't re-inject the prompt.
|
|
1325
1359
|
// Both /gsd and /gsd auto reach this branch when no milestone exists yet.
|
|
@@ -16,6 +16,22 @@ export {
|
|
|
16
16
|
} from "./bootstrap/write-gate.js";
|
|
17
17
|
|
|
18
18
|
export default async function registerExtension(pi: ExtensionAPI) {
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
// Always register the core /gsd command first, in isolation.
|
|
20
|
+
// This ensures /gsd is available even if the full bootstrap (shortcuts,
|
|
21
|
+
// tools, hooks) fails — e.g. due to a Windows-specific import error.
|
|
22
|
+
const { registerGSDCommand } = await import("./commands/index.js");
|
|
23
|
+
registerGSDCommand(pi);
|
|
24
|
+
|
|
25
|
+
// Full setup (shortcuts, tools, hooks) in a separate try/catch so that
|
|
26
|
+
// any platform-specific load failure doesn't take out the core command.
|
|
27
|
+
try {
|
|
28
|
+
const { registerGsdExtension } = await import("./bootstrap/register-extension.js");
|
|
29
|
+
registerGsdExtension(pi);
|
|
30
|
+
} catch (err) {
|
|
31
|
+
const { logWarning } = await import("./workflow-logger.js");
|
|
32
|
+
logWarning(
|
|
33
|
+
"bootstrap",
|
|
34
|
+
`Extension setup partially failed — /gsd commands are available but shortcuts/tools may be missing: ${err instanceof Error ? err.message : String(err)}`,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
21
37
|
}
|
|
@@ -33,7 +33,7 @@ interface ProjectPreferences {
|
|
|
33
33
|
mainBranch: string;
|
|
34
34
|
verificationCommands: string[];
|
|
35
35
|
customInstructions: string[];
|
|
36
|
-
tokenProfile: "budget" | "balanced" | "quality";
|
|
36
|
+
tokenProfile: "budget" | "balanced" | "quality" | "burn-max";
|
|
37
37
|
skipResearch: boolean;
|
|
38
38
|
autoPush: boolean;
|
|
39
39
|
}
|
|
@@ -413,10 +413,11 @@ async function customizeAdvancedPrefs(
|
|
|
413
413
|
{ id: "balanced", label: "Balanced", description: "Good trade-off (default)", recommended: true },
|
|
414
414
|
{ id: "budget", label: "Budget", description: "Minimize token usage" },
|
|
415
415
|
{ id: "quality", label: "Quality", description: "Maximize thoroughness" },
|
|
416
|
+
{ id: "burn-max", label: "Burn Max", description: "Maximum depth, no phase skips" },
|
|
416
417
|
],
|
|
417
418
|
});
|
|
418
419
|
if (profileChoice !== "not_yet") {
|
|
419
|
-
prefs.tokenProfile = profileChoice as "budget" | "balanced" | "quality";
|
|
420
|
+
prefs.tokenProfile = profileChoice as "budget" | "balanced" | "quality" | "burn-max";
|
|
420
421
|
}
|
|
421
422
|
|
|
422
423
|
// Skip research
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
import { appendFileSync, mkdirSync, readdirSync, readFileSync } from "node:fs";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
import { gsdRoot } from "./paths.js";
|
|
18
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
19
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
18
20
|
|
|
19
21
|
// ─── Types ────────────────────────────────────────────────────────────────────
|
|
20
22
|
|
|
@@ -90,6 +92,34 @@ export function emitJournalEvent(basePath: string, entry: JournalEntry): void {
|
|
|
90
92
|
} catch {
|
|
91
93
|
// Silent failure — journal must never break auto-mode
|
|
92
94
|
}
|
|
95
|
+
|
|
96
|
+
if (!isUnifiedAuditEnabled()) return;
|
|
97
|
+
try {
|
|
98
|
+
const causedBy = entry.causedBy
|
|
99
|
+
? `${entry.causedBy.flowId}:${entry.causedBy.seq}`
|
|
100
|
+
: undefined;
|
|
101
|
+
const turnId =
|
|
102
|
+
typeof entry.data?.turnId === "string"
|
|
103
|
+
? entry.data.turnId
|
|
104
|
+
: undefined;
|
|
105
|
+
emitUokAuditEvent(
|
|
106
|
+
basePath,
|
|
107
|
+
buildAuditEnvelope({
|
|
108
|
+
traceId: entry.flowId,
|
|
109
|
+
turnId,
|
|
110
|
+
causedBy,
|
|
111
|
+
category: "orchestration",
|
|
112
|
+
type: `journal-${entry.eventType}`,
|
|
113
|
+
payload: {
|
|
114
|
+
seq: entry.seq,
|
|
115
|
+
rule: entry.rule,
|
|
116
|
+
data: entry.data ?? {},
|
|
117
|
+
},
|
|
118
|
+
}),
|
|
119
|
+
);
|
|
120
|
+
} catch {
|
|
121
|
+
// Best-effort: audit projection must never block journal writes.
|
|
122
|
+
}
|
|
93
123
|
}
|
|
94
124
|
|
|
95
125
|
// ─── Query ────────────────────────────────────────────────────────────────────
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
insertTask,
|
|
17
17
|
openDatabase,
|
|
18
18
|
transaction,
|
|
19
|
+
updateSliceStatus,
|
|
19
20
|
_getAdapter,
|
|
20
21
|
} from './gsd-db.js';
|
|
21
22
|
import {
|
|
@@ -672,11 +673,8 @@ export function migrateHierarchyToDb(basePath: string): {
|
|
|
672
673
|
return t.done && existsSync(summaryFile);
|
|
673
674
|
});
|
|
674
675
|
if (allTasksDone && hasSliceSummary) {
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
adapter.prepare(
|
|
678
|
-
`UPDATE slices SET status = 'complete' WHERE id = :sid AND milestone_id = :mid`,
|
|
679
|
-
).run({ ':sid': sliceEntry.id, ':mid': milestoneId });
|
|
676
|
+
if (_getAdapter()) {
|
|
677
|
+
updateSliceStatus(milestoneId, sliceEntry.id, 'complete');
|
|
680
678
|
process.stderr.write(
|
|
681
679
|
`gsd-migrate: ${milestoneId}/${sliceEntry.id} all tasks + slice summary complete — upgrading slice to complete\n`,
|
|
682
680
|
);
|
|
@@ -3,7 +3,19 @@
|
|
|
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
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
isDbAvailable,
|
|
8
|
+
_getAdapter,
|
|
9
|
+
transaction,
|
|
10
|
+
insertMemoryRow,
|
|
11
|
+
rewriteMemoryId,
|
|
12
|
+
updateMemoryContentRow,
|
|
13
|
+
incrementMemoryHitCount,
|
|
14
|
+
supersedeMemoryRow,
|
|
15
|
+
markMemoryUnitProcessed,
|
|
16
|
+
decayMemoriesBefore,
|
|
17
|
+
supersedeLowestRankedMemories,
|
|
18
|
+
} from './gsd-db.js';
|
|
7
19
|
|
|
8
20
|
// ─── Types ──────────────────────────────────────────────────────────────────
|
|
9
21
|
|
|
@@ -170,28 +182,22 @@ export function createMemory(fields: {
|
|
|
170
182
|
const now = new Date().toISOString();
|
|
171
183
|
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
172
184
|
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
':source_unit_id': fields.source_unit_id ?? null,
|
|
183
|
-
':created_at': now,
|
|
184
|
-
':updated_at': now,
|
|
185
|
+
insertMemoryRow({
|
|
186
|
+
id: placeholder,
|
|
187
|
+
category: fields.category,
|
|
188
|
+
content: fields.content,
|
|
189
|
+
confidence: fields.confidence ?? 0.8,
|
|
190
|
+
sourceUnitType: fields.source_unit_type ?? null,
|
|
191
|
+
sourceUnitId: fields.source_unit_id ?? null,
|
|
192
|
+
createdAt: now,
|
|
193
|
+
updatedAt: now,
|
|
185
194
|
});
|
|
186
|
-
// Derive the real ID from the assigned seq
|
|
195
|
+
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
187
196
|
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
188
197
|
if (!row) return placeholder; // fallback — should not happen
|
|
189
198
|
const seq = row['seq'] as number;
|
|
190
199
|
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
191
|
-
|
|
192
|
-
':real_id': realId,
|
|
193
|
-
':placeholder': placeholder,
|
|
194
|
-
});
|
|
200
|
+
rewriteMemoryId(placeholder, realId);
|
|
195
201
|
return realId;
|
|
196
202
|
} catch {
|
|
197
203
|
return null;
|
|
@@ -203,20 +209,9 @@ export function createMemory(fields: {
|
|
|
203
209
|
*/
|
|
204
210
|
export function updateMemoryContent(id: string, content: string, confidence?: number): boolean {
|
|
205
211
|
if (!isDbAvailable()) return false;
|
|
206
|
-
const adapter = _getAdapter();
|
|
207
|
-
if (!adapter) return false;
|
|
208
212
|
|
|
209
213
|
try {
|
|
210
|
-
|
|
211
|
-
if (confidence != null) {
|
|
212
|
-
adapter.prepare(
|
|
213
|
-
'UPDATE memories SET content = :content, confidence = :confidence, updated_at = :updated_at WHERE id = :id',
|
|
214
|
-
).run({ ':content': content, ':confidence': confidence, ':updated_at': now, ':id': id });
|
|
215
|
-
} else {
|
|
216
|
-
adapter.prepare(
|
|
217
|
-
'UPDATE memories SET content = :content, updated_at = :updated_at WHERE id = :id',
|
|
218
|
-
).run({ ':content': content, ':updated_at': now, ':id': id });
|
|
219
|
-
}
|
|
214
|
+
updateMemoryContentRow(id, content, confidence, new Date().toISOString());
|
|
220
215
|
return true;
|
|
221
216
|
} catch {
|
|
222
217
|
return false;
|
|
@@ -228,13 +223,9 @@ export function updateMemoryContent(id: string, content: string, confidence?: nu
|
|
|
228
223
|
*/
|
|
229
224
|
export function reinforceMemory(id: string): boolean {
|
|
230
225
|
if (!isDbAvailable()) return false;
|
|
231
|
-
const adapter = _getAdapter();
|
|
232
|
-
if (!adapter) return false;
|
|
233
226
|
|
|
234
227
|
try {
|
|
235
|
-
|
|
236
|
-
'UPDATE memories SET hit_count = hit_count + 1, updated_at = :updated_at WHERE id = :id',
|
|
237
|
-
).run({ ':updated_at': new Date().toISOString(), ':id': id });
|
|
228
|
+
incrementMemoryHitCount(id, new Date().toISOString());
|
|
238
229
|
return true;
|
|
239
230
|
} catch {
|
|
240
231
|
return false;
|
|
@@ -246,13 +237,9 @@ export function reinforceMemory(id: string): boolean {
|
|
|
246
237
|
*/
|
|
247
238
|
export function supersedeMemory(oldId: string, newId: string): boolean {
|
|
248
239
|
if (!isDbAvailable()) return false;
|
|
249
|
-
const adapter = _getAdapter();
|
|
250
|
-
if (!adapter) return false;
|
|
251
240
|
|
|
252
241
|
try {
|
|
253
|
-
|
|
254
|
-
'UPDATE memories SET superseded_by = :new_id, updated_at = :updated_at WHERE id = :old_id',
|
|
255
|
-
).run({ ':new_id': newId, ':updated_at': new Date().toISOString(), ':old_id': oldId });
|
|
242
|
+
supersedeMemoryRow(oldId, newId, new Date().toISOString());
|
|
256
243
|
return true;
|
|
257
244
|
} catch {
|
|
258
245
|
return false;
|
|
@@ -284,14 +271,9 @@ export function isUnitProcessed(unitKey: string): boolean {
|
|
|
284
271
|
*/
|
|
285
272
|
export function markUnitProcessed(unitKey: string, activityFile: string): boolean {
|
|
286
273
|
if (!isDbAvailable()) return false;
|
|
287
|
-
const adapter = _getAdapter();
|
|
288
|
-
if (!adapter) return false;
|
|
289
274
|
|
|
290
275
|
try {
|
|
291
|
-
|
|
292
|
-
`INSERT OR IGNORE INTO memory_processed_units (unit_key, activity_file, processed_at)
|
|
293
|
-
VALUES (:key, :file, :at)`,
|
|
294
|
-
).run({ ':key': unitKey, ':file': activityFile, ':at': new Date().toISOString() });
|
|
276
|
+
markMemoryUnitProcessed(unitKey, activityFile, new Date().toISOString());
|
|
295
277
|
return true;
|
|
296
278
|
} catch {
|
|
297
279
|
return false;
|
|
@@ -310,7 +292,7 @@ export function decayStaleMemories(thresholdUnits = 20): void {
|
|
|
310
292
|
if (!adapter) return;
|
|
311
293
|
|
|
312
294
|
try {
|
|
313
|
-
// Find the timestamp of the Nth most recent processed unit
|
|
295
|
+
// Find the timestamp of the Nth most recent processed unit (read-only SELECT)
|
|
314
296
|
const row = adapter.prepare(
|
|
315
297
|
`SELECT processed_at FROM memory_processed_units
|
|
316
298
|
ORDER BY processed_at DESC
|
|
@@ -320,11 +302,7 @@ export function decayStaleMemories(thresholdUnits = 20): void {
|
|
|
320
302
|
if (!row) return; // not enough processed units yet
|
|
321
303
|
|
|
322
304
|
const cutoff = row['processed_at'] as string;
|
|
323
|
-
|
|
324
|
-
`UPDATE memories
|
|
325
|
-
SET confidence = MAX(0.1, confidence - 0.1), updated_at = :now
|
|
326
|
-
WHERE superseded_by IS NULL AND updated_at < :cutoff AND confidence > 0.1`,
|
|
327
|
-
).run({ ':now': new Date().toISOString(), ':cutoff': cutoff });
|
|
305
|
+
decayMemoriesBefore(cutoff, new Date().toISOString());
|
|
328
306
|
} catch {
|
|
329
307
|
// non-fatal
|
|
330
308
|
}
|
|
@@ -346,16 +324,7 @@ export function enforceMemoryCap(max = 50): void {
|
|
|
346
324
|
if (count <= max) return;
|
|
347
325
|
|
|
348
326
|
const excess = count - max;
|
|
349
|
-
|
|
350
|
-
adapter.prepare(
|
|
351
|
-
`UPDATE memories SET superseded_by = 'CAP_EXCEEDED', updated_at = :now
|
|
352
|
-
WHERE id IN (
|
|
353
|
-
SELECT id FROM memories
|
|
354
|
-
WHERE superseded_by IS NULL
|
|
355
|
-
ORDER BY (confidence * (1.0 + hit_count * 0.1)) ASC
|
|
356
|
-
LIMIT :limit
|
|
357
|
-
)`,
|
|
358
|
-
).run({ ':now': new Date().toISOString(), ':limit': excess });
|
|
327
|
+
supersedeLowestRankedMemories(excess, new Date().toISOString());
|
|
359
328
|
} catch {
|
|
360
329
|
// non-fatal
|
|
361
330
|
}
|
|
@@ -19,6 +19,8 @@ import { gsdRoot } from "./paths.js";
|
|
|
19
19
|
import { getAndClearSkills } from "./skill-telemetry.js";
|
|
20
20
|
import { loadJsonFile, loadJsonFileOrNull, saveJsonFile } from "./json-persistence.js";
|
|
21
21
|
import { parseUnitId } from "./unit-id.js";
|
|
22
|
+
import { buildAuditEnvelope, emitUokAuditEvent } from "./uok/audit.js";
|
|
23
|
+
import { isUnifiedAuditEnabled } from "./uok/audit-toggle.js";
|
|
22
24
|
|
|
23
25
|
// Re-export from shared — import directly from format-utils to avoid pulling
|
|
24
26
|
// in the full barrel (mod.js → ui.js → @gsd/pi-tui) which breaks when loaded
|
|
@@ -143,6 +145,9 @@ export function snapshotUnitMetrics(
|
|
|
143
145
|
promptCharCount?: number;
|
|
144
146
|
baselineCharCount?: number;
|
|
145
147
|
autoSessionKey?: string;
|
|
148
|
+
traceId?: string;
|
|
149
|
+
turnId?: string;
|
|
150
|
+
causedBy?: string;
|
|
146
151
|
},
|
|
147
152
|
): UnitMetrics | null {
|
|
148
153
|
if (!ledger) return null;
|
|
@@ -235,6 +240,27 @@ export function snapshotUnitMetrics(
|
|
|
235
240
|
}
|
|
236
241
|
saveLedger(basePath, ledger);
|
|
237
242
|
|
|
243
|
+
if (isUnifiedAuditEnabled()) {
|
|
244
|
+
emitUokAuditEvent(
|
|
245
|
+
basePath,
|
|
246
|
+
buildAuditEnvelope({
|
|
247
|
+
traceId: opts?.traceId ?? `metrics:${unitType}:${unitId}`,
|
|
248
|
+
turnId: opts?.turnId,
|
|
249
|
+
causedBy: opts?.causedBy,
|
|
250
|
+
category: "metrics",
|
|
251
|
+
type: "unit-metrics-snapshot",
|
|
252
|
+
payload: {
|
|
253
|
+
unitType,
|
|
254
|
+
unitId,
|
|
255
|
+
model,
|
|
256
|
+
tokens: unit.tokens,
|
|
257
|
+
cost: unit.cost,
|
|
258
|
+
toolCalls: unit.toolCalls,
|
|
259
|
+
},
|
|
260
|
+
}),
|
|
261
|
+
);
|
|
262
|
+
}
|
|
263
|
+
|
|
238
264
|
return unit;
|
|
239
265
|
}
|
|
240
266
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* dispatch rules, and state derivation. See gate-registry.ts.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
|
-
import {
|
|
14
|
+
import { isDbAvailable, upsertQualityGate } from "./gsd-db.js";
|
|
15
15
|
import { getGatesForTurn } from "./gate-registry.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
@@ -31,24 +31,23 @@ export function insertMilestoneValidationGates(
|
|
|
31
31
|
verdict: string,
|
|
32
32
|
evaluatedAt: string,
|
|
33
33
|
): void {
|
|
34
|
-
|
|
35
|
-
if (!db) return;
|
|
34
|
+
if (!isDbAvailable()) return;
|
|
36
35
|
|
|
37
36
|
const gateVerdict = verdict === "pass" ? "pass" : "flag";
|
|
38
37
|
const milestoneGates = getGatesForTurn("validate-milestone");
|
|
39
38
|
|
|
40
39
|
for (const def of milestoneGates) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
40
|
+
upsertQualityGate({
|
|
41
|
+
milestoneId,
|
|
42
|
+
sliceId,
|
|
43
|
+
gateId: def.id,
|
|
44
|
+
scope: "milestone",
|
|
45
|
+
taskId: "",
|
|
46
|
+
status: "complete",
|
|
47
|
+
verdict: gateVerdict,
|
|
48
|
+
rationale: `${def.promptSection} — milestone validation verdict: ${verdict}`,
|
|
49
|
+
findings: "",
|
|
50
|
+
evaluatedAt,
|
|
52
51
|
});
|
|
53
52
|
}
|
|
54
53
|
}
|
|
@@ -323,7 +323,7 @@ export function nativeIsRepo(basePath: string): boolean {
|
|
|
323
323
|
return native.gitIsRepo(basePath);
|
|
324
324
|
}
|
|
325
325
|
try {
|
|
326
|
-
|
|
326
|
+
execFileSync("git", ["rev-parse", "--git-dir"], { cwd: basePath, stdio: "pipe" });
|
|
327
327
|
return true;
|
|
328
328
|
} catch {
|
|
329
329
|
return false;
|
|
@@ -790,16 +790,15 @@ export function nativeCommit(
|
|
|
790
790
|
|
|
791
791
|
// Fallback: use git commit with stdin pipe for safe multi-line messages
|
|
792
792
|
try {
|
|
793
|
-
const
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
).trim();
|
|
793
|
+
const args = ["commit", "--no-verify", "-F", "-"];
|
|
794
|
+
if (options?.allowEmpty) args.push("--allow-empty");
|
|
795
|
+
const result = execFileSync("git", args, {
|
|
796
|
+
cwd: basePath,
|
|
797
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
798
|
+
encoding: "utf-8",
|
|
799
|
+
env: GIT_NO_PROMPT_ENV,
|
|
800
|
+
input: message,
|
|
801
|
+
}).trim();
|
|
803
802
|
return result;
|
|
804
803
|
} catch (err: unknown) {
|
|
805
804
|
const errObj = err as { stdout?: string; stderr?: string; message?: string };
|
|
@@ -940,7 +939,7 @@ export function nativeResetHard(basePath: string): void {
|
|
|
940
939
|
native.gitResetHard(basePath);
|
|
941
940
|
return;
|
|
942
941
|
}
|
|
943
|
-
|
|
942
|
+
execFileSync("git", ["reset", "--hard", "HEAD"], { cwd: basePath, stdio: "pipe" });
|
|
944
943
|
}
|
|
945
944
|
|
|
946
945
|
/**
|
|
@@ -42,6 +42,8 @@ import {
|
|
|
42
42
|
} from "./parallel-eligibility.js";
|
|
43
43
|
import { getErrorMessage } from "./error-utils.js";
|
|
44
44
|
import { logWarning } from "./workflow-logger.js";
|
|
45
|
+
import { resolveUokFlags } from "./uok/flags.js";
|
|
46
|
+
import { selectConflictFreeBatch } from "./uok/execution-graph.js";
|
|
45
47
|
|
|
46
48
|
// ─── Types ─────────────────────────────────────────────────────────────────
|
|
47
49
|
|
|
@@ -69,6 +71,10 @@ export interface OrchestratorState {
|
|
|
69
71
|
|
|
70
72
|
let state: OrchestratorState | null = null;
|
|
71
73
|
|
|
74
|
+
function overlapKey(a: string, b: string): string {
|
|
75
|
+
return a < b ? `${a}::${b}` : `${b}::${a}`;
|
|
76
|
+
}
|
|
77
|
+
|
|
72
78
|
// ─── Persistence ──────────────────────────────────────────────────────────
|
|
73
79
|
|
|
74
80
|
const ORCHESTRATOR_STATE_FILE = "orchestrator.json";
|
|
@@ -365,6 +371,7 @@ export async function startParallel(
|
|
|
365
371
|
}
|
|
366
372
|
|
|
367
373
|
const config = resolveParallelConfig(prefs);
|
|
374
|
+
const uokFlags = resolveUokFlags(prefs);
|
|
368
375
|
|
|
369
376
|
// Release any leftover state from a previous session before reassigning
|
|
370
377
|
if (state) {
|
|
@@ -418,8 +425,40 @@ export async function startParallel(
|
|
|
418
425
|
const started: string[] = [];
|
|
419
426
|
const errors: Array<{ mid: string; error: string }> = [];
|
|
420
427
|
|
|
428
|
+
let filteredMilestoneIds = milestoneIds;
|
|
429
|
+
if (uokFlags.executionGraph && milestoneIds.length > 1) {
|
|
430
|
+
try {
|
|
431
|
+
const requestedIds = new Set(milestoneIds);
|
|
432
|
+
const candidates = await analyzeParallelEligibility(basePath);
|
|
433
|
+
const overlapPairs = new Set<string>();
|
|
434
|
+
for (const overlap of candidates.fileOverlaps) {
|
|
435
|
+
if (!requestedIds.has(overlap.mid1) || !requestedIds.has(overlap.mid2)) continue;
|
|
436
|
+
overlapPairs.add(overlapKey(overlap.mid1, overlap.mid2));
|
|
437
|
+
}
|
|
438
|
+
filteredMilestoneIds = selectConflictFreeBatch({
|
|
439
|
+
orderedIds: milestoneIds,
|
|
440
|
+
maxParallel: milestoneIds.length,
|
|
441
|
+
hasConflict: (candidate, existing) =>
|
|
442
|
+
overlapPairs.has(overlapKey(candidate, existing)),
|
|
443
|
+
});
|
|
444
|
+
if (filteredMilestoneIds.length < milestoneIds.length) {
|
|
445
|
+
const skipped = milestoneIds.filter((mid) => !filteredMilestoneIds.includes(mid));
|
|
446
|
+
logWarning(
|
|
447
|
+
"parallel",
|
|
448
|
+
`uok execution graph filtered ${skipped.length} conflicting milestone(s): ${skipped.join(", ")}`,
|
|
449
|
+
);
|
|
450
|
+
}
|
|
451
|
+
} catch (e) {
|
|
452
|
+
logWarning(
|
|
453
|
+
"parallel",
|
|
454
|
+
`uok execution graph overlap analysis failed; using legacy milestone selection: ${(e as Error).message}`,
|
|
455
|
+
);
|
|
456
|
+
filteredMilestoneIds = milestoneIds;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
|
|
421
460
|
// Cap to max_workers
|
|
422
|
-
const toStart =
|
|
461
|
+
const toStart = filteredMilestoneIds.slice(0, config.max_workers);
|
|
423
462
|
|
|
424
463
|
for (const mid of toStart) {
|
|
425
464
|
// Check budget ceiling before each spawn
|
|
@@ -355,7 +355,7 @@ export function resolveAutoSupervisorConfig(): AutoSupervisorConfig {
|
|
|
355
355
|
|
|
356
356
|
// ─── Token Profile Resolution ─────────────────────────────────────────────
|
|
357
357
|
|
|
358
|
-
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality"]);
|
|
358
|
+
const VALID_TOKEN_PROFILES = new Set<TokenProfile>(["budget", "balanced", "quality", "burn-max"]);
|
|
359
359
|
|
|
360
360
|
/**
|
|
361
361
|
* Resolve profile defaults for a given token profile tier.
|
|
@@ -400,6 +400,22 @@ export function resolveProfileDefaults(profile: TokenProfile): Partial<GSDPrefer
|
|
|
400
400
|
skip_reassess: true,
|
|
401
401
|
},
|
|
402
402
|
};
|
|
403
|
+
case "burn-max":
|
|
404
|
+
return {
|
|
405
|
+
// Quality-first profile: keep user-selected models, disable downgrade routing.
|
|
406
|
+
// Policy constraints still apply at dispatch time.
|
|
407
|
+
dynamic_routing: {
|
|
408
|
+
enabled: false,
|
|
409
|
+
},
|
|
410
|
+
context_selection: "full",
|
|
411
|
+
phases: {
|
|
412
|
+
skip_research: false,
|
|
413
|
+
skip_slice_research: false,
|
|
414
|
+
skip_reassess: false,
|
|
415
|
+
skip_milestone_validation: false,
|
|
416
|
+
reassess_after_slice: true,
|
|
417
|
+
},
|
|
418
|
+
};
|
|
403
419
|
}
|
|
404
420
|
}
|
|
405
421
|
|
|
@@ -416,7 +432,7 @@ export function resolveEffectiveProfile(): TokenProfile {
|
|
|
416
432
|
|
|
417
433
|
/**
|
|
418
434
|
* Resolve the inline level from the active token profile.
|
|
419
|
-
* budget -> minimal, balanced -> standard, quality -> full.
|
|
435
|
+
* budget -> minimal, balanced -> standard, quality/burn-max -> full.
|
|
420
436
|
*/
|
|
421
437
|
export function resolveInlineLevel(): InlineLevel {
|
|
422
438
|
const profile = resolveEffectiveProfile();
|
|
@@ -424,12 +440,13 @@ export function resolveInlineLevel(): InlineLevel {
|
|
|
424
440
|
case "budget": return "minimal";
|
|
425
441
|
case "balanced": return "standard";
|
|
426
442
|
case "quality": return "full";
|
|
443
|
+
case "burn-max": return "full";
|
|
427
444
|
}
|
|
428
445
|
}
|
|
429
446
|
|
|
430
447
|
/**
|
|
431
448
|
* Resolve the context selection mode from the active token profile.
|
|
432
|
-
* budget -> "smart", balanced/quality -> "full".
|
|
449
|
+
* budget -> "smart", balanced/quality/burn-max -> "full".
|
|
433
450
|
* Explicit preference always wins.
|
|
434
451
|
*/
|
|
435
452
|
export function resolveContextSelection(): import("./types.js").ContextSelectionMode {
|