gsd-pi 2.78.0 → 2.78.1-dev.8a893322c
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 +3 -1
- 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-dispatch.js +18 -6
- package/dist/resources/extensions/gsd/auto-prompts.js +63 -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 +60 -13
- package/dist/resources/extensions/gsd/auto.js +14 -5
- 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/plan-slice.md +10 -0
- package/dist/resources/extensions/gsd/prompts/refine-slice.md +10 -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 +4 -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/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 +15 -15
- 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 +15 -15
- 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 +3 -1
- 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-dispatch.ts +18 -6
- package/src/resources/extensions/gsd/auto-prompts.ts +60 -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 +82 -12
- package/src/resources/extensions/gsd/auto.ts +14 -4
- 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/plan-slice.md +10 -0
- package/src/resources/extensions/gsd/prompts/refine-slice.md +10 -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 +178 -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/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-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 +4 -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/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 → QK8fABiGPmonfTgboN0Y9}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → QK8fABiGPmonfTgboN0Y9}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gsd-build/mcp-server",
|
|
3
|
-
"version": "2.78.
|
|
3
|
+
"version": "2.78.1",
|
|
4
4
|
"description": "MCP server exposing GSD orchestration tools for Claude Code, Cursor, and other MCP clients",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"gsd": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
38
|
-
"@gsd-build/rpc-client": "^2.78.
|
|
38
|
+
"@gsd-build/rpc-client": "^2.78.1",
|
|
39
39
|
"zod": "^4.0.0"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
// @gsd-build/mcp-server + alias-telemetry.test — coverage for #5031.
|
|
2
|
+
// `logAliasUsage` must:
|
|
3
|
+
// - emit one valid JSON line per call to stderr with the documented shape
|
|
4
|
+
// - never throw, even if stderr.write fails (telemetry must not break MCP)
|
|
5
|
+
// - include the alias name and canonical name so downstream analysis can
|
|
6
|
+
// attribute usage and drive the eventual removal in step 2.
|
|
7
|
+
|
|
8
|
+
import { describe, test, beforeEach, afterEach } from "node:test";
|
|
9
|
+
import assert from "node:assert/strict";
|
|
10
|
+
|
|
11
|
+
import { ALIAS_USAGE_EVENT, logAliasUsage } from "./alias-telemetry.js";
|
|
12
|
+
|
|
13
|
+
describe("logAliasUsage", () => {
|
|
14
|
+
let captured: string[];
|
|
15
|
+
let originalWrite: typeof process.stderr.write;
|
|
16
|
+
|
|
17
|
+
beforeEach(() => {
|
|
18
|
+
captured = [];
|
|
19
|
+
originalWrite = process.stderr.write.bind(process.stderr);
|
|
20
|
+
process.stderr.write = ((chunk: string | Uint8Array): boolean => {
|
|
21
|
+
captured.push(typeof chunk === "string" ? chunk : Buffer.from(chunk).toString());
|
|
22
|
+
return true;
|
|
23
|
+
}) as typeof process.stderr.write;
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
afterEach(() => {
|
|
27
|
+
process.stderr.write = originalWrite;
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
test("emits a single JSON line per call", () => {
|
|
31
|
+
logAliasUsage("gsd_save_decision", "gsd_decision_save");
|
|
32
|
+
assert.equal(captured.length, 1);
|
|
33
|
+
assert.ok(captured[0].endsWith("\n"), "line must terminate with newline");
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
test("emitted JSON has the documented shape", () => {
|
|
37
|
+
logAliasUsage("gsd_save_decision", "gsd_decision_save");
|
|
38
|
+
const parsed = JSON.parse(captured[0].trimEnd());
|
|
39
|
+
assert.equal(parsed.event, ALIAS_USAGE_EVENT);
|
|
40
|
+
assert.equal(parsed.alias, "gsd_save_decision");
|
|
41
|
+
assert.equal(parsed.canonical, "gsd_decision_save");
|
|
42
|
+
assert.equal(typeof parsed.ts, "number");
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
test("event field is namespaced under 'deprecation.' for grep-friendly filtering", () => {
|
|
46
|
+
logAliasUsage("gsd_save_decision", "gsd_decision_save");
|
|
47
|
+
const parsed = JSON.parse(captured[0].trimEnd());
|
|
48
|
+
assert.ok(
|
|
49
|
+
(parsed.event as string).startsWith("deprecation."),
|
|
50
|
+
`event '${parsed.event}' should be namespaced for 'grep deprecation' workflow`,
|
|
51
|
+
);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("ts field is a recent timestamp (within ~5s of Date.now())", () => {
|
|
55
|
+
const before = Date.now();
|
|
56
|
+
logAliasUsage("gsd_x", "gsd_y");
|
|
57
|
+
const after = Date.now();
|
|
58
|
+
const parsed = JSON.parse(captured[0].trimEnd());
|
|
59
|
+
assert.ok(parsed.ts >= before && parsed.ts <= after, `ts ${parsed.ts} should be in [${before}, ${after}]`);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
test("multiple calls emit multiple lines", () => {
|
|
63
|
+
logAliasUsage("a", "A");
|
|
64
|
+
logAliasUsage("b", "B");
|
|
65
|
+
logAliasUsage("c", "C");
|
|
66
|
+
assert.equal(captured.length, 3);
|
|
67
|
+
const aliases = captured.map((l) => JSON.parse(l.trimEnd()).alias);
|
|
68
|
+
assert.deepEqual(aliases, ["a", "b", "c"]);
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
test("never throws — telemetry must not break the MCP request handler", () => {
|
|
72
|
+
// Force a write failure to exercise the swallow path.
|
|
73
|
+
process.stderr.write = (() => {
|
|
74
|
+
throw new Error("simulated stderr failure");
|
|
75
|
+
}) as typeof process.stderr.write;
|
|
76
|
+
assert.doesNotThrow(() => logAliasUsage("x", "y"));
|
|
77
|
+
});
|
|
78
|
+
});
|
|
@@ -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
|
+
|
|
11
|
+
/** JSONL `event` field. Namespaced for `grep deprecation`. */
|
|
12
|
+
export const ALIAS_USAGE_EVENT = "deprecation.mcp_alias_used" as const;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Emit a single-line JSONL record signaling that an alias tool was invoked.
|
|
16
|
+
* Failures are swallowed — telemetry must never break MCP request handling.
|
|
17
|
+
*/
|
|
18
|
+
export function logAliasUsage(alias: string, canonical: string): void {
|
|
19
|
+
try {
|
|
20
|
+
const record = {
|
|
21
|
+
event: ALIAS_USAGE_EVENT,
|
|
22
|
+
ts: Date.now(),
|
|
23
|
+
alias,
|
|
24
|
+
canonical,
|
|
25
|
+
};
|
|
26
|
+
process.stderr.write(`${JSON.stringify(record)}\n`);
|
|
27
|
+
} catch {
|
|
28
|
+
// swallow — telemetry must never break the request handler
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -889,6 +889,32 @@ export const executeTaskComplete = async (params, projectDir) => {
|
|
|
889
889
|
}
|
|
890
890
|
});
|
|
891
891
|
|
|
892
|
+
it("gsd_milestone_generate_id skips DB-only queued milestone rows", async () => {
|
|
893
|
+
const base = makeTmpBase();
|
|
894
|
+
try {
|
|
895
|
+
const server = makeMockServer();
|
|
896
|
+
registerWorkflowTools(server as any);
|
|
897
|
+
const tool = server.tools.find((t) => t.name === "gsd_milestone_generate_id");
|
|
898
|
+
assert.ok(tool, "milestone ID tool should be registered");
|
|
899
|
+
|
|
900
|
+
const first = await tool!.handler({ projectDir: base });
|
|
901
|
+
assert.equal((first as any).content[0].text, "M001");
|
|
902
|
+
assert.ok(!existsSync(join(base, ".gsd", "milestones", "M001")), "ID generation should not create a milestone dir");
|
|
903
|
+
|
|
904
|
+
closeDatabase();
|
|
905
|
+
|
|
906
|
+
const second = await tool!.handler({ projectDir: base });
|
|
907
|
+
assert.equal((second as any).content[0].text, "M002");
|
|
908
|
+
|
|
909
|
+
const rows = _getAdapter()!
|
|
910
|
+
.prepare("SELECT id FROM milestones ORDER BY id")
|
|
911
|
+
.all() as Array<Record<string, unknown>>;
|
|
912
|
+
assert.deepEqual(rows.map((row) => row["id"]), ["M001", "M002"]);
|
|
913
|
+
} finally {
|
|
914
|
+
cleanup(base);
|
|
915
|
+
}
|
|
916
|
+
});
|
|
917
|
+
|
|
892
918
|
it("gsd_plan_task reopens the DB before inline task planning writes", async () => {
|
|
893
919
|
const base = makeTmpBase();
|
|
894
920
|
try {
|
|
@@ -1659,6 +1685,58 @@ describe("validateProjectDir", () => {
|
|
|
1659
1685
|
}
|
|
1660
1686
|
});
|
|
1661
1687
|
|
|
1688
|
+
it("accepts a worktree under the allowed root external .gsd state target", () => {
|
|
1689
|
+
const allowedRoot = makeTmpBase();
|
|
1690
|
+
const externalState = makeTmpBase();
|
|
1691
|
+
const worktree = join(externalState, "worktrees", "M001");
|
|
1692
|
+
mkdirSync(worktree, { recursive: true });
|
|
1693
|
+
rmSync(join(allowedRoot, ".gsd"), { recursive: true, force: true });
|
|
1694
|
+
symlinkSync(externalState, join(allowedRoot, ".gsd"), "dir");
|
|
1695
|
+
|
|
1696
|
+
const prevRoot = process.env.GSD_WORKFLOW_PROJECT_ROOT;
|
|
1697
|
+
try {
|
|
1698
|
+
process.env.GSD_WORKFLOW_PROJECT_ROOT = allowedRoot;
|
|
1699
|
+
const result = validateProjectDir(worktree);
|
|
1700
|
+
assert.equal(result, realpathSync(worktree));
|
|
1701
|
+
} finally {
|
|
1702
|
+
if (prevRoot === undefined) {
|
|
1703
|
+
delete process.env.GSD_WORKFLOW_PROJECT_ROOT;
|
|
1704
|
+
} else {
|
|
1705
|
+
process.env.GSD_WORKFLOW_PROJECT_ROOT = prevRoot;
|
|
1706
|
+
}
|
|
1707
|
+
cleanup(allowedRoot);
|
|
1708
|
+
cleanup(externalState);
|
|
1709
|
+
}
|
|
1710
|
+
});
|
|
1711
|
+
|
|
1712
|
+
it("rejects external-state sibling paths that only share a prefix", () => {
|
|
1713
|
+
const allowedRoot = makeTmpBase();
|
|
1714
|
+
const externalState = makeTmpBase();
|
|
1715
|
+
const sibling = `${externalState}-sibling`;
|
|
1716
|
+
const siblingWorktree = join(sibling, "worktrees", "M001");
|
|
1717
|
+
mkdirSync(siblingWorktree, { recursive: true });
|
|
1718
|
+
rmSync(join(allowedRoot, ".gsd"), { recursive: true, force: true });
|
|
1719
|
+
symlinkSync(externalState, join(allowedRoot, ".gsd"), "dir");
|
|
1720
|
+
|
|
1721
|
+
const prevRoot = process.env.GSD_WORKFLOW_PROJECT_ROOT;
|
|
1722
|
+
try {
|
|
1723
|
+
process.env.GSD_WORKFLOW_PROJECT_ROOT = allowedRoot;
|
|
1724
|
+
assert.throws(
|
|
1725
|
+
() => validateProjectDir(siblingWorktree),
|
|
1726
|
+
/configured workflow project root/,
|
|
1727
|
+
);
|
|
1728
|
+
} finally {
|
|
1729
|
+
if (prevRoot === undefined) {
|
|
1730
|
+
delete process.env.GSD_WORKFLOW_PROJECT_ROOT;
|
|
1731
|
+
} else {
|
|
1732
|
+
process.env.GSD_WORKFLOW_PROJECT_ROOT = prevRoot;
|
|
1733
|
+
}
|
|
1734
|
+
cleanup(allowedRoot);
|
|
1735
|
+
cleanup(externalState);
|
|
1736
|
+
cleanup(sibling);
|
|
1737
|
+
}
|
|
1738
|
+
});
|
|
1739
|
+
|
|
1662
1740
|
it("rejects relative paths", () => {
|
|
1663
1741
|
assert.throws(
|
|
1664
1742
|
() => validateProjectDir("relative/path"),
|
|
@@ -7,6 +7,8 @@ import { isAbsolute, join, relative, resolve } from "node:path";
|
|
|
7
7
|
import { pathToFileURL } from "node:url";
|
|
8
8
|
import { z } from "zod";
|
|
9
9
|
|
|
10
|
+
import { logAliasUsage } from "./alias-telemetry.js";
|
|
11
|
+
|
|
10
12
|
type WorkflowToolExecutors = {
|
|
11
13
|
SUPPORTED_SUMMARY_ARTIFACT_TYPES: readonly string[];
|
|
12
14
|
executeMilestoneStatus: (params: { milestoneId: string }, basePath?: string) => Promise<unknown>;
|
|
@@ -847,6 +849,80 @@ async function ensureMilestoneDbRow(milestoneId: string): Promise<void> {
|
|
|
847
849
|
}
|
|
848
850
|
}
|
|
849
851
|
|
|
852
|
+
async function findDatabaseMilestoneIds(): Promise<string[]> {
|
|
853
|
+
try {
|
|
854
|
+
const { getAllMilestones } = await importLocalModule<any>("../../../src/resources/extensions/gsd/gsd-db.js");
|
|
855
|
+
return (getAllMilestones?.() ?? [])
|
|
856
|
+
.map((milestone: unknown) => {
|
|
857
|
+
const id = (milestone as { id?: unknown })?.id;
|
|
858
|
+
return typeof id === "string" ? id : null;
|
|
859
|
+
})
|
|
860
|
+
.filter((id: string | null): id is string => id !== null);
|
|
861
|
+
} catch {
|
|
862
|
+
return [];
|
|
863
|
+
}
|
|
864
|
+
}
|
|
865
|
+
|
|
866
|
+
/**
|
|
867
|
+
* Fix #4996: Shared helper for both gsd_milestone_generate_id and
|
|
868
|
+
* gsd_generate_milestone_id. Reuses the lowest reusable ghost milestone ID
|
|
869
|
+
* (a disk-only stub with no DB row, no worktree, no content files) before
|
|
870
|
+
* falling back to max+1. Uses the stricter `isReusableGhostMilestone` —
|
|
871
|
+
* not `isGhostMilestone` — to avoid racing with in-flight queued DB rows
|
|
872
|
+
* from an earlier call to this same tool.
|
|
873
|
+
*/
|
|
874
|
+
async function generateOrReuseMilestoneId(projectDir: string): Promise<string> {
|
|
875
|
+
const {
|
|
876
|
+
claimReservedId,
|
|
877
|
+
findMilestoneIds,
|
|
878
|
+
getReservedMilestoneIds,
|
|
879
|
+
nextMilestoneId,
|
|
880
|
+
milestoneIdSort,
|
|
881
|
+
} = await importLocalModule<any>("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
882
|
+
|
|
883
|
+
const reserved = claimReservedId();
|
|
884
|
+
if (reserved) {
|
|
885
|
+
await ensureMilestoneDbRow(reserved);
|
|
886
|
+
return reserved;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
const allIds = [
|
|
890
|
+
...new Set([
|
|
891
|
+
...findMilestoneIds(projectDir),
|
|
892
|
+
...getReservedMilestoneIds(),
|
|
893
|
+
...(await findDatabaseMilestoneIds()),
|
|
894
|
+
]),
|
|
895
|
+
];
|
|
896
|
+
|
|
897
|
+
// Attempt ghost-ID reuse before falling back to max+1.
|
|
898
|
+
const { isReusableGhostMilestone } = await importLocalModule<any>(
|
|
899
|
+
"../../../src/resources/extensions/gsd/state.js",
|
|
900
|
+
);
|
|
901
|
+
const sorted = [...allIds].sort(milestoneIdSort);
|
|
902
|
+
for (const candidate of sorted) {
|
|
903
|
+
if (isReusableGhostMilestone(projectDir, candidate)) {
|
|
904
|
+
await ensureMilestoneDbRow(candidate);
|
|
905
|
+
return candidate;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
const prefsMod = await importLocalModule<any>(
|
|
910
|
+
"../../../src/resources/extensions/gsd/preferences.js",
|
|
911
|
+
).catch(() => null);
|
|
912
|
+
// Graceful degradation: a corrupt preferences file should not crash
|
|
913
|
+
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
914
|
+
// throws here — matches the pre-fix behavior for missing prefs.
|
|
915
|
+
let uniqueEnabled = false;
|
|
916
|
+
try {
|
|
917
|
+
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.(projectDir)?.preferences?.unique_milestone_ids;
|
|
918
|
+
} catch {
|
|
919
|
+
uniqueEnabled = false;
|
|
920
|
+
}
|
|
921
|
+
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
922
|
+
await ensureMilestoneDbRow(nextId);
|
|
923
|
+
return nextId;
|
|
924
|
+
}
|
|
925
|
+
|
|
850
926
|
// projectDir is optional. When omitted, the server uses process.cwd(). This
|
|
851
927
|
// prevents the agent from burning tokens reasoning about which absolute path
|
|
852
928
|
// to pass (git root vs worktree vs symlink-resolved external state layout) —
|
|
@@ -1266,6 +1342,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1266
1342
|
"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.",
|
|
1267
1343
|
decisionSaveParams,
|
|
1268
1344
|
async (args: Record<string, unknown>) => {
|
|
1345
|
+
logAliasUsage("gsd_save_decision", "gsd_decision_save");
|
|
1269
1346
|
const parsed = parseWorkflowArgs(decisionSaveSchema, args);
|
|
1270
1347
|
const { projectDir, ...params } = parsed;
|
|
1271
1348
|
await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
|
|
@@ -1298,6 +1375,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1298
1375
|
"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.",
|
|
1299
1376
|
requirementUpdateParams,
|
|
1300
1377
|
async (args: Record<string, unknown>) => {
|
|
1378
|
+
logAliasUsage("gsd_update_requirement", "gsd_requirement_update");
|
|
1301
1379
|
const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
|
|
1302
1380
|
const { projectDir, id, ...updates } = parsed;
|
|
1303
1381
|
await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
|
|
@@ -1330,6 +1408,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1330
1408
|
"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.",
|
|
1331
1409
|
requirementSaveParams,
|
|
1332
1410
|
async (args: Record<string, unknown>) => {
|
|
1411
|
+
logAliasUsage("gsd_save_requirement", "gsd_requirement_save");
|
|
1333
1412
|
const parsed = parseWorkflowArgs(requirementSaveSchema, args);
|
|
1334
1413
|
const { projectDir, ...params } = parsed;
|
|
1335
1414
|
await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
|
|
@@ -1348,35 +1427,9 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1348
1427
|
async (args: Record<string, unknown>) => {
|
|
1349
1428
|
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
1350
1429
|
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
1351
|
-
const id = await runSerializedWorkflowDbOperation(projectDir,
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
findMilestoneIds,
|
|
1355
|
-
getReservedMilestoneIds,
|
|
1356
|
-
nextMilestoneId,
|
|
1357
|
-
} = await importLocalModule<any>("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
1358
|
-
const reserved = claimReservedId();
|
|
1359
|
-
if (reserved) {
|
|
1360
|
-
await ensureMilestoneDbRow(reserved);
|
|
1361
|
-
return reserved;
|
|
1362
|
-
}
|
|
1363
|
-
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
1364
|
-
const prefsMod = await importLocalModule<any>(
|
|
1365
|
-
"../../../src/resources/extensions/gsd/preferences.js",
|
|
1366
|
-
).catch(() => null);
|
|
1367
|
-
// Graceful degradation: a corrupt preferences file should not crash
|
|
1368
|
-
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
1369
|
-
// throws here — matches the pre-fix behavior for missing prefs.
|
|
1370
|
-
let uniqueEnabled = false;
|
|
1371
|
-
try {
|
|
1372
|
-
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
|
|
1373
|
-
} catch {
|
|
1374
|
-
uniqueEnabled = false;
|
|
1375
|
-
}
|
|
1376
|
-
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
1377
|
-
await ensureMilestoneDbRow(nextId);
|
|
1378
|
-
return nextId;
|
|
1379
|
-
});
|
|
1430
|
+
const id = await runSerializedWorkflowDbOperation(projectDir, () =>
|
|
1431
|
+
generateOrReuseMilestoneId(projectDir),
|
|
1432
|
+
);
|
|
1380
1433
|
return { content: [{ type: "text" as const, text: id }] };
|
|
1381
1434
|
},
|
|
1382
1435
|
);
|
|
@@ -1386,37 +1439,12 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1386
1439
|
"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.",
|
|
1387
1440
|
milestoneGenerateIdParams,
|
|
1388
1441
|
async (args: Record<string, unknown>) => {
|
|
1442
|
+
logAliasUsage("gsd_generate_milestone_id", "gsd_milestone_generate_id");
|
|
1389
1443
|
const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
|
|
1390
1444
|
await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
|
|
1391
|
-
const id = await runSerializedWorkflowDbOperation(projectDir,
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
findMilestoneIds,
|
|
1395
|
-
getReservedMilestoneIds,
|
|
1396
|
-
nextMilestoneId,
|
|
1397
|
-
} = await importLocalModule<any>("../../../src/resources/extensions/gsd/milestone-ids.js");
|
|
1398
|
-
const reserved = claimReservedId();
|
|
1399
|
-
if (reserved) {
|
|
1400
|
-
await ensureMilestoneDbRow(reserved);
|
|
1401
|
-
return reserved;
|
|
1402
|
-
}
|
|
1403
|
-
const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
|
|
1404
|
-
const prefsMod = await importLocalModule<any>(
|
|
1405
|
-
"../../../src/resources/extensions/gsd/preferences.js",
|
|
1406
|
-
).catch(() => null);
|
|
1407
|
-
// Graceful degradation: a corrupt preferences file should not crash
|
|
1408
|
-
// milestone-id generation. Fall back to non-unique IDs if anything
|
|
1409
|
-
// throws here — matches the pre-fix behavior for missing prefs.
|
|
1410
|
-
let uniqueEnabled = false;
|
|
1411
|
-
try {
|
|
1412
|
-
uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
|
|
1413
|
-
} catch {
|
|
1414
|
-
uniqueEnabled = false;
|
|
1415
|
-
}
|
|
1416
|
-
const nextId = nextMilestoneId(allIds, uniqueEnabled);
|
|
1417
|
-
await ensureMilestoneDbRow(nextId);
|
|
1418
|
-
return nextId;
|
|
1419
|
-
});
|
|
1445
|
+
const id = await runSerializedWorkflowDbOperation(projectDir, () =>
|
|
1446
|
+
generateOrReuseMilestoneId(projectDir),
|
|
1447
|
+
);
|
|
1420
1448
|
return { content: [{ type: "text" as const, text: id }] };
|
|
1421
1449
|
},
|
|
1422
1450
|
);
|
|
@@ -1477,6 +1505,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1477
1505
|
"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.",
|
|
1478
1506
|
planTaskParams,
|
|
1479
1507
|
async (args: Record<string, unknown>) => {
|
|
1508
|
+
logAliasUsage("gsd_task_plan", "gsd_plan_task");
|
|
1480
1509
|
const parsed = parseWorkflowArgs(planTaskSchema, args);
|
|
1481
1510
|
const { projectDir, ...params } = parsed;
|
|
1482
1511
|
await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
|
|
@@ -1508,6 +1537,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1508
1537
|
"Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.",
|
|
1509
1538
|
replanSliceParams,
|
|
1510
1539
|
async (args: Record<string, unknown>) => {
|
|
1540
|
+
logAliasUsage("gsd_slice_replan", "gsd_replan_slice");
|
|
1511
1541
|
const parsed = parseWorkflowArgs(replanSliceSchema, args);
|
|
1512
1542
|
return handleReplanSlice(parsed.projectDir, parsed);
|
|
1513
1543
|
},
|
|
@@ -1528,6 +1558,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1528
1558
|
"Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.",
|
|
1529
1559
|
sliceCompleteParams,
|
|
1530
1560
|
async (args: Record<string, unknown>) => {
|
|
1561
|
+
logAliasUsage("gsd_complete_slice", "gsd_slice_complete");
|
|
1531
1562
|
const parsed = parseWorkflowArgs(sliceCompleteSchema, args);
|
|
1532
1563
|
return handleSliceComplete(parsed.projectDir, parsed);
|
|
1533
1564
|
},
|
|
@@ -1578,6 +1609,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1578
1609
|
"Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.",
|
|
1579
1610
|
completeMilestoneParams,
|
|
1580
1611
|
async (args: Record<string, unknown>) => {
|
|
1612
|
+
logAliasUsage("gsd_milestone_complete", "gsd_complete_milestone");
|
|
1581
1613
|
const parsed = parseWorkflowArgs(completeMilestoneSchema, args);
|
|
1582
1614
|
return handleCompleteMilestone(parsed.projectDir, parsed);
|
|
1583
1615
|
},
|
|
@@ -1598,6 +1630,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1598
1630
|
"Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.",
|
|
1599
1631
|
validateMilestoneParams,
|
|
1600
1632
|
async (args: Record<string, unknown>) => {
|
|
1633
|
+
logAliasUsage("gsd_milestone_validate", "gsd_validate_milestone");
|
|
1601
1634
|
const parsed = parseWorkflowArgs(validateMilestoneSchema, args);
|
|
1602
1635
|
return handleValidateMilestone(parsed.projectDir, parsed);
|
|
1603
1636
|
},
|
|
@@ -1618,6 +1651,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1618
1651
|
"Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.",
|
|
1619
1652
|
reassessRoadmapParams,
|
|
1620
1653
|
async (args: Record<string, unknown>) => {
|
|
1654
|
+
logAliasUsage("gsd_roadmap_reassess", "gsd_reassess_roadmap");
|
|
1621
1655
|
const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);
|
|
1622
1656
|
return handleReassessRoadmap(parsed.projectDir, parsed);
|
|
1623
1657
|
},
|
|
@@ -1672,6 +1706,7 @@ export function registerWorkflowTools(server: McpToolServer): void {
|
|
|
1672
1706
|
"Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.",
|
|
1673
1707
|
taskCompleteParams,
|
|
1674
1708
|
async (args: Record<string, unknown>) => {
|
|
1709
|
+
logAliasUsage("gsd_complete_task", "gsd_task_complete");
|
|
1675
1710
|
const parsed = parseWorkflowArgs(taskCompleteSchema, args);
|
|
1676
1711
|
const { projectDir, ...taskArgs } = parsed;
|
|
1677
1712
|
return handleTaskComplete(projectDir, taskArgs);
|