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
|
@@ -193,8 +193,6 @@ export class AutoSession {
|
|
|
193
193
|
lastPromptCharCount: number | undefined;
|
|
194
194
|
lastBaselineCharCount: number | undefined;
|
|
195
195
|
pendingQuickTasks: CaptureEntry[] = [];
|
|
196
|
-
/** Timestamp of the last LLM request dispatch (ms since epoch). Used for proactive rate limiting. */
|
|
197
|
-
lastRequestTimestamp = 0;
|
|
198
196
|
|
|
199
197
|
// ── Safety harness ───────────────────────────────────────────────────────
|
|
200
198
|
/** SHA of the pre-unit git checkpoint ref. Cleared on success or rollback. */
|
|
@@ -296,7 +294,6 @@ export class AutoSession {
|
|
|
296
294
|
this.lastPromptCharCount = undefined;
|
|
297
295
|
this.lastBaselineCharCount = undefined;
|
|
298
296
|
this.pendingQuickTasks = [];
|
|
299
|
-
this.lastRequestTimestamp = 0;
|
|
300
297
|
this.sidecarQueue = [];
|
|
301
298
|
this.rewriteAttemptCount = 0;
|
|
302
299
|
this.consecutiveCompleteBootstraps = 0;
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
|
|
10
10
|
import type { ExtensionContext } from "@gsd/pi-coding-agent";
|
|
11
11
|
import { parseUnitId } from "./unit-id.js";
|
|
12
|
-
import { MILESTONE_ID_RE } from "./milestone-ids.js";
|
|
13
12
|
import { appendEvent } from "./workflow-events.js";
|
|
14
13
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
15
14
|
import { clearParseCache } from "./files.js";
|
|
@@ -214,40 +213,13 @@ function getChangedFilesSinceBranch(basePath: string, targetBranch: string): { o
|
|
|
214
213
|
function getChangedFilesFromMilestoneTaggedCommits(
|
|
215
214
|
basePath: string,
|
|
216
215
|
milestoneId: string,
|
|
217
|
-
): { ok: boolean; matched: boolean; files: string[] } {
|
|
218
|
-
// Primary: path-scoped log against .gsd/milestones/<id>. Fast and unbounded
|
|
219
|
-
// by depth when .gsd/ is tracked in git.
|
|
220
|
-
const scoped = scanGsdTaggedCommits(basePath, milestoneId, [
|
|
221
|
-
"log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`,
|
|
222
|
-
]);
|
|
223
|
-
if (!scoped.ok) return scoped;
|
|
224
|
-
if (scoped.matched) return scoped;
|
|
225
|
-
|
|
226
|
-
// Fallback (#5033): when .gsd/ is gitignored / external / untracked, the
|
|
227
|
-
// path-scoped scan matches no commits even though GSD-tagged commits
|
|
228
|
-
// referencing the milestone exist on the integration branch. Re-scan all
|
|
229
|
-
// of HEAD's history and rely on commitMatchesMilestone to bind by
|
|
230
|
-
// explicit milestone mention in the message body.
|
|
231
|
-
//
|
|
232
|
-
// Intentionally unbounded — symmetric with the primary scan, and avoids
|
|
233
|
-
// reintroducing the rolling-depth failure class removed in #4699 where
|
|
234
|
-
// milestone evidence aged out behind unrelated activity.
|
|
235
|
-
return scanGsdTaggedCommits(basePath, milestoneId, [
|
|
236
|
-
"log", "--format=%H%x1f%B%x1e", "HEAD",
|
|
237
|
-
]);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
function scanGsdTaggedCommits(
|
|
241
|
-
basePath: string,
|
|
242
|
-
milestoneId: string,
|
|
243
|
-
gitArgs: readonly string[],
|
|
244
216
|
): { ok: boolean; matched: boolean; files: string[] } {
|
|
245
217
|
try {
|
|
246
|
-
const logOutput = execFileSync(
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
encoding: "utf-8",
|
|
250
|
-
|
|
218
|
+
const logOutput = execFileSync(
|
|
219
|
+
"git",
|
|
220
|
+
["log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`],
|
|
221
|
+
{ cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
|
|
222
|
+
);
|
|
251
223
|
const records = logOutput
|
|
252
224
|
.split("\x1e")
|
|
253
225
|
.map((record) => record.trim())
|
|
@@ -298,25 +270,15 @@ function commitMatchesMilestone(message: string, milestoneId: string, files: rea
|
|
|
298
270
|
if (commitTrailerStartsWithMilestone(message, milestoneId)) return true;
|
|
299
271
|
|
|
300
272
|
// Meaningful execute-task commits currently store task scope as Sxx/Tyy
|
|
301
|
-
// rather than Mxx/Sxx/Tyy. Bind those commits back to the milestone
|
|
302
|
-
//
|
|
303
|
-
// where .gsd/ is gitignored/external (#5033) — the message explicitly
|
|
304
|
-
// names the milestone.
|
|
273
|
+
// rather than Mxx/Sxx/Tyy. Bind those commits back to the milestone only
|
|
274
|
+
// when the commit also touched this milestone's artifacts.
|
|
305
275
|
if (/^GSD-Task:\s*S[^/\s]+\/T\S+/m.test(message)) {
|
|
306
|
-
|
|
307
|
-
if (commitMessageMentionsMilestone(message, milestoneId)) return true;
|
|
276
|
+
return files.some((file) => isMilestoneArtifactPath(file, milestoneId));
|
|
308
277
|
}
|
|
309
278
|
|
|
310
279
|
return false;
|
|
311
280
|
}
|
|
312
281
|
|
|
313
|
-
function commitMessageMentionsMilestone(message: string, milestoneId: string): boolean {
|
|
314
|
-
if (!MILESTONE_ID_RE.test(milestoneId)) return false;
|
|
315
|
-
|
|
316
|
-
const escapedMilestone = milestoneId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
317
|
-
return new RegExp(`\\b${escapedMilestone}\\b`).test(message);
|
|
318
|
-
}
|
|
319
|
-
|
|
320
282
|
function commitTrailerStartsWithMilestone(message: string, milestoneId: string): boolean {
|
|
321
283
|
const escapedMilestone = milestoneId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
322
284
|
const trailerPattern = new RegExp(
|
|
@@ -315,7 +315,7 @@ export function auditOrphanedMilestoneBranches(
|
|
|
315
315
|
// Branch is NOT merged — preserve for safety, warn the user
|
|
316
316
|
warnings.push(
|
|
317
317
|
`Branch ${branch} exists for completed milestone ${milestoneId} but is NOT merged into ${mainBranch}. ` +
|
|
318
|
-
`This may contain unmerged work. Merge manually or run \`/gsd
|
|
318
|
+
`This may contain unmerged work. Merge manually or run \`/gsd health --fix\` to resolve.`,
|
|
319
319
|
);
|
|
320
320
|
|
|
321
321
|
// #4764 telemetry
|
|
@@ -151,6 +151,8 @@ export const DETERMINISTIC_POLICY_ERROR_STRINGS = [
|
|
|
151
151
|
*/
|
|
152
152
|
export function isDeterministicPolicyError(errorMsg: string): boolean {
|
|
153
153
|
if (!errorMsg) return false;
|
|
154
|
-
return
|
|
155
|
-
|
|
154
|
+
return (
|
|
155
|
+
DETERMINISTIC_POLICY_ERROR_RE.test(errorMsg) ||
|
|
156
|
+
DETERMINISTIC_POLICY_ERROR_STRINGS.some(s => errorMsg.includes(s))
|
|
157
|
+
);
|
|
156
158
|
}
|
|
@@ -990,12 +990,6 @@ export function autoWorktreeBranch(milestoneId: string): string {
|
|
|
990
990
|
return `milestone/${milestoneId}`;
|
|
991
991
|
}
|
|
992
992
|
|
|
993
|
-
function normalizeLocalBranchRef(branch: string): string {
|
|
994
|
-
return branch.startsWith("refs/heads/")
|
|
995
|
-
? branch.slice("refs/heads/".length)
|
|
996
|
-
: branch;
|
|
997
|
-
}
|
|
998
|
-
|
|
999
993
|
// ─── Branch-mode Entry ─────────────────────────────────────────────────────
|
|
1000
994
|
|
|
1001
995
|
/**
|
|
@@ -1202,16 +1196,6 @@ export function createAutoWorktree(
|
|
|
1202
1196
|
basePath: string,
|
|
1203
1197
|
milestoneId: string,
|
|
1204
1198
|
): string {
|
|
1205
|
-
// Check if repo has commits — git worktree requires a valid HEAD
|
|
1206
|
-
try {
|
|
1207
|
-
execFileSync("git", ["rev-parse", "--verify", "HEAD"], { cwd: basePath, stdio: "pipe" });
|
|
1208
|
-
} catch {
|
|
1209
|
-
throw new GSDError(
|
|
1210
|
-
GSD_GIT_ERROR,
|
|
1211
|
-
`Cannot create worktree: repository has no commits yet. Worktree isolation requires at least one commit.`,
|
|
1212
|
-
);
|
|
1213
|
-
}
|
|
1214
|
-
|
|
1215
1199
|
const branch = autoWorktreeBranch(milestoneId);
|
|
1216
1200
|
|
|
1217
1201
|
// Check if the milestone branch already exists — it survives auto-mode
|
|
@@ -1652,10 +1636,6 @@ export function mergeMilestoneToMain(
|
|
|
1652
1636
|
}
|
|
1653
1637
|
|
|
1654
1638
|
// 3. chdir to original base
|
|
1655
|
-
// Note: previousCwd captures the cwd at this point — i.e. the worktree cwd
|
|
1656
|
-
// entering the function. Subsequent throws restore to previousCwd, leaving
|
|
1657
|
-
// the caller in worktree-cwd; callers (worktree-resolver) are responsible
|
|
1658
|
-
// for any further cwd movement on the error path.
|
|
1659
1639
|
const previousCwd = process.cwd();
|
|
1660
1640
|
process.chdir(originalBasePath_);
|
|
1661
1641
|
|
|
@@ -1676,24 +1656,6 @@ export function mergeMilestoneToMain(
|
|
|
1676
1656
|
const mainBranch =
|
|
1677
1657
|
integrationBranch ?? validatedPrefBranch ?? nativeDetectMainBranch(originalBasePath_);
|
|
1678
1658
|
|
|
1679
|
-
// Fail closed when the resolved integration branch is the milestone branch
|
|
1680
|
-
// itself (#5024). Stale or corrupt metadata (e.g. integrationBranch recorded
|
|
1681
|
-
// as "milestone/<MID>") would otherwise let the squash merge resolve to a
|
|
1682
|
-
// self-merge: nothing-to-commit + empty self-diff in the post-merge safety
|
|
1683
|
-
// check (#1792) collapse to a false success, and the worktree-resolver
|
|
1684
|
-
// emits worktree-merged for work that never landed on a distinct
|
|
1685
|
-
// integration branch.
|
|
1686
|
-
if (normalizeLocalBranchRef(mainBranch) === milestoneBranch) {
|
|
1687
|
-
process.chdir(previousCwd);
|
|
1688
|
-
throw new GSDError(
|
|
1689
|
-
GSD_GIT_ERROR,
|
|
1690
|
-
`Resolved integration branch "${mainBranch}" is the same ref as milestone branch ` +
|
|
1691
|
-
`"${milestoneBranch}" — refusing to self-merge. Integration branch metadata is invalid; ` +
|
|
1692
|
-
`set a distinct main_branch in GSD preferences or repair the milestone integration record ` +
|
|
1693
|
-
`before retrying milestone completion.`,
|
|
1694
|
-
);
|
|
1695
|
-
}
|
|
1696
|
-
|
|
1697
1659
|
// Remove transient project-root state files before any branch or merge
|
|
1698
1660
|
// operation. Untracked milestone metadata can otherwise block squash merges.
|
|
1699
1661
|
clearProjectRootStateFiles(originalBasePath_, milestoneId);
|
|
@@ -232,6 +232,7 @@ import { reorderForCaching } from "./prompt-ordering.js";
|
|
|
232
232
|
// ─── Session State ─────────────────────────────────────────────────────────
|
|
233
233
|
|
|
234
234
|
import {
|
|
235
|
+
AutoSession,
|
|
235
236
|
STUB_RECOVERY_THRESHOLD,
|
|
236
237
|
NEW_SESSION_TIMEOUT_MS,
|
|
237
238
|
} from "./auto/session.js";
|
|
@@ -249,12 +250,11 @@ export type {
|
|
|
249
250
|
UnitRouting,
|
|
250
251
|
StartModel,
|
|
251
252
|
} from "./auto/session.js";
|
|
252
|
-
import { autoSession as s } from "./auto-runtime-state.js";
|
|
253
253
|
|
|
254
254
|
// ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
|
|
255
255
|
// ALL mutable auto-mode state lives in the AutoSession class (auto/session.ts).
|
|
256
256
|
// This file must NOT declare module-level `let` or `var` variables for state.
|
|
257
|
-
// The single
|
|
257
|
+
// The single `s` instance below is the only mutable module-level binding.
|
|
258
258
|
//
|
|
259
259
|
// When adding features or fixing bugs:
|
|
260
260
|
// - New mutable state → add a property to AutoSession, not a module-level variable
|
|
@@ -263,6 +263,7 @@ import { autoSession as s } from "./auto-runtime-state.js";
|
|
|
263
263
|
//
|
|
264
264
|
// Tests in auto-session-encapsulation.test.ts enforce this invariant.
|
|
265
265
|
// ─────────────────────────────────────────────────────────────────────────────
|
|
266
|
+
const s = new AutoSession();
|
|
266
267
|
|
|
267
268
|
/** Throttle STATE.md rebuilds — at most once per 30 seconds */
|
|
268
269
|
const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
|
|
@@ -1811,7 +1812,7 @@ const widgetStateAccessors: WidgetStateAccessors = {
|
|
|
1811
1812
|
* Ensure directories, branches, and other prerequisites exist before
|
|
1812
1813
|
* dispatching a unit. The LLM should never need to mkdir or git checkout.
|
|
1813
1814
|
*/
|
|
1814
|
-
|
|
1815
|
+
function ensurePreconditions(
|
|
1815
1816
|
unitType: string,
|
|
1816
1817
|
unitId: string,
|
|
1817
1818
|
base: string,
|
|
@@ -1821,17 +1822,6 @@ export function ensurePreconditions(
|
|
|
1821
1822
|
|
|
1822
1823
|
const mDir = resolveMilestonePath(base, mid);
|
|
1823
1824
|
if (!mDir) {
|
|
1824
|
-
// Fix #4996: When dispatching a slice unit against an unrecognised milestone,
|
|
1825
|
-
// only create the directory if the milestone has a DB row.
|
|
1826
|
-
// Without this guard, forward-referenced unit IDs (e.g. from REQUIREMENTS.md)
|
|
1827
|
-
// silently scaffold empty stub directories that later skew nextMilestoneId.
|
|
1828
|
-
if (sid !== undefined) {
|
|
1829
|
-
const hasDbRow = isDbAvailable() && getMilestone(mid) != null;
|
|
1830
|
-
if (!hasDbRow) {
|
|
1831
|
-
logWarning("engine", `ensurePreconditions: skipping mkdir for unrecognised milestone ${mid} referenced by slice unit ${unitId} — no DB row exists`, { file: "auto.ts" });
|
|
1832
|
-
return;
|
|
1833
|
-
}
|
|
1834
|
-
}
|
|
1835
1825
|
const newDir = join(milestonesDir(base), mid);
|
|
1836
1826
|
mkdirSync(join(newDir, "slices"), { recursive: true });
|
|
1837
1827
|
}
|
|
@@ -2,15 +2,24 @@ import { Type } from "@sinclair/typebox";
|
|
|
2
2
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
3
3
|
import { Text } from "@gsd/pi-tui";
|
|
4
4
|
|
|
5
|
+
import { findMilestoneIds, nextMilestoneId, claimReservedId, getReservedMilestoneIds } from "../guided-flow.js";
|
|
5
6
|
import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
6
7
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
7
8
|
import { StringEnum } from "@gsd/pi-ai";
|
|
8
9
|
import { logError } from "../workflow-logger.js";
|
|
9
10
|
import { getErrorMessage } from "../error-utils.js";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
import {
|
|
12
|
+
executeCompleteMilestone,
|
|
13
|
+
executePlanMilestone,
|
|
14
|
+
executePlanSlice,
|
|
15
|
+
executeReplanSlice,
|
|
16
|
+
executeReassessRoadmap,
|
|
17
|
+
executeSaveGateResult,
|
|
18
|
+
executeSliceComplete,
|
|
19
|
+
executeSummarySave,
|
|
20
|
+
executeTaskComplete,
|
|
21
|
+
executeValidateMilestone,
|
|
22
|
+
} from "../tools/workflow-tool-executors.js";
|
|
14
23
|
|
|
15
24
|
/**
|
|
16
25
|
* Register an alias tool that shares the same execute function as its canonical counterpart.
|
|
@@ -293,7 +302,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
293
302
|
// ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
|
|
294
303
|
|
|
295
304
|
const summarySaveExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
296
|
-
const { executeSummarySave } = await loadWorkflowExecutors();
|
|
297
305
|
return executeSummarySave(params, process.cwd());
|
|
298
306
|
};
|
|
299
307
|
|
|
@@ -346,7 +354,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
346
354
|
try {
|
|
347
355
|
// Claim a reserved ID if the guided-flow already previewed one to the user.
|
|
348
356
|
// This guarantees the ID shown in the UI matches the one materialised on disk.
|
|
349
|
-
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId } = await import("../guided-flow.js");
|
|
350
357
|
const reserved = claimReservedId();
|
|
351
358
|
if (reserved) {
|
|
352
359
|
await ensureMilestoneDbRow(reserved);
|
|
@@ -428,7 +435,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
428
435
|
// ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
|
|
429
436
|
|
|
430
437
|
const planMilestoneExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
431
|
-
const { executePlanMilestone } = await loadWorkflowExecutors();
|
|
432
438
|
return executePlanMilestone(params, process.cwd());
|
|
433
439
|
};
|
|
434
440
|
|
|
@@ -498,7 +504,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
498
504
|
// ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
|
|
499
505
|
|
|
500
506
|
const planSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
501
|
-
const { executePlanSlice } = await loadWorkflowExecutors();
|
|
502
507
|
return executePlanSlice(params, process.cwd());
|
|
503
508
|
};
|
|
504
509
|
|
|
@@ -621,7 +626,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
621
626
|
// ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
|
|
622
627
|
|
|
623
628
|
const taskCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
624
|
-
const { executeTaskComplete } = await loadWorkflowExecutors();
|
|
625
629
|
return executeTaskComplete(params, process.cwd());
|
|
626
630
|
};
|
|
627
631
|
|
|
@@ -692,7 +696,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
692
696
|
// ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
|
|
693
697
|
|
|
694
698
|
const sliceCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
695
|
-
const { executeSliceComplete } = await loadWorkflowExecutors();
|
|
696
699
|
return executeSliceComplete(params, process.cwd());
|
|
697
700
|
};
|
|
698
701
|
|
|
@@ -885,7 +888,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
885
888
|
// ─── gsd_complete_milestone ────────────────────────────────────────────
|
|
886
889
|
|
|
887
890
|
const milestoneCompleteExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
888
|
-
const { executeCompleteMilestone } = await loadWorkflowExecutors();
|
|
889
891
|
return executeCompleteMilestone(params, process.cwd());
|
|
890
892
|
};
|
|
891
893
|
|
|
@@ -931,7 +933,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
931
933
|
// ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
|
|
932
934
|
|
|
933
935
|
const milestoneValidateExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
934
|
-
const { executeValidateMilestone } = await loadWorkflowExecutors();
|
|
935
936
|
return executeValidateMilestone(params, process.cwd());
|
|
936
937
|
};
|
|
937
938
|
|
|
@@ -969,7 +970,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
969
970
|
// ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
|
|
970
971
|
|
|
971
972
|
const replanSliceExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
972
|
-
const { executeReplanSlice } = await loadWorkflowExecutors();
|
|
973
973
|
return executeReplanSlice(params, process.cwd());
|
|
974
974
|
};
|
|
975
975
|
|
|
@@ -1020,7 +1020,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1020
1020
|
// ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
|
|
1021
1021
|
|
|
1022
1022
|
const reassessRoadmapExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1023
|
-
const { executeReassessRoadmap } = await loadWorkflowExecutors();
|
|
1024
1023
|
return executeReassessRoadmap(params, process.cwd());
|
|
1025
1024
|
};
|
|
1026
1025
|
|
|
@@ -1276,7 +1275,6 @@ export function registerDbTools(pi: ExtensionAPI): void {
|
|
|
1276
1275
|
// ─── gsd_save_gate_result ──────────────────────────────────────────────
|
|
1277
1276
|
|
|
1278
1277
|
const saveGateResultExecute = async (_toolCallId: string, params: any, _signal: AbortSignal | undefined, _onUpdate: unknown, _ctx: unknown) => {
|
|
1279
|
-
const { executeSaveGateResult } = await loadWorkflowExecutors();
|
|
1280
1278
|
return executeSaveGateResult(params, process.cwd());
|
|
1281
1279
|
};
|
|
1282
1280
|
|
|
@@ -6,6 +6,12 @@
|
|
|
6
6
|
import { Type } from "@sinclair/typebox";
|
|
7
7
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
8
8
|
|
|
9
|
+
import { executeGsdExec } from "../tools/exec-tool.js";
|
|
10
|
+
import { executeExecSearch } from "../tools/exec-search-tool.js";
|
|
11
|
+
import { executeResume } from "../tools/resume-tool.js";
|
|
12
|
+
import { loadEffectiveGSDPreferences } from "../preferences.js";
|
|
13
|
+
import { logWarning } from "../workflow-logger.js";
|
|
14
|
+
|
|
9
15
|
export function registerExecTools(pi: ExtensionAPI): void {
|
|
10
16
|
pi.registerTool({
|
|
11
17
|
name: "gsd_exec",
|
|
@@ -40,12 +46,7 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
40
46
|
),
|
|
41
47
|
}),
|
|
42
48
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
43
|
-
|
|
44
|
-
import("../tools/exec-tool.js"),
|
|
45
|
-
import("../preferences.js"),
|
|
46
|
-
import("../workflow-logger.js"),
|
|
47
|
-
]);
|
|
48
|
-
let prefs: ReturnType<typeof loadEffectiveGSDPreferences> | null = null;
|
|
49
|
+
let prefs: Awaited<ReturnType<typeof loadEffectiveGSDPreferences>> | null = null;
|
|
49
50
|
try {
|
|
50
51
|
prefs = loadEffectiveGSDPreferences();
|
|
51
52
|
} catch (err) {
|
|
@@ -80,7 +81,6 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
80
81
|
limit: Type.Optional(Type.Number({ description: "Max results (default 20, cap 200)", minimum: 1, maximum: 200 })),
|
|
81
82
|
}),
|
|
82
83
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
83
|
-
const { executeExecSearch } = await import("../tools/exec-search-tool.js");
|
|
84
84
|
return executeExecSearch(params as Parameters<typeof executeExecSearch>[0], {
|
|
85
85
|
baseDir: process.cwd(),
|
|
86
86
|
});
|
|
@@ -101,7 +101,6 @@ export function registerExecTools(pi: ExtensionAPI): void {
|
|
|
101
101
|
],
|
|
102
102
|
parameters: Type.Object({}),
|
|
103
103
|
async execute(_toolCallId, params, _signal, _onUpdate, _ctx) {
|
|
104
|
-
const { executeResume } = await import("../tools/resume-tool.js");
|
|
105
104
|
return executeResume(params as Parameters<typeof executeResume>[0], {
|
|
106
105
|
baseDir: process.cwd(),
|
|
107
106
|
});
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
import { Type } from "@sinclair/typebox";
|
|
4
4
|
import type { ExtensionAPI } from "@gsd/pi-coding-agent";
|
|
5
5
|
import { ensureDbOpen } from "./dynamic-tools.js";
|
|
6
|
+
import { executeMilestoneStatus } from "../tools/workflow-tool-executors.js";
|
|
7
|
+
import { checkpointDatabase } from "../gsd-db.js";
|
|
6
8
|
|
|
7
9
|
export function registerQueryTools(pi: ExtensionAPI): void {
|
|
8
10
|
pi.registerTool({
|
|
@@ -27,7 +29,6 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
27
29
|
details: { operation: "milestone_status", error: "db_unavailable" },
|
|
28
30
|
};
|
|
29
31
|
}
|
|
30
|
-
const { executeMilestoneStatus } = await import("../tools/workflow-tool-executors.js");
|
|
31
32
|
return executeMilestoneStatus(params);
|
|
32
33
|
},
|
|
33
34
|
});
|
|
@@ -54,7 +55,6 @@ export function registerQueryTools(pi: ExtensionAPI): void {
|
|
|
54
55
|
details: { operation: "checkpoint_db", error: "db_unavailable" },
|
|
55
56
|
};
|
|
56
57
|
}
|
|
57
|
-
const { checkpointDatabase } = await import("../gsd-db.js");
|
|
58
58
|
checkpointDatabase();
|
|
59
59
|
return {
|
|
60
60
|
content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
4
4
|
|
|
5
5
|
import { registerExitCommand } from "../exit-command.js";
|
|
6
|
-
import {
|
|
6
|
+
import { registerWorktreeCommand } from "../worktree-command.js";
|
|
7
7
|
import type { GSDEcosystemBeforeAgentStartHandler } from "../ecosystem/gsd-extension-api.js";
|
|
8
|
+
import { loadEcosystemExtensions } from "../ecosystem/loader.js";
|
|
8
9
|
import { registerDbTools } from "./db-tools.js";
|
|
9
10
|
import { registerDynamicTools } from "./dynamic-tools.js";
|
|
10
11
|
import { registerExecTools } from "./exec-tools.js";
|
|
@@ -70,7 +71,7 @@ function installEpipeGuard(): void {
|
|
|
70
71
|
export function registerGsdExtension(pi: ExtensionAPI): void {
|
|
71
72
|
// Note: registerGSDCommand is called by index.ts before this function,
|
|
72
73
|
// so we intentionally skip it here to avoid double-registration.
|
|
73
|
-
|
|
74
|
+
registerWorktreeCommand(pi);
|
|
74
75
|
registerExitCommand(pi);
|
|
75
76
|
|
|
76
77
|
// Wire the Layer 2 event emitter bridge so deeply-nested GSD code can emit
|
|
@@ -115,14 +116,12 @@ export function registerGsdExtension(pi: ExtensionAPI): void {
|
|
|
115
116
|
["cmux-events", () => initCmuxEventListeners(pi.events)],
|
|
116
117
|
["hooks", () => registerHooks(pi, ecosystemHandlers)],
|
|
117
118
|
["ecosystem", () => {
|
|
118
|
-
void
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
);
|
|
125
|
-
});
|
|
119
|
+
void loadEcosystemExtensions(pi, ecosystemHandlers).catch((err) => {
|
|
120
|
+
logWarning(
|
|
121
|
+
"ecosystem",
|
|
122
|
+
`loader failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
123
|
+
);
|
|
124
|
+
});
|
|
126
125
|
}],
|
|
127
126
|
];
|
|
128
127
|
|