gsd-pi 2.78.1-dev.84a383f51 → 2.78.1
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/README.md +7 -7
- package/dist/cli.js +55 -95
- package/dist/headless-query.d.ts +0 -22
- package/dist/headless-query.js +4 -24
- package/dist/headless.d.ts +0 -10
- package/dist/headless.js +1 -16
- package/dist/loader.js +10 -7
- package/dist/onboarding.d.ts +0 -10
- package/dist/onboarding.js +2 -2
- package/dist/provider-migrations.d.ts +2 -2
- package/dist/provider-migrations.js +2 -5
- package/dist/resource-loader.d.ts +2 -5
- package/dist/resource-loader.js +5 -28
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +601 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +651 -0
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +91 -0
- package/dist/resources/extensions/gsd/auto/loop.js +0 -23
- package/dist/resources/extensions/gsd/auto/phases.js +2 -2
- package/dist/resources/extensions/gsd/auto/run-unit.js +1 -3
- package/dist/resources/extensions/gsd/auto/session.js +0 -3
- package/dist/resources/extensions/gsd/auto-recovery.js +4 -43
- package/dist/resources/extensions/gsd/auto-start.js +1 -1
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
- package/dist/resources/extensions/gsd/auto-worktree.js +0 -30
- package/dist/resources/extensions/gsd/auto.js +5 -14
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +2 -14
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +5 -7
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +4 -5
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +31 -94
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +6 -11
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +8 -34
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +2 -38
- package/dist/resources/extensions/gsd/commands/catalog.js +5 -69
- package/dist/resources/extensions/gsd/commands/handlers/core.js +1 -22
- package/dist/resources/extensions/gsd/commands-mcp-status.js +1 -3
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +1 -10
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +0 -4
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +1 -39
- package/dist/resources/extensions/gsd/error-classifier.js +1 -1
- package/dist/resources/extensions/gsd/forensics.js +2 -2
- package/dist/resources/extensions/gsd/git-service.js +5 -12
- package/dist/resources/extensions/gsd/gsd-db.js +2 -11
- package/dist/resources/extensions/gsd/guided-flow.js +23 -23
- package/dist/resources/extensions/gsd/memory-store.js +31 -66
- package/dist/resources/extensions/gsd/model-router.js +9 -114
- package/dist/resources/extensions/gsd/native-git-bridge.js +1 -7
- package/dist/resources/extensions/gsd/preferences-models.js +15 -91
- package/dist/resources/extensions/gsd/preferences-types.js +0 -2
- package/dist/resources/extensions/gsd/preferences-validation.js +0 -32
- package/dist/resources/extensions/gsd/preferences.js +3 -5
- package/dist/resources/extensions/gsd/prompt-loader.js +12 -23
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -9
- package/dist/resources/extensions/gsd/state.js +0 -42
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
- package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +53 -0
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +112 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +23 -0
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +5 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +1 -18
- package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
- package/dist/resources/extensions/gsd/watch/header-renderer.js +1 -3
- package/dist/resources/extensions/gsd/worktree-command.js +46 -26
- package/dist/resources/extensions/mcp-client/index.js +3 -6
- package/dist/resources/extensions/slash-commands/create-extension.js +22 -36
- package/dist/resources/skills/create-gsd-extension/SKILL.md +5 -9
- package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
- package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
- package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +608 -0
- package/dist/rtk-shared.d.ts +0 -3
- package/dist/rtk-shared.js +0 -17
- package/dist/rtk.d.ts +5 -2
- package/dist/rtk.js +20 -3
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- 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 +4 -4
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/react-loadable-manifest.json +4 -44
- 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 -4
- 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 +1 -1
- 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-react-loadable-manifest.js +1 -1
- 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/server/webpack-runtime.js +1 -1
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +11 -0
- package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +20 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-f2a7482d42a5614b.js → page-2f24283c162b6ab3.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-a16c7a7ecdf0c2cf.js → layout-9ecfd95f343793f0.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +1 -0
- package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.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/package.json +1 -2
- package/dist/web/standalone/server.js +1 -1
- package/package.json +1 -1
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +46 -74
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/src/workflow-tools.test.ts +0 -26
- package/packages/mcp-server/src/workflow-tools.ts +58 -93
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +19 -48
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +0 -13
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
- package/packages/pi-ai/dist/utils/repair-tool-json.js +3 -24
- package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -26
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.ts +20 -52
- package/packages/pi-ai/src/types.ts +0 -13
- package/packages/pi-ai/src/utils/repair-tool-json.ts +3 -24
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -32
- package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/agent-session.js +0 -6
- package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/messages.js +0 -4
- package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +2 -19
- package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts +0 -10
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +0 -18
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +0 -13
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +16 -20
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -14
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +0 -7
- package/packages/pi-coding-agent/src/core/messages.ts +0 -4
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +2 -32
- package/packages/pi-coding-agent/src/core/model-registry.ts +0 -21
- package/packages/pi-coding-agent/src/core/system-prompt.ts +15 -33
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -17
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +3 -17
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +3 -20
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/src/resources/extensions/gsd/auto/loop.ts +2 -24
- package/src/resources/extensions/gsd/auto/phases.ts +3 -3
- package/src/resources/extensions/gsd/auto/run-unit.ts +1 -3
- package/src/resources/extensions/gsd/auto/session.ts +0 -3
- package/src/resources/extensions/gsd/auto/types.ts +0 -1
- package/src/resources/extensions/gsd/auto-recovery.ts +8 -46
- package/src/resources/extensions/gsd/auto-start.ts +1 -1
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +4 -2
- package/src/resources/extensions/gsd/auto-worktree.ts +0 -38
- package/src/resources/extensions/gsd/auto.ts +4 -14
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +13 -15
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +7 -8
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +9 -10
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +31 -102
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +6 -12
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -39
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +11 -39
- package/src/resources/extensions/gsd/commands/catalog.ts +5 -75
- package/src/resources/extensions/gsd/commands/handlers/core.ts +1 -22
- package/src/resources/extensions/gsd/commands-mcp-status.ts +1 -3
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +1 -15
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +0 -4
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +1 -39
- package/src/resources/extensions/gsd/doctor-types.ts +1 -3
- package/src/resources/extensions/gsd/error-classifier.ts +1 -1
- package/src/resources/extensions/gsd/forensics.ts +2 -2
- package/src/resources/extensions/gsd/git-service.ts +5 -13
- package/src/resources/extensions/gsd/gsd-db.ts +2 -12
- package/src/resources/extensions/gsd/guided-flow.ts +25 -25
- package/src/resources/extensions/gsd/memory-store.ts +28 -81
- package/src/resources/extensions/gsd/model-router.ts +9 -172
- package/src/resources/extensions/gsd/native-git-bridge.ts +1 -7
- package/src/resources/extensions/gsd/preferences-models.ts +15 -101
- package/src/resources/extensions/gsd/preferences-types.ts +0 -6
- package/src/resources/extensions/gsd/preferences-validation.ts +0 -35
- package/src/resources/extensions/gsd/preferences.ts +2 -16
- package/src/resources/extensions/gsd/prompt-loader.ts +12 -26
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -9
- package/src/resources/extensions/gsd/state.ts +0 -42
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +0 -1
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1 -178
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -58
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +5 -9
- package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +4 -21
- package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +211 -138
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +59 -142
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +4 -7
- package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +32 -89
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +23 -41
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +43 -3
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +3 -5
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +87 -22
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +118 -7
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +60 -18
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +76 -14
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +83 -22
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +63 -1
- package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +1 -26
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +0 -30
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +4 -14
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +12 -22
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +1 -64
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -22
- package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +23 -0
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +0 -128
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +1 -33
- package/src/resources/extensions/gsd/tests/model-router.test.ts +8 -169
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +0 -8
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +43 -32
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +10 -4
- package/src/resources/extensions/gsd/tests/preferences.test.ts +0 -127
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +0 -16
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -7
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +19 -168
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +1 -7
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +1 -23
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +4 -51
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +16 -7
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +7 -5
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +1 -15
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +0 -15
- package/src/resources/extensions/gsd/tools/memory-tools.ts +1 -17
- package/src/resources/extensions/gsd/unit-context-manifest.ts +8 -8
- package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +1 -3
- package/src/resources/extensions/gsd/workflow-logger.ts +0 -1
- package/src/resources/extensions/gsd/worktree-command.ts +44 -31
- package/src/resources/extensions/mcp-client/index.ts +3 -6
- package/src/resources/extensions/slash-commands/create-extension.ts +24 -38
- package/src/resources/skills/create-gsd-extension/SKILL.md +5 -9
- package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
- package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
- package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
- package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
- package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
- package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
- package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
- package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +12 -32
- package/dist/cli-policy.d.ts +0 -13
- package/dist/cli-policy.js +0 -17
- package/dist/resources/.managed-resources-content-hash +0 -1
- package/dist/resources/extensions/gsd/auto-runtime-state.js +0 -31
- package/dist/resources/extensions/gsd/milestone-id-reservation.js +0 -36
- package/dist/resources/extensions/gsd/worktree-session-state.js +0 -33
- package/dist/runtime-checks.d.ts +0 -27
- package/dist/runtime-checks.js +0 -38
- package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +0 -1
- package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +0 -1
- package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +0 -1
- package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +0 -1
- package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +0 -1
- package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +0 -10
- package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +0 -2
- package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +0 -20
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +0 -1
- package/dist/worktree-status-banner.d.ts +0 -1
- package/dist/worktree-status-banner.js +0 -132
- package/packages/mcp-server/dist/alias-telemetry.d.ts +0 -8
- package/packages/mcp-server/dist/alias-telemetry.d.ts.map +0 -1
- package/packages/mcp-server/dist/alias-telemetry.js +0 -30
- package/packages/mcp-server/dist/alias-telemetry.js.map +0 -1
- package/packages/mcp-server/src/alias-telemetry.test.ts +0 -78
- package/packages/mcp-server/src/alias-telemetry.ts +0 -30
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +0 -2
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +0 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +0 -231
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +0 -1
- package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +0 -289
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +0 -37
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/core/token-telemetry.js +0 -49
- package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +0 -133
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +0 -78
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +0 -1
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +0 -2
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +0 -181
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +0 -1
- package/packages/pi-coding-agent/src/core/token-telemetry.ts +0 -77
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +0 -212
- package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +0 -102
- package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +0 -200
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +0 -2
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +0 -1
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +0 -161
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +0 -1
- package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +0 -219
- package/src/resources/extensions/gsd/auto-runtime-state.ts +0 -51
- package/src/resources/extensions/gsd/milestone-id-reservation.ts +0 -47
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +0 -116
- package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +0 -100
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +0 -93
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +0 -63
- package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +0 -81
- package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +0 -57
- package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +0 -145
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +0 -124
- package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +0 -152
- package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +0 -50
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +0 -93
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +0 -101
- package/src/resources/extensions/gsd/worktree-session-state.ts +0 -35
- package/src/resources/extensions/mcp-client/tests/global-config.test.ts +0 -91
- package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +0 -58
- /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{UF5VF4F1tB0miEtJS7LyX → 7afp7gq8-DVbxum83zRQ-}/_ssgManifest.js +0 -0
|
@@ -58,21 +58,16 @@ export function showHelp(ctx, args = "") {
|
|
|
58
58
|
" /gsd pause Pause auto-mode (preserves state, /gsd auto to resume)",
|
|
59
59
|
" /gsd discuss Start guided milestone/slice discussion",
|
|
60
60
|
" /gsd new-milestone Create milestone from headless context (used by gsd headless)",
|
|
61
|
-
" /gsd quick Execute a quick task without full planning overhead",
|
|
62
|
-
" /gsd dispatch Dispatch a specific phase directly [research|plan|execute|complete|uat|replan]",
|
|
63
|
-
" /gsd parallel Parallel milestone orchestration [start|status|stop|pause|resume|merge|watch]",
|
|
64
|
-
" /gsd workflow Custom workflow lifecycle [new|run|list|validate|pause|resume]",
|
|
65
61
|
"",
|
|
66
62
|
"VISIBILITY",
|
|
67
63
|
` /gsd status Show progress dashboard (${formattedShortcutPair("dashboard")})`,
|
|
68
64
|
` /gsd parallel watch Open parallel worker monitor (${formattedShortcutPair("parallel")})`,
|
|
69
|
-
" /gsd widget Cycle status widget [full|small|min|off]",
|
|
70
65
|
" /gsd visualize Interactive 10-tab TUI (progress, timeline, deps, metrics, health, agent, changes, knowledge, captures, export)",
|
|
71
66
|
" /gsd queue Show queued/dispatched units and execution order",
|
|
72
67
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
73
68
|
" /gsd changelog Show categorized release notes [version]",
|
|
74
69
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
75
|
-
" /gsd logs Browse activity logs, debug logs, and metrics
|
|
70
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
76
71
|
" /gsd debug Create/list/continue persistent debug sessions",
|
|
77
72
|
"",
|
|
78
73
|
"COURSE CORRECTION",
|
|
@@ -81,9 +76,6 @@ export function showHelp(ctx, args = "") {
|
|
|
81
76
|
" /gsd triage Classify and route pending captures",
|
|
82
77
|
" /gsd skip <unit> Prevent a unit from auto-mode dispatch",
|
|
83
78
|
" /gsd undo Revert last completed unit [--force]",
|
|
84
|
-
" /gsd undo-task Reset a specific task's completion state [DB + markdown]",
|
|
85
|
-
" /gsd reset-slice Reset a slice and all its tasks [DB + markdown]",
|
|
86
|
-
" /gsd rate Rate last unit's model tier [over|ok|under]",
|
|
87
79
|
" /gsd rethink Conversational project reorganization — reorder, park, discard, add milestones",
|
|
88
80
|
" /gsd park [id] Park a milestone — skip without deleting [reason]",
|
|
89
81
|
" /gsd unpark [id] Reactivate a parked milestone",
|
|
@@ -92,15 +84,6 @@ export function showHelp(ctx, args = "") {
|
|
|
92
84
|
" /gsd knowledge <type> <text> Add rule, pattern, or lesson to KNOWLEDGE.md",
|
|
93
85
|
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
94
86
|
"",
|
|
95
|
-
"SHIPPING & BACKLOG",
|
|
96
|
-
" /gsd ship Create a PR from milestone artifacts [--dry-run|--draft|--base|--force]",
|
|
97
|
-
" /gsd do <text> Route freeform text to the right GSD command",
|
|
98
|
-
" /gsd session-report Show session cost, tokens, and work summary [--json|--save]",
|
|
99
|
-
" /gsd backlog Manage backlog items [add|promote|remove|list]",
|
|
100
|
-
" /gsd pr-branch Create a clean PR branch filtering .gsd/ commits [--dry-run|--name]",
|
|
101
|
-
" /gsd add-tests Generate tests for completed slices",
|
|
102
|
-
" /gsd scan Rapid codebase assessment [--focus tech|arch|quality|concerns|tech+arch]",
|
|
103
|
-
"",
|
|
104
87
|
"SETUP & CONFIGURATION",
|
|
105
88
|
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
106
89
|
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
@@ -113,22 +96,18 @@ export function showHelp(ctx, args = "") {
|
|
|
113
96
|
" /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
|
|
114
97
|
" /gsd show-config Show effective configuration (models, routing, toggles)",
|
|
115
98
|
" /gsd hooks Show post-unit hook configuration",
|
|
116
|
-
" /gsd run-hook Manually trigger a specific hook",
|
|
117
|
-
" /gsd skill-health Skill lifecycle dashboard",
|
|
118
99
|
" /gsd extensions Manage extensions [list|enable|disable|info]",
|
|
119
100
|
" /gsd fast Toggle OpenAI service tier [on|off|flex|status]",
|
|
120
101
|
" /gsd mcp MCP server status and connectivity [status|check <server>|init [dir]]",
|
|
121
102
|
"",
|
|
122
103
|
"MAINTENANCE",
|
|
123
104
|
" /gsd doctor Diagnose and repair .gsd/ state [audit|fix|heal] [scope]",
|
|
124
|
-
" /gsd forensics Examine execution logs and post-mortem analysis",
|
|
125
105
|
" /gsd export Export milestone/slice results [--json|--markdown|--html] [--all]",
|
|
126
106
|
" /gsd cleanup Remove merged branches or snapshots [branches|snapshots]",
|
|
127
107
|
" /gsd migrate Migrate .planning/ (v1) to .gsd/ (v2) format",
|
|
128
108
|
" /gsd remote Control remote auto-mode [slack|discord|status|disconnect]",
|
|
129
109
|
" /gsd inspect Show SQLite DB diagnostics (schema, row counts, recent entries)",
|
|
130
110
|
" /gsd update Update GSD to the latest version via npm",
|
|
131
|
-
" /gsd language Set or clear the global response language [off|clear|<language>]",
|
|
132
111
|
];
|
|
133
112
|
const full = ["full", "--full", "all"].includes(args.trim().toLowerCase());
|
|
134
113
|
ctx.ui.notify((full ? fullLines : summaryLines).join("\n"), "info");
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
* /gsd mcp init [dir] — Write project-local GSD workflow MCP config
|
|
11
11
|
*/
|
|
12
12
|
import { existsSync, readFileSync } from "node:fs";
|
|
13
|
-
import { homedir } from "node:os";
|
|
14
13
|
import { join, resolve } from "node:path";
|
|
15
14
|
import { ensureProjectWorkflowMcpConfig } from "./mcp-project-config.js";
|
|
16
15
|
export function formatMcpInitResult(status, configPath, targetPath) {
|
|
@@ -34,7 +33,6 @@ function readMcpConfigs() {
|
|
|
34
33
|
const configPaths = [
|
|
35
34
|
join(process.cwd(), ".mcp.json"),
|
|
36
35
|
join(process.cwd(), ".gsd", "mcp.json"),
|
|
37
|
-
join(process.env.GSD_HOME || join(homedir(), ".gsd"), "mcp.json"),
|
|
38
36
|
];
|
|
39
37
|
for (const configPath of configPaths) {
|
|
40
38
|
try {
|
|
@@ -79,7 +77,7 @@ export function formatMcpStatusReport(servers) {
|
|
|
79
77
|
return [
|
|
80
78
|
"No MCP servers configured.",
|
|
81
79
|
"",
|
|
82
|
-
"Add servers to .mcp.json
|
|
80
|
+
"Add servers to .mcp.json or .gsd/mcp.json to enable MCP integrations.",
|
|
83
81
|
"Tip: run /gsd mcp init . to write the local GSD workflow MCP config.",
|
|
84
82
|
"See: https://modelcontextprotocol.io/quickstart",
|
|
85
83
|
].join("\n");
|
|
@@ -1481,13 +1481,6 @@ async function configureAdvanced(ctx, prefs) {
|
|
|
1481
1481
|
const tokenCost = await promptBoolean(ctx, "Show token cost in footer", prefs.show_token_cost, false);
|
|
1482
1482
|
if (tokenCost !== undefined)
|
|
1483
1483
|
prefs.show_token_cost = tokenCost;
|
|
1484
|
-
const minRequestInterval = await promptInteger(ctx, "Minimum interval between auto-mode LLM requests (ms, 0 to disable)", prefs.min_request_interval_ms, "0");
|
|
1485
|
-
if (minRequestInterval === "clear") {
|
|
1486
|
-
delete prefs.min_request_interval_ms;
|
|
1487
|
-
}
|
|
1488
|
-
else if (minRequestInterval !== undefined) {
|
|
1489
|
-
prefs.min_request_interval_ms = minRequestInterval;
|
|
1490
|
-
}
|
|
1491
1484
|
const widget = await promptEnum(ctx, "Auto-mode widget display", prefs.widget_mode, ["full", "small", "min", "off"], "full");
|
|
1492
1485
|
if (widget !== undefined)
|
|
1493
1486
|
prefs.widget_mode = widget;
|
|
@@ -1675,10 +1668,8 @@ export function serializePreferencesToFrontmatter(prefs) {
|
|
|
1675
1668
|
"budget_ceiling", "budget_enforcement", "context_pause_threshold",
|
|
1676
1669
|
"notifications", "cmux", "remote_questions", "git",
|
|
1677
1670
|
"stale_commit_threshold_minutes",
|
|
1678
|
-
"min_request_interval_ms",
|
|
1679
1671
|
"post_unit_hooks", "pre_dispatch_hooks",
|
|
1680
|
-
"dynamic_routing", "
|
|
1681
|
-
"service_tier", "flat_rate_providers",
|
|
1672
|
+
"dynamic_routing", "uok", "token_profile", "service_tier", "flat_rate_providers",
|
|
1682
1673
|
"phases", "parallel", "slice_parallel",
|
|
1683
1674
|
"reactive_execution", "gate_evaluation",
|
|
1684
1675
|
"auto_visualize", "auto_report",
|
|
@@ -14,7 +14,7 @@ import { resolveMilestoneFile } from "./paths.js";
|
|
|
14
14
|
import { getAutoDashboardData } from "./auto.js";
|
|
15
15
|
import { getLedger, getProjectTotals, aggregateByPhase, aggregateBySlice, aggregateByModel, aggregateCacheHitRate, formatCost, formatTokenCount, formatCostProjection, } from "./metrics.js";
|
|
16
16
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
17
|
-
import { getActiveWorktreeName } from "./worktree-
|
|
17
|
+
import { getActiveWorktreeName } from "./worktree-command.js";
|
|
18
18
|
import { getWorkerBatches, hasActiveWorkers } from "../subagent/worker-registry.js";
|
|
19
19
|
import { formatDuration, padRight, joinColumns, centerLine, fitColumns, STATUS_GLYPH, STATUS_COLOR } from "../shared/mod.js";
|
|
20
20
|
import { estimateTimeRemaining } from "./auto-dashboard.js";
|
|
@@ -126,8 +126,6 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
|
|
|
126
126
|
- `idle_timeout_minutes`: minutes of inactivity before the supervisor intervenes (default: 10).
|
|
127
127
|
- `hard_timeout_minutes`: minutes before the supervisor forces termination (default: 30).
|
|
128
128
|
|
|
129
|
-
- `min_request_interval_ms`: number — minimum integer milliseconds between auto-mode LLM request dispatches. Non-integer values are rounded down (e.g., `1000.9 → 1000`). Use this to proactively slow auto-mode on rate-limited providers and reduce 429 errors. Set to `0` to disable. Default: `0` (disabled).
|
|
130
|
-
|
|
131
129
|
- `git`: configures GSD's git behavior. All fields are optional — omit any to use defaults. Keys:
|
|
132
130
|
- `auto_push`: boolean — automatically push commits to the remote after committing. Default: `false`.
|
|
133
131
|
- `push_branches`: boolean — push the milestone branch to the remote after commits. Default: `false`.
|
|
@@ -195,8 +193,6 @@ Setting `prefer_skills: []` does **not** disable skill discovery — it just mea
|
|
|
195
193
|
- `hooks`: boolean — enable routing hooks. Default: `true`.
|
|
196
194
|
- `capability_routing`: boolean — enable capability-profile scoring for model selection within a tier. Requires `enabled: true`. Default: `false`.
|
|
197
195
|
|
|
198
|
-
- `disabled_model_providers`: string[] — provider IDs to hide from model selection and routing (for example `["google-gemini-cli"]`). This only affects model availability (`/model`, auto-model selection, routing); it does not disable tool auth flows like `google_search`.
|
|
199
|
-
|
|
200
196
|
- `uok`: Unified Orchestration Kernel controls. Keys:
|
|
201
197
|
- `enabled`: boolean — enable kernel wrappers and contract observers. Default: `true`.
|
|
202
198
|
- `legacy_fallback.enabled`: boolean — emergency release fallback that forces legacy orchestration behavior even when `uok.enabled` is `true`. Default: `false`.
|
|
@@ -2,7 +2,7 @@ import { existsSync, lstatSync, readdirSync, readFileSync, realpathSync, rmSync,
|
|
|
2
2
|
import { basename, dirname, join } from "node:path";
|
|
3
3
|
import { cleanNumberedGsdVariants } from "./repo-identity.js";
|
|
4
4
|
import { milestonesDir, gsdRoot, resolveGsdRootFile } from "./paths.js";
|
|
5
|
-
import { deriveState
|
|
5
|
+
import { deriveState } from "./state.js";
|
|
6
6
|
import { saveFile } from "./files.js";
|
|
7
7
|
import { nativeIsRepo, nativeForEachRef, nativeUpdateRef } from "./native-git-bridge.js";
|
|
8
8
|
import { readCrashLock, isLockProcessAlive, clearLock } from "./crash-recovery.js";
|
|
@@ -10,7 +10,6 @@ import { ensureGitignore, isGsdGitignored } from "./gitignore.js";
|
|
|
10
10
|
import { readAllSessionStatuses, isSessionStale, removeSessionStatus } from "./session-status-io.js";
|
|
11
11
|
import { recoverFailedMigration } from "./migrate-external.js";
|
|
12
12
|
import { splitCompletedKey } from "./forensics.js";
|
|
13
|
-
import { findMilestoneIds } from "./milestone-ids.js";
|
|
14
13
|
export async function checkRuntimeHealth(basePath, issues, fixesApplied, shouldFix) {
|
|
15
14
|
const root = gsdRoot(basePath);
|
|
16
15
|
// ── Stale crash lock ──────────────────────────────────────────────────
|
|
@@ -571,43 +570,6 @@ export async function checkRuntimeHealth(basePath, issues, fixesApplied, shouldF
|
|
|
571
570
|
catch {
|
|
572
571
|
// Non-fatal — snapshot ref check failed
|
|
573
572
|
}
|
|
574
|
-
// ── Orphan milestone directories (#4996) ──────────────────────────────
|
|
575
|
-
// Walk every milestone ID on disk. Any dir that has no DB row, no worktree,
|
|
576
|
-
// and no content files is an orphaned stub — it skews nextMilestoneId and
|
|
577
|
-
// was likely created by ensurePreconditions or showHeadlessMilestoneCreation
|
|
578
|
-
// for a phantom forward-reference. Surface as a fixable warning.
|
|
579
|
-
try {
|
|
580
|
-
const milestoneIds = findMilestoneIds(basePath);
|
|
581
|
-
const hasDbFile = existsSync(join(root, "gsd.db"));
|
|
582
|
-
for (const mid of milestoneIds) {
|
|
583
|
-
const isOrphan = isReusableGhostMilestone(basePath, mid)
|
|
584
|
-
|| (!hasDbFile && isGhostMilestone(basePath, mid));
|
|
585
|
-
if (isOrphan) {
|
|
586
|
-
issues.push({
|
|
587
|
-
severity: "warning",
|
|
588
|
-
code: "orphan_milestone_dir",
|
|
589
|
-
scope: "milestone",
|
|
590
|
-
unitId: mid,
|
|
591
|
-
message: `Orphan milestone directory: ${mid} — directory exists on disk with no DB row, no worktree, and no content files. This stub skews milestone ID generation and should be removed.`,
|
|
592
|
-
file: `.gsd/milestones/${mid}`,
|
|
593
|
-
fixable: true,
|
|
594
|
-
});
|
|
595
|
-
if (shouldFix("orphan_milestone_dir")) {
|
|
596
|
-
try {
|
|
597
|
-
const orphanPath = join(milestonesDir(basePath), mid);
|
|
598
|
-
rmSync(orphanPath, { recursive: true, force: true });
|
|
599
|
-
fixesApplied.push(`removed orphan milestone directory: ${mid}`);
|
|
600
|
-
}
|
|
601
|
-
catch {
|
|
602
|
-
// Non-fatal — leave for manual cleanup
|
|
603
|
-
}
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
catch {
|
|
609
|
-
// Non-fatal — orphan milestone directory check failed
|
|
610
|
-
}
|
|
611
573
|
}
|
|
612
574
|
/**
|
|
613
575
|
* Build STATE.md markdown content from derived state.
|
|
@@ -34,7 +34,7 @@ const NETWORK_RE = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fet
|
|
|
34
34
|
// Context overflow errors (context window/length exceeded) should be treated as server-class
|
|
35
35
|
// transient errors so auto-mode can retry with reduced budget or fall back to a larger-context model.
|
|
36
36
|
// See: https://github.com/gsd-build/gsd-2/issues/4528
|
|
37
|
-
const SERVER_RE = /internal
|
|
37
|
+
const SERVER_RE = /internal server error|500|502|503|overloaded|server_error|api_error|service.?unavailable|context (?:window|length) exceed|context window exceed/i;
|
|
38
38
|
// ECONNRESET/ECONNREFUSED are in NETWORK_RE (same-model retry first).
|
|
39
39
|
const CONNECTION_RE = /terminated|connection.?(?:refused|error)|other side closed|EPIPE|network.?(?:is\s+)?unavailable|stream_exhausted(?:_without_result)?/i;
|
|
40
40
|
// Catch-all for V8 JSON.parse errors: all modern variants end with "in JSON at position \d+".
|
|
@@ -649,7 +649,7 @@ function detectMissingArtifacts(completedKeys, basePath, activeMilestone, anomal
|
|
|
649
649
|
* the forensics memory-bloat guard in forensics-journal.test.ts — per-event
|
|
650
650
|
* detail stays in the journal itself where the LLM can query it on demand.
|
|
651
651
|
*/
|
|
652
|
-
|
|
652
|
+
function detectWorktreeOrphans(summary, anomalies) {
|
|
653
653
|
// 1. Orphan aggregate — severity depends on reason. In-progress orphans are
|
|
654
654
|
// the #4761 consumer-side signal (live work sitting on an unmerged branch).
|
|
655
655
|
for (const [reason, count] of Object.entries(summary.orphansByReason)) {
|
|
@@ -663,7 +663,7 @@ export function detectWorktreeOrphans(summary, anomalies) {
|
|
|
663
663
|
details: reason === "in-progress-unmerged"
|
|
664
664
|
? "Auto-mode exited without completing a milestone; live work sits on an unmerged milestone branch. Run `/gsd auto` to resume, or merge manually."
|
|
665
665
|
: reason === "complete-unmerged"
|
|
666
|
-
? "A completed milestone's branch was never merged back to main. Run `/gsd
|
|
666
|
+
? "A completed milestone's branch was never merged back to main. Run `/gsd health --fix` to resolve."
|
|
667
667
|
: `Reason: ${reason}.`,
|
|
668
668
|
});
|
|
669
669
|
}
|
|
@@ -18,7 +18,6 @@ import { SLICE_BRANCH_RE, QUICK_BRANCH_RE, WORKFLOW_BRANCH_RE } from "./branch-p
|
|
|
18
18
|
import { nativeGetCurrentBranch, nativeDetectMainBranch, nativeBranchExists, nativeHasChanges, nativeAddAllWithExclusions, nativeHasStagedChanges, nativeCommit, nativeRmCached, nativeUpdateRef, nativeResetSoft, nativeCommitSubject, _resetHasChangesCache, } from "./native-git-bridge.js";
|
|
19
19
|
import { GSDError, GSD_MERGE_CONFLICT, GSD_GIT_ERROR } from "./errors.js";
|
|
20
20
|
import { getErrorMessage } from "./error-utils.js";
|
|
21
|
-
import { isInfrastructureError } from "./auto/infra-errors.js";
|
|
22
21
|
export const VALID_BRANCH_NAME = /^[a-zA-Z0-9_\-\/.]+$/;
|
|
23
22
|
/**
|
|
24
23
|
* Build a meaningful conventional commit message from task execution context.
|
|
@@ -776,16 +775,6 @@ function buildTurnSnapshotLabel(unitType, unitId) {
|
|
|
776
775
|
.replace(/-{2,}/g, "-")
|
|
777
776
|
.replace(/^[-/]+|[-/]+$/g, "") || "turn";
|
|
778
777
|
}
|
|
779
|
-
export function handleTurnGitActionError(action, err) {
|
|
780
|
-
if (isInfrastructureError(err)) {
|
|
781
|
-
throw err;
|
|
782
|
-
}
|
|
783
|
-
return {
|
|
784
|
-
action,
|
|
785
|
-
status: "failed",
|
|
786
|
-
error: getErrorMessage(err),
|
|
787
|
-
};
|
|
788
|
-
}
|
|
789
778
|
export function runTurnGitAction(args) {
|
|
790
779
|
try {
|
|
791
780
|
// Force fresh working-tree status per turn; nativeHasChanges caches briefly.
|
|
@@ -817,7 +806,11 @@ export function runTurnGitAction(args) {
|
|
|
817
806
|
};
|
|
818
807
|
}
|
|
819
808
|
catch (err) {
|
|
820
|
-
return
|
|
809
|
+
return {
|
|
810
|
+
action: args.action,
|
|
811
|
+
status: "failed",
|
|
812
|
+
error: getErrorMessage(err),
|
|
813
|
+
};
|
|
821
814
|
}
|
|
822
815
|
}
|
|
823
816
|
// ─── Commit Type Inference ─────────────────────────────────────────────────
|
|
@@ -1321,15 +1321,6 @@ export function checkpointDatabase() {
|
|
|
1321
1321
|
}
|
|
1322
1322
|
}
|
|
1323
1323
|
let _txDepth = 0;
|
|
1324
|
-
/**
|
|
1325
|
-
* Whether the current call is running inside an active SQLite transaction.
|
|
1326
|
-
* Statement-time recovery paths (e.g. VACUUM retry on a malformed memory
|
|
1327
|
-
* store) MUST gate on this — SQLite refuses VACUUM inside a transaction
|
|
1328
|
-
* and would mask the original error with a secondary "cannot VACUUM" throw.
|
|
1329
|
-
*/
|
|
1330
|
-
export function isInTransaction() {
|
|
1331
|
-
return _txDepth > 0;
|
|
1332
|
-
}
|
|
1333
1324
|
export function transaction(fn) {
|
|
1334
1325
|
if (!currentDb)
|
|
1335
1326
|
throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
@@ -1344,8 +1335,8 @@ export function transaction(fn) {
|
|
|
1344
1335
|
_txDepth--;
|
|
1345
1336
|
}
|
|
1346
1337
|
}
|
|
1347
|
-
currentDb.exec("BEGIN");
|
|
1348
1338
|
_txDepth++;
|
|
1339
|
+
currentDb.exec("BEGIN");
|
|
1349
1340
|
try {
|
|
1350
1341
|
const result = fn();
|
|
1351
1342
|
currentDb.exec("COMMIT");
|
|
@@ -1378,8 +1369,8 @@ export function readTransaction(fn) {
|
|
|
1378
1369
|
_txDepth--;
|
|
1379
1370
|
}
|
|
1380
1371
|
}
|
|
1381
|
-
currentDb.exec("BEGIN DEFERRED");
|
|
1382
1372
|
_txDepth++;
|
|
1373
|
+
currentDb.exec("BEGIN DEFERRED");
|
|
1383
1374
|
try {
|
|
1384
1375
|
const result = fn();
|
|
1385
1376
|
currentDb.exec("COMMIT");
|
|
@@ -33,9 +33,7 @@ import { showProjectInit, offerMigration } from "./init-wizard.js";
|
|
|
33
33
|
import { validateDirectory } from "./validate-directory.js";
|
|
34
34
|
import { showConfirm } from "../shared/tui.js";
|
|
35
35
|
import { debugLog } from "./debug-logger.js";
|
|
36
|
-
import { findMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
|
|
37
|
-
import { nextMilestoneIdReserved } from "./milestone-id-reservation.js";
|
|
38
|
-
export { nextMilestoneIdReserved } from "./milestone-id-reservation.js";
|
|
36
|
+
import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
|
|
39
37
|
import { parkMilestone, discardMilestone } from "./milestone-actions.js";
|
|
40
38
|
import { selectAndApplyModel } from "./auto-model-selection.js";
|
|
41
39
|
import { DISCUSS_TOOLS_ALLOWLIST } from "./constants.js";
|
|
@@ -45,6 +43,18 @@ import { runPreparation, formatCodebaseBrief, formatPriorContextBrief, } from ".
|
|
|
45
43
|
export { MILESTONE_ID_RE, generateMilestoneSuffix, nextMilestoneId, extractMilestoneSeq, parseMilestoneId, milestoneIdSort, maxMilestoneNum, findMilestoneIds, reserveMilestoneId, claimReservedId, getReservedMilestoneIds, clearReservedMilestoneIds, } from "./milestone-ids.js";
|
|
46
44
|
export { showQueue, handleQueueReorder, showQueueAdd, buildExistingMilestonesContext, } from "./guided-flow-queue.js";
|
|
47
45
|
import { logWarning } from "./workflow-logger.js";
|
|
46
|
+
// ─── ID Generation with Reservation ─────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* Generate the next milestone ID, accounting for reserved IDs, and reserve it.
|
|
49
|
+
* Ensures any preview ID shown in the UI matches what `gsd_milestone_generate_id`
|
|
50
|
+
* will later return.
|
|
51
|
+
*/
|
|
52
|
+
function nextMilestoneIdReserved(existingIds, uniqueEnabled) {
|
|
53
|
+
const allIds = [...new Set([...existingIds, ...getReservedMilestoneIds()])];
|
|
54
|
+
const id = nextMilestoneId(allIds, uniqueEnabled);
|
|
55
|
+
reserveMilestoneId(id);
|
|
56
|
+
return id;
|
|
57
|
+
}
|
|
48
58
|
function needsPlanV2Gate(state) {
|
|
49
59
|
return state.phase === "executing"
|
|
50
60
|
|| state.phase === "summarizing"
|
|
@@ -665,17 +675,13 @@ export async function showHeadlessMilestoneCreation(ctx, pi, basePath, seedConte
|
|
|
665
675
|
clearReservedMilestoneIds();
|
|
666
676
|
// Ensure .gsd/ is bootstrapped
|
|
667
677
|
bootstrapGsdProject(basePath);
|
|
668
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
669
|
-
await ensureDbOpen(basePath);
|
|
670
678
|
// Generate next milestone ID
|
|
671
679
|
const existingIds = findMilestoneIds(basePath);
|
|
672
680
|
const prefs = loadEffectiveGSDPreferences();
|
|
673
|
-
const nextId = nextMilestoneIdReserved(existingIds, prefs?.preferences?.unique_milestone_ids ?? false
|
|
674
|
-
//
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
// lazy-mkdir-safe. Pre-creating the dir before the discuss flow runs leaves
|
|
678
|
-
// an orphan stub if discuss is abandoned — that stub later skews nextMilestoneId.
|
|
681
|
+
const nextId = nextMilestoneIdReserved(existingIds, prefs?.preferences?.unique_milestone_ids ?? false);
|
|
682
|
+
// Create milestone directory
|
|
683
|
+
const milestoneDir = join(gsdRoot(basePath), "milestones", nextId, "slices");
|
|
684
|
+
mkdirSync(milestoneDir, { recursive: true });
|
|
679
685
|
// Build and dispatch the headless discuss prompt
|
|
680
686
|
const prompt = buildHeadlessDiscussPrompt(nextId, seedContext, basePath);
|
|
681
687
|
// Set pending auto start (auto-mode triggers on "Milestone X ready." via checkAutoStartAfterDiscuss)
|
|
@@ -859,11 +865,9 @@ export async function showDiscuss(ctx, pi, basePath) {
|
|
|
859
865
|
}), "gsd-discuss", ctx, "discuss-milestone");
|
|
860
866
|
}
|
|
861
867
|
else if (choice === "skip_milestone") {
|
|
862
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
863
|
-
await ensureDbOpen(basePath);
|
|
864
868
|
const milestoneIds = findMilestoneIds(basePath);
|
|
865
869
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
866
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
870
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
867
871
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: false, createdAt: Date.now() });
|
|
868
872
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
869
873
|
}
|
|
@@ -1219,7 +1223,7 @@ async function handleMilestoneActions(ctx, pi, basePath, milestoneId, milestoneT
|
|
|
1219
1223
|
if (choice === "skip") {
|
|
1220
1224
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1221
1225
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1222
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1226
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1223
1227
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1224
1228
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
1225
1229
|
return true;
|
|
@@ -1287,10 +1291,6 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1287
1291
|
// ── Ensure .gitignore has baseline patterns ──────────────────────────
|
|
1288
1292
|
ensureGitignore(basePath);
|
|
1289
1293
|
untrackRuntimeFiles(basePath);
|
|
1290
|
-
{
|
|
1291
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
1292
|
-
await ensureDbOpen(basePath);
|
|
1293
|
-
}
|
|
1294
1294
|
// ── Self-heal stale runtime records from crashed auto-mode sessions ──
|
|
1295
1295
|
selfHealRuntimeRecords(basePath, ctx);
|
|
1296
1296
|
const interrupted = await assessInterruptedSession(basePath);
|
|
@@ -1388,7 +1388,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1388
1388
|
}
|
|
1389
1389
|
}
|
|
1390
1390
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1391
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1391
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1392
1392
|
const isFirst = milestoneIds.length === 0;
|
|
1393
1393
|
if (isFirst) {
|
|
1394
1394
|
// First ever — skip wizard, just ask directly
|
|
@@ -1446,7 +1446,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1446
1446
|
if (choice === "new_milestone") {
|
|
1447
1447
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1448
1448
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1449
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1449
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1450
1450
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1451
1451
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
1452
1452
|
}
|
|
@@ -1510,7 +1510,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1510
1510
|
else if (choice === "skip_milestone") {
|
|
1511
1511
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1512
1512
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1513
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1513
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1514
1514
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1515
1515
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
1516
1516
|
}
|
|
@@ -1600,7 +1600,7 @@ export async function showSmartEntry(ctx, pi, basePath, options) {
|
|
|
1600
1600
|
else if (choice === "skip_milestone") {
|
|
1601
1601
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1602
1602
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1603
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1603
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1604
1604
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1605
1605
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
1606
1606
|
}
|
|
@@ -2,9 +2,8 @@
|
|
|
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,
|
|
5
|
+
import { isDbAvailable, _getAdapter, transaction, insertMemoryRow, rewriteMemoryId, updateMemoryContentRow, incrementMemoryHitCount, supersedeMemoryRow, markMemoryUnitProcessed, decayMemoriesBefore, supersedeLowestRankedMemories, deleteMemoryEmbedding, deleteMemoryRelationsFor, } from './gsd-db.js';
|
|
6
6
|
import { createMemoryRelation, isValidRelation } from './memory-relations.js';
|
|
7
|
-
import { logWarning } from './workflow-logger.js';
|
|
8
7
|
// ─── Category Display Order ─────────────────────────────────────────────────
|
|
9
8
|
const CATEGORY_PRIORITY = {
|
|
10
9
|
gotcha: 0,
|
|
@@ -368,13 +367,7 @@ export function nextMemoryId() {
|
|
|
368
367
|
* Insert a new memory with a race-safe auto-assigned ID.
|
|
369
368
|
* Uses AUTOINCREMENT seq to derive the ID after insert, avoiding
|
|
370
369
|
* the read-then-write race in concurrent scenarios (e.g. worktrees).
|
|
371
|
-
* Returns the assigned ID, or null
|
|
372
|
-
*
|
|
373
|
-
* Throws on genuine SQL errors (corruption, missing tables, constraint
|
|
374
|
-
* violations) so callers can surface the underlying message instead of
|
|
375
|
-
* collapsing the failure to a generic "create_failed". See issue #4967 —
|
|
376
|
-
* the previous bare-catch swallowed "database disk image is malformed"
|
|
377
|
-
* errors, leaving the memory subsystem broken without any signal.
|
|
370
|
+
* Returns the assigned ID, or null on failure.
|
|
378
371
|
*/
|
|
379
372
|
export function createMemory(fields) {
|
|
380
373
|
if (!isDbAvailable())
|
|
@@ -383,56 +376,34 @@ export function createMemory(fields) {
|
|
|
383
376
|
if (!adapter)
|
|
384
377
|
return null;
|
|
385
378
|
try {
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
}
|
|
408
|
-
|
|
379
|
+
const now = new Date().toISOString();
|
|
380
|
+
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
381
|
+
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
382
|
+
insertMemoryRow({
|
|
383
|
+
id: placeholder,
|
|
384
|
+
category: fields.category,
|
|
385
|
+
content: fields.content,
|
|
386
|
+
confidence: fields.confidence ?? 0.8,
|
|
387
|
+
sourceUnitType: fields.source_unit_type ?? null,
|
|
388
|
+
sourceUnitId: fields.source_unit_id ?? null,
|
|
389
|
+
createdAt: now,
|
|
390
|
+
updatedAt: now,
|
|
391
|
+
scope: fields.scope ?? 'project',
|
|
392
|
+
tags: fields.tags ?? [],
|
|
393
|
+
structuredFields: fields.structuredFields ?? null,
|
|
394
|
+
});
|
|
395
|
+
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
396
|
+
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
397
|
+
if (!row)
|
|
398
|
+
return placeholder; // fallback — should not happen
|
|
399
|
+
const seq = row['seq'];
|
|
400
|
+
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
401
|
+
rewriteMemoryId(placeholder, realId);
|
|
402
|
+
return realId;
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
return null;
|
|
409
406
|
}
|
|
410
|
-
}
|
|
411
|
-
function doCreateMemory(adapter, fields) {
|
|
412
|
-
const now = new Date().toISOString();
|
|
413
|
-
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
414
|
-
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
415
|
-
insertMemoryRow({
|
|
416
|
-
id: placeholder,
|
|
417
|
-
category: fields.category,
|
|
418
|
-
content: fields.content,
|
|
419
|
-
confidence: fields.confidence ?? 0.8,
|
|
420
|
-
sourceUnitType: fields.source_unit_type ?? null,
|
|
421
|
-
sourceUnitId: fields.source_unit_id ?? null,
|
|
422
|
-
createdAt: now,
|
|
423
|
-
updatedAt: now,
|
|
424
|
-
scope: fields.scope ?? 'project',
|
|
425
|
-
tags: fields.tags ?? [],
|
|
426
|
-
structuredFields: fields.structuredFields ?? null,
|
|
427
|
-
});
|
|
428
|
-
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
429
|
-
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
430
|
-
if (!row)
|
|
431
|
-
return placeholder; // fallback — should not happen
|
|
432
|
-
const seq = row['seq'];
|
|
433
|
-
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
434
|
-
rewriteMemoryId(placeholder, realId);
|
|
435
|
-
return realId;
|
|
436
407
|
}
|
|
437
408
|
/**
|
|
438
409
|
* Update a memory's content and optionally its confidence.
|
|
@@ -620,14 +591,8 @@ export function applyMemoryActions(actions, unitType, unitId) {
|
|
|
620
591
|
enforceMemoryCap();
|
|
621
592
|
});
|
|
622
593
|
}
|
|
623
|
-
catch
|
|
624
|
-
//
|
|
625
|
-
// degraded memory subsystem (e.g. malformed store, missing tables) is
|
|
626
|
-
// visible to forensics instead of silently dropping every CREATE — see
|
|
627
|
-
// issue #4967, where this swallow combined with createMemory's bare
|
|
628
|
-
// catch hid SQLite corruption from the auto-mode flow entirely.
|
|
629
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
630
|
-
logWarning('memory-store', `applyMemoryActions failed (memory subsystem degraded): ${message}`);
|
|
594
|
+
catch {
|
|
595
|
+
// non-fatal — transaction will have rolled back
|
|
631
596
|
}
|
|
632
597
|
}
|
|
633
598
|
// ─── LINK action ────────────────────────────────────────────────────────────
|