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
@@ -0,0 +1,132 @@
1
+ // GSD worktree startup banner
2
+ import { execFileSync } from 'node:child_process';
3
+ import { existsSync, realpathSync } from 'node:fs';
4
+ import { join, resolve, sep } from 'node:path';
5
+ import chalk from 'chalk';
6
+ function normalizePath(path) {
7
+ const normalized = path
8
+ .replaceAll('\\', '/')
9
+ .replace(/^\/\/\?\//, '')
10
+ .replace(/\/+$/, '');
11
+ return process.platform === 'win32' ? normalized.toLowerCase() : normalized;
12
+ }
13
+ function gitExec(basePath, args) {
14
+ try {
15
+ return execFileSync('git', args, {
16
+ cwd: basePath,
17
+ stdio: ['ignore', 'pipe', 'ignore'],
18
+ encoding: 'utf-8',
19
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GCM_INTERACTIVE: 'Never' },
20
+ }).trim();
21
+ }
22
+ catch {
23
+ return '';
24
+ }
25
+ }
26
+ function parseWorktreeList(output) {
27
+ if (!output)
28
+ return [];
29
+ const entries = [];
30
+ const blocks = output.replaceAll('\r\n', '\n').split('\n\n').filter(Boolean);
31
+ for (const block of blocks) {
32
+ const lines = block.split('\n');
33
+ const wtLine = lines.find((line) => line.startsWith('worktree '));
34
+ const branchLine = lines.find((line) => line.startsWith('branch '));
35
+ if (!wtLine)
36
+ continue;
37
+ entries.push({
38
+ path: wtLine.replace('worktree ', ''),
39
+ branch: branchLine ? branchLine.replace('branch refs/heads/', '') : '',
40
+ isBare: lines.some((line) => line === 'bare'),
41
+ });
42
+ }
43
+ return entries;
44
+ }
45
+ function existingPathVariants(path) {
46
+ const variants = [resolve(path)];
47
+ if (existsSync(path)) {
48
+ try {
49
+ variants.push(realpathSync(path));
50
+ }
51
+ catch {
52
+ // Best effort only; the unresolved path is still useful for matching.
53
+ }
54
+ }
55
+ return [...new Set(variants.map(normalizePath))];
56
+ }
57
+ function findGsdWorktrees(basePath, entries) {
58
+ const roots = existingPathVariants(join(basePath, '.gsd', 'worktrees'));
59
+ const worktrees = [];
60
+ for (const entry of entries) {
61
+ if (entry.isBare || !entry.branch)
62
+ continue;
63
+ const branchWorktreeName = entry.branch.startsWith('worktree/')
64
+ ? entry.branch.slice('worktree/'.length)
65
+ : entry.branch.startsWith('milestone/')
66
+ ? entry.branch.slice('milestone/'.length)
67
+ : null;
68
+ const entryVariants = existingPathVariants(entry.path);
69
+ const matchedRoot = roots.find((root) => entryVariants.some((variant) => variant.startsWith(`${root}/`) || variant.startsWith(`${root}${sep}`)));
70
+ const matchesBranchLeaf = branchWorktreeName
71
+ ? entryVariants.some((variant) => variant.split('/').pop() === branchWorktreeName)
72
+ : false;
73
+ if (!matchedRoot && !matchesBranchLeaf)
74
+ continue;
75
+ const matchedPath = matchedRoot
76
+ ? entryVariants.find((variant) => variant.startsWith(`${matchedRoot}/`) || variant.startsWith(`${matchedRoot}${sep}`))
77
+ : undefined;
78
+ let name = matchedRoot && matchedPath ? matchedPath.slice(matchedRoot.length + 1) : '';
79
+ if ((!name || name.includes('/')) && branchWorktreeName && matchesBranchLeaf) {
80
+ name = branchWorktreeName;
81
+ }
82
+ if (!name || name.includes('/'))
83
+ continue;
84
+ worktrees.push({ name, branch: entry.branch });
85
+ }
86
+ return worktrees;
87
+ }
88
+ function detectMainBranch(basePath) {
89
+ const symbolic = gitExec(basePath, ['symbolic-ref', 'refs/remotes/origin/HEAD']);
90
+ const remoteMatch = symbolic.match(/refs\/remotes\/origin\/(.+)$/);
91
+ if (remoteMatch?.[1])
92
+ return remoteMatch[1];
93
+ if (gitExec(basePath, ['show-ref', '--verify', 'refs/heads/main']))
94
+ return 'main';
95
+ if (gitExec(basePath, ['show-ref', '--verify', 'refs/heads/master']))
96
+ return 'master';
97
+ return gitExec(basePath, ['branch', '--show-current']);
98
+ }
99
+ function branchHasChanges(basePath, mainBranch, branch) {
100
+ try {
101
+ execFileSync('git', ['diff', '--quiet', mainBranch, branch], {
102
+ cwd: basePath,
103
+ stdio: ['ignore', 'ignore', 'ignore'],
104
+ env: { ...process.env, GIT_TERMINAL_PROMPT: '0', GCM_INTERACTIVE: 'Never' },
105
+ });
106
+ return false;
107
+ }
108
+ catch {
109
+ return true;
110
+ }
111
+ }
112
+ export function showWorktreeStatusBanner(basePath) {
113
+ const worktreesDir = join(basePath, '.gsd', 'worktrees');
114
+ if (!existsSync(worktreesDir))
115
+ return;
116
+ const entries = parseWorktreeList(gitExec(basePath, ['worktree', 'list', '--porcelain']));
117
+ const worktrees = findGsdWorktrees(basePath, entries);
118
+ if (worktrees.length === 0)
119
+ return;
120
+ const mainBranch = detectMainBranch(basePath);
121
+ if (!mainBranch)
122
+ return;
123
+ const withChanges = worktrees.filter((worktree) => branchHasChanges(basePath, mainBranch, worktree.branch));
124
+ if (withChanges.length === 0)
125
+ return;
126
+ const names = withChanges.map((worktree) => chalk.cyan(worktree.name)).join(', ');
127
+ process.stderr.write(chalk.dim('[gsd] ') +
128
+ chalk.yellow(`${withChanges.length} worktree${withChanges.length === 1 ? '' : 's'} with unmerged changes: `) +
129
+ names + '\n' +
130
+ chalk.dim('[gsd] ') +
131
+ chalk.dim('Resume: gsd -w <name> | Merge: gsd worktree merge <name> | List: gsd worktree list\n\n'));
132
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gsd-pi",
3
- "version": "2.78.0",
3
+ "version": "2.78.1-dev.8a893322c",
4
4
  "description": "GSD — Get Shit Done coding agent",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -128,7 +128,6 @@
128
128
  "playwright": "^1.58.2",
129
129
  "proper-lockfile": "^4.1.2",
130
130
  "proxy-agent": "^6.5.0",
131
- "semver": "^7.7.4",
132
131
  "sharp": "^0.34.5",
133
132
  "sql.js": "^1.14.1",
134
133
  "strip-ansi": "^7.1.0",
@@ -138,7 +137,6 @@
138
137
  "devDependencies": {
139
138
  "@types/node": "^24.12.0",
140
139
  "@types/picomatch": "^4.0.2",
141
- "@types/semver": "^7.7.1",
142
140
  "c8": "^11.0.0",
143
141
  "esbuild": "^0.25.12",
144
142
  "jiti": "^2.6.1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gsd-build/daemon",
3
- "version": "2.78.0",
3
+ "version": "2.78.1",
4
4
  "description": "GSD daemon — background process for project monitoring and Discord integration",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@anthropic-ai/sdk": "^0.52.0",
32
- "@gsd-build/rpc-client": "^2.78.0",
32
+ "@gsd-build/rpc-client": "^2.78.1",
33
33
  "discord.js": "^14.25.1",
34
34
  "yaml": "^2.8.0",
35
35
  "zod": "^3.24.0"
@@ -0,0 +1,8 @@
1
+ /** JSONL `event` field. Namespaced for `grep deprecation`. */
2
+ export declare const ALIAS_USAGE_EVENT: "deprecation.mcp_alias_used";
3
+ /**
4
+ * Emit a single-line JSONL record signaling that an alias tool was invoked.
5
+ * Failures are swallowed — telemetry must never break MCP request handling.
6
+ */
7
+ export declare function logAliasUsage(alias: string, canonical: string): void;
8
+ //# sourceMappingURL=alias-telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-telemetry.d.ts","sourceRoot":"","sources":["../src/alias-telemetry.ts"],"names":[],"mappings":"AAUA,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAG,4BAAqC,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAYpE"}
@@ -0,0 +1,30 @@
1
+ // @gsd-build/mcp-server + alias-telemetry — usage telemetry on the 11 alias
2
+ // `gsd_*` tools. Step 1 of a two-step deprecation (#5031). Always-on so we
3
+ // actually capture data during the window. Single JSON line per invocation
4
+ // to stderr — negligible overhead vs. the MCP request handler itself.
5
+ //
6
+ // Capture pattern: `<mcp-server-launch> 2>> alias-usage.jsonl`. After a
7
+ // long-enough window with zero entries, the alias tools can be removed in
8
+ // a follow-up PR. Filter with `grep deprecation` — the `event` field is
9
+ // namespaced for that purpose.
10
+ /** JSONL `event` field. Namespaced for `grep deprecation`. */
11
+ export const ALIAS_USAGE_EVENT = "deprecation.mcp_alias_used";
12
+ /**
13
+ * Emit a single-line JSONL record signaling that an alias tool was invoked.
14
+ * Failures are swallowed — telemetry must never break MCP request handling.
15
+ */
16
+ export function logAliasUsage(alias, canonical) {
17
+ try {
18
+ const record = {
19
+ event: ALIAS_USAGE_EVENT,
20
+ ts: Date.now(),
21
+ alias,
22
+ canonical,
23
+ };
24
+ process.stderr.write(`${JSON.stringify(record)}\n`);
25
+ }
26
+ catch {
27
+ // swallow — telemetry must never break the request handler
28
+ }
29
+ }
30
+ //# sourceMappingURL=alias-telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alias-telemetry.js","sourceRoot":"","sources":["../src/alias-telemetry.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,2EAA2E;AAC3E,2EAA2E;AAC3E,sEAAsE;AACtE,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,wEAAwE;AACxE,+BAA+B;AAE/B,8DAA8D;AAC9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,4BAAqC,CAAC;AAEvE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa,EAAE,SAAiB;IAC7D,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG;YACd,KAAK,EAAE,iBAAiB;YACxB,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE;YACd,KAAK;YACL,SAAS;SACT,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACR,2DAA2D;IAC5D,CAAC;AACF,CAAC","sourcesContent":["// @gsd-build/mcp-server + alias-telemetry — usage telemetry on the 11 alias\n// `gsd_*` tools. Step 1 of a two-step deprecation (#5031). Always-on so we\n// actually capture data during the window. Single JSON line per invocation\n// to stderr — negligible overhead vs. the MCP request handler itself.\n//\n// Capture pattern: `<mcp-server-launch> 2>> alias-usage.jsonl`. After a\n// long-enough window with zero entries, the alias tools can be removed in\n// a follow-up PR. Filter with `grep deprecation` — the `event` field is\n// namespaced for that purpose.\n\n/** JSONL `event` field. Namespaced for `grep deprecation`. */\nexport const ALIAS_USAGE_EVENT = \"deprecation.mcp_alias_used\" as const;\n\n/**\n * Emit a single-line JSONL record signaling that an alias tool was invoked.\n * Failures are swallowed — telemetry must never break MCP request handling.\n */\nexport function logAliasUsage(alias: string, canonical: string): void {\n\ttry {\n\t\tconst record = {\n\t\t\tevent: ALIAS_USAGE_EVENT,\n\t\t\tts: Date.now(),\n\t\t\talias,\n\t\t\tcanonical,\n\t\t};\n\t\tprocess.stderr.write(`${JSON.stringify(record)}\\n`);\n\t} catch {\n\t\t// swallow — telemetry must never break the request handler\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgSH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AAkID,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBrE;AA6FD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,6tBAoCtB,CAAC;AA+nBX,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CA6kBjE"}
1
+ {"version":3,"file":"workflow-tools.d.ts","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkSH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CA+BnG;AAkID,4CAA4C;AAC5C,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAiBrE;AA6FD,UAAU,aAAa;IACrB,IAAI,CACF,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,OAAO,CAAC;CACZ;AAED,eAAO,MAAM,mBAAmB,6tBAoCtB,CAAC;AAysBX,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAoiBjE"}
@@ -5,6 +5,7 @@ import { existsSync, realpathSync } from "node:fs";
5
5
  import { isAbsolute, join, relative, resolve } from "node:path";
6
6
  import { pathToFileURL } from "node:url";
7
7
  import { z } from "zod";
8
+ import { logAliasUsage } from "./alias-telemetry.js";
8
9
  let workflowToolExecutorsPromise = null;
9
10
  let workflowExecutionQueue = Promise.resolve();
10
11
  let workflowWriteGatePromise = null;
@@ -482,6 +483,66 @@ async function ensureMilestoneDbRow(milestoneId) {
482
483
  // Ignore pre-existing rows or transient DB availability issues.
483
484
  }
484
485
  }
486
+ async function findDatabaseMilestoneIds() {
487
+ try {
488
+ const { getAllMilestones } = await importLocalModule("../../../src/resources/extensions/gsd/gsd-db.js");
489
+ return (getAllMilestones?.() ?? [])
490
+ .map((milestone) => {
491
+ const id = milestone?.id;
492
+ return typeof id === "string" ? id : null;
493
+ })
494
+ .filter((id) => id !== null);
495
+ }
496
+ catch {
497
+ return [];
498
+ }
499
+ }
500
+ /**
501
+ * Fix #4996: Shared helper for both gsd_milestone_generate_id and
502
+ * gsd_generate_milestone_id. Reuses the lowest reusable ghost milestone ID
503
+ * (a disk-only stub with no DB row, no worktree, no content files) before
504
+ * falling back to max+1. Uses the stricter `isReusableGhostMilestone` —
505
+ * not `isGhostMilestone` — to avoid racing with in-flight queued DB rows
506
+ * from an earlier call to this same tool.
507
+ */
508
+ async function generateOrReuseMilestoneId(projectDir) {
509
+ const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, milestoneIdSort, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
510
+ const reserved = claimReservedId();
511
+ if (reserved) {
512
+ await ensureMilestoneDbRow(reserved);
513
+ return reserved;
514
+ }
515
+ const allIds = [
516
+ ...new Set([
517
+ ...findMilestoneIds(projectDir),
518
+ ...getReservedMilestoneIds(),
519
+ ...(await findDatabaseMilestoneIds()),
520
+ ]),
521
+ ];
522
+ // Attempt ghost-ID reuse before falling back to max+1.
523
+ const { isReusableGhostMilestone } = await importLocalModule("../../../src/resources/extensions/gsd/state.js");
524
+ const sorted = [...allIds].sort(milestoneIdSort);
525
+ for (const candidate of sorted) {
526
+ if (isReusableGhostMilestone(projectDir, candidate)) {
527
+ await ensureMilestoneDbRow(candidate);
528
+ return candidate;
529
+ }
530
+ }
531
+ const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
532
+ // Graceful degradation: a corrupt preferences file should not crash
533
+ // milestone-id generation. Fall back to non-unique IDs if anything
534
+ // throws here — matches the pre-fix behavior for missing prefs.
535
+ let uniqueEnabled = false;
536
+ try {
537
+ uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.(projectDir)?.preferences?.unique_milestone_ids;
538
+ }
539
+ catch {
540
+ uniqueEnabled = false;
541
+ }
542
+ const nextId = nextMilestoneId(allIds, uniqueEnabled);
543
+ await ensureMilestoneDbRow(nextId);
544
+ return nextId;
545
+ }
485
546
  // projectDir is optional. When omitted, the server uses process.cwd(). This
486
547
  // prevents the agent from burning tokens reasoning about which absolute path
487
548
  // to pass (git root vs worktree vs symlink-resolved external state layout) —
@@ -859,6 +920,7 @@ export function registerWorkflowTools(server) {
859
920
  return { content: [{ type: "text", text: `Saved decision ${result.id}` }] };
860
921
  });
861
922
  server.tool("gsd_save_decision", "Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.", decisionSaveParams, async (args) => {
923
+ logAliasUsage("gsd_save_decision", "gsd_decision_save");
862
924
  const parsed = parseWorkflowArgs(decisionSaveSchema, args);
863
925
  const { projectDir, ...params } = parsed;
864
926
  await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
@@ -879,6 +941,7 @@ export function registerWorkflowTools(server) {
879
941
  return { content: [{ type: "text", text: `Updated requirement ${id}` }] };
880
942
  });
881
943
  server.tool("gsd_update_requirement", "Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.", requirementUpdateParams, async (args) => {
944
+ logAliasUsage("gsd_update_requirement", "gsd_requirement_update");
882
945
  const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
883
946
  const { projectDir, id, ...updates } = parsed;
884
947
  await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
@@ -899,6 +962,7 @@ export function registerWorkflowTools(server) {
899
962
  return { content: [{ type: "text", text: `Saved requirement ${result.id}` }] };
900
963
  });
901
964
  server.tool("gsd_save_requirement", "Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.", requirementSaveParams, async (args) => {
965
+ logAliasUsage("gsd_save_requirement", "gsd_requirement_save");
902
966
  const parsed = parseWorkflowArgs(requirementSaveSchema, args);
903
967
  const { projectDir, ...params } = parsed;
904
968
  await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
@@ -911,57 +975,14 @@ export function registerWorkflowTools(server) {
911
975
  server.tool("gsd_milestone_generate_id", "Generate the next milestone ID for a new GSD milestone.", milestoneGenerateIdParams, async (args) => {
912
976
  const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
913
977
  await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
914
- const id = await runSerializedWorkflowDbOperation(projectDir, async () => {
915
- const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
916
- const reserved = claimReservedId();
917
- if (reserved) {
918
- await ensureMilestoneDbRow(reserved);
919
- return reserved;
920
- }
921
- const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
922
- const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
923
- // Graceful degradation: a corrupt preferences file should not crash
924
- // milestone-id generation. Fall back to non-unique IDs if anything
925
- // throws here — matches the pre-fix behavior for missing prefs.
926
- let uniqueEnabled = false;
927
- try {
928
- uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
929
- }
930
- catch {
931
- uniqueEnabled = false;
932
- }
933
- const nextId = nextMilestoneId(allIds, uniqueEnabled);
934
- await ensureMilestoneDbRow(nextId);
935
- return nextId;
936
- });
978
+ const id = await runSerializedWorkflowDbOperation(projectDir, () => generateOrReuseMilestoneId(projectDir));
937
979
  return { content: [{ type: "text", text: id }] };
938
980
  });
939
981
  server.tool("gsd_generate_milestone_id", "Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.", milestoneGenerateIdParams, async (args) => {
982
+ logAliasUsage("gsd_generate_milestone_id", "gsd_milestone_generate_id");
940
983
  const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
941
984
  await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
942
- const id = await runSerializedWorkflowDbOperation(projectDir, async () => {
943
- const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
944
- const reserved = claimReservedId();
945
- if (reserved) {
946
- await ensureMilestoneDbRow(reserved);
947
- return reserved;
948
- }
949
- const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];
950
- const prefsMod = await importLocalModule("../../../src/resources/extensions/gsd/preferences.js").catch(() => null);
951
- // Graceful degradation: a corrupt preferences file should not crash
952
- // milestone-id generation. Fall back to non-unique IDs if anything
953
- // throws here — matches the pre-fix behavior for missing prefs.
954
- let uniqueEnabled = false;
955
- try {
956
- uniqueEnabled = !!prefsMod?.loadEffectiveGSDPreferences?.()?.preferences?.unique_milestone_ids;
957
- }
958
- catch {
959
- uniqueEnabled = false;
960
- }
961
- const nextId = nextMilestoneId(allIds, uniqueEnabled);
962
- await ensureMilestoneDbRow(nextId);
963
- return nextId;
964
- });
985
+ const id = await runSerializedWorkflowDbOperation(projectDir, () => generateOrReuseMilestoneId(projectDir));
965
986
  return { content: [{ type: "text", text: id }] };
966
987
  });
967
988
  server.tool("gsd_plan_milestone", "Write milestone planning state to the GSD database and render ROADMAP.md from DB.", planMilestoneParams, async (args) => {
@@ -994,6 +1015,7 @@ export function registerWorkflowTools(server) {
994
1015
  };
995
1016
  });
996
1017
  server.tool("gsd_task_plan", "Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.", planTaskParams, async (args) => {
1018
+ logAliasUsage("gsd_task_plan", "gsd_plan_task");
997
1019
  const parsed = parseWorkflowArgs(planTaskSchema, args);
998
1020
  const { projectDir, ...params } = parsed;
999
1021
  await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
@@ -1013,6 +1035,7 @@ export function registerWorkflowTools(server) {
1013
1035
  return handleReplanSlice(parsed.projectDir, parsed);
1014
1036
  });
1015
1037
  server.tool("gsd_slice_replan", "Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.", replanSliceParams, async (args) => {
1038
+ logAliasUsage("gsd_slice_replan", "gsd_replan_slice");
1016
1039
  const parsed = parseWorkflowArgs(replanSliceSchema, args);
1017
1040
  return handleReplanSlice(parsed.projectDir, parsed);
1018
1041
  });
@@ -1021,6 +1044,7 @@ export function registerWorkflowTools(server) {
1021
1044
  return handleSliceComplete(parsed.projectDir, parsed);
1022
1045
  });
1023
1046
  server.tool("gsd_complete_slice", "Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.", sliceCompleteParams, async (args) => {
1047
+ logAliasUsage("gsd_complete_slice", "gsd_slice_complete");
1024
1048
  const parsed = parseWorkflowArgs(sliceCompleteSchema, args);
1025
1049
  return handleSliceComplete(parsed.projectDir, parsed);
1026
1050
  });
@@ -1053,6 +1077,7 @@ export function registerWorkflowTools(server) {
1053
1077
  return handleCompleteMilestone(parsed.projectDir, parsed);
1054
1078
  });
1055
1079
  server.tool("gsd_milestone_complete", "Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.", completeMilestoneParams, async (args) => {
1080
+ logAliasUsage("gsd_milestone_complete", "gsd_complete_milestone");
1056
1081
  const parsed = parseWorkflowArgs(completeMilestoneSchema, args);
1057
1082
  return handleCompleteMilestone(parsed.projectDir, parsed);
1058
1083
  });
@@ -1061,6 +1086,7 @@ export function registerWorkflowTools(server) {
1061
1086
  return handleValidateMilestone(parsed.projectDir, parsed);
1062
1087
  });
1063
1088
  server.tool("gsd_milestone_validate", "Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.", validateMilestoneParams, async (args) => {
1089
+ logAliasUsage("gsd_milestone_validate", "gsd_validate_milestone");
1064
1090
  const parsed = parseWorkflowArgs(validateMilestoneSchema, args);
1065
1091
  return handleValidateMilestone(parsed.projectDir, parsed);
1066
1092
  });
@@ -1069,6 +1095,7 @@ export function registerWorkflowTools(server) {
1069
1095
  return handleReassessRoadmap(parsed.projectDir, parsed);
1070
1096
  });
1071
1097
  server.tool("gsd_roadmap_reassess", "Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.", reassessRoadmapParams, async (args) => {
1098
+ logAliasUsage("gsd_roadmap_reassess", "gsd_reassess_roadmap");
1072
1099
  const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);
1073
1100
  return handleReassessRoadmap(parsed.projectDir, parsed);
1074
1101
  });
@@ -1093,6 +1120,7 @@ export function registerWorkflowTools(server) {
1093
1120
  return handleTaskComplete(projectDir, taskArgs);
1094
1121
  });
1095
1122
  server.tool("gsd_complete_task", "Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.", taskCompleteParams, async (args) => {
1123
+ logAliasUsage("gsd_complete_task", "gsd_task_complete");
1096
1124
  const parsed = parseWorkflowArgs(taskCompleteSchema, args);
1097
1125
  const { projectDir, ...taskArgs } = parsed;
1098
1126
  return handleTaskComplete(projectDir, taskArgs);