gsd-pi 2.78.0 → 2.78.1-dev.82bcf6b71
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 +60 -23
- package/dist/bundled-resource-path.d.ts +7 -0
- package/dist/bundled-resource-path.js +34 -2
- package/dist/claude-cli-check.js +104 -33
- package/dist/cli-policy.d.ts +13 -0
- package/dist/cli-policy.js +17 -0
- package/dist/cli.js +95 -55
- package/dist/headless-query.d.ts +22 -0
- package/dist/headless-query.js +43 -8
- package/dist/headless.d.ts +10 -0
- package/dist/headless.js +16 -1
- package/dist/loader.js +9 -13
- package/dist/onboarding.d.ts +10 -0
- package/dist/onboarding.js +2 -2
- package/dist/provider-migrations.d.ts +2 -2
- package/dist/provider-migrations.js +5 -2
- package/dist/resource-loader.d.ts +5 -2
- package/dist/resource-loader.js +30 -13
- package/dist/resources/.managed-resources-content-hash +1 -0
- package/dist/resources/extensions/claude-code-cli/readiness.js +128 -32
- package/dist/resources/extensions/google-search/index.js +2 -6
- package/dist/resources/extensions/gsd/auto/loop.js +23 -0
- package/dist/resources/extensions/gsd/auto/phases.js +5 -13
- package/dist/resources/extensions/gsd/auto/run-unit.js +26 -12
- package/dist/resources/extensions/gsd/auto/session.js +5 -6
- package/dist/resources/extensions/gsd/auto-dashboard.js +3 -2
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +55 -21
- package/dist/resources/extensions/gsd/auto-dispatch.js +18 -6
- package/dist/resources/extensions/gsd/auto-prompts.js +69 -2
- package/dist/resources/extensions/gsd/auto-recovery.js +43 -4
- package/dist/resources/extensions/gsd/auto-runtime-state.js +31 -0
- 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 +75 -13
- package/dist/resources/extensions/gsd/auto.js +39 -14
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +14 -2
- package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +7 -5
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
- package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -4
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +112 -31
- package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +11 -6
- package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +22 -0
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +45 -8
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +121 -3
- package/dist/resources/extensions/gsd/commands/catalog.js +76 -5
- package/dist/resources/extensions/gsd/commands/handlers/core.js +23 -1
- package/dist/resources/extensions/gsd/commands/handlers/ops.js +8 -0
- package/dist/resources/extensions/gsd/commands-config.js +3 -2
- package/dist/resources/extensions/gsd/commands-extensions.js +46 -3
- package/dist/resources/extensions/gsd/commands-handlers.js +3 -2
- package/dist/resources/extensions/gsd/commands-mcp-status.js +3 -1
- package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -1
- package/dist/resources/extensions/gsd/commands-worktree.js +309 -0
- package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/dist/resources/extensions/gsd/doctor-providers.js +2 -1
- package/dist/resources/extensions/gsd/doctor-runtime-checks.js +39 -1
- package/dist/resources/extensions/gsd/error-classifier.js +1 -1
- package/dist/resources/extensions/gsd/forensics.js +10 -8
- package/dist/resources/extensions/gsd/git-service.js +12 -5
- package/dist/resources/extensions/gsd/gsd-db.js +11 -2
- package/dist/resources/extensions/gsd/guided-flow.js +25 -24
- package/dist/resources/extensions/gsd/home-dir.js +16 -0
- package/dist/resources/extensions/gsd/key-manager.js +2 -1
- package/dist/resources/extensions/gsd/memory-store.js +66 -31
- package/dist/resources/extensions/gsd/migrate/command.js +3 -2
- package/dist/resources/extensions/gsd/milestone-id-reservation.js +36 -0
- package/dist/resources/extensions/gsd/model-router.js +114 -9
- package/dist/resources/extensions/gsd/native-git-bridge.js +7 -1
- package/dist/resources/extensions/gsd/preferences-models.js +91 -15
- package/dist/resources/extensions/gsd/preferences-types.js +2 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +32 -0
- package/dist/resources/extensions/gsd/preferences.js +5 -3
- package/dist/resources/extensions/gsd/prompt-loader.js +23 -12
- package/dist/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
- package/dist/resources/extensions/gsd/prompts/complete-slice.md +10 -0
- package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
- package/dist/resources/extensions/gsd/prompts/parallel-research-slices.md +2 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +10 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +10 -0
- package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +2 -0
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +9 -3
- package/dist/resources/extensions/gsd/state.js +42 -0
- package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
- package/dist/resources/extensions/gsd/tools/memory-tools.js +18 -1
- package/dist/resources/extensions/gsd/unit-context-manifest.js +29 -4
- package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
- package/dist/resources/extensions/gsd/watch/header-renderer.js +3 -1
- package/dist/resources/extensions/gsd/worktree-command.js +26 -46
- package/dist/resources/extensions/gsd/worktree-manager.js +20 -1
- package/dist/resources/extensions/gsd/worktree-resolver.js +28 -13
- package/dist/resources/extensions/gsd/worktree-root.js +124 -0
- package/dist/resources/extensions/gsd/worktree-session-state.js +33 -0
- package/dist/resources/extensions/gsd/worktree.js +4 -115
- package/dist/resources/extensions/mcp-client/index.js +6 -9
- package/dist/resources/extensions/ollama/index.js +15 -2
- package/dist/resources/extensions/ollama/model-capabilities.js +31 -0
- package/dist/resources/extensions/ollama/ollama-client.js +40 -4
- package/dist/resources/extensions/slash-commands/create-extension.js +36 -22
- package/dist/resources/extensions/subagent/index.js +324 -178
- package/dist/resources/skills/create-gsd-extension/SKILL.md +9 -5
- 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 +32 -12
- package/dist/resources/skills/lint/SKILL.md +4 -0
- package/dist/resources/skills/review/SKILL.md +4 -0
- package/dist/resources/skills/test/SKILL.md +3 -0
- package/dist/rtk-shared.d.ts +3 -0
- package/dist/rtk-shared.js +17 -0
- package/dist/rtk.d.ts +2 -5
- package/dist/rtk.js +3 -20
- package/dist/runtime-checks.d.ts +27 -0
- package/dist/runtime-checks.js +38 -0
- 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 +19 -19
- 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 +44 -4
- 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 +4 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +19 -19
- 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/2556.0527fea66e123b7f.js +1 -0
- package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +1 -0
- package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +1 -0
- package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +1 -0
- package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +1 -0
- package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +1 -0
- package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +10 -0
- package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +2 -0
- package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +20 -0
- package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +1 -0
- package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
- package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.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 +2 -1
- package/dist/web/standalone/server.js +1 -1
- package/dist/welcome-screen.js +27 -1
- package/dist/worktree-cli.d.ts +1 -0
- package/dist/worktree-cli.js +9 -3
- package/dist/worktree-status-banner.d.ts +1 -0
- package/dist/worktree-status-banner.js +132 -0
- package/package.json +1 -3
- package/packages/daemon/package.json +2 -2
- package/packages/mcp-server/dist/alias-telemetry.d.ts +8 -0
- package/packages/mcp-server/dist/alias-telemetry.d.ts.map +1 -0
- package/packages/mcp-server/dist/alias-telemetry.js +30 -0
- package/packages/mcp-server/dist/alias-telemetry.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
- package/packages/mcp-server/dist/workflow-tools.js +74 -46
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
- package/packages/mcp-server/package.json +2 -2
- package/packages/mcp-server/src/alias-telemetry.test.ts +78 -0
- package/packages/mcp-server/src/alias-telemetry.ts +30 -0
- package/packages/mcp-server/src/workflow-tools.test.ts +78 -0
- package/packages/mcp-server/src/workflow-tools.ts +93 -58
- package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
- package/packages/native/package.json +1 -1
- package/packages/native/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +2 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +231 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +1 -0
- package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/anthropic-shared.js +48 -19
- package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
- package/packages/pi-ai/dist/types.d.ts +13 -0
- 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 +24 -3
- 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 +26 -0
- package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +289 -0
- package/packages/pi-ai/src/providers/anthropic-shared.ts +52 -20
- package/packages/pi-ai/src/types.ts +13 -0
- package/packages/pi-ai/src/utils/repair-tool-json.ts +24 -3
- package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +32 -0
- 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 +6 -0
- 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 +4 -0
- 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 +19 -2
- 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 +10 -0
- package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/model-registry.js +18 -0
- package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +13 -0
- package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/system-prompt.js +20 -16
- package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +37 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.js +49 -0
- package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +133 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -0
- 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 +14 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +78 -0
- package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +181 -0
- package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +1 -0
- package/packages/pi-coding-agent/package.json +1 -1
- package/packages/pi-coding-agent/src/core/agent-session.ts +7 -0
- package/packages/pi-coding-agent/src/core/messages.ts +4 -0
- package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +32 -2
- package/packages/pi-coding-agent/src/core/model-registry.ts +21 -0
- package/packages/pi-coding-agent/src/core/system-prompt.ts +33 -15
- package/packages/pi-coding-agent/src/core/token-telemetry.ts +77 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +212 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +17 -1
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
- package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +102 -0
- package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +200 -0
- package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js +17 -3
- package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +2 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +1 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +161 -0
- package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +1 -0
- package/packages/pi-tui/package.json +1 -1
- package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -3
- package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +219 -0
- package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
- package/packages/rpc-client/package.json +1 -1
- package/pkg/package.json +1 -1
- package/src/resources/extensions/claude-code-cli/readiness.ts +130 -30
- package/src/resources/extensions/google-search/index.ts +2 -9
- package/src/resources/extensions/gsd/auto/loop.ts +24 -2
- package/src/resources/extensions/gsd/auto/phases.ts +6 -14
- package/src/resources/extensions/gsd/auto/run-unit.ts +26 -12
- package/src/resources/extensions/gsd/auto/session.ts +5 -6
- package/src/resources/extensions/gsd/auto/types.ts +1 -0
- package/src/resources/extensions/gsd/auto-dashboard.ts +3 -2
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +60 -24
- package/src/resources/extensions/gsd/auto-dispatch.ts +18 -6
- package/src/resources/extensions/gsd/auto-prompts.ts +66 -2
- package/src/resources/extensions/gsd/auto-recovery.ts +46 -8
- package/src/resources/extensions/gsd/auto-runtime-state.ts +51 -0
- package/src/resources/extensions/gsd/auto-start.ts +1 -1
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +2 -4
- package/src/resources/extensions/gsd/auto-worktree.ts +97 -12
- package/src/resources/extensions/gsd/auto.ts +37 -10
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +15 -13
- package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +8 -7
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
- package/src/resources/extensions/gsd/bootstrap/register-extension.ts +10 -9
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +121 -31
- package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +12 -6
- package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +20 -0
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +50 -8
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +141 -11
- package/src/resources/extensions/gsd/commands/catalog.ts +82 -5
- package/src/resources/extensions/gsd/commands/handlers/core.ts +23 -1
- package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
- package/src/resources/extensions/gsd/commands-config.ts +3 -2
- package/src/resources/extensions/gsd/commands-extensions.ts +43 -3
- package/src/resources/extensions/gsd/commands-handlers.ts +3 -2
- package/src/resources/extensions/gsd/commands-mcp-status.ts +3 -1
- package/src/resources/extensions/gsd/commands-prefs-wizard.ts +15 -1
- package/src/resources/extensions/gsd/commands-worktree.ts +383 -0
- package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
- package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
- package/src/resources/extensions/gsd/doctor-providers.ts +2 -1
- package/src/resources/extensions/gsd/doctor-runtime-checks.ts +39 -1
- package/src/resources/extensions/gsd/doctor-types.ts +3 -1
- package/src/resources/extensions/gsd/error-classifier.ts +1 -1
- package/src/resources/extensions/gsd/forensics.ts +12 -7
- package/src/resources/extensions/gsd/git-service.ts +13 -5
- package/src/resources/extensions/gsd/gsd-db.ts +12 -2
- package/src/resources/extensions/gsd/guided-flow.ts +27 -26
- package/src/resources/extensions/gsd/home-dir.ts +19 -0
- package/src/resources/extensions/gsd/journal.ts +4 -1
- package/src/resources/extensions/gsd/key-manager.ts +2 -1
- package/src/resources/extensions/gsd/memory-store.ts +81 -28
- package/src/resources/extensions/gsd/migrate/command.ts +3 -2
- package/src/resources/extensions/gsd/milestone-id-reservation.ts +47 -0
- package/src/resources/extensions/gsd/model-router.ts +172 -9
- package/src/resources/extensions/gsd/native-git-bridge.ts +7 -1
- package/src/resources/extensions/gsd/preferences-models.ts +101 -15
- package/src/resources/extensions/gsd/preferences-types.ts +6 -0
- package/src/resources/extensions/gsd/preferences-validation.ts +35 -0
- package/src/resources/extensions/gsd/preferences.ts +16 -2
- package/src/resources/extensions/gsd/prompt-loader.ts +26 -12
- package/src/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
- package/src/resources/extensions/gsd/prompts/complete-slice.md +10 -0
- package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
- package/src/resources/extensions/gsd/prompts/parallel-research-slices.md +2 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +10 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +10 -0
- package/src/resources/extensions/gsd/prompts/rewrite-docs.md +2 -0
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +9 -3
- package/src/resources/extensions/gsd/state.ts +42 -0
- package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +179 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +24 -5
- package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +21 -4
- 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 +138 -211
- package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +50 -27
- package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +58 -0
- package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +48 -0
- package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +142 -59
- package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -4
- package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +89 -32
- package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +41 -23
- package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +3 -43
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +5 -3
- package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +22 -87
- package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +7 -118
- package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +18 -60
- package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +100 -0
- package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +14 -76
- package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +22 -83
- package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +1 -63
- package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +47 -0
- package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +63 -0
- package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +25 -65
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +81 -0
- package/src/resources/extensions/gsd/tests/headless-answers.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/health-widget.test.ts +22 -12
- package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/home-dir.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +145 -0
- package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +72 -1
- package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +0 -23
- package/src/resources/extensions/gsd/tests/memory-store.test.ts +128 -0
- package/src/resources/extensions/gsd/tests/memory-tools.test.ts +33 -1
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +124 -0
- package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +152 -0
- package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +18 -1
- package/src/resources/extensions/gsd/tests/model-router.test.ts +169 -8
- package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +50 -0
- package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +32 -43
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +4 -10
- package/src/resources/extensions/gsd/tests/preferences.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/provider-errors.test.ts +7 -0
- package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +93 -0
- package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +34 -0
- package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +168 -19
- package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +7 -1
- package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +23 -1
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +8 -2
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +12 -6
- package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +17 -1
- package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +101 -0
- package/src/resources/extensions/gsd/tests/token-profile.test.ts +51 -4
- package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +7 -16
- package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +38 -3
- package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +15 -1
- package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +235 -0
- package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +34 -33
- package/src/resources/extensions/gsd/tests/worktree.test.ts +8 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +131 -1
- package/src/resources/extensions/gsd/tools/memory-tools.ts +17 -1
- package/src/resources/extensions/gsd/unit-context-manifest.ts +44 -12
- package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
- package/src/resources/extensions/gsd/watch/header-renderer.ts +3 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -0
- package/src/resources/extensions/gsd/worktree-command.ts +31 -44
- package/src/resources/extensions/gsd/worktree-manager.ts +40 -1
- package/src/resources/extensions/gsd/worktree-resolver.ts +28 -14
- package/src/resources/extensions/gsd/worktree-root.ts +144 -0
- package/src/resources/extensions/gsd/worktree-session-state.ts +35 -0
- package/src/resources/extensions/gsd/worktree.ts +8 -119
- package/src/resources/extensions/mcp-client/index.ts +6 -10
- package/src/resources/extensions/mcp-client/tests/global-config.test.ts +91 -0
- package/src/resources/extensions/ollama/index.ts +16 -2
- package/src/resources/extensions/ollama/model-capabilities.ts +34 -0
- package/src/resources/extensions/ollama/ollama-client.ts +41 -4
- package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +96 -0
- package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +147 -0
- package/src/resources/extensions/slash-commands/create-extension.ts +38 -24
- package/src/resources/extensions/subagent/index.ts +165 -7
- package/src/resources/skills/create-gsd-extension/SKILL.md +9 -5
- 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/templates/templates.test.ts +58 -0
- package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
- package/src/resources/skills/lint/SKILL.md +4 -0
- package/src/resources/skills/review/SKILL.md +4 -0
- package/src/resources/skills/test/SKILL.md +3 -0
- package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +0 -601
- package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +0 -651
- package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +0 -91
- package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +0 -53
- package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +0 -112
- package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +0 -23
- package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +0 -5
- 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 +0 -608
- package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +0 -11
- package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +0 -20
- package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
- package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
- package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +0 -1
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +0 -22
- package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +0 -47
- package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -75
- /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → hcvW7f3yv1JHzlWe7tIc6}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → hcvW7f3yv1JHzlWe7tIc6}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
// GSD worktree startup banner
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import { existsSync, realpathSync } from 'node:fs';
|
|
4
|
+
import { join, resolve, sep } from 'node:path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
function normalizePath(path) {
|
|
7
|
+
const normalized = path
|
|
8
|
+
.replaceAll('\\', '/')
|
|
9
|
+
.replace(/^\/\/\?\//, '')
|
|
10
|
+
.replace(/\/+$/, '');
|
|
11
|
+
return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
|
|
12
|
+
}
|
|
13
|
+
function gitExec(basePath, args) {
|
|
14
|
+
try {
|
|
15
|
+
return execFileSync('git', args, {
|
|
16
|
+
cwd: basePath,
|
|
17
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
18
|
+
encoding: 'utf-8',
|
|
19
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GCM_INTERACTIVE: 'Never' },
|
|
20
|
+
}).trim();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return '';
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function parseWorktreeList(output) {
|
|
27
|
+
if (!output)
|
|
28
|
+
return [];
|
|
29
|
+
const entries = [];
|
|
30
|
+
const blocks = output.replaceAll('\r\n', '\n').split('\n\n').filter(Boolean);
|
|
31
|
+
for (const block of blocks) {
|
|
32
|
+
const lines = block.split('\n');
|
|
33
|
+
const wtLine = lines.find((line) => line.startsWith('worktree '));
|
|
34
|
+
const branchLine = lines.find((line) => line.startsWith('branch '));
|
|
35
|
+
if (!wtLine)
|
|
36
|
+
continue;
|
|
37
|
+
entries.push({
|
|
38
|
+
path: wtLine.replace('worktree ', ''),
|
|
39
|
+
branch: branchLine ? branchLine.replace('branch refs/heads/', '') : '',
|
|
40
|
+
isBare: lines.some((line) => line === 'bare'),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
return entries;
|
|
44
|
+
}
|
|
45
|
+
function existingPathVariants(path) {
|
|
46
|
+
const variants = [resolve(path)];
|
|
47
|
+
if (existsSync(path)) {
|
|
48
|
+
try {
|
|
49
|
+
variants.push(realpathSync(path));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Best effort only; the unresolved path is still useful for matching.
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return [...new Set(variants.map(normalizePath))];
|
|
56
|
+
}
|
|
57
|
+
function findGsdWorktrees(basePath, entries) {
|
|
58
|
+
const roots = existingPathVariants(join(basePath, '.gsd', 'worktrees'));
|
|
59
|
+
const worktrees = [];
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (entry.isBare || !entry.branch)
|
|
62
|
+
continue;
|
|
63
|
+
const branchWorktreeName = entry.branch.startsWith('worktree/')
|
|
64
|
+
? entry.branch.slice('worktree/'.length)
|
|
65
|
+
: entry.branch.startsWith('milestone/')
|
|
66
|
+
? entry.branch.slice('milestone/'.length)
|
|
67
|
+
: null;
|
|
68
|
+
const entryVariants = existingPathVariants(entry.path);
|
|
69
|
+
const matchedRoot = roots.find((root) => entryVariants.some((variant) => variant.startsWith(`${root}/`) || variant.startsWith(`${root}${sep}`)));
|
|
70
|
+
const matchesBranchLeaf = branchWorktreeName
|
|
71
|
+
? entryVariants.some((variant) => variant.split('/').pop() === branchWorktreeName)
|
|
72
|
+
: false;
|
|
73
|
+
if (!matchedRoot && !matchesBranchLeaf)
|
|
74
|
+
continue;
|
|
75
|
+
const matchedPath = matchedRoot
|
|
76
|
+
? entryVariants.find((variant) => variant.startsWith(`${matchedRoot}/`) || variant.startsWith(`${matchedRoot}${sep}`))
|
|
77
|
+
: undefined;
|
|
78
|
+
let name = matchedRoot && matchedPath ? matchedPath.slice(matchedRoot.length + 1) : '';
|
|
79
|
+
if ((!name || name.includes('/')) && branchWorktreeName && matchesBranchLeaf) {
|
|
80
|
+
name = branchWorktreeName;
|
|
81
|
+
}
|
|
82
|
+
if (!name || name.includes('/'))
|
|
83
|
+
continue;
|
|
84
|
+
worktrees.push({ name, branch: entry.branch });
|
|
85
|
+
}
|
|
86
|
+
return worktrees;
|
|
87
|
+
}
|
|
88
|
+
function detectMainBranch(basePath) {
|
|
89
|
+
const symbolic = gitExec(basePath, ['symbolic-ref', 'refs/remotes/origin/HEAD']);
|
|
90
|
+
const remoteMatch = symbolic.match(/refs\/remotes\/origin\/(.+)$/);
|
|
91
|
+
if (remoteMatch?.[1])
|
|
92
|
+
return remoteMatch[1];
|
|
93
|
+
if (gitExec(basePath, ['show-ref', '--verify', 'refs/heads/main']))
|
|
94
|
+
return 'main';
|
|
95
|
+
if (gitExec(basePath, ['show-ref', '--verify', 'refs/heads/master']))
|
|
96
|
+
return 'master';
|
|
97
|
+
return gitExec(basePath, ['branch', '--show-current']);
|
|
98
|
+
}
|
|
99
|
+
function branchHasChanges(basePath, mainBranch, branch) {
|
|
100
|
+
try {
|
|
101
|
+
execFileSync('git', ['diff', '--quiet', mainBranch, branch], {
|
|
102
|
+
cwd: basePath,
|
|
103
|
+
stdio: ['ignore', 'ignore', 'ignore'],
|
|
104
|
+
env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GCM_INTERACTIVE: 'Never' },
|
|
105
|
+
});
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export function showWorktreeStatusBanner(basePath) {
|
|
113
|
+
const worktreesDir = join(basePath, '.gsd', 'worktrees');
|
|
114
|
+
if (!existsSync(worktreesDir))
|
|
115
|
+
return;
|
|
116
|
+
const entries = parseWorktreeList(gitExec(basePath, ['worktree', 'list', '--porcelain']));
|
|
117
|
+
const worktrees = findGsdWorktrees(basePath, entries);
|
|
118
|
+
if (worktrees.length === 0)
|
|
119
|
+
return;
|
|
120
|
+
const mainBranch = detectMainBranch(basePath);
|
|
121
|
+
if (!mainBranch)
|
|
122
|
+
return;
|
|
123
|
+
const withChanges = worktrees.filter((worktree) => branchHasChanges(basePath, mainBranch, worktree.branch));
|
|
124
|
+
if (withChanges.length === 0)
|
|
125
|
+
return;
|
|
126
|
+
const names = withChanges.map((worktree) => chalk.cyan(worktree.name)).join(', ');
|
|
127
|
+
process.stderr.write(chalk.dim('[gsd] ') +
|
|
128
|
+
chalk.yellow(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) +
|
|
129
|
+
names + '\n' +
|
|
130
|
+
chalk.dim('[gsd] ') +
|
|
131
|
+
chalk.dim('Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list\n\n'));
|
|
132
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-pi",
|
|
3
|
-
"version": "2.78.
|
|
3
|
+
"version": "2.78.1-dev.82bcf6b71",
|
|
4
4
|
"description": "GSD — Get Shit Done coding agent",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -128,7 +128,6 @@
|
|
|
128
128
|
"playwright": "^1.58.2",
|
|
129
129
|
"proper-lockfile": "^4.1.2",
|
|
130
130
|
"proxy-agent": "^6.5.0",
|
|
131
|
-
"semver": "^7.7.4",
|
|
132
131
|
"sharp": "^0.34.5",
|
|
133
132
|
"sql.js": "^1.14.1",
|
|
134
133
|
"strip-ansi": "^7.1.0",
|
|
@@ -138,7 +137,6 @@
|
|
|
138
137
|
"devDependencies": {
|
|
139
138
|
"@types/node": "^24.12.0",
|
|
140
139
|
"@types/picomatch": "^4.0.2",
|
|
141
|
-
"@types/semver": "^7.7.1",
|
|
142
140
|
"c8": "^11.0.0",
|
|
143
141
|
"esbuild": "^0.25.12",
|
|
144
142
|
"jiti": "^2.6.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd-build/daemon",
|
|
3
|
-
"version": "2.78.
|
|
3
|
+
"version": "2.78.1",
|
|
4
4
|
"description": "GSD daemon — background process for project monitoring and Discord integration",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@anthropic-ai/sdk": "^0.52.0",
|
|
32
|
-
"@gsd-build/rpc-client": "^2.78.
|
|
32
|
+
"@gsd-build/rpc-client": "^2.78.1",
|
|
33
33
|
"discord.js": "^14.25.1",
|
|
34
34
|
"yaml": "^2.8.0",
|
|
35
35
|
"zod": "^3.24.0"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** JSONL `event` field. Namespaced for `grep deprecation`. */
|
|
2
|
+
export declare const ALIAS_USAGE_EVENT: "deprecation.mcp_alias_used";
|
|
3
|
+
/**
|
|
4
|
+
* Emit a single-line JSONL record signaling that an alias tool was invoked.
|
|
5
|
+
* Failures are swallowed — telemetry must never break MCP request handling.
|
|
6
|
+
*/
|
|
7
|
+
export declare function logAliasUsage(alias: string, canonical: string): void;
|
|
8
|
+
//# sourceMappingURL=alias-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-telemetry.d.ts","sourceRoot":"","sources":["../src/alias-telemetry.ts"],"names":[],"mappings":"AAUA,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAG,4BAAqC,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAYpE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// @gsd-build/mcp-server + alias-telemetry — usage telemetry on the 11 alias
|
|
2
|
+
// `gsd_*` tools. Step 1 of a two-step deprecation (#5031). Always-on so we
|
|
3
|
+
// actually capture data during the window. Single JSON line per invocation
|
|
4
|
+
// to stderr — negligible overhead vs. the MCP request handler itself.
|
|
5
|
+
//
|
|
6
|
+
// Capture pattern: `<mcp-server-launch> 2>> alias-usage.jsonl`. After a
|
|
7
|
+
// long-enough window with zero entries, the alias tools can be removed in
|
|
8
|
+
// a follow-up PR. Filter with `grep deprecation` — the `event` field is
|
|
9
|
+
// namespaced for that purpose.
|
|
10
|
+
/** JSONL `event` field. Namespaced for `grep deprecation`. */
|
|
11
|
+
export const ALIAS_USAGE_EVENT = "deprecation.mcp_alias_used";
|
|
12
|
+
/**
|
|
13
|
+
* Emit a single-line JSONL record signaling that an alias tool was invoked.
|
|
14
|
+
* Failures are swallowed — telemetry must never break MCP request handling.
|
|
15
|
+
*/
|
|
16
|
+
export function logAliasUsage(alias, canonical) {
|
|
17
|
+
try {
|
|
18
|
+
const record = {
|
|
19
|
+
event: ALIAS_USAGE_EVENT,
|
|
20
|
+
ts: Date.now(),
|
|
21
|
+
alias,
|
|
22
|
+
canonical,
|
|
23
|
+
};
|
|
24
|
+
process.stderr.write(`${JSON.stringify(record)}\n`);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// swallow — telemetry must never break the request handler
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=alias-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alias-telemetry.js","sourceRoot":"","sources":["../src/alias-telemetry.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,+BAA+B;AAE/B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAAqC,CAAC;AAEvE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,SAAiB;IAC7D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG;YACd,KAAK,EAAE,iBAAiB;YACxB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,KAAK;YACL,SAAS;SACT,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,2DAA2D;IAC5D,CAAC;AACF,CAAC","sourcesContent":["// @gsd-build/mcp-server + alias-telemetry — usage telemetry on the 11 alias\n// `gsd_*` tools. Step 1 of a two-step deprecation (#5031). Always-on so we\n// actually capture data during the window. Single JSON line per invocation\n// to stderr — negligible overhead vs. the MCP request handler itself.\n//\n// Capture pattern: `<mcp-server-launch> 2>> alias-usage.jsonl`. After a\n// long-enough window with zero entries, the alias tools can be removed in\n// a follow-up PR. Filter with `grep deprecation` — the `event` field is\n// namespaced for that purpose.\n\n/** JSONL `event` field. Namespaced for `grep deprecation`. */\nexport const ALIAS_USAGE_EVENT = \"deprecation.mcp_alias_used\" as const;\n\n/**\n * Emit a single-line JSONL record signaling that an alias tool was invoked.\n * Failures are swallowed — telemetry must never break MCP request handling.\n */\nexport function logAliasUsage(alias: string, canonical: string): void {\n\ttry {\n\t\tconst record = {\n\t\t\tevent: ALIAS_USAGE_EVENT,\n\t\t\tts: Date.now(),\n\t\t\talias,\n\t\t\tcanonical,\n\t\t};\n\t\tprocess.stderr.write(`${JSON.stringify(record)}\\n`);\n\t} catch {\n\t\t// swallow — telemetry must never break the request handler\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkSH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AAkID,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBrE;AA6FD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,6tBAoCtB,CAAC;AAysBX,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAoiBjE"}
|
|
@@ -5,6 +5,7 @@ import { existsSync, realpathSync } from "node:fs";
|
|
|
5
5
|
import { isAbsolute, join, relative, resolve } from "node:path";
|
|
6
6
|
import { pathToFileURL } from "node:url";
|
|
7
7
|
import { z } from "zod";
|
|
8
|
+
import { logAliasUsage } from "./alias-telemetry.js";
|
|
8
9
|
let workflowToolExecutorsPromise = null;
|
|
9
10
|
let workflowExecutionQueue = Promise.resolve();
|
|
10
11
|
let workflowWriteGatePromise = null;
|
|
@@ -482,6 +483,66 @@ async function ensureMilestoneDbRow(milestoneId) {
|
|
|
482
483
|
// Ignore pre-existing rows or transient DB availability issues.
|
|
483
484
|
}
|
|
484
485
|
}
|
|
486
|
+
async function findDatabaseMilestoneIds() {
|
|
487
|
+
try {
|
|
488
|
+
const { getAllMilestones } = await importLocalModule("../../../src/resources/extensions/gsd/gsd-db.js");
|
|
489
|
+
return (getAllMilestones?.() ?? [])
|
|
490
|
+
.map((milestone) => {
|
|
491
|
+
const id = milestone?.id;
|
|
492
|
+
return typeof id === "string" ? id : null;
|
|
493
|
+
})
|
|
494
|
+
.filter((id) => id !== null);
|
|
495
|
+
}
|
|
496
|
+
catch {
|
|
497
|
+
return [];
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* Fix #4996: Shared helper for both gsd_milestone_generate_id and
|
|
502
|
+
* gsd_generate_milestone_id. Reuses the lowest reusable ghost milestone ID
|
|
503
|
+
* (a disk-only stub with no DB row, no worktree, no content files) before
|
|
504
|
+
* falling back to max+1. Uses the stricter `isReusableGhostMilestone` —
|
|
505
|
+
* not `isGhostMilestone` — to avoid racing with in-flight queued DB rows
|
|
506
|
+
* from an earlier call to this same tool.
|
|
507
|
+
*/
|
|
508
|
+
async function generateOrReuseMilestoneId(projectDir) {
|
|
509
|
+
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, milestoneIdSort, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
510
|
+
const reserved = claimReservedId();
|
|
511
|
+
if (reserved) {
|
|
512
|
+
await ensureMilestoneDbRow(reserved);
|
|
513
|
+
return reserved;
|
|
514
|
+
}
|
|
515
|
+
const allIds = [
|
|
516
|
+
...new Set([
|
|
517
|
+
...findMilestoneIds(projectDir),
|
|
518
|
+
...getReservedMilestoneIds(),
|
|
519
|
+
...(await findDatabaseMilestoneIds()),
|
|
520
|
+
]),
|
|
521
|
+
];
|
|
522
|
+
// Attempt ghost-ID reuse before falling back to max+1.
|
|
523
|
+
const { isReusableGhostMilestone } = await importLocalModule("../../../src/resources/extensions/gsd/state.js");
|
|
524
|
+
const sorted = [...allIds].sort(milestoneIdSort);
|
|
525
|
+
for (const candidate of sorted) {
|
|
526
|
+
if (isReusableGhostMilestone(projectDir, candidate)) {
|
|
527
|
+
await ensureMilestoneDbRow(candidate);
|
|
528
|
+
return candidate;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
|
|
532
|
+
// Graceful degradation: a corrupt preferences file should not crash
|
|
533
|
+
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
534
|
+
// throws here — matches the pre-fix behavior for missing prefs.
|
|
535
|
+
let uniqueEnabled = false;
|
|
536
|
+
try {
|
|
537
|
+
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.(projectDir)?.preferences?.unique_milestone_ids;
|
|
538
|
+
}
|
|
539
|
+
catch {
|
|
540
|
+
uniqueEnabled = false;
|
|
541
|
+
}
|
|
542
|
+
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
543
|
+
await ensureMilestoneDbRow(nextId);
|
|
544
|
+
return nextId;
|
|
545
|
+
}
|
|
485
546
|
// projectDir is optional. When omitted, the server uses process.cwd(). This
|
|
486
547
|
// prevents the agent from burning tokens reasoning about which absolute path
|
|
487
548
|
// to pass (git root vs worktree vs symlink-resolved external state layout) —
|
|
@@ -859,6 +920,7 @@ export function registerWorkflowTools(server) {
|
|
|
859
920
|
return { content: [{ type: "text", text: `Saved decision ${result.id}` }] };
|
|
860
921
|
});
|
|
861
922
|
server.tool("gsd_save_decision", "Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.", decisionSaveParams, async (args) => {
|
|
923
|
+
logAliasUsage("gsd_save_decision", "gsd_decision_save");
|
|
862
924
|
const parsed = parseWorkflowArgs(decisionSaveSchema, args);
|
|
863
925
|
const { projectDir, ...params } = parsed;
|
|
864
926
|
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
@@ -879,6 +941,7 @@ export function registerWorkflowTools(server) {
|
|
|
879
941
|
return { content: [{ type: "text", text: `Updated requirement ${id}` }] };
|
|
880
942
|
});
|
|
881
943
|
server.tool("gsd_update_requirement", "Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.", requirementUpdateParams, async (args) => {
|
|
944
|
+
logAliasUsage("gsd_update_requirement", "gsd_requirement_update");
|
|
882
945
|
const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
|
|
883
946
|
const { projectDir, id, ...updates } = parsed;
|
|
884
947
|
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
@@ -899,6 +962,7 @@ export function registerWorkflowTools(server) {
|
|
|
899
962
|
return { content: [{ type: "text", text: `Saved requirement ${result.id}` }] };
|
|
900
963
|
});
|
|
901
964
|
server.tool("gsd_save_requirement", "Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.", requirementSaveParams, async (args) => {
|
|
965
|
+
logAliasUsage("gsd_save_requirement", "gsd_requirement_save");
|
|
902
966
|
const parsed = parseWorkflowArgs(requirementSaveSchema, args);
|
|
903
967
|
const { projectDir, ...params } = parsed;
|
|
904
968
|
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
@@ -911,57 +975,14 @@ export function registerWorkflowTools(server) {
|
|
|
911
975
|
server.tool("gsd_milestone_generate_id", "Generate the next milestone ID for a new GSD milestone.", milestoneGenerateIdParams, async (args) => {
|
|
912
976
|
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
913
977
|
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
914
|
-
const id = await runSerializedWorkflowDbOperation(projectDir,
|
|
915
|
-
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
916
|
-
const reserved = claimReservedId();
|
|
917
|
-
if (reserved) {
|
|
918
|
-
await ensureMilestoneDbRow(reserved);
|
|
919
|
-
return reserved;
|
|
920
|
-
}
|
|
921
|
-
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
922
|
-
const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
|
|
923
|
-
// Graceful degradation: a corrupt preferences file should not crash
|
|
924
|
-
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
925
|
-
// throws here — matches the pre-fix behavior for missing prefs.
|
|
926
|
-
let uniqueEnabled = false;
|
|
927
|
-
try {
|
|
928
|
-
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
|
|
929
|
-
}
|
|
930
|
-
catch {
|
|
931
|
-
uniqueEnabled = false;
|
|
932
|
-
}
|
|
933
|
-
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
934
|
-
await ensureMilestoneDbRow(nextId);
|
|
935
|
-
return nextId;
|
|
936
|
-
});
|
|
978
|
+
const id = await runSerializedWorkflowDbOperation(projectDir, () => generateOrReuseMilestoneId(projectDir));
|
|
937
979
|
return { content: [{ type: "text", text: id }] };
|
|
938
980
|
});
|
|
939
981
|
server.tool("gsd_generate_milestone_id", "Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.", milestoneGenerateIdParams, async (args) => {
|
|
982
|
+
logAliasUsage("gsd_generate_milestone_id", "gsd_milestone_generate_id");
|
|
940
983
|
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
941
984
|
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
942
|
-
const id = await runSerializedWorkflowDbOperation(projectDir,
|
|
943
|
-
const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
944
|
-
const reserved = claimReservedId();
|
|
945
|
-
if (reserved) {
|
|
946
|
-
await ensureMilestoneDbRow(reserved);
|
|
947
|
-
return reserved;
|
|
948
|
-
}
|
|
949
|
-
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
950
|
-
const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
|
|
951
|
-
// Graceful degradation: a corrupt preferences file should not crash
|
|
952
|
-
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
953
|
-
// throws here — matches the pre-fix behavior for missing prefs.
|
|
954
|
-
let uniqueEnabled = false;
|
|
955
|
-
try {
|
|
956
|
-
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
|
|
957
|
-
}
|
|
958
|
-
catch {
|
|
959
|
-
uniqueEnabled = false;
|
|
960
|
-
}
|
|
961
|
-
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
962
|
-
await ensureMilestoneDbRow(nextId);
|
|
963
|
-
return nextId;
|
|
964
|
-
});
|
|
985
|
+
const id = await runSerializedWorkflowDbOperation(projectDir, () => generateOrReuseMilestoneId(projectDir));
|
|
965
986
|
return { content: [{ type: "text", text: id }] };
|
|
966
987
|
});
|
|
967
988
|
server.tool("gsd_plan_milestone", "Write milestone planning state to the GSD database and render ROADMAP.md from DB.", planMilestoneParams, async (args) => {
|
|
@@ -994,6 +1015,7 @@ export function registerWorkflowTools(server) {
|
|
|
994
1015
|
};
|
|
995
1016
|
});
|
|
996
1017
|
server.tool("gsd_task_plan", "Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.", planTaskParams, async (args) => {
|
|
1018
|
+
logAliasUsage("gsd_task_plan", "gsd_plan_task");
|
|
997
1019
|
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
998
1020
|
const { projectDir, ...params } = parsed;
|
|
999
1021
|
await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
|
|
@@ -1013,6 +1035,7 @@ export function registerWorkflowTools(server) {
|
|
|
1013
1035
|
return handleReplanSlice(parsed.projectDir, parsed);
|
|
1014
1036
|
});
|
|
1015
1037
|
server.tool("gsd_slice_replan", "Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.", replanSliceParams, async (args) => {
|
|
1038
|
+
logAliasUsage("gsd_slice_replan", "gsd_replan_slice");
|
|
1016
1039
|
const parsed = parseWorkflowArgs(replanSliceSchema, args);
|
|
1017
1040
|
return handleReplanSlice(parsed.projectDir, parsed);
|
|
1018
1041
|
});
|
|
@@ -1021,6 +1044,7 @@ export function registerWorkflowTools(server) {
|
|
|
1021
1044
|
return handleSliceComplete(parsed.projectDir, parsed);
|
|
1022
1045
|
});
|
|
1023
1046
|
server.tool("gsd_complete_slice", "Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.", sliceCompleteParams, async (args) => {
|
|
1047
|
+
logAliasUsage("gsd_complete_slice", "gsd_slice_complete");
|
|
1024
1048
|
const parsed = parseWorkflowArgs(sliceCompleteSchema, args);
|
|
1025
1049
|
return handleSliceComplete(parsed.projectDir, parsed);
|
|
1026
1050
|
});
|
|
@@ -1053,6 +1077,7 @@ export function registerWorkflowTools(server) {
|
|
|
1053
1077
|
return handleCompleteMilestone(parsed.projectDir, parsed);
|
|
1054
1078
|
});
|
|
1055
1079
|
server.tool("gsd_milestone_complete", "Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.", completeMilestoneParams, async (args) => {
|
|
1080
|
+
logAliasUsage("gsd_milestone_complete", "gsd_complete_milestone");
|
|
1056
1081
|
const parsed = parseWorkflowArgs(completeMilestoneSchema, args);
|
|
1057
1082
|
return handleCompleteMilestone(parsed.projectDir, parsed);
|
|
1058
1083
|
});
|
|
@@ -1061,6 +1086,7 @@ export function registerWorkflowTools(server) {
|
|
|
1061
1086
|
return handleValidateMilestone(parsed.projectDir, parsed);
|
|
1062
1087
|
});
|
|
1063
1088
|
server.tool("gsd_milestone_validate", "Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.", validateMilestoneParams, async (args) => {
|
|
1089
|
+
logAliasUsage("gsd_milestone_validate", "gsd_validate_milestone");
|
|
1064
1090
|
const parsed = parseWorkflowArgs(validateMilestoneSchema, args);
|
|
1065
1091
|
return handleValidateMilestone(parsed.projectDir, parsed);
|
|
1066
1092
|
});
|
|
@@ -1069,6 +1095,7 @@ export function registerWorkflowTools(server) {
|
|
|
1069
1095
|
return handleReassessRoadmap(parsed.projectDir, parsed);
|
|
1070
1096
|
});
|
|
1071
1097
|
server.tool("gsd_roadmap_reassess", "Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.", reassessRoadmapParams, async (args) => {
|
|
1098
|
+
logAliasUsage("gsd_roadmap_reassess", "gsd_reassess_roadmap");
|
|
1072
1099
|
const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);
|
|
1073
1100
|
return handleReassessRoadmap(parsed.projectDir, parsed);
|
|
1074
1101
|
});
|
|
@@ -1093,6 +1120,7 @@ export function registerWorkflowTools(server) {
|
|
|
1093
1120
|
return handleTaskComplete(projectDir, taskArgs);
|
|
1094
1121
|
});
|
|
1095
1122
|
server.tool("gsd_complete_task", "Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.", taskCompleteParams, async (args) => {
|
|
1123
|
+
logAliasUsage("gsd_complete_task", "gsd_task_complete");
|
|
1096
1124
|
const parsed = parseWorkflowArgs(taskCompleteSchema, args);
|
|
1097
1125
|
const { projectDir, ...taskArgs } = parsed;
|
|
1098
1126
|
return handleTaskComplete(projectDir, taskArgs);
|