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
|
@@ -64,21 +64,16 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
64
64
|
" /gsd pause Pause auto-mode (preserves state, /gsd auto to resume)",
|
|
65
65
|
" /gsd discuss Start guided milestone/slice discussion",
|
|
66
66
|
" /gsd new-milestone Create milestone from headless context (used by gsd headless)",
|
|
67
|
-
" /gsd quick Execute a quick task without full planning overhead",
|
|
68
|
-
" /gsd dispatch Dispatch a specific phase directly [research|plan|execute|complete|uat|replan]",
|
|
69
|
-
" /gsd parallel Parallel milestone orchestration [start|status|stop|pause|resume|merge|watch]",
|
|
70
|
-
" /gsd workflow Custom workflow lifecycle [new|run|list|validate|pause|resume]",
|
|
71
67
|
"",
|
|
72
68
|
"VISIBILITY",
|
|
73
69
|
` /gsd status Show progress dashboard (${formattedShortcutPair("dashboard")})`,
|
|
74
70
|
` /gsd parallel watch Open parallel worker monitor (${formattedShortcutPair("parallel")})`,
|
|
75
|
-
" /gsd widget Cycle status widget [full|small|min|off]",
|
|
76
71
|
" /gsd visualize Interactive 10-tab TUI (progress, timeline, deps, metrics, health, agent, changes, knowledge, captures, export)",
|
|
77
72
|
" /gsd queue Show queued/dispatched units and execution order",
|
|
78
73
|
" /gsd history View execution history [--cost] [--phase] [--model] [N]",
|
|
79
74
|
" /gsd changelog Show categorized release notes [version]",
|
|
80
75
|
` /gsd notifications View persistent notification history [clear|tail|filter] (${formattedShortcutPair("notifications")})`,
|
|
81
|
-
" /gsd logs Browse activity logs, debug logs, and metrics
|
|
76
|
+
" /gsd logs Browse activity logs, debug logs, and metrics",
|
|
82
77
|
" /gsd debug Create/list/continue persistent debug sessions",
|
|
83
78
|
"",
|
|
84
79
|
"COURSE CORRECTION",
|
|
@@ -87,9 +82,6 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
87
82
|
" /gsd triage Classify and route pending captures",
|
|
88
83
|
" /gsd skip <unit> Prevent a unit from auto-mode dispatch",
|
|
89
84
|
" /gsd undo Revert last completed unit [--force]",
|
|
90
|
-
" /gsd undo-task Reset a specific task's completion state [DB + markdown]",
|
|
91
|
-
" /gsd reset-slice Reset a slice and all its tasks [DB + markdown]",
|
|
92
|
-
" /gsd rate Rate last unit's model tier [over|ok|under]",
|
|
93
85
|
" /gsd rethink Conversational project reorganization — reorder, park, discard, add milestones",
|
|
94
86
|
" /gsd park [id] Park a milestone — skip without deleting [reason]",
|
|
95
87
|
" /gsd unpark [id] Reactivate a parked milestone",
|
|
@@ -98,15 +90,6 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
98
90
|
" /gsd knowledge <type> <text> Add rule, pattern, or lesson to KNOWLEDGE.md",
|
|
99
91
|
" /gsd codebase [generate|update|stats] Manage the CODEBASE.md cache used in prompt context",
|
|
100
92
|
"",
|
|
101
|
-
"SHIPPING & BACKLOG",
|
|
102
|
-
" /gsd ship Create a PR from milestone artifacts [--dry-run|--draft|--base|--force]",
|
|
103
|
-
" /gsd do <text> Route freeform text to the right GSD command",
|
|
104
|
-
" /gsd session-report Show session cost, tokens, and work summary [--json|--save]",
|
|
105
|
-
" /gsd backlog Manage backlog items [add|promote|remove|list]",
|
|
106
|
-
" /gsd pr-branch Create a clean PR branch filtering .gsd/ commits [--dry-run|--name]",
|
|
107
|
-
" /gsd add-tests Generate tests for completed slices",
|
|
108
|
-
" /gsd scan Rapid codebase assessment [--focus tech|arch|quality|concerns|tech+arch]",
|
|
109
|
-
"",
|
|
110
93
|
"SETUP & CONFIGURATION",
|
|
111
94
|
" /gsd onboarding Re-run setup wizard [--resume|--reset|--step <name>]",
|
|
112
95
|
" /gsd setup Configuration hub [llm|model|search|remote|keys|prefs|onboarding]",
|
|
@@ -119,22 +102,18 @@ export function showHelp(ctx: ExtensionCommandContext, args = ""): void {
|
|
|
119
102
|
" /gsd config (deprecated) Set tool API keys — use /gsd keys instead",
|
|
120
103
|
" /gsd show-config Show effective configuration (models, routing, toggles)",
|
|
121
104
|
" /gsd hooks Show post-unit hook configuration",
|
|
122
|
-
" /gsd run-hook Manually trigger a specific hook",
|
|
123
|
-
" /gsd skill-health Skill lifecycle dashboard",
|
|
124
105
|
" /gsd extensions Manage extensions [list|enable|disable|info]",
|
|
125
106
|
" /gsd fast Toggle OpenAI service tier [on|off|flex|status]",
|
|
126
107
|
" /gsd mcp MCP server status and connectivity [status|check <server>|init [dir]]",
|
|
127
108
|
"",
|
|
128
109
|
"MAINTENANCE",
|
|
129
110
|
" /gsd doctor Diagnose and repair .gsd/ state [audit|fix|heal] [scope]",
|
|
130
|
-
" /gsd forensics Examine execution logs and post-mortem analysis",
|
|
131
111
|
" /gsd export Export milestone/slice results [--json|--markdown|--html] [--all]",
|
|
132
112
|
" /gsd cleanup Remove merged branches or snapshots [branches|snapshots]",
|
|
133
113
|
" /gsd migrate Migrate .planning/ (v1) to .gsd/ (v2) format",
|
|
134
114
|
" /gsd remote Control remote auto-mode [slack|discord|status|disconnect]",
|
|
135
115
|
" /gsd inspect Show SQLite DB diagnostics (schema, row counts, recent entries)",
|
|
136
116
|
" /gsd update Update GSD to the latest version via npm",
|
|
137
|
-
" /gsd language Set or clear the global response language [off|clear|<language>]",
|
|
138
117
|
];
|
|
139
118
|
const full = ["full", "--full", "all"].includes(args.trim().toLowerCase());
|
|
140
119
|
ctx.ui.notify((full ? fullLines : summaryLines).join("\n"), "info");
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
import type { ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
14
14
|
|
|
15
15
|
import { existsSync, readFileSync } from "node:fs";
|
|
16
|
-
import { homedir } from "node:os";
|
|
17
16
|
import { join, resolve } from "node:path";
|
|
18
17
|
|
|
19
18
|
import { ensureProjectWorkflowMcpConfig } from "./mcp-project-config.js";
|
|
@@ -70,7 +69,6 @@ function readMcpConfigs(): McpServerRawConfig[] {
|
|
|
70
69
|
const configPaths = [
|
|
71
70
|
join(process.cwd(), ".mcp.json"),
|
|
72
71
|
join(process.cwd(), ".gsd", "mcp.json"),
|
|
73
|
-
join(process.env.GSD_HOME || join(homedir(), ".gsd"), "mcp.json"),
|
|
74
72
|
];
|
|
75
73
|
|
|
76
74
|
for (const configPath of configPaths) {
|
|
@@ -120,7 +118,7 @@ export function formatMcpStatusReport(servers: McpServerStatus[]): string {
|
|
|
120
118
|
return [
|
|
121
119
|
"No MCP servers configured.",
|
|
122
120
|
"",
|
|
123
|
-
"Add servers to .mcp.json
|
|
121
|
+
"Add servers to .mcp.json or .gsd/mcp.json to enable MCP integrations.",
|
|
124
122
|
"Tip: run /gsd mcp init . to write the local GSD workflow MCP config.",
|
|
125
123
|
"See: https://modelcontextprotocol.io/quickstart",
|
|
126
124
|
].join("\n");
|
|
@@ -1524,18 +1524,6 @@ async function configureAdvanced(ctx: ExtensionCommandContext, prefs: Record<str
|
|
|
1524
1524
|
const tokenCost = await promptBoolean(ctx, "Show token cost in footer", prefs.show_token_cost, false);
|
|
1525
1525
|
if (tokenCost !== undefined) prefs.show_token_cost = tokenCost;
|
|
1526
1526
|
|
|
1527
|
-
const minRequestInterval = await promptInteger(
|
|
1528
|
-
ctx,
|
|
1529
|
-
"Minimum interval between auto-mode LLM requests (ms, 0 to disable)",
|
|
1530
|
-
prefs.min_request_interval_ms,
|
|
1531
|
-
"0",
|
|
1532
|
-
);
|
|
1533
|
-
if (minRequestInterval === "clear") {
|
|
1534
|
-
delete prefs.min_request_interval_ms;
|
|
1535
|
-
} else if (minRequestInterval !== undefined) {
|
|
1536
|
-
prefs.min_request_interval_ms = minRequestInterval;
|
|
1537
|
-
}
|
|
1538
|
-
|
|
1539
1527
|
const widget = await promptEnum(ctx, "Auto-mode widget display", prefs.widget_mode, ["full", "small", "min", "off"], "full");
|
|
1540
1528
|
if (widget !== undefined) prefs.widget_mode = widget;
|
|
1541
1529
|
|
|
@@ -1727,10 +1715,8 @@ export function serializePreferencesToFrontmatter(prefs: Record<string, unknown>
|
|
|
1727
1715
|
"budget_ceiling", "budget_enforcement", "context_pause_threshold",
|
|
1728
1716
|
"notifications", "cmux", "remote_questions", "git",
|
|
1729
1717
|
"stale_commit_threshold_minutes",
|
|
1730
|
-
"min_request_interval_ms",
|
|
1731
1718
|
"post_unit_hooks", "pre_dispatch_hooks",
|
|
1732
|
-
"dynamic_routing", "
|
|
1733
|
-
"service_tier", "flat_rate_providers",
|
|
1719
|
+
"dynamic_routing", "uok", "token_profile", "service_tier", "flat_rate_providers",
|
|
1734
1720
|
"phases", "parallel", "slice_parallel",
|
|
1735
1721
|
"reactive_execution", "gate_evaluation",
|
|
1736
1722
|
"auto_visualize", "auto_report",
|
|
@@ -21,7 +21,7 @@ import {
|
|
|
21
21
|
type UnitMetrics,
|
|
22
22
|
} from "./metrics.js";
|
|
23
23
|
import { loadEffectiveGSDPreferences } from "./preferences.js";
|
|
24
|
-
import { getActiveWorktreeName } from "./worktree-
|
|
24
|
+
import { getActiveWorktreeName } from "./worktree-command.js";
|
|
25
25
|
import { getWorkerBatches, hasActiveWorkers, type WorkerEntry } from "../subagent/worker-registry.js";
|
|
26
26
|
import { formatDuration, padRight, joinColumns, centerLine, fitColumns, STATUS_GLYPH, STATUS_COLOR } from "../shared/mod.js";
|
|
27
27
|
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`.
|
|
@@ -4,7 +4,7 @@ import { basename, dirname, join } from "node:path";
|
|
|
4
4
|
import type { DoctorIssue, DoctorIssueCode } from "./doctor-types.js";
|
|
5
5
|
import { cleanNumberedGsdVariants } from "./repo-identity.js";
|
|
6
6
|
import { milestonesDir, gsdRoot, resolveGsdRootFile } from "./paths.js";
|
|
7
|
-
import { deriveState
|
|
7
|
+
import { deriveState } from "./state.js";
|
|
8
8
|
import { saveFile } from "./files.js";
|
|
9
9
|
import { nativeIsRepo, nativeForEachRef, nativeUpdateRef } from "./native-git-bridge.js";
|
|
10
10
|
import { readCrashLock, isLockProcessAlive, clearLock } from "./crash-recovery.js";
|
|
@@ -12,7 +12,6 @@ import { ensureGitignore, isGsdGitignored } from "./gitignore.js";
|
|
|
12
12
|
import { readAllSessionStatuses, isSessionStale, removeSessionStatus } from "./session-status-io.js";
|
|
13
13
|
import { recoverFailedMigration } from "./migrate-external.js";
|
|
14
14
|
import { splitCompletedKey } from "./forensics.js";
|
|
15
|
-
import { findMilestoneIds } from "./milestone-ids.js";
|
|
16
15
|
|
|
17
16
|
export async function checkRuntimeHealth(
|
|
18
17
|
basePath: string,
|
|
@@ -594,43 +593,6 @@ export async function checkRuntimeHealth(
|
|
|
594
593
|
} catch {
|
|
595
594
|
// Non-fatal — snapshot ref check failed
|
|
596
595
|
}
|
|
597
|
-
|
|
598
|
-
// ── Orphan milestone directories (#4996) ──────────────────────────────
|
|
599
|
-
// Walk every milestone ID on disk. Any dir that has no DB row, no worktree,
|
|
600
|
-
// and no content files is an orphaned stub — it skews nextMilestoneId and
|
|
601
|
-
// was likely created by ensurePreconditions or showHeadlessMilestoneCreation
|
|
602
|
-
// for a phantom forward-reference. Surface as a fixable warning.
|
|
603
|
-
try {
|
|
604
|
-
const milestoneIds = findMilestoneIds(basePath);
|
|
605
|
-
const hasDbFile = existsSync(join(root, "gsd.db"));
|
|
606
|
-
for (const mid of milestoneIds) {
|
|
607
|
-
const isOrphan = isReusableGhostMilestone(basePath, mid)
|
|
608
|
-
|| (!hasDbFile && isGhostMilestone(basePath, mid));
|
|
609
|
-
if (isOrphan) {
|
|
610
|
-
issues.push({
|
|
611
|
-
severity: "warning",
|
|
612
|
-
code: "orphan_milestone_dir",
|
|
613
|
-
scope: "milestone",
|
|
614
|
-
unitId: mid,
|
|
615
|
-
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.`,
|
|
616
|
-
file: `.gsd/milestones/${mid}`,
|
|
617
|
-
fixable: true,
|
|
618
|
-
});
|
|
619
|
-
|
|
620
|
-
if (shouldFix("orphan_milestone_dir")) {
|
|
621
|
-
try {
|
|
622
|
-
const orphanPath = join(milestonesDir(basePath), mid);
|
|
623
|
-
rmSync(orphanPath, { recursive: true, force: true });
|
|
624
|
-
fixesApplied.push(`removed orphan milestone directory: ${mid}`);
|
|
625
|
-
} catch {
|
|
626
|
-
// Non-fatal — leave for manual cleanup
|
|
627
|
-
}
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
} catch {
|
|
632
|
-
// Non-fatal — orphan milestone directory check failed
|
|
633
|
-
}
|
|
634
596
|
}
|
|
635
597
|
|
|
636
598
|
/**
|
|
@@ -80,9 +80,7 @@ export type DoctorIssueCode =
|
|
|
80
80
|
| "db_done_task_no_summary"
|
|
81
81
|
| "db_duplicate_id"
|
|
82
82
|
| "db_unavailable"
|
|
83
|
-
| "projection_drift"
|
|
84
|
-
// Milestone filesystem/DB drift (#4996)
|
|
85
|
-
| "orphan_milestone_dir";
|
|
83
|
+
| "projection_drift";
|
|
86
84
|
|
|
87
85
|
/**
|
|
88
86
|
* Issue codes that represent global or completion-critical state.
|
|
@@ -59,7 +59,7 @@ const NETWORK_RE = /network|ECONNRESET|ETIMEDOUT|ECONNREFUSED|socket hang up|fet
|
|
|
59
59
|
// Context overflow errors (context window/length exceeded) should be treated as server-class
|
|
60
60
|
// transient errors so auto-mode can retry with reduced budget or fall back to a larger-context model.
|
|
61
61
|
// See: https://github.com/gsd-build/gsd-2/issues/4528
|
|
62
|
-
const SERVER_RE = /internal
|
|
62
|
+
const SERVER_RE = /internal server error|500|502|503|overloaded|server_error|api_error|service.?unavailable|context (?:window|length) exceed|context window exceed/i;
|
|
63
63
|
// ECONNRESET/ECONNREFUSED are in NETWORK_RE (same-model retry first).
|
|
64
64
|
const CONNECTION_RE = /terminated|connection.?(?:refused|error)|other side closed|EPIPE|network.?(?:is\s+)?unavailable|stream_exhausted(?:_without_result)?/i;
|
|
65
65
|
// Catch-all for V8 JSON.parse errors: all modern variants end with "in JSON at position \d+".
|
|
@@ -804,7 +804,7 @@ function detectMissingArtifacts(completedKeys: string[], basePath: string, activ
|
|
|
804
804
|
* the forensics memory-bloat guard in forensics-journal.test.ts — per-event
|
|
805
805
|
* detail stays in the journal itself where the LLM can query it on demand.
|
|
806
806
|
*/
|
|
807
|
-
|
|
807
|
+
function detectWorktreeOrphans(
|
|
808
808
|
summary: WorktreeTelemetrySummary,
|
|
809
809
|
anomalies: ForensicAnomaly[],
|
|
810
810
|
): void {
|
|
@@ -822,7 +822,7 @@ export function detectWorktreeOrphans(
|
|
|
822
822
|
reason === "in-progress-unmerged"
|
|
823
823
|
? "Auto-mode exited without completing a milestone; live work sits on an unmerged milestone branch. Run `/gsd auto` to resume, or merge manually."
|
|
824
824
|
: reason === "complete-unmerged"
|
|
825
|
-
? "A completed milestone's branch was never merged back to main. Run `/gsd
|
|
825
|
+
? "A completed milestone's branch was never merged back to main. Run `/gsd health --fix` to resolve."
|
|
826
826
|
: `Reason: ${reason}.`,
|
|
827
827
|
});
|
|
828
828
|
}
|
|
@@ -38,7 +38,6 @@ import {
|
|
|
38
38
|
} from "./native-git-bridge.js";
|
|
39
39
|
import { GSDError, GSD_MERGE_CONFLICT, GSD_GIT_ERROR } from "./errors.js";
|
|
40
40
|
import { getErrorMessage } from "./error-utils.js";
|
|
41
|
-
import { isInfrastructureError } from "./auto/infra-errors.js";
|
|
42
41
|
|
|
43
42
|
// ─── Types ─────────────────────────────────────────────────────────────────
|
|
44
43
|
|
|
@@ -992,17 +991,6 @@ function buildTurnSnapshotLabel(unitType: string, unitId: string): string {
|
|
|
992
991
|
.replace(/^[-/]+|[-/]+$/g, "") || "turn";
|
|
993
992
|
}
|
|
994
993
|
|
|
995
|
-
export function handleTurnGitActionError(action: TurnGitActionMode, err: unknown): TurnGitActionResult {
|
|
996
|
-
if (isInfrastructureError(err)) {
|
|
997
|
-
throw err;
|
|
998
|
-
}
|
|
999
|
-
return {
|
|
1000
|
-
action,
|
|
1001
|
-
status: "failed",
|
|
1002
|
-
error: getErrorMessage(err),
|
|
1003
|
-
};
|
|
1004
|
-
}
|
|
1005
|
-
|
|
1006
994
|
export function runTurnGitAction(args: {
|
|
1007
995
|
basePath: string;
|
|
1008
996
|
action: TurnGitActionMode;
|
|
@@ -1041,7 +1029,11 @@ export function runTurnGitAction(args: {
|
|
|
1041
1029
|
dirty: nativeHasChanges(args.basePath),
|
|
1042
1030
|
};
|
|
1043
1031
|
} catch (err) {
|
|
1044
|
-
return
|
|
1032
|
+
return {
|
|
1033
|
+
action: args.action,
|
|
1034
|
+
status: "failed",
|
|
1035
|
+
error: getErrorMessage(err),
|
|
1036
|
+
};
|
|
1045
1037
|
}
|
|
1046
1038
|
}
|
|
1047
1039
|
|
|
@@ -1405,16 +1405,6 @@ export function checkpointDatabase(): void {
|
|
|
1405
1405
|
|
|
1406
1406
|
let _txDepth = 0;
|
|
1407
1407
|
|
|
1408
|
-
/**
|
|
1409
|
-
* Whether the current call is running inside an active SQLite transaction.
|
|
1410
|
-
* Statement-time recovery paths (e.g. VACUUM retry on a malformed memory
|
|
1411
|
-
* store) MUST gate on this — SQLite refuses VACUUM inside a transaction
|
|
1412
|
-
* and would mask the original error with a secondary "cannot VACUUM" throw.
|
|
1413
|
-
*/
|
|
1414
|
-
export function isInTransaction(): boolean {
|
|
1415
|
-
return _txDepth > 0;
|
|
1416
|
-
}
|
|
1417
|
-
|
|
1418
1408
|
export function transaction<T>(fn: () => T): T {
|
|
1419
1409
|
if (!currentDb) throw new GSDError(GSD_STALE_STATE, "gsd-db: No database open");
|
|
1420
1410
|
|
|
@@ -1429,8 +1419,8 @@ export function transaction<T>(fn: () => T): T {
|
|
|
1429
1419
|
}
|
|
1430
1420
|
}
|
|
1431
1421
|
|
|
1432
|
-
currentDb.exec("BEGIN");
|
|
1433
1422
|
_txDepth++;
|
|
1423
|
+
currentDb.exec("BEGIN");
|
|
1434
1424
|
try {
|
|
1435
1425
|
const result = fn();
|
|
1436
1426
|
currentDb.exec("COMMIT");
|
|
@@ -1462,8 +1452,8 @@ export function readTransaction<T>(fn: () => T): T {
|
|
|
1462
1452
|
}
|
|
1463
1453
|
}
|
|
1464
1454
|
|
|
1465
|
-
currentDb.exec("BEGIN DEFERRED");
|
|
1466
1455
|
_txDepth++;
|
|
1456
|
+
currentDb.exec("BEGIN DEFERRED");
|
|
1467
1457
|
try {
|
|
1468
1458
|
const result = fn();
|
|
1469
1459
|
currentDb.exec("COMMIT");
|
|
@@ -44,9 +44,7 @@ import { showProjectInit, offerMigration } from "./init-wizard.js";
|
|
|
44
44
|
import { validateDirectory } from "./validate-directory.js";
|
|
45
45
|
import { showConfirm } from "../shared/tui.js";
|
|
46
46
|
import { debugLog } from "./debug-logger.js";
|
|
47
|
-
import { findMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
|
|
48
|
-
import { nextMilestoneIdReserved } from "./milestone-id-reservation.js";
|
|
49
|
-
export { nextMilestoneIdReserved } from "./milestone-id-reservation.js";
|
|
47
|
+
import { findMilestoneIds, nextMilestoneId, reserveMilestoneId, getReservedMilestoneIds, clearReservedMilestoneIds } from "./milestone-ids.js";
|
|
50
48
|
import { parkMilestone, discardMilestone } from "./milestone-actions.js";
|
|
51
49
|
import { selectAndApplyModel } from "./auto-model-selection.js";
|
|
52
50
|
import { DISCUSS_TOOLS_ALLOWLIST } from "./constants.js";
|
|
@@ -74,6 +72,20 @@ export {
|
|
|
74
72
|
} from "./guided-flow-queue.js";
|
|
75
73
|
import { logWarning } from "./workflow-logger.js";
|
|
76
74
|
|
|
75
|
+
// ─── ID Generation with Reservation ─────────────────────────────────────────
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Generate the next milestone ID, accounting for reserved IDs, and reserve it.
|
|
79
|
+
* Ensures any preview ID shown in the UI matches what `gsd_milestone_generate_id`
|
|
80
|
+
* will later return.
|
|
81
|
+
*/
|
|
82
|
+
function nextMilestoneIdReserved(existingIds: string[], uniqueEnabled: boolean): string {
|
|
83
|
+
const allIds = [...new Set([...existingIds, ...getReservedMilestoneIds()])];
|
|
84
|
+
const id = nextMilestoneId(allIds, uniqueEnabled);
|
|
85
|
+
reserveMilestoneId(id);
|
|
86
|
+
return id;
|
|
87
|
+
}
|
|
88
|
+
|
|
77
89
|
function needsPlanV2Gate(state: GSDState): boolean {
|
|
78
90
|
return state.phase === "executing"
|
|
79
91
|
|| state.phase === "summarizing"
|
|
@@ -820,19 +832,14 @@ export async function showHeadlessMilestoneCreation(
|
|
|
820
832
|
// Ensure .gsd/ is bootstrapped
|
|
821
833
|
bootstrapGsdProject(basePath);
|
|
822
834
|
|
|
823
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
824
|
-
await ensureDbOpen(basePath);
|
|
825
|
-
|
|
826
835
|
// Generate next milestone ID
|
|
827
836
|
const existingIds = findMilestoneIds(basePath);
|
|
828
837
|
const prefs = loadEffectiveGSDPreferences();
|
|
829
|
-
const nextId = nextMilestoneIdReserved(existingIds, prefs?.preferences?.unique_milestone_ids ?? false
|
|
838
|
+
const nextId = nextMilestoneIdReserved(existingIds, prefs?.preferences?.unique_milestone_ids ?? false);
|
|
830
839
|
|
|
831
|
-
//
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
// lazy-mkdir-safe. Pre-creating the dir before the discuss flow runs leaves
|
|
835
|
-
// an orphan stub if discuss is abandoned — that stub later skews nextMilestoneId.
|
|
840
|
+
// Create milestone directory
|
|
841
|
+
const milestoneDir = join(gsdRoot(basePath), "milestones", nextId, "slices");
|
|
842
|
+
mkdirSync(milestoneDir, { recursive: true });
|
|
836
843
|
|
|
837
844
|
// Build and dispatch the headless discuss prompt
|
|
838
845
|
const prompt = buildHeadlessDiscussPrompt(nextId, seedContext, basePath);
|
|
@@ -1047,11 +1054,9 @@ export async function showDiscuss(
|
|
|
1047
1054
|
fastPathInstruction: "",
|
|
1048
1055
|
}), "gsd-discuss", ctx, "discuss-milestone");
|
|
1049
1056
|
} else if (choice === "skip_milestone") {
|
|
1050
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
1051
|
-
await ensureDbOpen(basePath);
|
|
1052
1057
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1053
1058
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1054
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1059
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1055
1060
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: false, createdAt: Date.now() });
|
|
1056
1061
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId, `New milestone ${nextId}.`, basePath), "gsd-run", ctx, "discuss-milestone");
|
|
1057
1062
|
}
|
|
@@ -1456,7 +1461,7 @@ async function handleMilestoneActions(
|
|
|
1456
1461
|
if (choice === "skip") {
|
|
1457
1462
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1458
1463
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1459
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1464
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1460
1465
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1461
1466
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId,
|
|
1462
1467
|
`New milestone ${nextId}.`,
|
|
@@ -1541,11 +1546,6 @@ export async function showSmartEntry(
|
|
|
1541
1546
|
ensureGitignore(basePath);
|
|
1542
1547
|
untrackRuntimeFiles(basePath);
|
|
1543
1548
|
|
|
1544
|
-
{
|
|
1545
|
-
const { ensureDbOpen } = await import("./bootstrap/dynamic-tools.js");
|
|
1546
|
-
await ensureDbOpen(basePath);
|
|
1547
|
-
}
|
|
1548
|
-
|
|
1549
1549
|
// ── Self-heal stale runtime records from crashed auto-mode sessions ──
|
|
1550
1550
|
selfHealRuntimeRecords(basePath, ctx);
|
|
1551
1551
|
|
|
@@ -1648,7 +1648,7 @@ export async function showSmartEntry(
|
|
|
1648
1648
|
}
|
|
1649
1649
|
|
|
1650
1650
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1651
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1651
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1652
1652
|
const isFirst = milestoneIds.length === 0;
|
|
1653
1653
|
|
|
1654
1654
|
if (isFirst) {
|
|
@@ -1728,7 +1728,7 @@ export async function showSmartEntry(
|
|
|
1728
1728
|
if (choice === "new_milestone") {
|
|
1729
1729
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1730
1730
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1731
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1731
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1732
1732
|
|
|
1733
1733
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1734
1734
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId,
|
|
@@ -1796,7 +1796,7 @@ export async function showSmartEntry(
|
|
|
1796
1796
|
} else if (choice === "skip_milestone") {
|
|
1797
1797
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1798
1798
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1799
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1799
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1800
1800
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1801
1801
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId,
|
|
1802
1802
|
`New milestone ${nextId}.`,
|
|
@@ -1893,7 +1893,7 @@ export async function showSmartEntry(
|
|
|
1893
1893
|
} else if (choice === "skip_milestone") {
|
|
1894
1894
|
const milestoneIds = findMilestoneIds(basePath);
|
|
1895
1895
|
const uniqueMilestoneIds = !!loadEffectiveGSDPreferences()?.preferences?.unique_milestone_ids;
|
|
1896
|
-
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds
|
|
1896
|
+
const nextId = nextMilestoneIdReserved(milestoneIds, uniqueMilestoneIds);
|
|
1897
1897
|
pendingAutoStartMap.set(basePath, { ctx, pi, basePath, milestoneId: nextId, step: stepMode, createdAt: Date.now() });
|
|
1898
1898
|
await dispatchWorkflow(pi, await prepareAndBuildDiscussPrompt(ctx, pi, nextId,
|
|
1899
1899
|
`New milestone ${nextId}.`,
|
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
isDbAvailable,
|
|
8
8
|
_getAdapter,
|
|
9
9
|
transaction,
|
|
10
|
-
isInTransaction,
|
|
11
10
|
insertMemoryRow,
|
|
12
11
|
rewriteMemoryId,
|
|
13
12
|
updateMemoryContentRow,
|
|
@@ -20,7 +19,6 @@ import {
|
|
|
20
19
|
deleteMemoryRelationsFor,
|
|
21
20
|
} from './gsd-db.js';
|
|
22
21
|
import { createMemoryRelation, isValidRelation } from './memory-relations.js';
|
|
23
|
-
import { logWarning } from './workflow-logger.js';
|
|
24
22
|
|
|
25
23
|
// ─── Types ──────────────────────────────────────────────────────────────────
|
|
26
24
|
|
|
@@ -489,13 +487,7 @@ export function nextMemoryId(): string {
|
|
|
489
487
|
* Insert a new memory with a race-safe auto-assigned ID.
|
|
490
488
|
* Uses AUTOINCREMENT seq to derive the ID after insert, avoiding
|
|
491
489
|
* the read-then-write race in concurrent scenarios (e.g. worktrees).
|
|
492
|
-
* Returns the assigned ID, or null
|
|
493
|
-
*
|
|
494
|
-
* Throws on genuine SQL errors (corruption, missing tables, constraint
|
|
495
|
-
* violations) so callers can surface the underlying message instead of
|
|
496
|
-
* collapsing the failure to a generic "create_failed". See issue #4967 —
|
|
497
|
-
* the previous bare-catch swallowed "database disk image is malformed"
|
|
498
|
-
* errors, leaving the memory subsystem broken without any signal.
|
|
490
|
+
* Returns the assigned ID, or null on failure.
|
|
499
491
|
*/
|
|
500
492
|
export function createMemory(fields: {
|
|
501
493
|
category: string;
|
|
@@ -512,70 +504,34 @@ export function createMemory(fields: {
|
|
|
512
504
|
if (!adapter) return null;
|
|
513
505
|
|
|
514
506
|
try {
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
const
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
|
|
507
|
+
const now = new Date().toISOString();
|
|
508
|
+
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
509
|
+
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
510
|
+
insertMemoryRow({
|
|
511
|
+
id: placeholder,
|
|
512
|
+
category: fields.category,
|
|
513
|
+
content: fields.content,
|
|
514
|
+
confidence: fields.confidence ?? 0.8,
|
|
515
|
+
sourceUnitType: fields.source_unit_type ?? null,
|
|
516
|
+
sourceUnitId: fields.source_unit_id ?? null,
|
|
517
|
+
createdAt: now,
|
|
518
|
+
updatedAt: now,
|
|
519
|
+
scope: fields.scope ?? 'project',
|
|
520
|
+
tags: fields.tags ?? [],
|
|
521
|
+
structuredFields: fields.structuredFields ?? null,
|
|
522
|
+
});
|
|
523
|
+
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
524
|
+
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
525
|
+
if (!row) return placeholder; // fallback — should not happen
|
|
526
|
+
const seq = row['seq'] as number;
|
|
527
|
+
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
528
|
+
rewriteMemoryId(placeholder, realId);
|
|
529
|
+
return realId;
|
|
530
|
+
} catch {
|
|
531
|
+
return null;
|
|
538
532
|
}
|
|
539
533
|
}
|
|
540
534
|
|
|
541
|
-
function doCreateMemory(
|
|
542
|
-
adapter: NonNullable<ReturnType<typeof _getAdapter>>,
|
|
543
|
-
fields: {
|
|
544
|
-
category: string;
|
|
545
|
-
content: string;
|
|
546
|
-
confidence?: number;
|
|
547
|
-
source_unit_type?: string;
|
|
548
|
-
source_unit_id?: string;
|
|
549
|
-
scope?: string;
|
|
550
|
-
tags?: string[];
|
|
551
|
-
structuredFields?: Record<string, unknown> | null;
|
|
552
|
-
},
|
|
553
|
-
): string {
|
|
554
|
-
const now = new Date().toISOString();
|
|
555
|
-
// Insert with a temporary placeholder ID — seq is auto-assigned
|
|
556
|
-
const placeholder = `_TMP_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
557
|
-
insertMemoryRow({
|
|
558
|
-
id: placeholder,
|
|
559
|
-
category: fields.category,
|
|
560
|
-
content: fields.content,
|
|
561
|
-
confidence: fields.confidence ?? 0.8,
|
|
562
|
-
sourceUnitType: fields.source_unit_type ?? null,
|
|
563
|
-
sourceUnitId: fields.source_unit_id ?? null,
|
|
564
|
-
createdAt: now,
|
|
565
|
-
updatedAt: now,
|
|
566
|
-
scope: fields.scope ?? 'project',
|
|
567
|
-
tags: fields.tags ?? [],
|
|
568
|
-
structuredFields: fields.structuredFields ?? null,
|
|
569
|
-
});
|
|
570
|
-
// Derive the real ID from the assigned seq (SELECT is still fine via adapter)
|
|
571
|
-
const row = adapter.prepare('SELECT seq FROM memories WHERE id = :id').get({ ':id': placeholder });
|
|
572
|
-
if (!row) return placeholder; // fallback — should not happen
|
|
573
|
-
const seq = row['seq'] as number;
|
|
574
|
-
const realId = `MEM${String(seq).padStart(3, '0')}`;
|
|
575
|
-
rewriteMemoryId(placeholder, realId);
|
|
576
|
-
return realId;
|
|
577
|
-
}
|
|
578
|
-
|
|
579
535
|
/**
|
|
580
536
|
* Update a memory's content and optionally its confidence.
|
|
581
537
|
*/
|
|
@@ -772,17 +728,8 @@ export function applyMemoryActions(
|
|
|
772
728
|
}
|
|
773
729
|
enforceMemoryCap();
|
|
774
730
|
});
|
|
775
|
-
} catch
|
|
776
|
-
//
|
|
777
|
-
// degraded memory subsystem (e.g. malformed store, missing tables) is
|
|
778
|
-
// visible to forensics instead of silently dropping every CREATE — see
|
|
779
|
-
// issue #4967, where this swallow combined with createMemory's bare
|
|
780
|
-
// catch hid SQLite corruption from the auto-mode flow entirely.
|
|
781
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
782
|
-
logWarning(
|
|
783
|
-
'memory-store',
|
|
784
|
-
`applyMemoryActions failed (memory subsystem degraded): ${message}`,
|
|
785
|
-
);
|
|
731
|
+
} catch {
|
|
732
|
+
// non-fatal — transaction will have rolled back
|
|
786
733
|
}
|
|
787
734
|
}
|
|
788
735
|
|