gsd-pi 2.70.1 → 2.71.0-dev.4c35d99

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 (533) hide show
  1. package/README.md +57 -17
  2. package/dist/cli.js +29 -3
  3. package/dist/headless-events.d.ts +2 -0
  4. package/dist/headless-events.js +7 -0
  5. package/dist/headless.js +16 -3
  6. package/dist/mcp-server.js +40 -17
  7. package/dist/provider-migrations.d.ts +10 -0
  8. package/dist/provider-migrations.js +12 -0
  9. package/dist/resource-loader.js +139 -13
  10. package/dist/resources/GSD-WORKFLOW.md +1 -1
  11. package/dist/resources/agents/debugger.md +58 -0
  12. package/dist/resources/agents/doc-writer.md +43 -0
  13. package/dist/resources/agents/git-ops.md +56 -0
  14. package/dist/resources/agents/javascript-pro.md +46 -271
  15. package/dist/resources/agents/planner.md +55 -0
  16. package/dist/resources/agents/refactorer.md +47 -0
  17. package/dist/resources/agents/reviewer.md +48 -0
  18. package/dist/resources/agents/security.md +59 -0
  19. package/dist/resources/agents/tester.md +50 -0
  20. package/dist/resources/agents/typescript-pro.md +41 -235
  21. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +242 -40
  22. package/dist/resources/extensions/get-secrets-from-user.js +17 -1
  23. package/dist/resources/extensions/gsd/auto/infra-errors.js +34 -0
  24. package/dist/resources/extensions/gsd/auto/loop.js +32 -1
  25. package/dist/resources/extensions/gsd/auto/phases.js +5 -1
  26. package/dist/resources/extensions/gsd/auto/session.js +11 -0
  27. package/dist/resources/extensions/gsd/auto-dashboard.js +22 -16
  28. package/dist/resources/extensions/gsd/auto-model-selection.js +10 -2
  29. package/dist/resources/extensions/gsd/auto-prompts.js +88 -33
  30. package/dist/resources/extensions/gsd/auto-start.js +37 -18
  31. package/dist/resources/extensions/gsd/auto-tool-tracking.js +1 -1
  32. package/dist/resources/extensions/gsd/auto-worktree.js +1 -1
  33. package/dist/resources/extensions/gsd/auto.js +56 -0
  34. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +3 -3
  35. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +6 -0
  36. package/dist/resources/extensions/gsd/bootstrap/register-shortcuts.js +63 -51
  37. package/dist/resources/extensions/gsd/bootstrap/system-context.js +6 -0
  38. package/dist/resources/extensions/gsd/commands/context.js +15 -6
  39. package/dist/resources/extensions/gsd/commands/dispatcher.js +12 -2
  40. package/dist/resources/extensions/gsd/commands/handlers/auto.js +10 -33
  41. package/dist/resources/extensions/gsd/commands/handlers/core.js +56 -11
  42. package/dist/resources/extensions/gsd/commands/handlers/notifications-handler.js +15 -6
  43. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +4 -10
  44. package/dist/resources/extensions/gsd/custom-workflow-engine.js +16 -12
  45. package/dist/resources/extensions/gsd/dashboard-overlay.js +8 -3
  46. package/dist/resources/extensions/gsd/dispatch-guard.js +18 -1
  47. package/dist/resources/extensions/gsd/doctor-providers.js +23 -0
  48. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  49. package/dist/resources/extensions/gsd/file-lock.js +60 -0
  50. package/dist/resources/extensions/gsd/forensics.js +19 -6
  51. package/dist/resources/extensions/gsd/gate-registry.js +208 -0
  52. package/dist/resources/extensions/gsd/gsd-db.js +41 -0
  53. package/dist/resources/extensions/gsd/guided-flow.js +17 -20
  54. package/dist/resources/extensions/gsd/init-wizard.js +3 -11
  55. package/dist/resources/extensions/gsd/metrics.js +1 -0
  56. package/dist/resources/extensions/gsd/milestone-actions.js +10 -4
  57. package/dist/resources/extensions/gsd/milestone-validation-gates.js +11 -12
  58. package/dist/resources/extensions/gsd/notification-overlay.js +42 -13
  59. package/dist/resources/extensions/gsd/notification-store.js +56 -5
  60. package/dist/resources/extensions/gsd/notification-widget.js +5 -13
  61. package/dist/resources/extensions/gsd/parallel-monitor-overlay.js +8 -3
  62. package/dist/resources/extensions/gsd/pre-execution-checks.js +35 -2
  63. package/dist/resources/extensions/gsd/prompt-validation.js +126 -0
  64. package/dist/resources/extensions/gsd/prompts/complete-slice.md +5 -3
  65. package/dist/resources/extensions/gsd/prompts/discuss.md +33 -13
  66. package/dist/resources/extensions/gsd/prompts/execute-task.md +22 -19
  67. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
  68. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +2 -0
  69. package/dist/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/queue.md +3 -2
  71. package/dist/resources/extensions/gsd/prompts/system.md +1 -0
  72. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +4 -1
  73. package/dist/resources/extensions/gsd/session-model-override.js +25 -0
  74. package/dist/resources/extensions/gsd/shortcut-defs.js +40 -0
  75. package/dist/resources/extensions/gsd/state.js +241 -332
  76. package/dist/resources/extensions/gsd/tools/complete-slice.js +52 -1
  77. package/dist/resources/extensions/gsd/tools/complete-task.js +51 -1
  78. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +38 -1
  79. package/dist/resources/extensions/gsd/workflow-events.js +25 -13
  80. package/dist/resources/extensions/gsd/workflow-mcp-auto-prep.js +56 -0
  81. package/dist/resources/extensions/gsd/workflow-mcp.js +1 -1
  82. package/dist/resources/extensions/ollama/index.js +13 -5
  83. package/dist/resources/extensions/shared/gsd-phase-state.js +35 -0
  84. package/dist/resources/extensions/subagent/agents.js +8 -0
  85. package/dist/resources/extensions/subagent/index.js +17 -0
  86. package/dist/resources/skills/create-skill/SKILL.md +2 -0
  87. package/dist/startup-model-validation.d.ts +0 -1
  88. package/dist/startup-model-validation.js +6 -2
  89. package/dist/web/standalone/.next/BUILD_ID +1 -1
  90. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  91. package/dist/web/standalone/.next/build-manifest.json +4 -4
  92. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  93. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  94. package/dist/web/standalone/.next/required-server-files.json +3 -3
  95. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  96. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  97. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  98. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  100. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  103. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  104. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  105. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  106. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  108. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  109. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  110. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  111. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  112. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  122. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  134. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  154. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  164. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  170. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  186. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  190. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/index.html +1 -1
  200. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  201. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  202. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  203. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  204. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  205. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  206. package/dist/web/standalone/.next/server/app/page.js +2 -2
  207. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  209. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  210. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  211. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  212. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  213. package/dist/web/standalone/.next/server/middleware.js +2 -2
  214. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  215. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  216. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  217. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  218. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  219. package/dist/web/standalone/.next/static/chunks/2826.dd3dc8bbd3025fa5.js +9 -0
  220. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  221. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  222. package/dist/web/standalone/.next/static/chunks/app/page-f1e30ab6bb269149.js +1 -0
  223. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  224. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  225. package/dist/web/standalone/.next/static/chunks/{webpack-6e4d7e9a4f57bed4.js → webpack-b868033a5834586d.js} +1 -1
  226. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  227. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  228. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  229. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  230. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  231. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  232. package/dist/web/standalone/server.js +1 -1
  233. package/package.json +1 -1
  234. package/packages/mcp-server/dist/env-writer.d.ts +39 -0
  235. package/packages/mcp-server/dist/env-writer.d.ts.map +1 -0
  236. package/packages/mcp-server/dist/env-writer.js +158 -0
  237. package/packages/mcp-server/dist/env-writer.js.map +1 -0
  238. package/packages/mcp-server/dist/server.d.ts +23 -3
  239. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  240. package/packages/mcp-server/dist/server.js +192 -44
  241. package/packages/mcp-server/dist/server.js.map +1 -1
  242. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  243. package/packages/mcp-server/dist/workflow-tools.js +22 -12
  244. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  245. package/packages/mcp-server/src/env-writer.test.ts +280 -0
  246. package/packages/mcp-server/src/env-writer.ts +183 -0
  247. package/packages/mcp-server/src/secure-env-collect.test.ts +265 -0
  248. package/packages/mcp-server/src/server.ts +247 -41
  249. package/packages/mcp-server/src/workflow-tools.test.ts +110 -0
  250. package/packages/mcp-server/src/workflow-tools.ts +32 -12
  251. package/packages/pi-ai/dist/providers/amazon-bedrock.js +11 -2
  252. package/packages/pi-ai/dist/providers/amazon-bedrock.js.map +1 -1
  253. package/packages/pi-ai/dist/providers/anthropic-auth.test.d.ts +2 -0
  254. package/packages/pi-ai/dist/providers/anthropic-auth.test.d.ts.map +1 -0
  255. package/packages/pi-ai/dist/providers/anthropic-auth.test.js +20 -0
  256. package/packages/pi-ai/dist/providers/anthropic-auth.test.js.map +1 -0
  257. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts +4 -1
  258. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  259. package/packages/pi-ai/dist/providers/anthropic-shared.js +8 -3
  260. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  261. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +44 -1
  262. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +1 -1
  263. package/packages/pi-ai/dist/providers/anthropic.d.ts +2 -1
  264. package/packages/pi-ai/dist/providers/anthropic.d.ts.map +1 -1
  265. package/packages/pi-ai/dist/providers/anthropic.js +7 -4
  266. package/packages/pi-ai/dist/providers/anthropic.js.map +1 -1
  267. package/packages/pi-ai/dist/providers/openai-completions.d.ts.map +1 -1
  268. package/packages/pi-ai/dist/providers/openai-completions.js +11 -0
  269. package/packages/pi-ai/dist/providers/openai-completions.js.map +1 -1
  270. package/packages/pi-ai/src/providers/amazon-bedrock.ts +13 -1
  271. package/packages/pi-ai/src/providers/anthropic-auth.test.ts +32 -0
  272. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +55 -1
  273. package/packages/pi-ai/src/providers/anthropic-shared.ts +14 -3
  274. package/packages/pi-ai/src/providers/anthropic.ts +8 -4
  275. package/packages/pi-ai/src/providers/openai-completions.ts +14 -0
  276. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.d.ts +2 -0
  277. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.d.ts.map +1 -0
  278. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.js +61 -0
  279. package/packages/pi-coding-agent/dist/core/agent-session-renderable-tools.test.js.map +1 -0
  280. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  281. package/packages/pi-coding-agent/dist/core/agent-session.js +2 -1
  282. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  283. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts +10 -0
  284. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  285. package/packages/pi-coding-agent/dist/core/auth-storage.js +27 -0
  286. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +85 -0
  288. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts +2 -0
  290. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.d.ts.map +1 -0
  291. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +388 -0
  292. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -0
  293. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +2 -0
  294. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  296. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.d.ts +2 -0
  297. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.d.ts.map +1 -0
  298. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.js +64 -0
  299. package/packages/pi-coding-agent/dist/core/model-resolver-initial-model-auth.test.js.map +1 -0
  300. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  301. package/packages/pi-coding-agent/dist/core/model-resolver.js +22 -18
  302. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  303. package/packages/pi-coding-agent/dist/core/model-resolver.test.d.ts +8 -0
  304. package/packages/pi-coding-agent/dist/core/model-resolver.test.d.ts.map +1 -0
  305. package/packages/pi-coding-agent/dist/core/model-resolver.test.js +75 -0
  306. package/packages/pi-coding-agent/dist/core/model-resolver.test.js.map +1 -0
  307. package/packages/pi-coding-agent/dist/core/sdk.d.ts +11 -0
  308. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/sdk.js +38 -5
  310. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/sdk.test.d.ts +2 -0
  312. package/packages/pi-coding-agent/dist/core/sdk.test.d.ts.map +1 -0
  313. package/packages/pi-coding-agent/dist/core/sdk.test.js +71 -0
  314. package/packages/pi-coding-agent/dist/core/sdk.test.js.map +1 -0
  315. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  316. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  317. package/packages/pi-coding-agent/dist/index.js +1 -1
  318. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.d.ts +2 -0
  320. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.d.ts.map +1 -0
  321. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.js +13 -0
  322. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/login-dialog.test.js.map +1 -0
  323. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts +19 -2
  324. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
  325. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js +50 -1
  326. package/packages/pi-coding-agent/dist/modes/interactive/components/dynamic-border.js.map +1 -1
  327. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts +1 -0
  328. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  329. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js +1 -0
  330. package/packages/pi-coding-agent/dist/modes/interactive/components/extension-input.js.map +1 -1
  331. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts +4 -0
  332. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js +24 -2
  334. package/packages/pi-coding-agent/dist/modes/interactive/components/login-dialog.js.map +1 -1
  335. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js +9 -2
  337. package/packages/pi-coding-agent/dist/modes/interactive/components/model-selector.js.map +1 -1
  338. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  340. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +43 -0
  341. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  343. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +175 -25
  344. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  345. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.d.ts.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.js +6 -1
  347. package/packages/pi-coding-agent/dist/modes/interactive/controllers/model-controller.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  350. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  351. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +6 -0
  352. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  353. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +62 -5
  354. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  355. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +4 -2
  356. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  357. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +1 -1
  358. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  359. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -0
  360. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  361. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  362. package/packages/pi-coding-agent/package.json +1 -1
  363. package/packages/pi-coding-agent/src/core/agent-session-renderable-tools.test.ts +70 -0
  364. package/packages/pi-coding-agent/src/core/agent-session.ts +2 -1
  365. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +108 -0
  366. package/packages/pi-coding-agent/src/core/auth-storage.ts +30 -0
  367. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +468 -0
  368. package/packages/pi-coding-agent/src/core/extensions/types.ts +2 -0
  369. package/packages/pi-coding-agent/src/core/model-resolver-initial-model-auth.test.ts +78 -0
  370. package/packages/pi-coding-agent/src/core/model-resolver.test.ts +85 -0
  371. package/packages/pi-coding-agent/src/core/model-resolver.ts +22 -18
  372. package/packages/pi-coding-agent/src/core/sdk.test.ts +89 -0
  373. package/packages/pi-coding-agent/src/core/sdk.ts +45 -9
  374. package/packages/pi-coding-agent/src/index.ts +1 -0
  375. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/login-dialog.test.ts +24 -0
  376. package/packages/pi-coding-agent/src/modes/interactive/components/dynamic-border.ts +58 -2
  377. package/packages/pi-coding-agent/src/modes/interactive/components/extension-input.ts +2 -0
  378. package/packages/pi-coding-agent/src/modes/interactive/components/login-dialog.ts +30 -2
  379. package/packages/pi-coding-agent/src/modes/interactive/components/model-selector.ts +15 -6
  380. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +47 -0
  381. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +205 -31
  382. package/packages/pi-coding-agent/src/modes/interactive/controllers/model-controller.ts +6 -1
  383. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -0
  384. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +70 -5
  385. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +4 -2
  386. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +1 -1
  387. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +1 -0
  388. package/packages/pi-tui/dist/components/__tests__/input.test.js +9 -0
  389. package/packages/pi-tui/dist/components/__tests__/input.test.js.map +1 -1
  390. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.d.ts +2 -0
  391. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.d.ts.map +1 -0
  392. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js +66 -0
  393. package/packages/pi-tui/dist/components/__tests__/markdown-maxlines.test.js.map +1 -0
  394. package/packages/pi-tui/dist/components/input.d.ts +2 -0
  395. package/packages/pi-tui/dist/components/input.d.ts.map +1 -1
  396. package/packages/pi-tui/dist/components/input.js +7 -4
  397. package/packages/pi-tui/dist/components/input.js.map +1 -1
  398. package/packages/pi-tui/dist/components/markdown.d.ts +3 -0
  399. package/packages/pi-tui/dist/components/markdown.d.ts.map +1 -1
  400. package/packages/pi-tui/dist/components/markdown.js +17 -1
  401. package/packages/pi-tui/dist/components/markdown.js.map +1 -1
  402. package/packages/pi-tui/src/components/__tests__/input.test.ts +11 -0
  403. package/packages/pi-tui/src/components/__tests__/markdown-maxlines.test.ts +75 -0
  404. package/packages/pi-tui/src/components/input.ts +7 -4
  405. package/packages/pi-tui/src/components/markdown.ts +22 -1
  406. package/pkg/package.json +1 -1
  407. package/src/resources/GSD-WORKFLOW.md +1 -1
  408. package/src/resources/agents/debugger.md +58 -0
  409. package/src/resources/agents/doc-writer.md +43 -0
  410. package/src/resources/agents/git-ops.md +56 -0
  411. package/src/resources/agents/javascript-pro.md +46 -271
  412. package/src/resources/agents/planner.md +55 -0
  413. package/src/resources/agents/refactorer.md +47 -0
  414. package/src/resources/agents/reviewer.md +48 -0
  415. package/src/resources/agents/security.md +59 -0
  416. package/src/resources/agents/tester.md +50 -0
  417. package/src/resources/agents/typescript-pro.md +41 -235
  418. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +288 -39
  419. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +330 -2
  420. package/src/resources/extensions/get-secrets-from-user.ts +24 -1
  421. package/src/resources/extensions/gsd/auto/infra-errors.ts +38 -0
  422. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  423. package/src/resources/extensions/gsd/auto/loop.ts +45 -1
  424. package/src/resources/extensions/gsd/auto/phases.ts +6 -0
  425. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  426. package/src/resources/extensions/gsd/auto-dashboard.ts +29 -18
  427. package/src/resources/extensions/gsd/auto-model-selection.ts +9 -1
  428. package/src/resources/extensions/gsd/auto-prompts.ts +111 -33
  429. package/src/resources/extensions/gsd/auto-start.ts +44 -20
  430. package/src/resources/extensions/gsd/auto-tool-tracking.ts +1 -1
  431. package/src/resources/extensions/gsd/auto-worktree.ts +1 -1
  432. package/src/resources/extensions/gsd/auto.ts +72 -0
  433. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +3 -3
  434. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +6 -0
  435. package/src/resources/extensions/gsd/bootstrap/register-shortcuts.ts +79 -60
  436. package/src/resources/extensions/gsd/bootstrap/system-context.ts +7 -0
  437. package/src/resources/extensions/gsd/commands/context.ts +16 -5
  438. package/src/resources/extensions/gsd/commands/dispatcher.ts +14 -2
  439. package/src/resources/extensions/gsd/commands/handlers/auto.ts +10 -36
  440. package/src/resources/extensions/gsd/commands/handlers/core.ts +58 -11
  441. package/src/resources/extensions/gsd/commands/handlers/notifications-handler.ts +17 -7
  442. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +4 -10
  443. package/src/resources/extensions/gsd/custom-workflow-engine.ts +19 -14
  444. package/src/resources/extensions/gsd/dashboard-overlay.ts +10 -3
  445. package/src/resources/extensions/gsd/dispatch-guard.ts +18 -1
  446. package/src/resources/extensions/gsd/doctor-providers.ts +24 -0
  447. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  448. package/src/resources/extensions/gsd/file-lock.ts +59 -0
  449. package/src/resources/extensions/gsd/forensics.ts +23 -7
  450. package/src/resources/extensions/gsd/gate-registry.ts +251 -0
  451. package/src/resources/extensions/gsd/gsd-db.ts +51 -0
  452. package/src/resources/extensions/gsd/guided-flow.ts +17 -19
  453. package/src/resources/extensions/gsd/init-wizard.ts +3 -13
  454. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  455. package/src/resources/extensions/gsd/metrics.ts +12 -1
  456. package/src/resources/extensions/gsd/milestone-actions.ts +10 -3
  457. package/src/resources/extensions/gsd/milestone-validation-gates.ts +11 -13
  458. package/src/resources/extensions/gsd/notification-overlay.ts +47 -14
  459. package/src/resources/extensions/gsd/notification-store.ts +54 -5
  460. package/src/resources/extensions/gsd/notification-widget.ts +5 -14
  461. package/src/resources/extensions/gsd/parallel-monitor-overlay.ts +10 -3
  462. package/src/resources/extensions/gsd/pre-execution-checks.ts +39 -2
  463. package/src/resources/extensions/gsd/prompt-validation.ts +157 -0
  464. package/src/resources/extensions/gsd/prompts/complete-slice.md +5 -3
  465. package/src/resources/extensions/gsd/prompts/discuss.md +33 -13
  466. package/src/resources/extensions/gsd/prompts/execute-task.md +22 -19
  467. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +2 -0
  468. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +2 -0
  469. package/src/resources/extensions/gsd/prompts/guided-resume-task.md +1 -1
  470. package/src/resources/extensions/gsd/prompts/queue.md +3 -2
  471. package/src/resources/extensions/gsd/prompts/system.md +1 -0
  472. package/src/resources/extensions/gsd/prompts/validate-milestone.md +4 -1
  473. package/src/resources/extensions/gsd/session-model-override.ts +36 -0
  474. package/src/resources/extensions/gsd/shortcut-defs.ts +56 -0
  475. package/src/resources/extensions/gsd/state.ts +285 -344
  476. package/src/resources/extensions/gsd/tests/auto-start-model-capture.test.ts +25 -9
  477. package/src/resources/extensions/gsd/tests/auto-start-worktree-db-path.test.ts +28 -0
  478. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +39 -0
  479. package/src/resources/extensions/gsd/tests/complete-slice-gate-closure.test.ts +167 -0
  480. package/src/resources/extensions/gsd/tests/complete-slice-prompt-task-summary-layout.test.ts +18 -0
  481. package/src/resources/extensions/gsd/tests/derive-state-helpers.test.ts +436 -0
  482. package/src/resources/extensions/gsd/tests/discuss-incremental-persistence.test.ts +9 -0
  483. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +27 -0
  484. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +36 -0
  485. package/src/resources/extensions/gsd/tests/execute-task-prompt-existing-artifact-guard.test.ts +33 -0
  486. package/src/resources/extensions/gsd/tests/file-lock.test.ts +103 -0
  487. package/src/resources/extensions/gsd/tests/forensics-stuck-loops.test.ts +62 -0
  488. package/src/resources/extensions/gsd/tests/format-shortcut.test.ts +31 -0
  489. package/src/resources/extensions/gsd/tests/gate-dispatch.test.ts +27 -0
  490. package/src/resources/extensions/gsd/tests/gate-registry.test.ts +140 -0
  491. package/src/resources/extensions/gsd/tests/gsd-no-project-error.test.ts +73 -0
  492. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +180 -0
  493. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +66 -1
  494. package/src/resources/extensions/gsd/tests/model-isolation.test.ts +36 -51
  495. package/src/resources/extensions/gsd/tests/notification-store.test.ts +35 -0
  496. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +26 -0
  497. package/src/resources/extensions/gsd/tests/notifications-handler.test.ts +90 -0
  498. package/src/resources/extensions/gsd/tests/parallel-monitor-overlay.test.ts +1 -0
  499. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +18 -0
  500. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +49 -0
  501. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +19 -0
  502. package/src/resources/extensions/gsd/tests/prompt-system-gate-coverage.test.ts +208 -0
  503. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +7 -0
  504. package/src/resources/extensions/gsd/tests/register-shortcuts.test.ts +63 -5
  505. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +45 -0
  506. package/src/resources/extensions/gsd/tests/session-model-override.test.ts +35 -0
  507. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +90 -0
  508. package/src/resources/extensions/gsd/tests/tool-invocation-error-loop-break.test.ts +7 -0
  509. package/src/resources/extensions/gsd/tests/validate-milestone-prompt-verification-classes.test.ts +18 -0
  510. package/src/resources/extensions/gsd/tests/workflow-mcp-auto-prep.test.ts +76 -0
  511. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +155 -1
  512. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +22 -0
  513. package/src/resources/extensions/gsd/tools/complete-slice.ts +63 -0
  514. package/src/resources/extensions/gsd/tools/complete-task.ts +63 -0
  515. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +64 -26
  516. package/src/resources/extensions/gsd/types.ts +26 -0
  517. package/src/resources/extensions/gsd/workflow-events.ts +34 -25
  518. package/src/resources/extensions/gsd/workflow-mcp-auto-prep.ts +76 -0
  519. package/src/resources/extensions/gsd/workflow-mcp.ts +1 -1
  520. package/src/resources/extensions/ollama/index.ts +13 -3
  521. package/src/resources/extensions/ollama/ollama-status-indicator.test.ts +28 -0
  522. package/src/resources/extensions/shared/gsd-phase-state.ts +42 -0
  523. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +48 -0
  524. package/src/resources/extensions/subagent/agents.ts +10 -0
  525. package/src/resources/extensions/subagent/index.ts +18 -0
  526. package/src/resources/extensions/subagent/tests/agents-conflicts.test.ts +33 -0
  527. package/src/resources/skills/create-skill/SKILL.md +2 -0
  528. package/dist/web/standalone/.next/static/chunks/2826.821e01b07d92e948.js +0 -9
  529. package/dist/web/standalone/.next/static/chunks/app/page-7115e62689b5fd84.js +0 -1
  530. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  531. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  532. /package/dist/web/standalone/.next/static/{9pw9EXtXjdM7EFrCXUEPf → OI4n_CKC-lM8IQbvGJ_tK}/_buildManifest.js +0 -0
  533. /package/dist/web/standalone/.next/static/{9pw9EXtXjdM7EFrCXUEPf → OI4n_CKC-lM8IQbvGJ_tK}/_ssgManifest.js +0 -0
@@ -217,6 +217,16 @@ async function runSerializedWorkflowOperation(fn) {
217
217
  release();
218
218
  }
219
219
  }
220
+ async function runSerializedWorkflowDbOperation(projectDir, fn) {
221
+ return runSerializedWorkflowOperation(async () => {
222
+ const { ensureDbOpen } = await importLocalModule("../../../src/resources/extensions/gsd/bootstrap/dynamic-tools.js");
223
+ const dbAvailable = await ensureDbOpen(projectDir);
224
+ if (!dbAvailable) {
225
+ throw new Error("GSD database is not available");
226
+ }
227
+ return fn();
228
+ });
229
+ }
220
230
  async function enforceWorkflowWriteGate(toolName, projectDir, milestoneId = null) {
221
231
  const writeGate = await getWorkflowWriteGateModule();
222
232
  const snapshot = writeGate.loadWriteGateSnapshot(projectDir);
@@ -409,7 +419,7 @@ const saveGateResultParams = {
409
419
  projectDir: projectDirParam,
410
420
  milestoneId: z.string().describe("Milestone ID (e.g. M001)"),
411
421
  sliceId: z.string().describe("Slice ID (e.g. S01)"),
412
- gateId: z.enum(["Q3", "Q4", "Q5", "Q6", "Q7", "Q8"]).describe("Gate ID"),
422
+ gateId: z.enum(["Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "MV01", "MV02", "MV03", "MV04"]).describe("Gate ID"),
413
423
  taskId: z.string().optional().describe("Task ID for task-scoped gates"),
414
424
  verdict: z.enum(["pass", "flag", "omitted"]).describe("Gate verdict"),
415
425
  rationale: z.string().describe("One-sentence justification"),
@@ -594,7 +604,7 @@ export function registerWorkflowTools(server) {
594
604
  const parsed = parseWorkflowArgs(decisionSaveSchema, args);
595
605
  const { projectDir, ...params } = parsed;
596
606
  await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
597
- const result = await runSerializedWorkflowOperation(async () => {
607
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
598
608
  const { saveDecisionToDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
599
609
  return saveDecisionToDb(params, projectDir);
600
610
  });
@@ -604,7 +614,7 @@ export function registerWorkflowTools(server) {
604
614
  const parsed = parseWorkflowArgs(decisionSaveSchema, args);
605
615
  const { projectDir, ...params } = parsed;
606
616
  await enforceWorkflowWriteGate("gsd_decision_save", projectDir);
607
- const result = await runSerializedWorkflowOperation(async () => {
617
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
608
618
  const { saveDecisionToDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
609
619
  return saveDecisionToDb(params, projectDir);
610
620
  });
@@ -614,7 +624,7 @@ export function registerWorkflowTools(server) {
614
624
  const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
615
625
  const { projectDir, id, ...updates } = parsed;
616
626
  await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
617
- await runSerializedWorkflowOperation(async () => {
627
+ await runSerializedWorkflowDbOperation(projectDir, async () => {
618
628
  const { updateRequirementInDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
619
629
  return updateRequirementInDb(id, updates, projectDir);
620
630
  });
@@ -624,7 +634,7 @@ export function registerWorkflowTools(server) {
624
634
  const parsed = parseWorkflowArgs(requirementUpdateSchema, args);
625
635
  const { projectDir, id, ...updates } = parsed;
626
636
  await enforceWorkflowWriteGate("gsd_requirement_update", projectDir);
627
- await runSerializedWorkflowOperation(async () => {
637
+ await runSerializedWorkflowDbOperation(projectDir, async () => {
628
638
  const { updateRequirementInDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
629
639
  return updateRequirementInDb(id, updates, projectDir);
630
640
  });
@@ -634,7 +644,7 @@ export function registerWorkflowTools(server) {
634
644
  const parsed = parseWorkflowArgs(requirementSaveSchema, args);
635
645
  const { projectDir, ...params } = parsed;
636
646
  await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
637
- const result = await runSerializedWorkflowOperation(async () => {
647
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
638
648
  const { saveRequirementToDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
639
649
  return saveRequirementToDb(params, projectDir);
640
650
  });
@@ -644,7 +654,7 @@ export function registerWorkflowTools(server) {
644
654
  const parsed = parseWorkflowArgs(requirementSaveSchema, args);
645
655
  const { projectDir, ...params } = parsed;
646
656
  await enforceWorkflowWriteGate("gsd_requirement_save", projectDir);
647
- const result = await runSerializedWorkflowOperation(async () => {
657
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
648
658
  const { saveRequirementToDb } = await importLocalModule("../../../src/resources/extensions/gsd/db-writer.js");
649
659
  return saveRequirementToDb(params, projectDir);
650
660
  });
@@ -653,7 +663,7 @@ export function registerWorkflowTools(server) {
653
663
  server.tool("gsd_milestone_generate_id", "Generate the next milestone ID for a new GSD milestone.", milestoneGenerateIdParams, async (args) => {
654
664
  const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
655
665
  await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
656
- const id = await runSerializedWorkflowOperation(async () => {
666
+ const id = await runSerializedWorkflowDbOperation(projectDir, async () => {
657
667
  const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
658
668
  const reserved = claimReservedId();
659
669
  if (reserved) {
@@ -670,7 +680,7 @@ export function registerWorkflowTools(server) {
670
680
  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) => {
671
681
  const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);
672
682
  await enforceWorkflowWriteGate("gsd_milestone_generate_id", projectDir);
673
- const id = await runSerializedWorkflowOperation(async () => {
683
+ const id = await runSerializedWorkflowDbOperation(projectDir, async () => {
674
684
  const { claimReservedId, findMilestoneIds, getReservedMilestoneIds, nextMilestoneId, } = await importLocalModule("../../../src/resources/extensions/gsd/milestone-ids.js");
675
685
  const reserved = claimReservedId();
676
686
  if (reserved) {
@@ -702,7 +712,7 @@ export function registerWorkflowTools(server) {
702
712
  const parsed = parseWorkflowArgs(planTaskSchema, args);
703
713
  const { projectDir, ...params } = parsed;
704
714
  await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
705
- const result = await runSerializedWorkflowOperation(async () => {
715
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
706
716
  const { handlePlanTask } = await importLocalModule("../../../src/resources/extensions/gsd/tools/plan-task.js");
707
717
  return handlePlanTask(params, projectDir);
708
718
  });
@@ -717,7 +727,7 @@ export function registerWorkflowTools(server) {
717
727
  const parsed = parseWorkflowArgs(planTaskSchema, args);
718
728
  const { projectDir, ...params } = parsed;
719
729
  await enforceWorkflowWriteGate("gsd_plan_task", projectDir, params.milestoneId);
720
- const result = await runSerializedWorkflowOperation(async () => {
730
+ const result = await runSerializedWorkflowDbOperation(projectDir, async () => {
721
731
  const { handlePlanTask } = await importLocalModule("../../../src/resources/extensions/gsd/tools/plan-task.js");
722
732
  return handlePlanTask(params, projectDir);
723
733
  });
@@ -747,7 +757,7 @@ export function registerWorkflowTools(server) {
747
757
  server.tool("gsd_skip_slice", "Mark a slice as skipped so auto-mode advances past it without executing.", skipSliceParams, async (args) => {
748
758
  const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);
749
759
  await enforceWorkflowWriteGate("gsd_skip_slice", projectDir, milestoneId);
750
- await runSerializedWorkflowOperation(async () => {
760
+ await runSerializedWorkflowDbOperation(projectDir, async () => {
751
761
  const { getSlice, updateSliceStatus } = await importLocalModule("../../../src/resources/extensions/gsd/gsd-db.js");
752
762
  const { invalidateStateCache } = await importLocalModule("../../../src/resources/extensions/gsd/state.js");
753
763
  const { rebuildState } = await importLocalModule("../../../src/resources/extensions/gsd/doctor.js");
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.\n */\n\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { z } from \"zod\";\n\ntype WorkflowToolExecutors = {\n SUPPORTED_SUMMARY_ARTIFACT_TYPES: readonly string[];\n executeMilestoneStatus: (params: { milestoneId: string }, basePath?: string) => Promise<unknown>;\n executePlanMilestone: (\n params: {\n milestoneId: string;\n title: string;\n vision: string;\n slices: Array<{\n sliceId: string;\n title: string;\n risk: string;\n depends: string[];\n demo: string;\n goal: string;\n successCriteria: string;\n proofLevel: string;\n integrationClosure: string;\n observabilityImpact: string;\n }>;\n status?: string;\n dependsOn?: string[];\n successCriteria?: string[];\n keyRisks?: Array<{ risk: string; whyItMatters: string }>;\n proofStrategy?: Array<{ riskOrUnknown: string; retireIn: string; whatWillBeProven: string }>;\n verificationContract?: string;\n verificationIntegration?: string;\n verificationOperational?: string;\n verificationUat?: string;\n definitionOfDone?: string[];\n requirementCoverage?: string;\n boundaryMapMarkdown?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executePlanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n goal: string;\n tasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n observabilityImpact?: string;\n }>;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReplanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n blockerTaskId: string;\n blockerDescription: string;\n whatChanged: string;\n updatedTasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n fullPlanMd?: string;\n }>;\n removedTaskIds: string[];\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSliceComplete: (\n params: {\n sliceId: string;\n milestoneId: string;\n sliceTitle: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n uatContent: string;\n deviations?: string;\n knownLimitations?: string;\n followUps?: string;\n keyFiles?: string[] | string;\n keyDecisions?: string[] | string;\n patternsEstablished?: string[] | string;\n observabilitySurfaces?: string[] | string;\n provides?: string[] | string;\n requirementsSurfaced?: string[] | string;\n drillDownPaths?: string[] | string;\n affects?: string[] | string;\n requirementsAdvanced?: Array<{ id: string; how: string } | string>;\n requirementsValidated?: Array<{ id: string; proof: string } | string>;\n requirementsInvalidated?: Array<{ id: string; what: string } | string>;\n filesModified?: Array<{ path: string; description: string } | string>;\n requires?: Array<{ slice: string; provides: string } | string>;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeCompleteMilestone: (\n params: {\n milestoneId: string;\n title: string;\n oneLiner: string;\n narrative: string;\n verificationPassed: boolean;\n successCriteriaResults?: string;\n definitionOfDoneResults?: string;\n requirementOutcomes?: string;\n keyDecisions?: string[];\n keyFiles?: string[];\n lessonsLearned?: string[];\n followUps?: string;\n deviations?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeValidateMilestone: (\n params: {\n milestoneId: string;\n verdict: \"pass\" | \"needs-attention\" | \"needs-remediation\";\n remediationRound: number;\n successCriteriaChecklist: string;\n sliceDeliveryAudit: string;\n crossSliceIntegration: string;\n requirementCoverage: string;\n verificationClasses?: string;\n verdictRationale: string;\n remediationPlan?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReassessRoadmap: (\n params: {\n milestoneId: string;\n completedSliceId: string;\n verdict: string;\n assessment: string;\n sliceChanges: {\n modified: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n added: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n removed: string[];\n };\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSaveGateResult: (\n params: {\n milestoneId: string;\n sliceId: string;\n gateId: string;\n taskId?: string;\n verdict: \"pass\" | \"flag\" | \"omitted\";\n rationale: string;\n findings?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSummarySave: (\n params: {\n milestone_id: string;\n slice_id?: string;\n task_id?: string;\n artifact_type: string;\n content: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeTaskComplete: (\n params: {\n taskId: string;\n sliceId: string;\n milestoneId: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n deviations?: string;\n knownIssues?: string;\n keyFiles?: string[];\n keyDecisions?: string[];\n blockerDiscovered?: boolean;\n verificationEvidence?: Array<\n { command: string; exitCode: number; verdict: string; durationMs: number } | string\n >;\n },\n basePath?: string,\n ) => Promise<unknown>;\n};\n\ntype WorkflowWriteGateModule = {\n loadWriteGateSnapshot: (basePath?: string) => {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n };\n shouldBlockPendingGateInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n milestoneId: string | null,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n shouldBlockQueueExecutionInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n input: string,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n};\n\nlet workflowToolExecutorsPromise: Promise<WorkflowToolExecutors> | null = null;\nlet workflowExecutionQueue: Promise<void> = Promise.resolve();\nlet workflowWriteGatePromise: Promise<WorkflowWriteGateModule> | null = null;\n\nfunction getAllowedProjectRoot(env: NodeJS.ProcessEnv = process.env): string | null {\n const configuredRoot = env.GSD_WORKFLOW_PROJECT_ROOT?.trim();\n return configuredRoot ? resolve(configuredRoot) : null;\n}\n\nfunction isWithinRoot(candidatePath: string, rootPath: string): boolean {\n const rel = relative(rootPath, candidatePath);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nfunction validateProjectDir(projectDir: string, env: NodeJS.ProcessEnv = process.env): string {\n if (!isAbsolute(projectDir)) {\n throw new Error(`projectDir must be an absolute path. Received: ${projectDir}`);\n }\n\n const resolvedProjectDir = resolve(projectDir);\n const allowedRoot = getAllowedProjectRoot(env);\n if (allowedRoot && !isWithinRoot(resolvedProjectDir, allowedRoot)) {\n throw new Error(\n `projectDir must stay within the configured workflow project root. Received: ${resolvedProjectDir}; allowed root: ${allowedRoot}`,\n );\n }\n\n return resolvedProjectDir;\n}\n\nfunction parseToolArgs<T>(schema: z.ZodType<T>, args: Record<string, unknown>): T {\n return schema.parse(args);\n}\n\nfunction parseWorkflowArgs<T extends { projectDir: string }>(\n schema: z.ZodType<T>,\n args: Record<string, unknown>,\n): T {\n const parsed = parseToolArgs(schema, args);\n return {\n ...parsed,\n projectDir: validateProjectDir(parsed.projectDir),\n };\n}\n\nfunction isWorkflowToolExecutors(value: unknown): value is WorkflowToolExecutors {\n if (!value || typeof value !== \"object\") return false;\n const record = value as Record<string, unknown>;\n const functionExports = [\n \"executeMilestoneStatus\",\n \"executePlanMilestone\",\n \"executePlanSlice\",\n \"executeReplanSlice\",\n \"executeSliceComplete\",\n \"executeCompleteMilestone\",\n \"executeValidateMilestone\",\n \"executeReassessRoadmap\",\n \"executeSaveGateResult\",\n \"executeSummarySave\",\n \"executeTaskComplete\",\n ];\n\n return Array.isArray(record.SUPPORTED_SUMMARY_ARTIFACT_TYPES) &&\n functionExports.every((key) => typeof record[key] === \"function\");\n}\n\nfunction getSupportedSummaryArtifactTypes(executors: WorkflowToolExecutors): readonly string[] {\n return executors.SUPPORTED_SUMMARY_ARTIFACT_TYPES;\n}\n\nfunction getWriteGateModuleCandidates(): string[] {\n const candidates: string[] = [];\n const explicitModule = process.env.GSD_WORKFLOW_WRITE_GATE_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_WRITE_GATE_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nfunction toFileUrl(modulePath: string): string {\n return pathToFileURL(resolve(modulePath)).href;\n}\n\n/** @internal — exported for testing only */\nexport function _buildImportCandidates(relativePath: string): string[] {\n // Build candidate paths: try the given path first, then swap src/<->dist/\n // and try .ts extension. This handles both dev (tsx from src/) and prod\n // (compiled from dist/) execution contexts.\n const candidates: string[] = [relativePath];\n const swapped = relativePath.includes(\"/src/\")\n ? relativePath.replace(\"/src/\", \"/dist/\")\n : relativePath.includes(\"/dist/\")\n ? relativePath.replace(\"/dist/\", \"/src/\")\n : null;\n if (swapped) candidates.push(swapped);\n // Also try .ts variants for dev-mode tsx execution\n if (relativePath.endsWith(\".js\")) {\n candidates.push(relativePath.replace(/\\.js$/, \".ts\"));\n if (swapped) candidates.push(swapped.replace(/\\.js$/, \".ts\"));\n }\n return candidates;\n}\n\nasync function importLocalModule<T>(relativePath: string): Promise<T> {\n const candidates = _buildImportCandidates(relativePath)\n .map((p) => new URL(p, import.meta.url).href);\n\n let lastErr: unknown;\n for (const candidate of candidates) {\n try {\n return await import(candidate) as T;\n } catch (err) {\n lastErr = err;\n }\n }\n throw lastErr;\n}\n\nfunction getWorkflowExecutorModuleCandidates(env: NodeJS.ProcessEnv = process.env): string[] {\n const candidates: string[] = [];\n const explicitModule = env.GSD_WORKFLOW_EXECUTORS_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_EXECUTORS_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nasync function getWorkflowToolExecutors(): Promise<WorkflowToolExecutors> {\n if (!workflowToolExecutorsPromise) {\n workflowToolExecutorsPromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWorkflowExecutorModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (isWorkflowToolExecutors(loaded)) {\n return loaded;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD workflow executor bridge for MCP mutation tools. \" +\n \"Set GSD_WORKFLOW_EXECUTORS_MODULE to an importable workflow-tool-executors module, \" +\n \"or run the MCP server from a GSD checkout that includes src/resources/extensions/gsd/tools/workflow-tool-executors.(js|ts). \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowToolExecutorsPromise;\n}\n\nasync function getWorkflowWriteGateModule(): Promise<WorkflowWriteGateModule> {\n if (!workflowWriteGatePromise) {\n workflowWriteGatePromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWriteGateModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (\n loaded &&\n typeof loaded.loadWriteGateSnapshot === \"function\" &&\n typeof loaded.shouldBlockPendingGateInSnapshot === \"function\" &&\n typeof loaded.shouldBlockQueueExecutionInSnapshot === \"function\"\n ) {\n return loaded as WorkflowWriteGateModule;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD write-gate bridge for workflow MCP tools. \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowWriteGatePromise;\n}\n\ninterface McpToolServer {\n tool(\n name: string,\n description: string,\n params: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<unknown>,\n ): unknown;\n}\n\nexport const WORKFLOW_TOOL_NAMES = [\n \"gsd_decision_save\",\n \"gsd_save_decision\",\n \"gsd_requirement_update\",\n \"gsd_update_requirement\",\n \"gsd_requirement_save\",\n \"gsd_save_requirement\",\n \"gsd_milestone_generate_id\",\n \"gsd_generate_milestone_id\",\n \"gsd_plan_milestone\",\n \"gsd_plan_slice\",\n \"gsd_plan_task\",\n \"gsd_task_plan\",\n \"gsd_replan_slice\",\n \"gsd_slice_replan\",\n \"gsd_slice_complete\",\n \"gsd_complete_slice\",\n \"gsd_skip_slice\",\n \"gsd_complete_milestone\",\n \"gsd_milestone_complete\",\n \"gsd_validate_milestone\",\n \"gsd_milestone_validate\",\n \"gsd_reassess_roadmap\",\n \"gsd_roadmap_reassess\",\n \"gsd_save_gate_result\",\n \"gsd_summary_save\",\n \"gsd_task_complete\",\n \"gsd_complete_task\",\n \"gsd_milestone_status\",\n \"gsd_journal_query\",\n] as const;\n\nasync function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {\n // The shared DB adapter and workflow log base path are process-global, so\n // workflow MCP mutations must not overlap within a single server process.\n const prior = workflowExecutionQueue;\n let release!: () => void;\n workflowExecutionQueue = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n try {\n return await fn();\n } finally {\n release();\n }\n}\n\nasync function enforceWorkflowWriteGate(\n toolName: string,\n projectDir: string,\n milestoneId: string | null = null,\n): Promise<void> {\n const writeGate = await getWorkflowWriteGateModule();\n const snapshot = writeGate.loadWriteGateSnapshot(projectDir);\n const pendingGate = writeGate.shouldBlockPendingGateInSnapshot(\n snapshot,\n toolName,\n milestoneId,\n snapshot.activeQueuePhase,\n );\n if (pendingGate.block) {\n throw new Error(pendingGate.reason ?? \"workflow tool blocked by pending discussion gate\");\n }\n\n const queueGuard = writeGate.shouldBlockQueueExecutionInSnapshot(\n snapshot,\n toolName,\n \"\",\n snapshot.activeQueuePhase,\n );\n if (queueGuard.block) {\n throw new Error(queueGuard.reason ?? \"workflow tool blocked during queue mode\");\n }\n}\n\nasync function handleTaskComplete(\n projectDir: string,\n args: Omit<z.infer<typeof taskCompleteSchema>, \"projectDir\">,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_task_complete\", projectDir, args.milestoneId);\n const {\n taskId,\n sliceId,\n milestoneId,\n oneLiner,\n narrative,\n verification,\n deviations,\n knownIssues,\n keyFiles,\n keyDecisions,\n blockerDiscovered,\n verificationEvidence,\n } = args;\n const { executeTaskComplete } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() =>\n executeTaskComplete(\n {\n taskId,\n sliceId,\n milestoneId,\n oneLiner,\n narrative,\n verification,\n deviations,\n knownIssues,\n keyFiles,\n keyDecisions,\n blockerDiscovered,\n verificationEvidence,\n },\n projectDir,\n ),\n );\n}\n\nasync function handleSliceComplete(\n projectDir: string,\n args: z.infer<typeof sliceCompleteSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_slice_complete\", projectDir, args.milestoneId);\n const { executeSliceComplete } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir));\n}\n\nasync function handleReplanSlice(\n projectDir: string,\n args: z.infer<typeof replanSliceSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_replan_slice\", projectDir, args.milestoneId);\n const { executeReplanSlice } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir));\n}\n\nasync function handleCompleteMilestone(\n projectDir: string,\n args: z.infer<typeof completeMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_complete_milestone\", projectDir, args.milestoneId);\n const { executeCompleteMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir));\n}\n\nasync function handleValidateMilestone(\n projectDir: string,\n args: z.infer<typeof validateMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_validate_milestone\", projectDir, args.milestoneId);\n const { executeValidateMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir));\n}\n\nasync function handleReassessRoadmap(\n projectDir: string,\n args: z.infer<typeof reassessRoadmapSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_reassess_roadmap\", projectDir, args.milestoneId);\n const { executeReassessRoadmap } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir));\n}\n\nasync function handleSaveGateResult(\n projectDir: string,\n args: z.infer<typeof saveGateResultSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_save_gate_result\", projectDir, args.milestoneId);\n const { executeSaveGateResult } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir));\n}\n\nasync function ensureMilestoneDbRow(milestoneId: string): Promise<void> {\n try {\n const { insertMilestone } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n insertMilestone({ id: milestoneId, status: \"queued\" });\n } catch {\n // Ignore pre-existing rows or transient DB availability issues.\n }\n}\n\nconst projectDirParam = z.string().describe(\"Absolute path to the project directory within the configured workflow root\");\n\nconst planMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n title: z.string().describe(\"Milestone title\"),\n vision: z.string().describe(\"Milestone vision\"),\n slices: z.array(z.object({\n sliceId: z.string(),\n title: z.string(),\n risk: z.string(),\n depends: z.array(z.string()),\n demo: z.string(),\n goal: z.string(),\n successCriteria: z.string(),\n proofLevel: z.string(),\n integrationClosure: z.string(),\n observabilityImpact: z.string(),\n })).describe(\"Planned slices for the milestone\"),\n status: z.string().optional().describe(\"Milestone status\"),\n dependsOn: z.array(z.string()).optional().describe(\"Milestone dependencies\"),\n successCriteria: z.array(z.string()).optional().describe(\"Top-level success criteria bullets\"),\n keyRisks: z.array(z.object({\n risk: z.string(),\n whyItMatters: z.string(),\n })).optional().describe(\"Structured risk entries\"),\n proofStrategy: z.array(z.object({\n riskOrUnknown: z.string(),\n retireIn: z.string(),\n whatWillBeProven: z.string(),\n })).optional().describe(\"Structured proof strategy entries\"),\n verificationContract: z.string().optional(),\n verificationIntegration: z.string().optional(),\n verificationOperational: z.string().optional(),\n verificationUat: z.string().optional(),\n definitionOfDone: z.array(z.string()).optional(),\n requirementCoverage: z.string().optional(),\n boundaryMapMarkdown: z.string().optional(),\n};\nconst planMilestoneSchema = z.object(planMilestoneParams);\n\nconst planSliceParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n goal: z.string().describe(\"Slice goal\"),\n tasks: z.array(z.object({\n taskId: z.string(),\n title: z.string(),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n observabilityImpact: z.string().optional(),\n })).describe(\"Planned tasks for the slice\"),\n successCriteria: z.string().optional(),\n proofLevel: z.string().optional(),\n integrationClosure: z.string().optional(),\n observabilityImpact: z.string().optional(),\n};\nconst planSliceSchema = z.object(planSliceParams);\n\nconst completeMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n title: z.string().describe(\"Milestone title\"),\n oneLiner: z.string().describe(\"One-sentence summary of what the milestone achieved\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the milestone\"),\n verificationPassed: z.boolean().describe(\"Must be true after milestone verification succeeds\"),\n successCriteriaResults: z.string().optional(),\n definitionOfDoneResults: z.string().optional(),\n requirementOutcomes: z.string().optional(),\n keyDecisions: z.array(z.string()).optional(),\n keyFiles: z.array(z.string()).optional(),\n lessonsLearned: z.array(z.string()).optional(),\n followUps: z.string().optional(),\n deviations: z.string().optional(),\n};\nconst completeMilestoneSchema = z.object(completeMilestoneParams);\n\nconst validateMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n verdict: z.enum([\"pass\", \"needs-attention\", \"needs-remediation\"]).describe(\"Validation verdict\"),\n remediationRound: z.number().describe(\"Remediation round (0 for first validation)\"),\n successCriteriaChecklist: z.string().describe(\"Markdown checklist of success criteria with evidence\"),\n sliceDeliveryAudit: z.string().describe(\"Markdown auditing each slice's claimed vs delivered output\"),\n crossSliceIntegration: z.string().describe(\"Markdown describing cross-slice issues or closure\"),\n requirementCoverage: z.string().describe(\"Markdown describing requirement coverage and gaps\"),\n verificationClasses: z.string().optional(),\n verdictRationale: z.string().describe(\"Why this verdict was chosen\"),\n remediationPlan: z.string().optional(),\n};\nconst validateMilestoneSchema = z.object(validateMilestoneParams);\n\nconst roadmapSliceChangeSchema = z.object({\n sliceId: z.string(),\n title: z.string(),\n risk: z.string().optional(),\n depends: z.array(z.string()).optional(),\n demo: z.string().optional(),\n});\n\nconst reassessRoadmapParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n completedSliceId: z.string().describe(\"Slice ID that just completed\"),\n verdict: z.string().describe(\"Assessment verdict such as roadmap-confirmed or roadmap-adjusted\"),\n assessment: z.string().describe(\"Assessment text explaining the roadmap decision\"),\n sliceChanges: z.object({\n modified: z.array(roadmapSliceChangeSchema),\n added: z.array(roadmapSliceChangeSchema),\n removed: z.array(z.string()),\n }).describe(\"Slice changes to apply\"),\n};\nconst reassessRoadmapSchema = z.object(reassessRoadmapParams);\n\nconst saveGateResultParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n gateId: z.enum([\"Q3\", \"Q4\", \"Q5\", \"Q6\", \"Q7\", \"Q8\"]).describe(\"Gate ID\"),\n taskId: z.string().optional().describe(\"Task ID for task-scoped gates\"),\n verdict: z.enum([\"pass\", \"flag\", \"omitted\"]).describe(\"Gate verdict\"),\n rationale: z.string().describe(\"One-sentence justification\"),\n findings: z.string().optional().describe(\"Detailed markdown findings\"),\n};\nconst saveGateResultSchema = z.object(saveGateResultParams);\n\nconst replanSliceParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n blockerTaskId: z.string().describe(\"Task ID that discovered the blocker\"),\n blockerDescription: z.string().describe(\"Description of the blocker\"),\n whatChanged: z.string().describe(\"Summary of what changed in the plan\"),\n updatedTasks: z.array(z.object({\n taskId: z.string(),\n title: z.string(),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n fullPlanMd: z.string().optional(),\n })).describe(\"Tasks to upsert into the replanned slice\"),\n removedTaskIds: z.array(z.string()).describe(\"Task IDs to remove from the slice\"),\n};\nconst replanSliceSchema = z.object(replanSliceParams);\n\nconst sliceCompleteParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceTitle: z.string().describe(\"Title of the slice\"),\n oneLiner: z.string().describe(\"One-line summary of what the slice accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened across all tasks\"),\n verification: z.string().describe(\"What was verified across all tasks\"),\n uatContent: z.string().describe(\"UAT test content (markdown body)\"),\n deviations: z.string().optional(),\n knownLimitations: z.string().optional(),\n followUps: z.string().optional(),\n keyFiles: z.union([z.array(z.string()), z.string()]).optional(),\n keyDecisions: z.union([z.array(z.string()), z.string()]).optional(),\n patternsEstablished: z.union([z.array(z.string()), z.string()]).optional(),\n observabilitySurfaces: z.union([z.array(z.string()), z.string()]).optional(),\n provides: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsSurfaced: z.union([z.array(z.string()), z.string()]).optional(),\n drillDownPaths: z.union([z.array(z.string()), z.string()]).optional(),\n affects: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsAdvanced: z.array(z.union([\n z.object({ id: z.string(), how: z.string() }),\n z.string(),\n ])).optional(),\n requirementsValidated: z.array(z.union([\n z.object({ id: z.string(), proof: z.string() }),\n z.string(),\n ])).optional(),\n requirementsInvalidated: z.array(z.union([\n z.object({ id: z.string(), what: z.string() }),\n z.string(),\n ])).optional(),\n filesModified: z.array(z.union([\n z.object({ path: z.string(), description: z.string() }),\n z.string(),\n ])).optional(),\n requires: z.array(z.union([\n z.object({ slice: z.string(), provides: z.string() }),\n z.string(),\n ])).optional(),\n};\nconst sliceCompleteSchema = z.object(sliceCompleteParams);\n\nconst summarySaveParams = {\n projectDir: projectDirParam,\n milestone_id: z.string().describe(\"Milestone ID (e.g. M001)\"),\n slice_id: z.string().optional().describe(\"Slice ID (e.g. S01)\"),\n task_id: z.string().optional().describe(\"Task ID (e.g. T01)\"),\n artifact_type: z.string().describe(\"Artifact type to save (SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT)\"),\n content: z.string().describe(\"The full markdown content of the artifact\"),\n};\nconst summarySaveSchema = z.object(summarySaveParams);\n\nconst decisionSaveParams = {\n projectDir: projectDirParam,\n scope: z.string().describe(\"Scope of the decision (e.g. architecture, library, observability)\"),\n decision: z.string().describe(\"What is being decided\"),\n choice: z.string().describe(\"The choice made\"),\n rationale: z.string().describe(\"Why this choice was made\"),\n revisable: z.string().optional().describe(\"Whether this can be revisited\"),\n when_context: z.string().optional().describe(\"When/context for the decision\"),\n made_by: z.enum([\"human\", \"agent\", \"collaborative\"]).optional().describe(\"Who made the decision\"),\n};\nconst decisionSaveSchema = z.object(decisionSaveParams);\n\nconst requirementUpdateParams = {\n projectDir: projectDirParam,\n id: z.string().describe(\"Requirement ID (e.g. R001)\"),\n status: z.string().optional().describe(\"New status\"),\n validation: z.string().optional().describe(\"Validation criteria or proof\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n description: z.string().optional().describe(\"Updated description\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n};\nconst requirementUpdateSchema = z.object(requirementUpdateParams);\n\nconst requirementSaveParams = {\n projectDir: projectDirParam,\n class: z.string().describe(\"Requirement class\"),\n description: z.string().describe(\"Short description of the requirement\"),\n why: z.string().describe(\"Why this requirement matters\"),\n source: z.string().describe(\"Origin of the requirement\"),\n status: z.string().optional().describe(\"Requirement status\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n validation: z.string().optional().describe(\"Validation criteria\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n};\nconst requirementSaveSchema = z.object(requirementSaveParams);\n\nconst milestoneGenerateIdParams = {\n projectDir: projectDirParam,\n};\nconst milestoneGenerateIdSchema = z.object(milestoneGenerateIdParams);\n\nconst planTaskParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n taskId: z.string().describe(\"Task ID (e.g. T01)\"),\n title: z.string().describe(\"Task title\"),\n description: z.string().describe(\"Task description / steps block\"),\n estimate: z.string().describe(\"Task estimate\"),\n files: z.array(z.string()).describe(\"Files likely touched\"),\n verify: z.string().describe(\"Verification command or block\"),\n inputs: z.array(z.string()).describe(\"Input files or references\"),\n expectedOutput: z.array(z.string()).describe(\"Expected output files or artifacts\"),\n observabilityImpact: z.string().optional().describe(\"Task observability impact\"),\n};\nconst planTaskSchema = z.object(planTaskParams);\n\nconst skipSliceParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S02)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M003)\"),\n reason: z.string().optional().describe(\"Reason for skipping this slice\"),\n};\nconst skipSliceSchema = z.object(skipSliceParams);\n\nconst taskCompleteParams = {\n projectDir: projectDirParam,\n taskId: z.string().describe(\"Task ID (e.g. T01)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n oneLiner: z.string().describe(\"One-line summary of what was accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the task\"),\n verification: z.string().describe(\"What was verified and how\"),\n deviations: z.string().optional().describe(\"Deviations from the task plan\"),\n knownIssues: z.string().optional().describe(\"Known issues discovered but not fixed\"),\n keyFiles: z.array(z.string()).optional().describe(\"List of key files created or modified\"),\n keyDecisions: z.array(z.string()).optional().describe(\"List of key decisions made during this task\"),\n blockerDiscovered: z.boolean().optional().describe(\"Whether a plan-invalidating blocker was discovered\"),\n verificationEvidence: z.array(z.union([\n z.object({\n command: z.string(),\n exitCode: z.number(),\n verdict: z.string(),\n durationMs: z.number(),\n }),\n z.string(),\n ])).optional().describe(\"Verification evidence entries\"),\n};\nconst taskCompleteSchema = z.object(taskCompleteParams);\n\nconst milestoneStatusParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID to query (e.g. M001)\"),\n};\nconst milestoneStatusSchema = z.object(milestoneStatusParams);\n\nconst journalQueryParams = {\n projectDir: projectDirParam,\n flowId: z.string().optional().describe(\"Filter by flow ID\"),\n unitId: z.string().optional().describe(\"Filter by unit ID\"),\n rule: z.string().optional().describe(\"Filter by rule name\"),\n eventType: z.string().optional().describe(\"Filter by event type\"),\n after: z.string().optional().describe(\"ISO-8601 lower bound (inclusive)\"),\n before: z.string().optional().describe(\"ISO-8601 upper bound (inclusive)\"),\n limit: z.number().optional().describe(\"Maximum entries to return\"),\n};\nconst journalQuerySchema = z.object(journalQueryParams);\n\nexport function registerWorkflowTools(server: McpToolServer): void {\n server.tool(\n \"gsd_decision_save\",\n \"Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowOperation(async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_decision\",\n \"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowOperation(async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_update\",\n \"Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowOperation(async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_update_requirement\",\n \"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowOperation(async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_save\",\n \"Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowOperation(async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_requirement\",\n \"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowOperation(async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_milestone_generate_id\",\n \"Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowOperation(async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const nextId = nextMilestoneId(allIds);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_generate_milestone_id\",\n \"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowOperation(async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const nextId = nextMilestoneId(allIds);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_plan_milestone\",\n \"Write milestone planning state to the GSD database and render ROADMAP.md from DB.\",\n planMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planMilestoneSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_milestone\", projectDir, params.milestoneId);\n const { executePlanMilestone } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir));\n },\n );\n\n server.tool(\n \"gsd_plan_slice\",\n \"Write slice/task planning state to the GSD database and render plan artifacts from DB.\",\n planSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planSliceSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_slice\", projectDir, params.milestoneId);\n const { executePlanSlice } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir));\n },\n );\n\n server.tool(\n \"gsd_plan_task\",\n \"Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowOperation(async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_task_plan\",\n \"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowOperation(async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_replan_slice\",\n \"Replan a slice after a blocker is discovered, preserving completed tasks and re-rendering PLAN.md + REPLAN.md.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_replan\",\n \"Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_complete\",\n \"Record a completed slice to the GSD database, render SUMMARY.md + UAT.md, and update roadmap projection.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_complete_slice\",\n \"Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_skip_slice\",\n \"Mark a slice as skipped so auto-mode advances past it without executing.\",\n skipSliceParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);\n await enforceWorkflowWriteGate(\"gsd_skip_slice\", projectDir, milestoneId);\n await runSerializedWorkflowOperation(async () => {\n const { getSlice, updateSliceStatus } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n const { invalidateStateCache } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/state.js\");\n const { rebuildState } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/doctor.js\");\n const slice = getSlice(milestoneId, sliceId);\n if (!slice) {\n throw new Error(`Slice ${sliceId} not found in milestone ${milestoneId}`);\n }\n if (slice.status === \"complete\" || slice.status === \"done\") {\n throw new Error(`Slice ${sliceId} is already complete and cannot be skipped`);\n }\n if (slice.status !== \"skipped\") {\n updateSliceStatus(milestoneId, sliceId, \"skipped\");\n invalidateStateCache();\n await rebuildState(projectDir);\n }\n });\n return {\n content: [{ type: \"text\" as const, text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? \"User-directed skip\"}.` }],\n };\n },\n );\n\n server.tool(\n \"gsd_complete_milestone\",\n \"Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_complete\",\n \"Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_validate_milestone\",\n \"Validate a milestone, persist validation results to the GSD database, and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_validate\",\n \"Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_reassess_roadmap\",\n \"Reassess a milestone roadmap after a slice completes, writing ASSESSMENT.md and re-rendering ROADMAP.md.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_roadmap_reassess\",\n \"Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_save_gate_result\",\n \"Save a quality gate result to the GSD database.\",\n saveGateResultParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(saveGateResultSchema, args);\n return handleSaveGateResult(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_summary_save\",\n \"Save a GSD summary/research/context/assessment artifact to the database and disk.\",\n summarySaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(summarySaveSchema, args);\n const { projectDir, milestone_id, slice_id, task_id, artifact_type, content } = parsed;\n await enforceWorkflowWriteGate(\"gsd_summary_save\", projectDir, milestone_id);\n const executors = await getWorkflowToolExecutors();\n const supportedArtifactTypes = getSupportedSummaryArtifactTypes(executors);\n if (!supportedArtifactTypes.includes(artifact_type)) {\n throw new Error(\n `artifact_type must be one of: ${supportedArtifactTypes.join(\", \")}`,\n );\n }\n return runSerializedWorkflowOperation(() =>\n executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir),\n );\n },\n );\n\n server.tool(\n \"gsd_task_complete\",\n \"Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_complete_task\",\n \"Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_milestone_status\",\n \"Read the current status of a milestone and all its slices from the GSD database.\",\n milestoneStatusParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_status\", projectDir, milestoneId);\n const { executeMilestoneStatus } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir));\n },\n );\n\n server.tool(\n \"gsd_journal_query\",\n \"Query the structured event journal for auto-mode iterations.\",\n journalQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);\n const { queryJournal } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/journal.js\");\n const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);\n if (entries.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No matching journal entries found.\" }] };\n }\n return { content: [{ type: \"text\" as const, text: JSON.stringify(entries, null, 2) }] };\n },\n );\n}\n"]}
1
+ {"version":3,"file":"workflow-tools.js","sourceRoot":"","sources":["../src/workflow-tools.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Workflow MCP tools — exposes the core GSD mutation/read handlers over MCP.\n */\n\nimport { isAbsolute, relative, resolve } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { z } from \"zod\";\n\ntype WorkflowToolExecutors = {\n SUPPORTED_SUMMARY_ARTIFACT_TYPES: readonly string[];\n executeMilestoneStatus: (params: { milestoneId: string }, basePath?: string) => Promise<unknown>;\n executePlanMilestone: (\n params: {\n milestoneId: string;\n title: string;\n vision: string;\n slices: Array<{\n sliceId: string;\n title: string;\n risk: string;\n depends: string[];\n demo: string;\n goal: string;\n successCriteria: string;\n proofLevel: string;\n integrationClosure: string;\n observabilityImpact: string;\n }>;\n status?: string;\n dependsOn?: string[];\n successCriteria?: string[];\n keyRisks?: Array<{ risk: string; whyItMatters: string }>;\n proofStrategy?: Array<{ riskOrUnknown: string; retireIn: string; whatWillBeProven: string }>;\n verificationContract?: string;\n verificationIntegration?: string;\n verificationOperational?: string;\n verificationUat?: string;\n definitionOfDone?: string[];\n requirementCoverage?: string;\n boundaryMapMarkdown?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executePlanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n goal: string;\n tasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n observabilityImpact?: string;\n }>;\n successCriteria?: string;\n proofLevel?: string;\n integrationClosure?: string;\n observabilityImpact?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReplanSlice: (\n params: {\n milestoneId: string;\n sliceId: string;\n blockerTaskId: string;\n blockerDescription: string;\n whatChanged: string;\n updatedTasks: Array<{\n taskId: string;\n title: string;\n description: string;\n estimate: string;\n files: string[];\n verify: string;\n inputs: string[];\n expectedOutput: string[];\n fullPlanMd?: string;\n }>;\n removedTaskIds: string[];\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSliceComplete: (\n params: {\n sliceId: string;\n milestoneId: string;\n sliceTitle: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n uatContent: string;\n deviations?: string;\n knownLimitations?: string;\n followUps?: string;\n keyFiles?: string[] | string;\n keyDecisions?: string[] | string;\n patternsEstablished?: string[] | string;\n observabilitySurfaces?: string[] | string;\n provides?: string[] | string;\n requirementsSurfaced?: string[] | string;\n drillDownPaths?: string[] | string;\n affects?: string[] | string;\n requirementsAdvanced?: Array<{ id: string; how: string } | string>;\n requirementsValidated?: Array<{ id: string; proof: string } | string>;\n requirementsInvalidated?: Array<{ id: string; what: string } | string>;\n filesModified?: Array<{ path: string; description: string } | string>;\n requires?: Array<{ slice: string; provides: string } | string>;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeCompleteMilestone: (\n params: {\n milestoneId: string;\n title: string;\n oneLiner: string;\n narrative: string;\n verificationPassed: boolean;\n successCriteriaResults?: string;\n definitionOfDoneResults?: string;\n requirementOutcomes?: string;\n keyDecisions?: string[];\n keyFiles?: string[];\n lessonsLearned?: string[];\n followUps?: string;\n deviations?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeValidateMilestone: (\n params: {\n milestoneId: string;\n verdict: \"pass\" | \"needs-attention\" | \"needs-remediation\";\n remediationRound: number;\n successCriteriaChecklist: string;\n sliceDeliveryAudit: string;\n crossSliceIntegration: string;\n requirementCoverage: string;\n verificationClasses?: string;\n verdictRationale: string;\n remediationPlan?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeReassessRoadmap: (\n params: {\n milestoneId: string;\n completedSliceId: string;\n verdict: string;\n assessment: string;\n sliceChanges: {\n modified: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n added: Array<{\n sliceId: string;\n title: string;\n risk?: string;\n depends?: string[];\n demo?: string;\n }>;\n removed: string[];\n };\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSaveGateResult: (\n params: {\n milestoneId: string;\n sliceId: string;\n gateId: string;\n taskId?: string;\n verdict: \"pass\" | \"flag\" | \"omitted\";\n rationale: string;\n findings?: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeSummarySave: (\n params: {\n milestone_id: string;\n slice_id?: string;\n task_id?: string;\n artifact_type: string;\n content: string;\n },\n basePath?: string,\n ) => Promise<unknown>;\n executeTaskComplete: (\n params: {\n taskId: string;\n sliceId: string;\n milestoneId: string;\n oneLiner: string;\n narrative: string;\n verification: string;\n deviations?: string;\n knownIssues?: string;\n keyFiles?: string[];\n keyDecisions?: string[];\n blockerDiscovered?: boolean;\n verificationEvidence?: Array<\n { command: string; exitCode: number; verdict: string; durationMs: number } | string\n >;\n },\n basePath?: string,\n ) => Promise<unknown>;\n};\n\ntype WorkflowWriteGateModule = {\n loadWriteGateSnapshot: (basePath?: string) => {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n };\n shouldBlockPendingGateInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n milestoneId: string | null,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n shouldBlockQueueExecutionInSnapshot: (\n snapshot: {\n verifiedDepthMilestones: string[];\n activeQueuePhase: boolean;\n pendingGateId: string | null;\n },\n toolName: string,\n input: string,\n queuePhaseActive?: boolean,\n ) => { block: boolean; reason?: string };\n};\n\ntype WorkflowDbBootstrapModule = {\n ensureDbOpen: (basePath?: string) => Promise<boolean>;\n};\n\nlet workflowToolExecutorsPromise: Promise<WorkflowToolExecutors> | null = null;\nlet workflowExecutionQueue: Promise<void> = Promise.resolve();\nlet workflowWriteGatePromise: Promise<WorkflowWriteGateModule> | null = null;\n\nfunction getAllowedProjectRoot(env: NodeJS.ProcessEnv = process.env): string | null {\n const configuredRoot = env.GSD_WORKFLOW_PROJECT_ROOT?.trim();\n return configuredRoot ? resolve(configuredRoot) : null;\n}\n\nfunction isWithinRoot(candidatePath: string, rootPath: string): boolean {\n const rel = relative(rootPath, candidatePath);\n return rel === \"\" || (!rel.startsWith(\"..\") && !isAbsolute(rel));\n}\n\nfunction validateProjectDir(projectDir: string, env: NodeJS.ProcessEnv = process.env): string {\n if (!isAbsolute(projectDir)) {\n throw new Error(`projectDir must be an absolute path. Received: ${projectDir}`);\n }\n\n const resolvedProjectDir = resolve(projectDir);\n const allowedRoot = getAllowedProjectRoot(env);\n if (allowedRoot && !isWithinRoot(resolvedProjectDir, allowedRoot)) {\n throw new Error(\n `projectDir must stay within the configured workflow project root. Received: ${resolvedProjectDir}; allowed root: ${allowedRoot}`,\n );\n }\n\n return resolvedProjectDir;\n}\n\nfunction parseToolArgs<T>(schema: z.ZodType<T>, args: Record<string, unknown>): T {\n return schema.parse(args);\n}\n\nfunction parseWorkflowArgs<T extends { projectDir: string }>(\n schema: z.ZodType<T>,\n args: Record<string, unknown>,\n): T {\n const parsed = parseToolArgs(schema, args);\n return {\n ...parsed,\n projectDir: validateProjectDir(parsed.projectDir),\n };\n}\n\nfunction isWorkflowToolExecutors(value: unknown): value is WorkflowToolExecutors {\n if (!value || typeof value !== \"object\") return false;\n const record = value as Record<string, unknown>;\n const functionExports = [\n \"executeMilestoneStatus\",\n \"executePlanMilestone\",\n \"executePlanSlice\",\n \"executeReplanSlice\",\n \"executeSliceComplete\",\n \"executeCompleteMilestone\",\n \"executeValidateMilestone\",\n \"executeReassessRoadmap\",\n \"executeSaveGateResult\",\n \"executeSummarySave\",\n \"executeTaskComplete\",\n ];\n\n return Array.isArray(record.SUPPORTED_SUMMARY_ARTIFACT_TYPES) &&\n functionExports.every((key) => typeof record[key] === \"function\");\n}\n\nfunction getSupportedSummaryArtifactTypes(executors: WorkflowToolExecutors): readonly string[] {\n return executors.SUPPORTED_SUMMARY_ARTIFACT_TYPES;\n}\n\nfunction getWriteGateModuleCandidates(): string[] {\n const candidates: string[] = [];\n const explicitModule = process.env.GSD_WORKFLOW_WRITE_GATE_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_WRITE_GATE_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/bootstrap/write-gate.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/bootstrap/write-gate.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nfunction toFileUrl(modulePath: string): string {\n return pathToFileURL(resolve(modulePath)).href;\n}\n\n/** @internal — exported for testing only */\nexport function _buildImportCandidates(relativePath: string): string[] {\n // Build candidate paths: try the given path first, then swap src/<->dist/\n // and try .ts extension. This handles both dev (tsx from src/) and prod\n // (compiled from dist/) execution contexts.\n const candidates: string[] = [relativePath];\n const swapped = relativePath.includes(\"/src/\")\n ? relativePath.replace(\"/src/\", \"/dist/\")\n : relativePath.includes(\"/dist/\")\n ? relativePath.replace(\"/dist/\", \"/src/\")\n : null;\n if (swapped) candidates.push(swapped);\n // Also try .ts variants for dev-mode tsx execution\n if (relativePath.endsWith(\".js\")) {\n candidates.push(relativePath.replace(/\\.js$/, \".ts\"));\n if (swapped) candidates.push(swapped.replace(/\\.js$/, \".ts\"));\n }\n return candidates;\n}\n\nasync function importLocalModule<T>(relativePath: string): Promise<T> {\n const candidates = _buildImportCandidates(relativePath)\n .map((p) => new URL(p, import.meta.url).href);\n\n let lastErr: unknown;\n for (const candidate of candidates) {\n try {\n return await import(candidate) as T;\n } catch (err) {\n lastErr = err;\n }\n }\n throw lastErr;\n}\n\nfunction getWorkflowExecutorModuleCandidates(env: NodeJS.ProcessEnv = process.env): string[] {\n const candidates: string[] = [];\n const explicitModule = env.GSD_WORKFLOW_EXECUTORS_MODULE?.trim();\n if (explicitModule) {\n if (/^[a-z]{2,}:/i.test(explicitModule) && !explicitModule.startsWith(\"file:\")) {\n throw new Error(\"GSD_WORKFLOW_EXECUTORS_MODULE only supports file: URLs or filesystem paths.\");\n }\n candidates.push(explicitModule.startsWith(\"file:\") ? explicitModule : toFileUrl(explicitModule));\n }\n\n candidates.push(\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../dist/resources/extensions/gsd/tools/workflow-tool-executors.js\", import.meta.url).href,\n new URL(\"../../../src/resources/extensions/gsd/tools/workflow-tool-executors.ts\", import.meta.url).href,\n );\n\n return [...new Set(candidates)];\n}\n\nasync function getWorkflowToolExecutors(): Promise<WorkflowToolExecutors> {\n if (!workflowToolExecutorsPromise) {\n workflowToolExecutorsPromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWorkflowExecutorModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (isWorkflowToolExecutors(loaded)) {\n return loaded;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD workflow executor bridge for MCP mutation tools. \" +\n \"Set GSD_WORKFLOW_EXECUTORS_MODULE to an importable workflow-tool-executors module, \" +\n \"or run the MCP server from a GSD checkout that includes src/resources/extensions/gsd/tools/workflow-tool-executors.(js|ts). \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowToolExecutorsPromise;\n}\n\nasync function getWorkflowWriteGateModule(): Promise<WorkflowWriteGateModule> {\n if (!workflowWriteGatePromise) {\n workflowWriteGatePromise = (async () => {\n const attempts: string[] = [];\n for (const candidate of getWriteGateModuleCandidates()) {\n try {\n const loaded = await import(candidate);\n if (\n loaded &&\n typeof loaded.loadWriteGateSnapshot === \"function\" &&\n typeof loaded.shouldBlockPendingGateInSnapshot === \"function\" &&\n typeof loaded.shouldBlockQueueExecutionInSnapshot === \"function\"\n ) {\n return loaded as WorkflowWriteGateModule;\n }\n attempts.push(`${candidate} (module shape mismatch)`);\n } catch (err) {\n attempts.push(`${candidate} (${err instanceof Error ? err.message : String(err)})`);\n }\n }\n\n throw new Error(\n \"Unable to load GSD write-gate bridge for workflow MCP tools. \" +\n `Attempts: ${attempts.join(\"; \")}`,\n );\n })();\n }\n return workflowWriteGatePromise;\n}\n\ninterface McpToolServer {\n tool(\n name: string,\n description: string,\n params: Record<string, unknown>,\n handler: (args: Record<string, unknown>) => Promise<unknown>,\n ): unknown;\n}\n\nexport const WORKFLOW_TOOL_NAMES = [\n \"gsd_decision_save\",\n \"gsd_save_decision\",\n \"gsd_requirement_update\",\n \"gsd_update_requirement\",\n \"gsd_requirement_save\",\n \"gsd_save_requirement\",\n \"gsd_milestone_generate_id\",\n \"gsd_generate_milestone_id\",\n \"gsd_plan_milestone\",\n \"gsd_plan_slice\",\n \"gsd_plan_task\",\n \"gsd_task_plan\",\n \"gsd_replan_slice\",\n \"gsd_slice_replan\",\n \"gsd_slice_complete\",\n \"gsd_complete_slice\",\n \"gsd_skip_slice\",\n \"gsd_complete_milestone\",\n \"gsd_milestone_complete\",\n \"gsd_validate_milestone\",\n \"gsd_milestone_validate\",\n \"gsd_reassess_roadmap\",\n \"gsd_roadmap_reassess\",\n \"gsd_save_gate_result\",\n \"gsd_summary_save\",\n \"gsd_task_complete\",\n \"gsd_complete_task\",\n \"gsd_milestone_status\",\n \"gsd_journal_query\",\n] as const;\n\nasync function runSerializedWorkflowOperation<T>(fn: () => Promise<T>): Promise<T> {\n // The shared DB adapter and workflow log base path are process-global, so\n // workflow MCP mutations must not overlap within a single server process.\n const prior = workflowExecutionQueue;\n let release!: () => void;\n workflowExecutionQueue = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n try {\n return await fn();\n } finally {\n release();\n }\n}\n\nasync function runSerializedWorkflowDbOperation<T>(\n projectDir: string,\n fn: () => Promise<T>,\n): Promise<T> {\n return runSerializedWorkflowOperation(async () => {\n const { ensureDbOpen } = await importLocalModule<WorkflowDbBootstrapModule>(\n \"../../../src/resources/extensions/gsd/bootstrap/dynamic-tools.js\",\n );\n const dbAvailable = await ensureDbOpen(projectDir);\n if (!dbAvailable) {\n throw new Error(\"GSD database is not available\");\n }\n return fn();\n });\n}\n\nasync function enforceWorkflowWriteGate(\n toolName: string,\n projectDir: string,\n milestoneId: string | null = null,\n): Promise<void> {\n const writeGate = await getWorkflowWriteGateModule();\n const snapshot = writeGate.loadWriteGateSnapshot(projectDir);\n const pendingGate = writeGate.shouldBlockPendingGateInSnapshot(\n snapshot,\n toolName,\n milestoneId,\n snapshot.activeQueuePhase,\n );\n if (pendingGate.block) {\n throw new Error(pendingGate.reason ?? \"workflow tool blocked by pending discussion gate\");\n }\n\n const queueGuard = writeGate.shouldBlockQueueExecutionInSnapshot(\n snapshot,\n toolName,\n \"\",\n snapshot.activeQueuePhase,\n );\n if (queueGuard.block) {\n throw new Error(queueGuard.reason ?? \"workflow tool blocked during queue mode\");\n }\n}\n\nasync function handleTaskComplete(\n projectDir: string,\n args: Omit<z.infer<typeof taskCompleteSchema>, \"projectDir\">,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_task_complete\", projectDir, args.milestoneId);\n const {\n taskId,\n sliceId,\n milestoneId,\n oneLiner,\n narrative,\n verification,\n deviations,\n knownIssues,\n keyFiles,\n keyDecisions,\n blockerDiscovered,\n verificationEvidence,\n } = args;\n const { executeTaskComplete } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() =>\n executeTaskComplete(\n {\n taskId,\n sliceId,\n milestoneId,\n oneLiner,\n narrative,\n verification,\n deviations,\n knownIssues,\n keyFiles,\n keyDecisions,\n blockerDiscovered,\n verificationEvidence,\n },\n projectDir,\n ),\n );\n}\n\nasync function handleSliceComplete(\n projectDir: string,\n args: z.infer<typeof sliceCompleteSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_slice_complete\", projectDir, args.milestoneId);\n const { executeSliceComplete } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeSliceComplete(params, projectDir));\n}\n\nasync function handleReplanSlice(\n projectDir: string,\n args: z.infer<typeof replanSliceSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_replan_slice\", projectDir, args.milestoneId);\n const { executeReplanSlice } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeReplanSlice(params, projectDir));\n}\n\nasync function handleCompleteMilestone(\n projectDir: string,\n args: z.infer<typeof completeMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_complete_milestone\", projectDir, args.milestoneId);\n const { executeCompleteMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeCompleteMilestone(params, projectDir));\n}\n\nasync function handleValidateMilestone(\n projectDir: string,\n args: z.infer<typeof validateMilestoneSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_validate_milestone\", projectDir, args.milestoneId);\n const { executeValidateMilestone } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeValidateMilestone(params, projectDir));\n}\n\nasync function handleReassessRoadmap(\n projectDir: string,\n args: z.infer<typeof reassessRoadmapSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_reassess_roadmap\", projectDir, args.milestoneId);\n const { executeReassessRoadmap } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeReassessRoadmap(params, projectDir));\n}\n\nasync function handleSaveGateResult(\n projectDir: string,\n args: z.infer<typeof saveGateResultSchema>,\n): Promise<unknown> {\n await enforceWorkflowWriteGate(\"gsd_save_gate_result\", projectDir, args.milestoneId);\n const { executeSaveGateResult } = await getWorkflowToolExecutors();\n const { projectDir: _projectDir, ...params } = args;\n return runSerializedWorkflowOperation(() => executeSaveGateResult(params, projectDir));\n}\n\nasync function ensureMilestoneDbRow(milestoneId: string): Promise<void> {\n try {\n const { insertMilestone } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n insertMilestone({ id: milestoneId, status: \"queued\" });\n } catch {\n // Ignore pre-existing rows or transient DB availability issues.\n }\n}\n\nconst projectDirParam = z.string().describe(\"Absolute path to the project directory within the configured workflow root\");\n\nconst planMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n title: z.string().describe(\"Milestone title\"),\n vision: z.string().describe(\"Milestone vision\"),\n slices: z.array(z.object({\n sliceId: z.string(),\n title: z.string(),\n risk: z.string(),\n depends: z.array(z.string()),\n demo: z.string(),\n goal: z.string(),\n successCriteria: z.string(),\n proofLevel: z.string(),\n integrationClosure: z.string(),\n observabilityImpact: z.string(),\n })).describe(\"Planned slices for the milestone\"),\n status: z.string().optional().describe(\"Milestone status\"),\n dependsOn: z.array(z.string()).optional().describe(\"Milestone dependencies\"),\n successCriteria: z.array(z.string()).optional().describe(\"Top-level success criteria bullets\"),\n keyRisks: z.array(z.object({\n risk: z.string(),\n whyItMatters: z.string(),\n })).optional().describe(\"Structured risk entries\"),\n proofStrategy: z.array(z.object({\n riskOrUnknown: z.string(),\n retireIn: z.string(),\n whatWillBeProven: z.string(),\n })).optional().describe(\"Structured proof strategy entries\"),\n verificationContract: z.string().optional(),\n verificationIntegration: z.string().optional(),\n verificationOperational: z.string().optional(),\n verificationUat: z.string().optional(),\n definitionOfDone: z.array(z.string()).optional(),\n requirementCoverage: z.string().optional(),\n boundaryMapMarkdown: z.string().optional(),\n};\nconst planMilestoneSchema = z.object(planMilestoneParams);\n\nconst planSliceParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n goal: z.string().describe(\"Slice goal\"),\n tasks: z.array(z.object({\n taskId: z.string(),\n title: z.string(),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n observabilityImpact: z.string().optional(),\n })).describe(\"Planned tasks for the slice\"),\n successCriteria: z.string().optional(),\n proofLevel: z.string().optional(),\n integrationClosure: z.string().optional(),\n observabilityImpact: z.string().optional(),\n};\nconst planSliceSchema = z.object(planSliceParams);\n\nconst completeMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n title: z.string().describe(\"Milestone title\"),\n oneLiner: z.string().describe(\"One-sentence summary of what the milestone achieved\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the milestone\"),\n verificationPassed: z.boolean().describe(\"Must be true after milestone verification succeeds\"),\n successCriteriaResults: z.string().optional(),\n definitionOfDoneResults: z.string().optional(),\n requirementOutcomes: z.string().optional(),\n keyDecisions: z.array(z.string()).optional(),\n keyFiles: z.array(z.string()).optional(),\n lessonsLearned: z.array(z.string()).optional(),\n followUps: z.string().optional(),\n deviations: z.string().optional(),\n};\nconst completeMilestoneSchema = z.object(completeMilestoneParams);\n\nconst validateMilestoneParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n verdict: z.enum([\"pass\", \"needs-attention\", \"needs-remediation\"]).describe(\"Validation verdict\"),\n remediationRound: z.number().describe(\"Remediation round (0 for first validation)\"),\n successCriteriaChecklist: z.string().describe(\"Markdown checklist of success criteria with evidence\"),\n sliceDeliveryAudit: z.string().describe(\"Markdown auditing each slice's claimed vs delivered output\"),\n crossSliceIntegration: z.string().describe(\"Markdown describing cross-slice issues or closure\"),\n requirementCoverage: z.string().describe(\"Markdown describing requirement coverage and gaps\"),\n verificationClasses: z.string().optional(),\n verdictRationale: z.string().describe(\"Why this verdict was chosen\"),\n remediationPlan: z.string().optional(),\n};\nconst validateMilestoneSchema = z.object(validateMilestoneParams);\n\nconst roadmapSliceChangeSchema = z.object({\n sliceId: z.string(),\n title: z.string(),\n risk: z.string().optional(),\n depends: z.array(z.string()).optional(),\n demo: z.string().optional(),\n});\n\nconst reassessRoadmapParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n completedSliceId: z.string().describe(\"Slice ID that just completed\"),\n verdict: z.string().describe(\"Assessment verdict such as roadmap-confirmed or roadmap-adjusted\"),\n assessment: z.string().describe(\"Assessment text explaining the roadmap decision\"),\n sliceChanges: z.object({\n modified: z.array(roadmapSliceChangeSchema),\n added: z.array(roadmapSliceChangeSchema),\n removed: z.array(z.string()),\n }).describe(\"Slice changes to apply\"),\n};\nconst reassessRoadmapSchema = z.object(reassessRoadmapParams);\n\nconst saveGateResultParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n gateId: z.enum([\"Q3\", \"Q4\", \"Q5\", \"Q6\", \"Q7\", \"Q8\", \"MV01\", \"MV02\", \"MV03\", \"MV04\"]).describe(\"Gate ID\"),\n taskId: z.string().optional().describe(\"Task ID for task-scoped gates\"),\n verdict: z.enum([\"pass\", \"flag\", \"omitted\"]).describe(\"Gate verdict\"),\n rationale: z.string().describe(\"One-sentence justification\"),\n findings: z.string().optional().describe(\"Detailed markdown findings\"),\n};\nconst saveGateResultSchema = z.object(saveGateResultParams);\n\nconst replanSliceParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n blockerTaskId: z.string().describe(\"Task ID that discovered the blocker\"),\n blockerDescription: z.string().describe(\"Description of the blocker\"),\n whatChanged: z.string().describe(\"Summary of what changed in the plan\"),\n updatedTasks: z.array(z.object({\n taskId: z.string(),\n title: z.string(),\n description: z.string(),\n estimate: z.string(),\n files: z.array(z.string()),\n verify: z.string(),\n inputs: z.array(z.string()),\n expectedOutput: z.array(z.string()),\n fullPlanMd: z.string().optional(),\n })).describe(\"Tasks to upsert into the replanned slice\"),\n removedTaskIds: z.array(z.string()).describe(\"Task IDs to remove from the slice\"),\n};\nconst replanSliceSchema = z.object(replanSliceParams);\n\nconst sliceCompleteParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceTitle: z.string().describe(\"Title of the slice\"),\n oneLiner: z.string().describe(\"One-line summary of what the slice accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened across all tasks\"),\n verification: z.string().describe(\"What was verified across all tasks\"),\n uatContent: z.string().describe(\"UAT test content (markdown body)\"),\n deviations: z.string().optional(),\n knownLimitations: z.string().optional(),\n followUps: z.string().optional(),\n keyFiles: z.union([z.array(z.string()), z.string()]).optional(),\n keyDecisions: z.union([z.array(z.string()), z.string()]).optional(),\n patternsEstablished: z.union([z.array(z.string()), z.string()]).optional(),\n observabilitySurfaces: z.union([z.array(z.string()), z.string()]).optional(),\n provides: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsSurfaced: z.union([z.array(z.string()), z.string()]).optional(),\n drillDownPaths: z.union([z.array(z.string()), z.string()]).optional(),\n affects: z.union([z.array(z.string()), z.string()]).optional(),\n requirementsAdvanced: z.array(z.union([\n z.object({ id: z.string(), how: z.string() }),\n z.string(),\n ])).optional(),\n requirementsValidated: z.array(z.union([\n z.object({ id: z.string(), proof: z.string() }),\n z.string(),\n ])).optional(),\n requirementsInvalidated: z.array(z.union([\n z.object({ id: z.string(), what: z.string() }),\n z.string(),\n ])).optional(),\n filesModified: z.array(z.union([\n z.object({ path: z.string(), description: z.string() }),\n z.string(),\n ])).optional(),\n requires: z.array(z.union([\n z.object({ slice: z.string(), provides: z.string() }),\n z.string(),\n ])).optional(),\n};\nconst sliceCompleteSchema = z.object(sliceCompleteParams);\n\nconst summarySaveParams = {\n projectDir: projectDirParam,\n milestone_id: z.string().describe(\"Milestone ID (e.g. M001)\"),\n slice_id: z.string().optional().describe(\"Slice ID (e.g. S01)\"),\n task_id: z.string().optional().describe(\"Task ID (e.g. T01)\"),\n artifact_type: z.string().describe(\"Artifact type to save (SUMMARY, RESEARCH, CONTEXT, ASSESSMENT, CONTEXT-DRAFT)\"),\n content: z.string().describe(\"The full markdown content of the artifact\"),\n};\nconst summarySaveSchema = z.object(summarySaveParams);\n\nconst decisionSaveParams = {\n projectDir: projectDirParam,\n scope: z.string().describe(\"Scope of the decision (e.g. architecture, library, observability)\"),\n decision: z.string().describe(\"What is being decided\"),\n choice: z.string().describe(\"The choice made\"),\n rationale: z.string().describe(\"Why this choice was made\"),\n revisable: z.string().optional().describe(\"Whether this can be revisited\"),\n when_context: z.string().optional().describe(\"When/context for the decision\"),\n made_by: z.enum([\"human\", \"agent\", \"collaborative\"]).optional().describe(\"Who made the decision\"),\n};\nconst decisionSaveSchema = z.object(decisionSaveParams);\n\nconst requirementUpdateParams = {\n projectDir: projectDirParam,\n id: z.string().describe(\"Requirement ID (e.g. R001)\"),\n status: z.string().optional().describe(\"New status\"),\n validation: z.string().optional().describe(\"Validation criteria or proof\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n description: z.string().optional().describe(\"Updated description\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n};\nconst requirementUpdateSchema = z.object(requirementUpdateParams);\n\nconst requirementSaveParams = {\n projectDir: projectDirParam,\n class: z.string().describe(\"Requirement class\"),\n description: z.string().describe(\"Short description of the requirement\"),\n why: z.string().describe(\"Why this requirement matters\"),\n source: z.string().describe(\"Origin of the requirement\"),\n status: z.string().optional().describe(\"Requirement status\"),\n primary_owner: z.string().optional().describe(\"Primary owning slice\"),\n supporting_slices: z.string().optional().describe(\"Supporting slices\"),\n validation: z.string().optional().describe(\"Validation criteria\"),\n notes: z.string().optional().describe(\"Additional notes\"),\n};\nconst requirementSaveSchema = z.object(requirementSaveParams);\n\nconst milestoneGenerateIdParams = {\n projectDir: projectDirParam,\n};\nconst milestoneGenerateIdSchema = z.object(milestoneGenerateIdParams);\n\nconst planTaskParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n taskId: z.string().describe(\"Task ID (e.g. T01)\"),\n title: z.string().describe(\"Task title\"),\n description: z.string().describe(\"Task description / steps block\"),\n estimate: z.string().describe(\"Task estimate\"),\n files: z.array(z.string()).describe(\"Files likely touched\"),\n verify: z.string().describe(\"Verification command or block\"),\n inputs: z.array(z.string()).describe(\"Input files or references\"),\n expectedOutput: z.array(z.string()).describe(\"Expected output files or artifacts\"),\n observabilityImpact: z.string().optional().describe(\"Task observability impact\"),\n};\nconst planTaskSchema = z.object(planTaskParams);\n\nconst skipSliceParams = {\n projectDir: projectDirParam,\n sliceId: z.string().describe(\"Slice ID (e.g. S02)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M003)\"),\n reason: z.string().optional().describe(\"Reason for skipping this slice\"),\n};\nconst skipSliceSchema = z.object(skipSliceParams);\n\nconst taskCompleteParams = {\n projectDir: projectDirParam,\n taskId: z.string().describe(\"Task ID (e.g. T01)\"),\n sliceId: z.string().describe(\"Slice ID (e.g. S01)\"),\n milestoneId: z.string().describe(\"Milestone ID (e.g. M001)\"),\n oneLiner: z.string().describe(\"One-line summary of what was accomplished\"),\n narrative: z.string().describe(\"Detailed narrative of what happened during the task\"),\n verification: z.string().describe(\"What was verified and how\"),\n deviations: z.string().optional().describe(\"Deviations from the task plan\"),\n knownIssues: z.string().optional().describe(\"Known issues discovered but not fixed\"),\n keyFiles: z.array(z.string()).optional().describe(\"List of key files created or modified\"),\n keyDecisions: z.array(z.string()).optional().describe(\"List of key decisions made during this task\"),\n blockerDiscovered: z.boolean().optional().describe(\"Whether a plan-invalidating blocker was discovered\"),\n verificationEvidence: z.array(z.union([\n z.object({\n command: z.string(),\n exitCode: z.number(),\n verdict: z.string(),\n durationMs: z.number(),\n }),\n z.string(),\n ])).optional().describe(\"Verification evidence entries\"),\n};\nconst taskCompleteSchema = z.object(taskCompleteParams);\n\nconst milestoneStatusParams = {\n projectDir: projectDirParam,\n milestoneId: z.string().describe(\"Milestone ID to query (e.g. M001)\"),\n};\nconst milestoneStatusSchema = z.object(milestoneStatusParams);\n\nconst journalQueryParams = {\n projectDir: projectDirParam,\n flowId: z.string().optional().describe(\"Filter by flow ID\"),\n unitId: z.string().optional().describe(\"Filter by unit ID\"),\n rule: z.string().optional().describe(\"Filter by rule name\"),\n eventType: z.string().optional().describe(\"Filter by event type\"),\n after: z.string().optional().describe(\"ISO-8601 lower bound (inclusive)\"),\n before: z.string().optional().describe(\"ISO-8601 upper bound (inclusive)\"),\n limit: z.number().optional().describe(\"Maximum entries to return\"),\n};\nconst journalQuerySchema = z.object(journalQueryParams);\n\nexport function registerWorkflowTools(server: McpToolServer): void {\n server.tool(\n \"gsd_decision_save\",\n \"Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_decision\",\n \"Alias for gsd_decision_save. Record a project decision to the GSD database and regenerate DECISIONS.md.\",\n decisionSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(decisionSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_decision_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveDecisionToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveDecisionToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved decision ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_update\",\n \"Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_update_requirement\",\n \"Alias for gsd_requirement_update. Update an existing requirement in the GSD database and regenerate REQUIREMENTS.md.\",\n requirementUpdateParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementUpdateSchema, args);\n const { projectDir, id, ...updates } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_update\", projectDir);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { updateRequirementInDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return updateRequirementInDb(id, updates, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Updated requirement ${id}` }] };\n },\n );\n\n server.tool(\n \"gsd_requirement_save\",\n \"Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_save_requirement\",\n \"Alias for gsd_requirement_save. Record a new requirement to the GSD database and regenerate REQUIREMENTS.md.\",\n requirementSaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(requirementSaveSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_requirement_save\", projectDir);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { saveRequirementToDb } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/db-writer.js\");\n return saveRequirementToDb(params, projectDir);\n });\n return { content: [{ type: \"text\" as const, text: `Saved requirement ${result.id}` }] };\n },\n );\n\n server.tool(\n \"gsd_milestone_generate_id\",\n \"Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const nextId = nextMilestoneId(allIds);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_generate_milestone_id\",\n \"Alias for gsd_milestone_generate_id. Generate the next milestone ID for a new GSD milestone.\",\n milestoneGenerateIdParams,\n async (args: Record<string, unknown>) => {\n const { projectDir } = parseWorkflowArgs(milestoneGenerateIdSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_generate_id\", projectDir);\n const id = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const {\n claimReservedId,\n findMilestoneIds,\n getReservedMilestoneIds,\n nextMilestoneId,\n } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/milestone-ids.js\");\n const reserved = claimReservedId();\n if (reserved) {\n await ensureMilestoneDbRow(reserved);\n return reserved;\n }\n const allIds = [...new Set([...findMilestoneIds(projectDir), ...getReservedMilestoneIds()])];\n const nextId = nextMilestoneId(allIds);\n await ensureMilestoneDbRow(nextId);\n return nextId;\n });\n return { content: [{ type: \"text\" as const, text: id }] };\n },\n );\n\n server.tool(\n \"gsd_plan_milestone\",\n \"Write milestone planning state to the GSD database and render ROADMAP.md from DB.\",\n planMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planMilestoneSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_milestone\", projectDir, params.milestoneId);\n const { executePlanMilestone } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executePlanMilestone(params, projectDir));\n },\n );\n\n server.tool(\n \"gsd_plan_slice\",\n \"Write slice/task planning state to the GSD database and render plan artifacts from DB.\",\n planSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planSliceSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_slice\", projectDir, params.milestoneId);\n const { executePlanSlice } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executePlanSlice(params, projectDir));\n },\n );\n\n server.tool(\n \"gsd_plan_task\",\n \"Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_task_plan\",\n \"Alias for gsd_plan_task. Write task planning state to the GSD database and render tasks/T##-PLAN.md from DB.\",\n planTaskParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(planTaskSchema, args);\n const { projectDir, ...params } = parsed;\n await enforceWorkflowWriteGate(\"gsd_plan_task\", projectDir, params.milestoneId);\n const result = await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { handlePlanTask } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/tools/plan-task.js\");\n return handlePlanTask(params, projectDir);\n });\n if (\"error\" in result) {\n throw new Error(result.error);\n }\n return {\n content: [{ type: \"text\" as const, text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],\n };\n },\n );\n\n server.tool(\n \"gsd_replan_slice\",\n \"Replan a slice after a blocker is discovered, preserving completed tasks and re-rendering PLAN.md + REPLAN.md.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_replan\",\n \"Alias for gsd_replan_slice. Replan a slice after a blocker is discovered.\",\n replanSliceParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(replanSliceSchema, args);\n return handleReplanSlice(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_slice_complete\",\n \"Record a completed slice to the GSD database, render SUMMARY.md + UAT.md, and update roadmap projection.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_complete_slice\",\n \"Alias for gsd_slice_complete. Record a completed slice to the GSD database and render summary/UAT artifacts.\",\n sliceCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(sliceCompleteSchema, args);\n return handleSliceComplete(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_skip_slice\",\n \"Mark a slice as skipped so auto-mode advances past it without executing.\",\n skipSliceParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId, sliceId, reason } = parseWorkflowArgs(skipSliceSchema, args);\n await enforceWorkflowWriteGate(\"gsd_skip_slice\", projectDir, milestoneId);\n await runSerializedWorkflowDbOperation(projectDir, async () => {\n const { getSlice, updateSliceStatus } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/gsd-db.js\");\n const { invalidateStateCache } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/state.js\");\n const { rebuildState } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/doctor.js\");\n const slice = getSlice(milestoneId, sliceId);\n if (!slice) {\n throw new Error(`Slice ${sliceId} not found in milestone ${milestoneId}`);\n }\n if (slice.status === \"complete\" || slice.status === \"done\") {\n throw new Error(`Slice ${sliceId} is already complete and cannot be skipped`);\n }\n if (slice.status !== \"skipped\") {\n updateSliceStatus(milestoneId, sliceId, \"skipped\");\n invalidateStateCache();\n await rebuildState(projectDir);\n }\n });\n return {\n content: [{ type: \"text\" as const, text: `Skipped slice ${sliceId} (${milestoneId}). Reason: ${reason ?? \"User-directed skip\"}.` }],\n };\n },\n );\n\n server.tool(\n \"gsd_complete_milestone\",\n \"Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_complete\",\n \"Alias for gsd_complete_milestone. Record a completed milestone to the GSD database and render its SUMMARY.md.\",\n completeMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(completeMilestoneSchema, args);\n return handleCompleteMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_validate_milestone\",\n \"Validate a milestone, persist validation results to the GSD database, and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_milestone_validate\",\n \"Alias for gsd_validate_milestone. Validate a milestone and render VALIDATION.md.\",\n validateMilestoneParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(validateMilestoneSchema, args);\n return handleValidateMilestone(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_reassess_roadmap\",\n \"Reassess a milestone roadmap after a slice completes, writing ASSESSMENT.md and re-rendering ROADMAP.md.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_roadmap_reassess\",\n \"Alias for gsd_reassess_roadmap. Reassess a roadmap after slice completion.\",\n reassessRoadmapParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(reassessRoadmapSchema, args);\n return handleReassessRoadmap(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_save_gate_result\",\n \"Save a quality gate result to the GSD database.\",\n saveGateResultParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(saveGateResultSchema, args);\n return handleSaveGateResult(parsed.projectDir, parsed);\n },\n );\n\n server.tool(\n \"gsd_summary_save\",\n \"Save a GSD summary/research/context/assessment artifact to the database and disk.\",\n summarySaveParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(summarySaveSchema, args);\n const { projectDir, milestone_id, slice_id, task_id, artifact_type, content } = parsed;\n await enforceWorkflowWriteGate(\"gsd_summary_save\", projectDir, milestone_id);\n const executors = await getWorkflowToolExecutors();\n const supportedArtifactTypes = getSupportedSummaryArtifactTypes(executors);\n if (!supportedArtifactTypes.includes(artifact_type)) {\n throw new Error(\n `artifact_type must be one of: ${supportedArtifactTypes.join(\", \")}`,\n );\n }\n return runSerializedWorkflowOperation(() =>\n executors.executeSummarySave({ milestone_id, slice_id, task_id, artifact_type, content }, projectDir),\n );\n },\n );\n\n server.tool(\n \"gsd_task_complete\",\n \"Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_complete_task\",\n \"Alias for gsd_task_complete. Record a completed task to the GSD database and render its SUMMARY.md.\",\n taskCompleteParams,\n async (args: Record<string, unknown>) => {\n const parsed = parseWorkflowArgs(taskCompleteSchema, args);\n const { projectDir, ...taskArgs } = parsed;\n return handleTaskComplete(projectDir, taskArgs);\n },\n );\n\n server.tool(\n \"gsd_milestone_status\",\n \"Read the current status of a milestone and all its slices from the GSD database.\",\n milestoneStatusParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, milestoneId } = parseWorkflowArgs(milestoneStatusSchema, args);\n await enforceWorkflowWriteGate(\"gsd_milestone_status\", projectDir, milestoneId);\n const { executeMilestoneStatus } = await getWorkflowToolExecutors();\n return runSerializedWorkflowOperation(() => executeMilestoneStatus({ milestoneId }, projectDir));\n },\n );\n\n server.tool(\n \"gsd_journal_query\",\n \"Query the structured event journal for auto-mode iterations.\",\n journalQueryParams,\n async (args: Record<string, unknown>) => {\n const { projectDir, limit, ...filters } = parseWorkflowArgs(journalQuerySchema, args);\n const { queryJournal } = await importLocalModule<any>(\"../../../src/resources/extensions/gsd/journal.js\");\n const entries = queryJournal(projectDir, filters).slice(0, limit ?? 100);\n if (entries.length === 0) {\n return { content: [{ type: \"text\" as const, text: \"No matching journal entries found.\" }] };\n }\n return { content: [{ type: \"text\" as const, text: JSON.stringify(entries, null, 2) }] };\n },\n );\n}\n"]}