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.
Files changed (559) hide show
  1. package/README.md +60 -23
  2. package/dist/bundled-resource-path.d.ts +7 -0
  3. package/dist/bundled-resource-path.js +34 -2
  4. package/dist/claude-cli-check.js +104 -33
  5. package/dist/cli-policy.d.ts +13 -0
  6. package/dist/cli-policy.js +17 -0
  7. package/dist/cli.js +95 -55
  8. package/dist/headless-query.d.ts +22 -0
  9. package/dist/headless-query.js +43 -8
  10. package/dist/headless.d.ts +10 -0
  11. package/dist/headless.js +16 -1
  12. package/dist/loader.js +9 -13
  13. package/dist/onboarding.d.ts +10 -0
  14. package/dist/onboarding.js +2 -2
  15. package/dist/provider-migrations.d.ts +2 -2
  16. package/dist/provider-migrations.js +5 -2
  17. package/dist/resource-loader.d.ts +5 -2
  18. package/dist/resource-loader.js +30 -13
  19. package/dist/resources/.managed-resources-content-hash +1 -0
  20. package/dist/resources/extensions/claude-code-cli/readiness.js +128 -32
  21. package/dist/resources/extensions/google-search/index.js +2 -6
  22. package/dist/resources/extensions/gsd/auto/loop.js +23 -0
  23. package/dist/resources/extensions/gsd/auto/phases.js +5 -13
  24. package/dist/resources/extensions/gsd/auto/run-unit.js +3 -1
  25. package/dist/resources/extensions/gsd/auto/session.js +5 -6
  26. package/dist/resources/extensions/gsd/auto-dashboard.js +3 -2
  27. package/dist/resources/extensions/gsd/auto-dispatch.js +18 -6
  28. package/dist/resources/extensions/gsd/auto-prompts.js +63 -2
  29. package/dist/resources/extensions/gsd/auto-recovery.js +43 -4
  30. package/dist/resources/extensions/gsd/auto-runtime-state.js +31 -0
  31. package/dist/resources/extensions/gsd/auto-start.js +1 -1
  32. package/dist/resources/extensions/gsd/auto-tool-tracking.js +2 -2
  33. package/dist/resources/extensions/gsd/auto-worktree.js +60 -13
  34. package/dist/resources/extensions/gsd/auto.js +14 -5
  35. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +14 -2
  36. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +7 -5
  37. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  38. package/dist/resources/extensions/gsd/bootstrap/register-extension.js +5 -4
  39. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +112 -31
  40. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +11 -6
  41. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +22 -0
  42. package/dist/resources/extensions/gsd/bootstrap/system-context.js +45 -8
  43. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +121 -3
  44. package/dist/resources/extensions/gsd/commands/catalog.js +76 -5
  45. package/dist/resources/extensions/gsd/commands/handlers/core.js +23 -1
  46. package/dist/resources/extensions/gsd/commands/handlers/ops.js +8 -0
  47. package/dist/resources/extensions/gsd/commands-config.js +3 -2
  48. package/dist/resources/extensions/gsd/commands-extensions.js +46 -3
  49. package/dist/resources/extensions/gsd/commands-handlers.js +3 -2
  50. package/dist/resources/extensions/gsd/commands-mcp-status.js +3 -1
  51. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -1
  52. package/dist/resources/extensions/gsd/commands-worktree.js +309 -0
  53. package/dist/resources/extensions/gsd/dashboard-overlay.js +1 -1
  54. package/dist/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  55. package/dist/resources/extensions/gsd/doctor-providers.js +2 -1
  56. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +39 -1
  57. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  58. package/dist/resources/extensions/gsd/forensics.js +10 -8
  59. package/dist/resources/extensions/gsd/git-service.js +12 -5
  60. package/dist/resources/extensions/gsd/gsd-db.js +11 -2
  61. package/dist/resources/extensions/gsd/guided-flow.js +25 -24
  62. package/dist/resources/extensions/gsd/home-dir.js +16 -0
  63. package/dist/resources/extensions/gsd/key-manager.js +2 -1
  64. package/dist/resources/extensions/gsd/memory-store.js +66 -31
  65. package/dist/resources/extensions/gsd/migrate/command.js +3 -2
  66. package/dist/resources/extensions/gsd/milestone-id-reservation.js +36 -0
  67. package/dist/resources/extensions/gsd/model-router.js +114 -9
  68. package/dist/resources/extensions/gsd/native-git-bridge.js +7 -1
  69. package/dist/resources/extensions/gsd/preferences-models.js +91 -15
  70. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  71. package/dist/resources/extensions/gsd/preferences-validation.js +32 -0
  72. package/dist/resources/extensions/gsd/preferences.js +5 -3
  73. package/dist/resources/extensions/gsd/prompt-loader.js +23 -12
  74. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
  75. package/dist/resources/extensions/gsd/prompts/complete-slice.md +10 -0
  76. package/dist/resources/extensions/gsd/prompts/plan-slice.md +10 -0
  77. package/dist/resources/extensions/gsd/prompts/refine-slice.md +10 -0
  78. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +9 -3
  79. package/dist/resources/extensions/gsd/state.js +42 -0
  80. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  81. package/dist/resources/extensions/gsd/tools/memory-tools.js +18 -1
  82. package/dist/resources/extensions/gsd/unit-context-manifest.js +29 -4
  83. package/dist/resources/extensions/gsd/visualizer-overlay.js +1 -1
  84. package/dist/resources/extensions/gsd/watch/header-renderer.js +3 -1
  85. package/dist/resources/extensions/gsd/worktree-command.js +26 -46
  86. package/dist/resources/extensions/gsd/worktree-manager.js +20 -1
  87. package/dist/resources/extensions/gsd/worktree-resolver.js +4 -13
  88. package/dist/resources/extensions/gsd/worktree-root.js +124 -0
  89. package/dist/resources/extensions/gsd/worktree-session-state.js +33 -0
  90. package/dist/resources/extensions/gsd/worktree.js +4 -115
  91. package/dist/resources/extensions/mcp-client/index.js +6 -9
  92. package/dist/resources/extensions/ollama/index.js +15 -2
  93. package/dist/resources/extensions/ollama/model-capabilities.js +31 -0
  94. package/dist/resources/extensions/ollama/ollama-client.js +40 -4
  95. package/dist/resources/extensions/slash-commands/create-extension.js +36 -22
  96. package/dist/resources/extensions/subagent/index.js +324 -178
  97. package/dist/resources/skills/create-gsd-extension/SKILL.md +9 -5
  98. package/dist/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  99. package/dist/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  100. package/dist/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  101. package/dist/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  102. package/dist/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  103. package/dist/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  104. package/dist/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  105. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
  106. package/dist/rtk-shared.d.ts +3 -0
  107. package/dist/rtk-shared.js +17 -0
  108. package/dist/rtk.d.ts +2 -5
  109. package/dist/rtk.js +3 -20
  110. package/dist/runtime-checks.d.ts +27 -0
  111. package/dist/runtime-checks.js +38 -0
  112. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  113. package/dist/web/standalone/.next/BUILD_ID +1 -1
  114. package/dist/web/standalone/.next/app-path-routes-manifest.json +15 -15
  115. package/dist/web/standalone/.next/build-manifest.json +4 -4
  116. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  117. package/dist/web/standalone/.next/react-loadable-manifest.json +44 -4
  118. package/dist/web/standalone/.next/required-server-files.json +3 -3
  119. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  120. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  130. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  132. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  133. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  134. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  136. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  146. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  158. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  178. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  188. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/session/events/route.js +4 -2
  194. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +2 -2
  208. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  210. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  212. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  214. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  221. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  223. package/dist/web/standalone/.next/server/app/index.html +1 -1
  224. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  225. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  226. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  227. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  228. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  229. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  230. package/dist/web/standalone/.next/server/app/page.js +2 -2
  231. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  232. package/dist/web/standalone/.next/server/app-paths-manifest.json +15 -15
  233. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  234. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  235. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/middleware-manifest.json +5 -5
  237. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  238. package/dist/web/standalone/.next/server/middleware.js +2 -2
  239. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  240. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  241. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  242. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  243. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  244. package/dist/web/standalone/.next/server/webpack-runtime.js +1 -1
  245. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/2824.08296bc2f9654698.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/3026.3af53b279375f082.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/315.6f68ae79b67d25cf.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/3497.4bfc60a3b3dea717.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/5516.4a07c872b5c3a663.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/8336.31b019697882acfb.js +10 -0
  252. package/dist/web/standalone/.next/static/chunks/8845.c9702695e8c5a9c5.js +2 -0
  253. package/dist/web/standalone/.next/static/chunks/9058.01ef3a463bda88f1.js +20 -0
  254. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  256. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  257. package/dist/web/standalone/.next/static/chunks/app/page-9bf2e0c50fb2ca05.js +1 -0
  258. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  259. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  260. package/dist/web/standalone/.next/static/chunks/webpack-f9f0dc45e4f3ac10.js +1 -0
  261. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  262. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  263. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  264. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  265. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  266. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  267. package/dist/web/standalone/package.json +2 -1
  268. package/dist/web/standalone/server.js +1 -1
  269. package/dist/welcome-screen.js +27 -1
  270. package/dist/worktree-cli.d.ts +1 -0
  271. package/dist/worktree-cli.js +9 -3
  272. package/dist/worktree-status-banner.d.ts +1 -0
  273. package/dist/worktree-status-banner.js +132 -0
  274. package/package.json +1 -3
  275. package/packages/daemon/package.json +2 -2
  276. package/packages/mcp-server/dist/alias-telemetry.d.ts +8 -0
  277. package/packages/mcp-server/dist/alias-telemetry.d.ts.map +1 -0
  278. package/packages/mcp-server/dist/alias-telemetry.js +30 -0
  279. package/packages/mcp-server/dist/alias-telemetry.js.map +1 -0
  280. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  281. package/packages/mcp-server/dist/workflow-tools.js +74 -46
  282. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  283. package/packages/mcp-server/package.json +2 -2
  284. package/packages/mcp-server/src/alias-telemetry.test.ts +78 -0
  285. package/packages/mcp-server/src/alias-telemetry.ts +30 -0
  286. package/packages/mcp-server/src/workflow-tools.test.ts +78 -0
  287. package/packages/mcp-server/src/workflow-tools.ts +93 -58
  288. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  289. package/packages/native/package.json +1 -1
  290. package/packages/native/tsconfig.tsbuildinfo +1 -1
  291. package/packages/pi-agent-core/package.json +1 -1
  292. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  293. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts +2 -0
  294. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.d.ts.map +1 -0
  295. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js +231 -0
  296. package/packages/pi-ai/dist/providers/anthropic-shared.cache-breakpoint.test.js.map +1 -0
  297. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  298. package/packages/pi-ai/dist/providers/anthropic-shared.js +48 -19
  299. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  300. package/packages/pi-ai/dist/types.d.ts +13 -0
  301. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  302. package/packages/pi-ai/dist/types.js.map +1 -1
  303. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +1 -1
  304. package/packages/pi-ai/dist/utils/repair-tool-json.js +24 -3
  305. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +1 -1
  306. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +26 -0
  307. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +1 -1
  308. package/packages/pi-ai/package.json +1 -1
  309. package/packages/pi-ai/src/providers/anthropic-shared.cache-breakpoint.test.ts +289 -0
  310. package/packages/pi-ai/src/providers/anthropic-shared.ts +52 -20
  311. package/packages/pi-ai/src/types.ts +13 -0
  312. package/packages/pi-ai/src/utils/repair-tool-json.ts +24 -3
  313. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +32 -0
  314. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  315. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/core/agent-session.js +6 -0
  317. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/core/messages.js +4 -0
  320. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +19 -2
  322. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -1
  323. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +10 -0
  324. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  325. package/packages/pi-coding-agent/dist/core/model-registry.js +18 -0
  326. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  327. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts +13 -0
  328. package/packages/pi-coding-agent/dist/core/system-prompt.d.ts.map +1 -1
  329. package/packages/pi-coding-agent/dist/core/system-prompt.js +20 -16
  330. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  331. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts +37 -0
  332. package/packages/pi-coding-agent/dist/core/token-telemetry.d.ts.map +1 -0
  333. package/packages/pi-coding-agent/dist/core/token-telemetry.js +49 -0
  334. package/packages/pi-coding-agent/dist/core/token-telemetry.js.map +1 -0
  335. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts +2 -0
  336. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.d.ts.map +1 -0
  337. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +133 -0
  338. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +1 -1
  340. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  341. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +14 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  343. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts +2 -0
  344. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.d.ts.map +1 -0
  345. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js +78 -0
  346. package/packages/pi-coding-agent/dist/tests/system-prompt-cache-stability.test.js.map +1 -0
  347. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts +2 -0
  348. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.d.ts.map +1 -0
  349. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js +181 -0
  350. package/packages/pi-coding-agent/dist/tests/token-telemetry.test.js.map +1 -0
  351. package/packages/pi-coding-agent/package.json +1 -1
  352. package/packages/pi-coding-agent/src/core/agent-session.ts +7 -0
  353. package/packages/pi-coding-agent/src/core/messages.ts +4 -0
  354. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +32 -2
  355. package/packages/pi-coding-agent/src/core/model-registry.ts +21 -0
  356. package/packages/pi-coding-agent/src/core/system-prompt.ts +33 -15
  357. package/packages/pi-coding-agent/src/core/token-telemetry.ts +77 -0
  358. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +212 -0
  359. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +17 -1
  360. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +1 -1
  361. package/packages/pi-coding-agent/src/tests/system-prompt-cache-stability.test.ts +102 -0
  362. package/packages/pi-coding-agent/src/tests/token-telemetry.test.ts +200 -0
  363. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  364. package/packages/pi-tui/dist/__tests__/autocomplete.test.js +17 -3
  365. package/packages/pi-tui/dist/__tests__/autocomplete.test.js.map +1 -1
  366. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts +2 -0
  367. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.d.ts.map +1 -0
  368. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js +161 -0
  369. package/packages/pi-tui/dist/components/__tests__/leak-fixes-runtime.test.js.map +1 -0
  370. package/packages/pi-tui/package.json +1 -1
  371. package/packages/pi-tui/src/__tests__/autocomplete.test.ts +20 -3
  372. package/packages/pi-tui/src/components/__tests__/leak-fixes-runtime.test.ts +219 -0
  373. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  374. package/packages/rpc-client/package.json +1 -1
  375. package/pkg/package.json +1 -1
  376. package/src/resources/extensions/claude-code-cli/readiness.ts +130 -30
  377. package/src/resources/extensions/google-search/index.ts +2 -9
  378. package/src/resources/extensions/gsd/auto/loop.ts +24 -2
  379. package/src/resources/extensions/gsd/auto/phases.ts +6 -14
  380. package/src/resources/extensions/gsd/auto/run-unit.ts +3 -1
  381. package/src/resources/extensions/gsd/auto/session.ts +5 -6
  382. package/src/resources/extensions/gsd/auto/types.ts +1 -0
  383. package/src/resources/extensions/gsd/auto-dashboard.ts +3 -2
  384. package/src/resources/extensions/gsd/auto-dispatch.ts +18 -6
  385. package/src/resources/extensions/gsd/auto-prompts.ts +60 -2
  386. package/src/resources/extensions/gsd/auto-recovery.ts +46 -8
  387. package/src/resources/extensions/gsd/auto-runtime-state.ts +51 -0
  388. package/src/resources/extensions/gsd/auto-start.ts +1 -1
  389. package/src/resources/extensions/gsd/auto-tool-tracking.ts +2 -4
  390. package/src/resources/extensions/gsd/auto-worktree.ts +82 -12
  391. package/src/resources/extensions/gsd/auto.ts +14 -4
  392. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +15 -13
  393. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +8 -7
  394. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  395. package/src/resources/extensions/gsd/bootstrap/register-extension.ts +10 -9
  396. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +121 -31
  397. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +12 -6
  398. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +20 -0
  399. package/src/resources/extensions/gsd/bootstrap/system-context.ts +50 -8
  400. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +141 -11
  401. package/src/resources/extensions/gsd/commands/catalog.ts +82 -5
  402. package/src/resources/extensions/gsd/commands/handlers/core.ts +23 -1
  403. package/src/resources/extensions/gsd/commands/handlers/ops.ts +10 -0
  404. package/src/resources/extensions/gsd/commands-config.ts +3 -2
  405. package/src/resources/extensions/gsd/commands-extensions.ts +43 -3
  406. package/src/resources/extensions/gsd/commands-handlers.ts +3 -2
  407. package/src/resources/extensions/gsd/commands-mcp-status.ts +3 -1
  408. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +15 -1
  409. package/src/resources/extensions/gsd/commands-worktree.ts +383 -0
  410. package/src/resources/extensions/gsd/dashboard-overlay.ts +1 -1
  411. package/src/resources/extensions/gsd/docs/preferences-reference.md +10 -0
  412. package/src/resources/extensions/gsd/doctor-providers.ts +2 -1
  413. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +39 -1
  414. package/src/resources/extensions/gsd/doctor-types.ts +3 -1
  415. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  416. package/src/resources/extensions/gsd/forensics.ts +12 -7
  417. package/src/resources/extensions/gsd/git-service.ts +13 -5
  418. package/src/resources/extensions/gsd/gsd-db.ts +12 -2
  419. package/src/resources/extensions/gsd/guided-flow.ts +27 -26
  420. package/src/resources/extensions/gsd/home-dir.ts +19 -0
  421. package/src/resources/extensions/gsd/journal.ts +4 -1
  422. package/src/resources/extensions/gsd/key-manager.ts +2 -1
  423. package/src/resources/extensions/gsd/memory-store.ts +81 -28
  424. package/src/resources/extensions/gsd/migrate/command.ts +3 -2
  425. package/src/resources/extensions/gsd/milestone-id-reservation.ts +47 -0
  426. package/src/resources/extensions/gsd/model-router.ts +172 -9
  427. package/src/resources/extensions/gsd/native-git-bridge.ts +7 -1
  428. package/src/resources/extensions/gsd/preferences-models.ts +101 -15
  429. package/src/resources/extensions/gsd/preferences-types.ts +6 -0
  430. package/src/resources/extensions/gsd/preferences-validation.ts +35 -0
  431. package/src/resources/extensions/gsd/preferences.ts +16 -2
  432. package/src/resources/extensions/gsd/prompt-loader.ts +26 -12
  433. package/src/resources/extensions/gsd/prompts/complete-milestone.md +10 -0
  434. package/src/resources/extensions/gsd/prompts/complete-slice.md +10 -0
  435. package/src/resources/extensions/gsd/prompts/plan-slice.md +10 -0
  436. package/src/resources/extensions/gsd/prompts/refine-slice.md +10 -0
  437. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +9 -3
  438. package/src/resources/extensions/gsd/state.ts +42 -0
  439. package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  440. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +178 -1
  441. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +58 -0
  442. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +24 -5
  443. package/src/resources/extensions/gsd/tests/auto-supervisor.test.mjs +21 -4
  444. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +1 -1
  445. package/src/resources/extensions/gsd/tests/budget-prediction.test.ts +138 -211
  446. package/src/resources/extensions/gsd/tests/bundled-skill-triggers.test.ts +50 -27
  447. package/src/resources/extensions/gsd/tests/commands-extensions-version-compare.test.ts +58 -0
  448. package/src/resources/extensions/gsd/tests/commands-worktree-clean.test.ts +48 -0
  449. package/src/resources/extensions/gsd/tests/complete-slice-verification-gate.test.ts +142 -59
  450. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +7 -4
  451. package/src/resources/extensions/gsd/tests/completed-at-reconcile.test.ts +89 -32
  452. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +41 -23
  453. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +3 -43
  454. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +5 -3
  455. package/src/resources/extensions/gsd/tests/deferred-milestone-dir-4996.test.ts +116 -0
  456. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +22 -87
  457. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +7 -118
  458. package/src/resources/extensions/gsd/tests/discuss-tool-scope-leak.test.ts +18 -60
  459. package/src/resources/extensions/gsd/tests/doctor-orphan-milestone-4996.test.ts +100 -0
  460. package/src/resources/extensions/gsd/tests/double-merge-guard.test.ts +14 -76
  461. package/src/resources/extensions/gsd/tests/ensure-preconditions-guard-4996.test.ts +93 -0
  462. package/src/resources/extensions/gsd/tests/false-degraded-mode-warning.test.ts +22 -83
  463. package/src/resources/extensions/gsd/tests/finalize-timeout-guard.test.ts +1 -63
  464. package/src/resources/extensions/gsd/tests/find-missing-summaries-closed-runtime.test.ts +47 -0
  465. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +26 -1
  466. package/src/resources/extensions/gsd/tests/gitignore-bg-shell-runtime.test.ts +63 -0
  467. package/src/resources/extensions/gsd/tests/google-search-stub.test.ts +25 -65
  468. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +30 -0
  469. package/src/resources/extensions/gsd/tests/gsd-no-project-error-runtime.test.ts +81 -0
  470. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +14 -4
  471. package/src/resources/extensions/gsd/tests/health-widget.test.ts +22 -12
  472. package/src/resources/extensions/gsd/tests/help-menu-coverage.test.ts +57 -0
  473. package/src/resources/extensions/gsd/tests/home-dir.test.ts +52 -0
  474. package/src/resources/extensions/gsd/tests/import-done-milestones-runtime.test.ts +145 -0
  475. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +64 -1
  476. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +72 -1
  477. package/src/resources/extensions/gsd/tests/integration/token-savings.test.ts +0 -23
  478. package/src/resources/extensions/gsd/tests/memory-store.test.ts +128 -0
  479. package/src/resources/extensions/gsd/tests/memory-tools.test.ts +33 -1
  480. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +124 -0
  481. package/src/resources/extensions/gsd/tests/milestone-id-gap-reuse-4996.test.ts +152 -0
  482. package/src/resources/extensions/gsd/tests/milestone-report-path.test.ts +18 -1
  483. package/src/resources/extensions/gsd/tests/model-router.test.ts +169 -8
  484. package/src/resources/extensions/gsd/tests/native-git-infra-errors.test.ts +50 -0
  485. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +8 -0
  486. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +32 -43
  487. package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +4 -10
  488. package/src/resources/extensions/gsd/tests/preferences.test.ts +127 -0
  489. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -0
  490. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +7 -0
  491. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +6 -6
  492. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +93 -0
  493. package/src/resources/extensions/gsd/tests/safety-harness-false-positives.test.ts +34 -0
  494. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +168 -19
  495. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +7 -1
  496. package/src/resources/extensions/gsd/tests/smart-entry-complete.test.ts +23 -1
  497. package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +17 -1
  498. package/src/resources/extensions/gsd/tests/system-context-message-routing.test.ts +101 -0
  499. package/src/resources/extensions/gsd/tests/token-profile.test.ts +51 -4
  500. package/src/resources/extensions/gsd/tests/turn-epoch.test.ts +7 -16
  501. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +38 -3
  502. package/src/resources/extensions/gsd/tests/unstructured-continue-context-injection.test.ts +5 -7
  503. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +15 -1
  504. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +6 -6
  505. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +34 -33
  506. package/src/resources/extensions/gsd/tests/worktree.test.ts +8 -0
  507. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +131 -1
  508. package/src/resources/extensions/gsd/tools/memory-tools.ts +17 -1
  509. package/src/resources/extensions/gsd/unit-context-manifest.ts +44 -12
  510. package/src/resources/extensions/gsd/visualizer-overlay.ts +1 -1
  511. package/src/resources/extensions/gsd/watch/header-renderer.ts +3 -1
  512. package/src/resources/extensions/gsd/workflow-logger.ts +1 -0
  513. package/src/resources/extensions/gsd/worktree-command.ts +31 -44
  514. package/src/resources/extensions/gsd/worktree-manager.ts +40 -1
  515. package/src/resources/extensions/gsd/worktree-resolver.ts +4 -14
  516. package/src/resources/extensions/gsd/worktree-root.ts +144 -0
  517. package/src/resources/extensions/gsd/worktree-session-state.ts +35 -0
  518. package/src/resources/extensions/gsd/worktree.ts +8 -119
  519. package/src/resources/extensions/mcp-client/index.ts +6 -10
  520. package/src/resources/extensions/mcp-client/tests/global-config.test.ts +91 -0
  521. package/src/resources/extensions/ollama/index.ts +16 -2
  522. package/src/resources/extensions/ollama/model-capabilities.ts +34 -0
  523. package/src/resources/extensions/ollama/ollama-client.ts +41 -4
  524. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +96 -0
  525. package/src/resources/extensions/ollama/tests/ollama-client-timeout-env.test.ts +147 -0
  526. package/src/resources/extensions/slash-commands/create-extension.ts +38 -24
  527. package/src/resources/extensions/subagent/index.ts +165 -7
  528. package/src/resources/skills/create-gsd-extension/SKILL.md +9 -5
  529. package/src/resources/skills/create-gsd-extension/references/custom-commands.md +1 -1
  530. package/src/resources/skills/create-gsd-extension/references/custom-rendering.md +5 -5
  531. package/src/resources/skills/create-gsd-extension/references/custom-tools.md +4 -4
  532. package/src/resources/skills/create-gsd-extension/references/custom-ui.md +6 -6
  533. package/src/resources/skills/create-gsd-extension/references/events-reference.md +3 -3
  534. package/src/resources/skills/create-gsd-extension/references/packaging-distribution.md +1 -1
  535. package/src/resources/skills/create-gsd-extension/references/remote-execution-overrides.md +3 -3
  536. package/src/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +2 -2
  537. package/src/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +3 -3
  538. package/src/resources/skills/create-gsd-extension/templates/templates.test.ts +58 -0
  539. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +32 -12
  540. package/dist/resources/extensions/browser-tools/tests/browser-tools-integration.test.mjs +0 -601
  541. package/dist/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +0 -651
  542. package/dist/resources/extensions/browser-tools/tests/capture-sharp-optional.test.cjs +0 -91
  543. package/dist/resources/extensions/gsd/tests/auto-supervisor.test.mjs +0 -53
  544. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +0 -112
  545. package/dist/resources/extensions/gsd/tests/resolve-ts-hooks.mjs +0 -23
  546. package/dist/resources/extensions/gsd/tests/resolve-ts.mjs +0 -5
  547. package/dist/resources/skills/github-workflows/references/gh/tests/__init__.py +0 -0
  548. package/dist/resources/skills/github-workflows/references/gh/tests/test_github_project_setup.py +0 -608
  549. package/dist/web/standalone/.next/static/chunks/2826.e9f5195e91f9cad2.js +0 -11
  550. package/dist/web/standalone/.next/static/chunks/3621.fc7480022c972438.js +0 -20
  551. package/dist/web/standalone/.next/static/chunks/app/page-151349214571e2b6.js +0 -1
  552. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  553. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  554. package/dist/web/standalone/.next/static/chunks/webpack-2e68521d7c82f7c2.js +0 -1
  555. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +0 -22
  556. package/src/resources/extensions/gsd/tests/discuss-slice-structured-questions.test.ts +0 -47
  557. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -75
  558. /package/dist/web/standalone/.next/static/{C1zT2kEfoLhDdbWPWKrXd → QK8fABiGPmonfTgboN0Y9}/_buildManifest.js +0 -0
  559. /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.0",
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.0",
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, async () => {
1352
- const {
1353
- claimReservedId,
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, async () => {
1392
- const {
1393
- claimReservedId,
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);