gsd-pi 2.43.0 → 2.44.0-dev.0b97ffd

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 (693) hide show
  1. package/README.md +30 -12
  2. package/dist/cli.js +13 -1
  3. package/dist/help-text.js +24 -0
  4. package/dist/resources/extensions/bg-shell/overlay.js +3 -0
  5. package/dist/resources/extensions/github-sync/sync.js +2 -1
  6. package/dist/resources/extensions/gsd/auto/loop.js +0 -2
  7. package/dist/resources/extensions/gsd/auto/phases.js +7 -12
  8. package/dist/resources/extensions/gsd/auto-dashboard.js +19 -18
  9. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +34 -19
  10. package/dist/resources/extensions/gsd/auto-dispatch.js +36 -21
  11. package/dist/resources/extensions/gsd/auto-post-unit.js +128 -14
  12. package/dist/resources/extensions/gsd/auto-prompts.js +202 -92
  13. package/dist/resources/extensions/gsd/auto-recovery.js +83 -135
  14. package/dist/resources/extensions/gsd/auto-start.js +10 -0
  15. package/dist/resources/extensions/gsd/auto-supervisor.js +14 -0
  16. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +4 -7
  17. package/dist/resources/extensions/gsd/auto-verification.js +5 -10
  18. package/dist/resources/extensions/gsd/auto-worktree.js +123 -30
  19. package/dist/resources/extensions/gsd/auto.js +1 -4
  20. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +611 -0
  21. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +28 -3
  22. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +7 -0
  23. package/dist/resources/extensions/gsd/commands/catalog.js +3 -1
  24. package/dist/resources/extensions/gsd/commands/handlers/ops.js +15 -1
  25. package/dist/resources/extensions/gsd/commands/handlers/workflow.js +5 -0
  26. package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
  27. package/dist/resources/extensions/gsd/commands-maintenance.js +78 -3
  28. package/dist/resources/extensions/gsd/dashboard-overlay.js +32 -31
  29. package/dist/resources/extensions/gsd/db-writer.js +95 -4
  30. package/dist/resources/extensions/gsd/dispatch-guard.js +35 -30
  31. package/dist/resources/extensions/gsd/doctor-checks.js +28 -11
  32. package/dist/resources/extensions/gsd/doctor-environment.js +28 -0
  33. package/dist/resources/extensions/gsd/doctor-types.js +0 -15
  34. package/dist/resources/extensions/gsd/doctor.js +46 -282
  35. package/dist/resources/extensions/gsd/file-watcher.js +5 -1
  36. package/dist/resources/extensions/gsd/files.js +14 -198
  37. package/dist/resources/extensions/gsd/git-service.js +4 -0
  38. package/dist/resources/extensions/gsd/gitignore.js +4 -0
  39. package/dist/resources/extensions/gsd/gsd-db.js +819 -197
  40. package/dist/resources/extensions/gsd/guided-flow.js +18 -8
  41. package/dist/resources/extensions/gsd/markdown-renderer.js +862 -0
  42. package/dist/resources/extensions/gsd/md-importer.js +182 -4
  43. package/dist/resources/extensions/gsd/native-git-bridge.js +10 -1
  44. package/dist/resources/extensions/gsd/parallel-eligibility.js +14 -19
  45. package/dist/resources/extensions/gsd/parallel-orchestrator.js +38 -0
  46. package/dist/resources/extensions/gsd/parsers-legacy.js +239 -0
  47. package/dist/resources/extensions/gsd/preferences-types.js +1 -0
  48. package/dist/resources/extensions/gsd/preferences-validation.js +9 -0
  49. package/dist/resources/extensions/gsd/preferences.js +1 -0
  50. package/dist/resources/extensions/gsd/prompts/complete-slice.md +22 -9
  51. package/dist/resources/extensions/gsd/prompts/discuss.md +2 -2
  52. package/dist/resources/extensions/gsd/prompts/execute-task.md +15 -5
  53. package/dist/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  54. package/dist/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  55. package/dist/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  56. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
  57. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -7
  58. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
  59. package/dist/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
  60. package/dist/resources/extensions/gsd/prompts/replan-slice.md +6 -6
  61. package/dist/resources/extensions/gsd/reactive-graph.js +33 -3
  62. package/dist/resources/extensions/gsd/skill-health.js +3 -1
  63. package/dist/resources/extensions/gsd/state.js +484 -30
  64. package/dist/resources/extensions/gsd/tools/complete-milestone.js +128 -0
  65. package/dist/resources/extensions/gsd/tools/complete-slice.js +244 -0
  66. package/dist/resources/extensions/gsd/tools/complete-task.js +204 -0
  67. package/dist/resources/extensions/gsd/tools/plan-milestone.js +205 -0
  68. package/dist/resources/extensions/gsd/tools/plan-slice.js +155 -0
  69. package/dist/resources/extensions/gsd/tools/plan-task.js +94 -0
  70. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +152 -0
  71. package/dist/resources/extensions/gsd/tools/replan-slice.js +146 -0
  72. package/dist/resources/extensions/gsd/triage-resolution.js +17 -1
  73. package/dist/resources/extensions/gsd/undo.js +197 -3
  74. package/dist/resources/extensions/gsd/visualizer-data.js +53 -16
  75. package/dist/resources/extensions/gsd/workspace-index.js +63 -39
  76. package/dist/web/standalone/.next/BUILD_ID +1 -1
  77. package/dist/web/standalone/.next/app-path-routes-manifest.json +18 -17
  78. package/dist/web/standalone/.next/build-manifest.json +4 -4
  79. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  80. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  81. package/dist/web/standalone/.next/required-server-files.json +4 -4
  82. package/dist/web/standalone/.next/routes-manifest.json +6 -0
  83. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  84. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  85. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  86. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  87. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  88. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  89. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  90. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  91. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  92. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  93. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  94. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  95. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  96. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -4
  97. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -4
  98. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  99. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -4
  100. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  101. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  102. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  103. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  104. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  105. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  106. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  107. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  108. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  109. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  110. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  112. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  113. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  114. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  115. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  116. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  117. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  118. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  119. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  120. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  121. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  122. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  123. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  124. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  125. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  126. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  127. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  128. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +5 -5
  148. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  154. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -0
  166. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -0
  167. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -0
  168. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  171. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +2 -2
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
  175. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/index.html +1 -1
  185. package/dist/web/standalone/.next/server/app/index.rsc +5 -5
  186. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  187. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -5
  188. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  189. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -4
  190. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  191. package/dist/web/standalone/.next/server/app/page.js +2 -2
  192. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app-paths-manifest.json +18 -17
  194. package/dist/web/standalone/.next/server/chunks/229.js +3 -3
  195. package/dist/web/standalone/.next/server/chunks/471.js +3 -3
  196. package/dist/web/standalone/.next/server/functions-config-manifest.json +1 -0
  197. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/middleware.js +2 -2
  200. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  202. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  203. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  204. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  205. package/dist/web/standalone/.next/static/alS4hoANx0TK4UVZY27da/_buildManifest.js +1 -0
  206. package/dist/web/standalone/.next/static/chunks/{4024.c195dc1fdd2adbea.js → 4024.0de81b543b28b9fe.js} +2 -2
  207. package/dist/web/standalone/.next/static/chunks/app/_global-error/{page-d07a2c023f1aef1e.js → page-d83ba70a25a85472.js} +1 -1
  208. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-f2a7482d42a5614b.js +1 -0
  209. package/dist/web/standalone/.next/static/chunks/app/api/boot/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  210. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/input/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  211. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/resize/{route-d07a2c023f1aef1e.js → route-d83ba70a25a85472.js} +1 -1
  212. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d83ba70a25a85472.js +1 -0
  213. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d83ba70a25a85472.js +1 -0
  214. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d83ba70a25a85472.js +1 -0
  215. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d83ba70a25a85472.js +1 -0
  216. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d83ba70a25a85472.js +1 -0
  217. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d83ba70a25a85472.js +1 -0
  218. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d83ba70a25a85472.js +1 -0
  219. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d83ba70a25a85472.js +1 -0
  220. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d83ba70a25a85472.js +1 -0
  221. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d83ba70a25a85472.js +1 -0
  222. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d83ba70a25a85472.js +1 -0
  223. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d83ba70a25a85472.js +1 -0
  224. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d83ba70a25a85472.js +1 -0
  225. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d83ba70a25a85472.js +1 -0
  226. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d83ba70a25a85472.js +1 -0
  227. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d83ba70a25a85472.js +1 -0
  228. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d83ba70a25a85472.js +1 -0
  229. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d83ba70a25a85472.js +1 -0
  230. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d83ba70a25a85472.js +1 -0
  231. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d83ba70a25a85472.js +1 -0
  232. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d83ba70a25a85472.js +1 -0
  233. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d83ba70a25a85472.js +1 -0
  234. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d83ba70a25a85472.js +1 -0
  235. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d83ba70a25a85472.js +1 -0
  236. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d83ba70a25a85472.js +1 -0
  237. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d83ba70a25a85472.js +1 -0
  238. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d83ba70a25a85472.js +1 -0
  239. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d83ba70a25a85472.js +1 -0
  240. package/dist/web/standalone/.next/static/chunks/app/api/switch-root/route-d83ba70a25a85472.js +1 -0
  241. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d83ba70a25a85472.js +1 -0
  242. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d83ba70a25a85472.js +1 -0
  243. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d83ba70a25a85472.js +1 -0
  244. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d83ba70a25a85472.js +1 -0
  245. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d83ba70a25a85472.js +1 -0
  246. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d83ba70a25a85472.js +1 -0
  247. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d83ba70a25a85472.js +1 -0
  248. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d83ba70a25a85472.js +1 -0
  249. package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +1 -0
  250. package/dist/web/standalone/.next/static/chunks/app/page-b9367c5ae13b99c6.js +1 -0
  251. package/dist/web/standalone/.next/static/chunks/{main-app-2f2ee7b85712c2bd.js → main-app-fdab67f7802d7832.js} +1 -1
  252. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d83ba70a25a85472.js +1 -0
  253. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d83ba70a25a85472.js +1 -0
  254. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  255. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d83ba70a25a85472.js +1 -0
  256. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d83ba70a25a85472.js +1 -0
  257. package/dist/web/standalone/.next/static/chunks/{webpack-fa307370fcf9fb2c.js → webpack-9014b5adb127a98a.js} +1 -1
  258. package/dist/web/standalone/.next/static/css/8a727f372cf53002.css +1 -0
  259. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  260. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  261. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  262. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  263. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  264. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  265. package/dist/web/standalone/server.js +1 -1
  266. package/package.json +4 -4
  267. package/packages/pi-ai/dist/models.custom.d.ts +173 -0
  268. package/packages/pi-ai/dist/models.custom.d.ts.map +1 -0
  269. package/packages/pi-ai/dist/models.custom.js +170 -0
  270. package/packages/pi-ai/dist/models.custom.js.map +1 -0
  271. package/packages/pi-ai/dist/models.d.ts.map +1 -1
  272. package/packages/pi-ai/dist/models.js +16 -1
  273. package/packages/pi-ai/dist/models.js.map +1 -1
  274. package/packages/pi-ai/dist/models.test.d.ts +2 -0
  275. package/packages/pi-ai/dist/models.test.d.ts.map +1 -0
  276. package/packages/pi-ai/dist/models.test.js +67 -0
  277. package/packages/pi-ai/dist/models.test.js.map +1 -0
  278. package/packages/pi-ai/src/models.custom.ts +172 -0
  279. package/packages/pi-ai/src/models.test.ts +85 -0
  280. package/packages/pi-ai/src/models.ts +17 -1
  281. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +10 -3
  282. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  283. package/packages/pi-coding-agent/dist/core/agent-session.js +21 -34
  284. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  285. package/packages/pi-coding-agent/dist/core/auth-storage.test.js +6 -8
  286. package/packages/pi-coding-agent/dist/core/auth-storage.test.js.map +1 -1
  287. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts +2 -2
  288. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/compaction/branch-summarization.js.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +2 -2
  291. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  293. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js +4 -4
  294. package/packages/pi-coding-agent/dist/core/compaction-orchestrator.js.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  296. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +6 -0
  299. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/extensions/loader.js +80 -0
  301. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/extensions/loader.test.js +63 -0
  303. package/packages/pi-coding-agent/dist/core/extensions/loader.test.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js +24 -26
  305. package/packages/pi-coding-agent/dist/core/extensions/runner.test.js.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts +37 -0
  307. package/packages/pi-coding-agent/dist/core/extensions/types.d.ts.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/extensions/types.js.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/fallback-resolver.d.ts.map +1 -1
  310. package/packages/pi-coding-agent/dist/core/fallback-resolver.js +2 -3
  311. package/packages/pi-coding-agent/dist/core/fallback-resolver.js.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js +12 -2
  313. package/packages/pi-coding-agent/dist/core/fallback-resolver.test.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/core/fs-utils.test.js +29 -48
  315. package/packages/pi-coding-agent/dist/core/fs-utils.test.js.map +1 -1
  316. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts +38 -0
  317. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.d.ts.map +1 -0
  318. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js +192 -0
  319. package/packages/pi-coding-agent/dist/core/lifecycle-hooks.js.map +1 -0
  320. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts +5 -0
  321. package/packages/pi-coding-agent/dist/core/lsp/client.d.ts.map +1 -1
  322. package/packages/pi-coding-agent/dist/core/lsp/client.js +69 -21
  323. package/packages/pi-coding-agent/dist/core/lsp/client.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts +2 -0
  325. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.d.ts.map +1 -0
  326. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js +255 -0
  327. package/packages/pi-coding-agent/dist/core/model-registry-auth-mode.test.js.map +1 -0
  328. package/packages/pi-coding-agent/dist/core/model-registry.d.ts +15 -0
  329. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  330. package/packages/pi-coding-agent/dist/core/model-registry.js +40 -3
  331. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  332. package/packages/pi-coding-agent/dist/core/package-commands.d.ts +25 -0
  333. package/packages/pi-coding-agent/dist/core/package-commands.d.ts.map +1 -0
  334. package/packages/pi-coding-agent/dist/core/package-commands.js +253 -0
  335. package/packages/pi-coding-agent/dist/core/package-commands.js.map +1 -0
  336. package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts +2 -0
  337. package/packages/pi-coding-agent/dist/core/package-commands.test.d.ts.map +1 -0
  338. package/packages/pi-coding-agent/dist/core/package-commands.test.js +225 -0
  339. package/packages/pi-coding-agent/dist/core/package-commands.test.js.map +1 -0
  340. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js +34 -44
  341. package/packages/pi-coding-agent/dist/core/resolve-config-value.test.js.map +1 -1
  342. package/packages/pi-coding-agent/dist/core/sdk.d.ts.map +1 -1
  343. package/packages/pi-coding-agent/dist/core/sdk.js +4 -0
  344. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  345. package/packages/pi-coding-agent/dist/core/session-manager.test.js +30 -34
  346. package/packages/pi-coding-agent/dist/core/session-manager.test.js.map +1 -1
  347. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js +10 -12
  348. package/packages/pi-coding-agent/dist/core/tools/edit-diff.test.js.map +1 -1
  349. package/packages/pi-coding-agent/dist/index.d.ts +3 -1
  350. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  351. package/packages/pi-coding-agent/dist/index.js +1 -0
  352. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  353. package/packages/pi-coding-agent/dist/main.d.ts.map +1 -1
  354. package/packages/pi-coding-agent/dist/main.js +11 -199
  355. package/packages/pi-coding-agent/dist/main.js.map +1 -1
  356. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts +6 -0
  357. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +21 -0
  359. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  360. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  361. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  362. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +8 -15
  363. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  364. package/packages/pi-coding-agent/dist/modes/print-mode.d.ts.map +1 -1
  365. package/packages/pi-coding-agent/dist/modes/print-mode.js +45 -34
  366. package/packages/pi-coding-agent/dist/modes/print-mode.js.map +1 -1
  367. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts +1 -0
  368. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  369. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js +7 -2
  370. package/packages/pi-coding-agent/dist/modes/rpc/rpc-client.js.map +1 -1
  371. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  372. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js +2 -1
  373. package/packages/pi-coding-agent/dist/modes/rpc/rpc-mode.js.map +1 -1
  374. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js +43 -47
  375. package/packages/pi-coding-agent/dist/resources/extensions/memory/storage.test.js.map +1 -1
  376. package/packages/pi-coding-agent/package.json +1 -1
  377. package/packages/pi-coding-agent/src/core/agent-session.ts +26 -37
  378. package/packages/pi-coding-agent/src/core/auth-storage.test.ts +7 -7
  379. package/packages/pi-coding-agent/src/core/compaction/branch-summarization.ts +2 -2
  380. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +3 -3
  381. package/packages/pi-coding-agent/src/core/compaction-orchestrator.ts +4 -4
  382. package/packages/pi-coding-agent/src/core/extensions/index.ts +5 -0
  383. package/packages/pi-coding-agent/src/core/extensions/loader.test.ts +96 -0
  384. package/packages/pi-coding-agent/src/core/extensions/loader.ts +89 -0
  385. package/packages/pi-coding-agent/src/core/extensions/runner.test.ts +26 -26
  386. package/packages/pi-coding-agent/src/core/extensions/types.ts +44 -0
  387. package/packages/pi-coding-agent/src/core/fallback-resolver.test.ts +15 -2
  388. package/packages/pi-coding-agent/src/core/fallback-resolver.ts +2 -3
  389. package/packages/pi-coding-agent/src/core/fs-utils.test.ts +31 -43
  390. package/packages/pi-coding-agent/src/core/lifecycle-hooks.ts +274 -0
  391. package/packages/pi-coding-agent/src/core/lsp/client.ts +83 -21
  392. package/packages/pi-coding-agent/src/core/model-registry-auth-mode.test.ts +288 -0
  393. package/packages/pi-coding-agent/src/core/model-registry.ts +39 -3
  394. package/packages/pi-coding-agent/src/core/package-commands.test.ts +240 -0
  395. package/packages/pi-coding-agent/src/core/package-commands.ts +310 -0
  396. package/packages/pi-coding-agent/src/core/resolve-config-value.test.ts +40 -45
  397. package/packages/pi-coding-agent/src/core/sdk.ts +4 -0
  398. package/packages/pi-coding-agent/src/core/session-manager.test.ts +33 -33
  399. package/packages/pi-coding-agent/src/core/tools/edit-diff.test.ts +17 -17
  400. package/packages/pi-coding-agent/src/index.ts +7 -0
  401. package/packages/pi-coding-agent/src/main.ts +11 -232
  402. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +20 -0
  403. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +9 -16
  404. package/packages/pi-coding-agent/src/modes/print-mode.ts +42 -32
  405. package/packages/pi-coding-agent/src/modes/rpc/rpc-client.ts +8 -2
  406. package/packages/pi-coding-agent/src/modes/rpc/rpc-mode.ts +2 -1
  407. package/packages/pi-coding-agent/src/resources/extensions/memory/storage.test.ts +74 -74
  408. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  409. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  410. package/pkg/dist/modes/interactive/theme/theme.js +8 -15
  411. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  412. package/pkg/package.json +1 -1
  413. package/src/resources/extensions/bg-shell/overlay.ts +4 -0
  414. package/src/resources/extensions/github-sync/sync.ts +2 -1
  415. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -8
  416. package/src/resources/extensions/gsd/auto/loop.ts +0 -2
  417. package/src/resources/extensions/gsd/auto/phases.ts +7 -20
  418. package/src/resources/extensions/gsd/auto/types.ts +0 -1
  419. package/src/resources/extensions/gsd/auto-dashboard.ts +20 -16
  420. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +34 -19
  421. package/src/resources/extensions/gsd/auto-dispatch.ts +38 -21
  422. package/src/resources/extensions/gsd/auto-post-unit.ts +150 -15
  423. package/src/resources/extensions/gsd/auto-prompts.ts +186 -103
  424. package/src/resources/extensions/gsd/auto-recovery.ts +77 -142
  425. package/src/resources/extensions/gsd/auto-start.ts +14 -0
  426. package/src/resources/extensions/gsd/auto-supervisor.ts +14 -0
  427. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +6 -7
  428. package/src/resources/extensions/gsd/auto-verification.ts +4 -9
  429. package/src/resources/extensions/gsd/auto-worktree.ts +126 -30
  430. package/src/resources/extensions/gsd/auto.ts +0 -9
  431. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +675 -4
  432. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +31 -3
  433. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +7 -0
  434. package/src/resources/extensions/gsd/commands/catalog.ts +3 -1
  435. package/src/resources/extensions/gsd/commands/handlers/ops.ts +15 -1
  436. package/src/resources/extensions/gsd/commands/handlers/workflow.ts +8 -0
  437. package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
  438. package/src/resources/extensions/gsd/commands-maintenance.ts +86 -3
  439. package/src/resources/extensions/gsd/dashboard-overlay.ts +17 -13
  440. package/src/resources/extensions/gsd/db-writer.ts +105 -4
  441. package/src/resources/extensions/gsd/dispatch-guard.ts +32 -30
  442. package/src/resources/extensions/gsd/doctor-checks.ts +25 -11
  443. package/src/resources/extensions/gsd/doctor-environment.ts +31 -0
  444. package/src/resources/extensions/gsd/doctor-types.ts +0 -23
  445. package/src/resources/extensions/gsd/doctor.ts +45 -295
  446. package/src/resources/extensions/gsd/file-watcher.ts +4 -1
  447. package/src/resources/extensions/gsd/files.ts +16 -220
  448. package/src/resources/extensions/gsd/git-service.ts +4 -0
  449. package/src/resources/extensions/gsd/gitignore.ts +4 -0
  450. package/src/resources/extensions/gsd/gsd-db.ts +1157 -370
  451. package/src/resources/extensions/gsd/guided-flow.ts +20 -8
  452. package/src/resources/extensions/gsd/markdown-renderer.ts +1098 -0
  453. package/src/resources/extensions/gsd/md-importer.ts +211 -2
  454. package/src/resources/extensions/gsd/native-git-bridge.ts +12 -1
  455. package/src/resources/extensions/gsd/parallel-eligibility.ts +14 -18
  456. package/src/resources/extensions/gsd/parallel-orchestrator.ts +43 -0
  457. package/src/resources/extensions/gsd/parsers-legacy.ts +271 -0
  458. package/src/resources/extensions/gsd/preferences-types.ts +3 -0
  459. package/src/resources/extensions/gsd/preferences-validation.ts +9 -0
  460. package/src/resources/extensions/gsd/preferences.ts +1 -0
  461. package/src/resources/extensions/gsd/prompts/complete-slice.md +22 -9
  462. package/src/resources/extensions/gsd/prompts/discuss.md +2 -2
  463. package/src/resources/extensions/gsd/prompts/execute-task.md +15 -5
  464. package/src/resources/extensions/gsd/prompts/guided-complete-slice.md +1 -1
  465. package/src/resources/extensions/gsd/prompts/guided-execute-task.md +1 -1
  466. package/src/resources/extensions/gsd/prompts/guided-plan-milestone.md +1 -1
  467. package/src/resources/extensions/gsd/prompts/plan-milestone.md +6 -10
  468. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -7
  469. package/src/resources/extensions/gsd/prompts/reactive-execute.md +3 -3
  470. package/src/resources/extensions/gsd/prompts/reassess-roadmap.md +6 -7
  471. package/src/resources/extensions/gsd/prompts/replan-slice.md +6 -6
  472. package/src/resources/extensions/gsd/reactive-graph.ts +33 -3
  473. package/src/resources/extensions/gsd/skill-health.ts +2 -1
  474. package/src/resources/extensions/gsd/state.ts +547 -29
  475. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +99 -99
  476. package/src/resources/extensions/gsd/tests/atomic-task-closeout.test.ts +8 -120
  477. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +14 -16
  478. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +20 -11
  479. package/src/resources/extensions/gsd/tests/auto-paused-session-validation.test.ts +43 -57
  480. package/src/resources/extensions/gsd/tests/auto-preflight.test.ts +11 -13
  481. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +600 -513
  482. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +73 -75
  483. package/src/resources/extensions/gsd/tests/auto-start-needs-discussion.test.ts +34 -56
  484. package/src/resources/extensions/gsd/tests/auto-stash-merge.test.ts +121 -0
  485. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +540 -668
  486. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +165 -143
  487. package/src/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +29 -52
  488. package/src/resources/extensions/gsd/tests/captures.test.ts +148 -176
  489. package/src/resources/extensions/gsd/tests/claude-import-tui.test.ts +32 -33
  490. package/src/resources/extensions/gsd/tests/collect-from-manifest.test.ts +141 -143
  491. package/src/resources/extensions/gsd/tests/commands-inspect-open-db.test.ts +25 -25
  492. package/src/resources/extensions/gsd/tests/commands-logs.test.ts +81 -81
  493. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +39 -60
  494. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +375 -0
  495. package/src/resources/extensions/gsd/tests/complete-task.test.ts +387 -0
  496. package/src/resources/extensions/gsd/tests/context-store.test.ts +354 -367
  497. package/src/resources/extensions/gsd/tests/continue-here.test.ts +68 -72
  498. package/src/resources/extensions/gsd/tests/cost-projection.test.ts +92 -106
  499. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +27 -35
  500. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +0 -2
  501. package/src/resources/extensions/gsd/tests/dashboard-budget.test.ts +220 -237
  502. package/src/resources/extensions/gsd/tests/db-writer.test.ts +390 -420
  503. package/src/resources/extensions/gsd/tests/definition-loader.test.ts +76 -92
  504. package/src/resources/extensions/gsd/tests/derive-state-crossval.test.ts +512 -0
  505. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +644 -84
  506. package/src/resources/extensions/gsd/tests/derive-state-deps.test.ts +78 -101
  507. package/src/resources/extensions/gsd/tests/derive-state.test.ts +192 -227
  508. package/src/resources/extensions/gsd/tests/detection.test.ts +232 -278
  509. package/src/resources/extensions/gsd/tests/dev-engine-wrapper.test.ts +30 -34
  510. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +192 -161
  511. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +43 -49
  512. package/src/resources/extensions/gsd/tests/dispatch-uat-last-completed.test.ts +28 -32
  513. package/src/resources/extensions/gsd/tests/doctor-completion-deferral.test.ts +30 -90
  514. package/src/resources/extensions/gsd/tests/doctor-delimiter-fix.test.ts +34 -38
  515. package/src/resources/extensions/gsd/tests/doctor-enhancements.test.ts +57 -80
  516. package/src/resources/extensions/gsd/tests/doctor-environment-worktree.test.ts +164 -0
  517. package/src/resources/extensions/gsd/tests/doctor-environment.test.ts +72 -97
  518. package/src/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +55 -153
  519. package/src/resources/extensions/gsd/tests/doctor-git.test.ts +104 -145
  520. package/src/resources/extensions/gsd/tests/doctor-proactive.test.ts +84 -106
  521. package/src/resources/extensions/gsd/tests/doctor-roadmap-summary-atomicity.test.ts +53 -97
  522. package/src/resources/extensions/gsd/tests/doctor-runtime.test.ts +72 -93
  523. package/src/resources/extensions/gsd/tests/doctor.test.ts +109 -149
  524. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +123 -131
  525. package/src/resources/extensions/gsd/tests/exit-command.test.ts +20 -24
  526. package/src/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +48 -57
  527. package/src/resources/extensions/gsd/tests/files-loadfile-eisdir.test.ts +5 -7
  528. package/src/resources/extensions/gsd/tests/flag-file-db.test.ts +278 -0
  529. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +232 -0
  530. package/src/resources/extensions/gsd/tests/git-locale.test.ts +13 -27
  531. package/src/resources/extensions/gsd/tests/git-service.test.ts +291 -390
  532. package/src/resources/extensions/gsd/tests/gitignore-tracked-gsd.test.ts +31 -39
  533. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +63 -69
  534. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +255 -264
  535. package/src/resources/extensions/gsd/tests/gsd-inspect.test.ts +108 -119
  536. package/src/resources/extensions/gsd/tests/gsd-recover.test.ts +440 -0
  537. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +229 -262
  538. package/src/resources/extensions/gsd/tests/headless-answers.test.ts +13 -13
  539. package/src/resources/extensions/gsd/tests/health-widget.test.ts +29 -37
  540. package/src/resources/extensions/gsd/tests/idle-recovery.test.ts +81 -270
  541. package/src/resources/extensions/gsd/tests/init-wizard.test.ts +16 -18
  542. package/src/resources/extensions/gsd/tests/integration-edge.test.ts +41 -46
  543. package/src/resources/extensions/gsd/tests/integration-lifecycle.test.ts +42 -53
  544. package/src/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +75 -91
  545. package/src/resources/extensions/gsd/tests/integration-proof.test.ts +643 -0
  546. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +0 -3
  547. package/src/resources/extensions/gsd/tests/markdown-renderer.test.ts +1161 -0
  548. package/src/resources/extensions/gsd/tests/md-importer.test.ts +101 -125
  549. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +45 -54
  550. package/src/resources/extensions/gsd/tests/memory-store.test.ts +81 -94
  551. package/src/resources/extensions/gsd/tests/migrate-command.test.ts +57 -66
  552. package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +429 -0
  553. package/src/resources/extensions/gsd/tests/migrate-parser.test.ts +161 -170
  554. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +125 -141
  555. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +107 -131
  556. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +89 -97
  557. package/src/resources/extensions/gsd/tests/migrate-writer.test.ts +127 -164
  558. package/src/resources/extensions/gsd/tests/must-have-parser.test.ts +81 -94
  559. package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +35 -36
  560. package/src/resources/extensions/gsd/tests/overrides.test.ts +99 -106
  561. package/src/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +40 -47
  562. package/src/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +25 -28
  563. package/src/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +66 -83
  564. package/src/resources/extensions/gsd/tests/park-edge-cases.test.ts +54 -77
  565. package/src/resources/extensions/gsd/tests/park-milestone.test.ts +68 -115
  566. package/src/resources/extensions/gsd/tests/parsers.test.ts +548 -612
  567. package/src/resources/extensions/gsd/tests/paths.test.ts +72 -87
  568. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +176 -113
  569. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +7 -0
  570. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +179 -0
  571. package/src/resources/extensions/gsd/tests/plan-task.test.ts +145 -0
  572. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +305 -0
  573. package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +77 -117
  574. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +139 -0
  575. package/src/resources/extensions/gsd/tests/prompt-db.test.ts +56 -56
  576. package/src/resources/extensions/gsd/tests/queue-draft-detection.test.ts +93 -119
  577. package/src/resources/extensions/gsd/tests/queue-order.test.ts +70 -82
  578. package/src/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +42 -55
  579. package/src/resources/extensions/gsd/tests/quick-auto-guard.test.ts +100 -0
  580. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +45 -73
  581. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +325 -0
  582. package/src/resources/extensions/gsd/tests/reassess-prompt.test.ts +28 -38
  583. package/src/resources/extensions/gsd/tests/replan-handler.test.ts +410 -0
  584. package/src/resources/extensions/gsd/tests/replan-slice.test.ts +73 -80
  585. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -74
  586. package/src/resources/extensions/gsd/tests/requirements.test.ts +70 -75
  587. package/src/resources/extensions/gsd/tests/retry-state-reset.test.ts +44 -66
  588. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +114 -181
  589. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +1 -1
  590. package/src/resources/extensions/gsd/tests/rogue-file-detection.test.ts +296 -0
  591. package/src/resources/extensions/gsd/tests/rule-registry.test.ts +63 -65
  592. package/src/resources/extensions/gsd/tests/run-uat.test.ts +66 -128
  593. package/src/resources/extensions/gsd/tests/schema-v9-sequence.test.ts +176 -0
  594. package/src/resources/extensions/gsd/tests/session-lock-multipath.test.ts +18 -25
  595. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +37 -44
  596. package/src/resources/extensions/gsd/tests/shared-wal.test.ts +209 -0
  597. package/src/resources/extensions/gsd/tests/sqlite-unavailable-gate.test.ts +63 -0
  598. package/src/resources/extensions/gsd/tests/stalled-tool-recovery.test.ts +6 -8
  599. package/src/resources/extensions/gsd/tests/symlink-numbered-variants.test.ts +22 -28
  600. package/src/resources/extensions/gsd/tests/token-cost-display.test.ts +118 -0
  601. package/src/resources/extensions/gsd/tests/token-savings.test.ts +54 -56
  602. package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +23 -25
  603. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +19 -13
  604. package/src/resources/extensions/gsd/tests/undo.test.ts +321 -1
  605. package/src/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +66 -82
  606. package/src/resources/extensions/gsd/tests/unit-runtime.test.ts +46 -47
  607. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +1 -1
  608. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -142
  609. package/src/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +20 -22
  610. package/src/resources/extensions/gsd/tests/visualizer-data.test.ts +84 -86
  611. package/src/resources/extensions/gsd/tests/visualizer-overlay.test.ts +41 -43
  612. package/src/resources/extensions/gsd/tests/visualizer-views.test.ts +94 -96
  613. package/src/resources/extensions/gsd/tests/windows-path-normalization.test.ts +11 -13
  614. package/src/resources/extensions/gsd/tests/worker-registry.test.ts +27 -29
  615. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +50 -52
  616. package/src/resources/extensions/gsd/tests/worktree-bugfix.test.ts +10 -13
  617. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +14 -18
  618. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +38 -39
  619. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +17 -21
  620. package/src/resources/extensions/gsd/tests/worktree-health-dispatch.test.ts +12 -5
  621. package/src/resources/extensions/gsd/tests/worktree-health.test.ts +25 -30
  622. package/src/resources/extensions/gsd/tests/worktree-integration.test.ts +30 -37
  623. package/src/resources/extensions/gsd/tests/worktree-symlink-removal.test.ts +15 -22
  624. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +59 -66
  625. package/src/resources/extensions/gsd/tests/worktree.test.ts +44 -50
  626. package/src/resources/extensions/gsd/tools/complete-milestone.ts +176 -0
  627. package/src/resources/extensions/gsd/tools/complete-slice.ts +300 -0
  628. package/src/resources/extensions/gsd/tools/complete-task.ts +245 -0
  629. package/src/resources/extensions/gsd/tools/plan-milestone.ts +249 -0
  630. package/src/resources/extensions/gsd/tools/plan-slice.ts +194 -0
  631. package/src/resources/extensions/gsd/tools/plan-task.ts +116 -0
  632. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +203 -0
  633. package/src/resources/extensions/gsd/tools/replan-slice.ts +192 -0
  634. package/src/resources/extensions/gsd/triage-resolution.ts +20 -1
  635. package/src/resources/extensions/gsd/types.ts +50 -0
  636. package/src/resources/extensions/gsd/undo.ts +247 -3
  637. package/src/resources/extensions/gsd/visualizer-data.ts +54 -17
  638. package/src/resources/extensions/gsd/workspace-index.ts +64 -46
  639. package/dist/resources/extensions/gsd/auto-observability.js +0 -56
  640. package/dist/resources/extensions/gsd/observability-validator.js +0 -422
  641. package/dist/resources/extensions/gsd/roadmap-mutations.js +0 -110
  642. package/dist/web/standalone/.next/static/VvclDCW6TAWjEyLU-EYL1/_buildManifest.js +0 -1
  643. package/dist/web/standalone/.next/static/chunks/app/_not-found/page-e07acdb7dd069836.js +0 -1
  644. package/dist/web/standalone/.next/static/chunks/app/api/bridge-terminal/stream/route-d07a2c023f1aef1e.js +0 -1
  645. package/dist/web/standalone/.next/static/chunks/app/api/browse-directories/route-d07a2c023f1aef1e.js +0 -1
  646. package/dist/web/standalone/.next/static/chunks/app/api/captures/route-d07a2c023f1aef1e.js +0 -1
  647. package/dist/web/standalone/.next/static/chunks/app/api/cleanup/route-d07a2c023f1aef1e.js +0 -1
  648. package/dist/web/standalone/.next/static/chunks/app/api/dev-mode/route-d07a2c023f1aef1e.js +0 -1
  649. package/dist/web/standalone/.next/static/chunks/app/api/doctor/route-d07a2c023f1aef1e.js +0 -1
  650. package/dist/web/standalone/.next/static/chunks/app/api/export-data/route-d07a2c023f1aef1e.js +0 -1
  651. package/dist/web/standalone/.next/static/chunks/app/api/files/route-d07a2c023f1aef1e.js +0 -1
  652. package/dist/web/standalone/.next/static/chunks/app/api/forensics/route-d07a2c023f1aef1e.js +0 -1
  653. package/dist/web/standalone/.next/static/chunks/app/api/git/route-d07a2c023f1aef1e.js +0 -1
  654. package/dist/web/standalone/.next/static/chunks/app/api/history/route-d07a2c023f1aef1e.js +0 -1
  655. package/dist/web/standalone/.next/static/chunks/app/api/hooks/route-d07a2c023f1aef1e.js +0 -1
  656. package/dist/web/standalone/.next/static/chunks/app/api/inspect/route-d07a2c023f1aef1e.js +0 -1
  657. package/dist/web/standalone/.next/static/chunks/app/api/knowledge/route-d07a2c023f1aef1e.js +0 -1
  658. package/dist/web/standalone/.next/static/chunks/app/api/live-state/route-d07a2c023f1aef1e.js +0 -1
  659. package/dist/web/standalone/.next/static/chunks/app/api/onboarding/route-d07a2c023f1aef1e.js +0 -1
  660. package/dist/web/standalone/.next/static/chunks/app/api/preferences/route-d07a2c023f1aef1e.js +0 -1
  661. package/dist/web/standalone/.next/static/chunks/app/api/projects/route-d07a2c023f1aef1e.js +0 -1
  662. package/dist/web/standalone/.next/static/chunks/app/api/recovery/route-d07a2c023f1aef1e.js +0 -1
  663. package/dist/web/standalone/.next/static/chunks/app/api/remote-questions/route-d07a2c023f1aef1e.js +0 -1
  664. package/dist/web/standalone/.next/static/chunks/app/api/session/browser/route-d07a2c023f1aef1e.js +0 -1
  665. package/dist/web/standalone/.next/static/chunks/app/api/session/command/route-d07a2c023f1aef1e.js +0 -1
  666. package/dist/web/standalone/.next/static/chunks/app/api/session/events/route-d07a2c023f1aef1e.js +0 -1
  667. package/dist/web/standalone/.next/static/chunks/app/api/session/manage/route-d07a2c023f1aef1e.js +0 -1
  668. package/dist/web/standalone/.next/static/chunks/app/api/settings-data/route-d07a2c023f1aef1e.js +0 -1
  669. package/dist/web/standalone/.next/static/chunks/app/api/shutdown/route-d07a2c023f1aef1e.js +0 -1
  670. package/dist/web/standalone/.next/static/chunks/app/api/skill-health/route-d07a2c023f1aef1e.js +0 -1
  671. package/dist/web/standalone/.next/static/chunks/app/api/steer/route-d07a2c023f1aef1e.js +0 -1
  672. package/dist/web/standalone/.next/static/chunks/app/api/terminal/input/route-d07a2c023f1aef1e.js +0 -1
  673. package/dist/web/standalone/.next/static/chunks/app/api/terminal/resize/route-d07a2c023f1aef1e.js +0 -1
  674. package/dist/web/standalone/.next/static/chunks/app/api/terminal/sessions/route-d07a2c023f1aef1e.js +0 -1
  675. package/dist/web/standalone/.next/static/chunks/app/api/terminal/stream/route-d07a2c023f1aef1e.js +0 -1
  676. package/dist/web/standalone/.next/static/chunks/app/api/terminal/upload/route-d07a2c023f1aef1e.js +0 -1
  677. package/dist/web/standalone/.next/static/chunks/app/api/undo/route-d07a2c023f1aef1e.js +0 -1
  678. package/dist/web/standalone/.next/static/chunks/app/api/update/route-d07a2c023f1aef1e.js +0 -1
  679. package/dist/web/standalone/.next/static/chunks/app/api/visualizer/route-d07a2c023f1aef1e.js +0 -1
  680. package/dist/web/standalone/.next/static/chunks/app/layout-745c6ed5fea5fb06.js +0 -1
  681. package/dist/web/standalone/.next/static/chunks/app/page-801b53eff6e83579.js +0 -1
  682. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/app-error-d07a2c023f1aef1e.js +0 -1
  683. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/forbidden-d07a2c023f1aef1e.js +0 -1
  684. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-e6255954dccfcf0a.js +0 -1
  685. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/not-found-d07a2c023f1aef1e.js +0 -1
  686. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/unauthorized-d07a2c023f1aef1e.js +0 -1
  687. package/dist/web/standalone/.next/static/css/123c0bb039697968.css +0 -1
  688. package/src/resources/extensions/gsd/auto-observability.ts +0 -74
  689. package/src/resources/extensions/gsd/observability-validator.ts +0 -456
  690. package/src/resources/extensions/gsd/roadmap-mutations.ts +0 -134
  691. package/src/resources/extensions/gsd/tests/doctor-task-done-missing-summary-slice-loop.test.ts +0 -174
  692. package/src/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -474
  693. /package/dist/web/standalone/.next/static/{VvclDCW6TAWjEyLU-EYL1 → alS4hoANx0TK4UVZY27da}/_ssgManifest.js +0 -0
@@ -6,6 +6,7 @@ import { ensureDbOpen } from "./dynamic-tools.js";
6
6
  * Register an alias tool that shares the same execute function as its canonical counterpart.
7
7
  * The alias description and promptGuidelines direct the LLM to prefer the canonical name.
8
8
  */
9
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but typing it fully requires generics
9
10
  function registerAlias(pi, toolDef, aliasName, canonicalName) {
10
11
  pi.registerTool({
11
12
  ...toolDef,
@@ -272,4 +273,614 @@ export function registerDbTools(pi) {
272
273
  };
273
274
  pi.registerTool(milestoneGenerateIdTool);
274
275
  registerAlias(pi, milestoneGenerateIdTool, "gsd_generate_milestone_id", "gsd_milestone_generate_id");
276
+ // ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
277
+ const planMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
278
+ const dbAvailable = await ensureDbOpen();
279
+ if (!dbAvailable) {
280
+ return {
281
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot plan milestone." }],
282
+ details: { operation: "plan_milestone", error: "db_unavailable" },
283
+ };
284
+ }
285
+ try {
286
+ const { handlePlanMilestone } = await import("../tools/plan-milestone.js");
287
+ const result = await handlePlanMilestone(params, process.cwd());
288
+ if ("error" in result) {
289
+ return {
290
+ content: [{ type: "text", text: `Error planning milestone: ${result.error}` }],
291
+ details: { operation: "plan_milestone", error: result.error },
292
+ };
293
+ }
294
+ return {
295
+ content: [{ type: "text", text: `Planned milestone ${result.milestoneId}` }],
296
+ details: {
297
+ operation: "plan_milestone",
298
+ milestoneId: result.milestoneId,
299
+ roadmapPath: result.roadmapPath,
300
+ },
301
+ };
302
+ }
303
+ catch (err) {
304
+ const msg = err instanceof Error ? err.message : String(err);
305
+ process.stderr.write(`gsd-db: plan_milestone tool failed: ${msg}\n`);
306
+ return {
307
+ content: [{ type: "text", text: `Error planning milestone: ${msg}` }],
308
+ details: { operation: "plan_milestone", error: msg },
309
+ };
310
+ }
311
+ };
312
+ const planMilestoneTool = {
313
+ name: "gsd_plan_milestone",
314
+ label: "Plan Milestone",
315
+ description: "Write milestone planning state to the GSD database, render ROADMAP.md from DB, and clear caches after a successful render.",
316
+ promptSnippet: "Plan a milestone via DB write + roadmap render + cache invalidation",
317
+ promptGuidelines: [
318
+ "Use gsd_plan_milestone for milestone planning instead of writing ROADMAP.md directly.",
319
+ "Keep parameters flat and provide the full milestone planning payload, including slices.",
320
+ "The tool validates input, writes milestone and slice planning data transactionally, renders ROADMAP.md from DB, and clears both state and parse caches after success.",
321
+ "Use the canonical name gsd_plan_milestone; gsd_milestone_plan is only an alias.",
322
+ ],
323
+ parameters: Type.Object({
324
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
325
+ title: Type.String({ description: "Milestone title" }),
326
+ status: Type.Optional(Type.String({ description: "Milestone status (defaults to active)" })),
327
+ dependsOn: Type.Optional(Type.Array(Type.String(), { description: "Milestone dependencies" })),
328
+ vision: Type.String({ description: "Milestone vision" }),
329
+ successCriteria: Type.Array(Type.String(), { description: "Top-level success criteria bullets" }),
330
+ keyRisks: Type.Array(Type.Object({
331
+ risk: Type.String({ description: "Risk statement" }),
332
+ whyItMatters: Type.String({ description: "Why the risk matters" }),
333
+ }), { description: "Structured risk entries" }),
334
+ proofStrategy: Type.Array(Type.Object({
335
+ riskOrUnknown: Type.String({ description: "Risk or unknown to retire" }),
336
+ retireIn: Type.String({ description: "Where it will be retired" }),
337
+ whatWillBeProven: Type.String({ description: "What proof will be produced" }),
338
+ }), { description: "Structured proof strategy entries" }),
339
+ verificationContract: Type.String({ description: "Verification contract text" }),
340
+ verificationIntegration: Type.String({ description: "Integration verification text" }),
341
+ verificationOperational: Type.String({ description: "Operational verification text" }),
342
+ verificationUat: Type.String({ description: "UAT verification text" }),
343
+ definitionOfDone: Type.Array(Type.String(), { description: "Definition of done bullets" }),
344
+ requirementCoverage: Type.String({ description: "Requirement coverage text" }),
345
+ boundaryMapMarkdown: Type.String({ description: "Boundary map markdown block" }),
346
+ slices: Type.Array(Type.Object({
347
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
348
+ title: Type.String({ description: "Slice title" }),
349
+ risk: Type.String({ description: "Slice risk" }),
350
+ depends: Type.Array(Type.String(), { description: "Slice dependency IDs" }),
351
+ demo: Type.String({ description: "Roadmap demo text / After this" }),
352
+ goal: Type.String({ description: "Slice goal" }),
353
+ successCriteria: Type.String({ description: "Slice success criteria block" }),
354
+ proofLevel: Type.String({ description: "Slice proof level" }),
355
+ integrationClosure: Type.String({ description: "Slice integration closure" }),
356
+ observabilityImpact: Type.String({ description: "Slice observability impact" }),
357
+ }), { description: "Planned slices for the milestone" }),
358
+ }),
359
+ execute: planMilestoneExecute,
360
+ };
361
+ pi.registerTool(planMilestoneTool);
362
+ registerAlias(pi, planMilestoneTool, "gsd_milestone_plan", "gsd_plan_milestone");
363
+ // ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
364
+ const planSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
365
+ const dbAvailable = await ensureDbOpen();
366
+ if (!dbAvailable) {
367
+ return {
368
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot plan slice." }],
369
+ details: { operation: "plan_slice", error: "db_unavailable" },
370
+ };
371
+ }
372
+ try {
373
+ const { handlePlanSlice } = await import("../tools/plan-slice.js");
374
+ const result = await handlePlanSlice(params, process.cwd());
375
+ if ("error" in result) {
376
+ return {
377
+ content: [{ type: "text", text: `Error planning slice: ${result.error}` }],
378
+ details: { operation: "plan_slice", error: result.error },
379
+ };
380
+ }
381
+ return {
382
+ content: [{ type: "text", text: `Planned slice ${result.sliceId} (${result.milestoneId})` }],
383
+ details: {
384
+ operation: "plan_slice",
385
+ milestoneId: result.milestoneId,
386
+ sliceId: result.sliceId,
387
+ planPath: result.planPath,
388
+ taskPlanPaths: result.taskPlanPaths,
389
+ },
390
+ };
391
+ }
392
+ catch (err) {
393
+ const msg = err instanceof Error ? err.message : String(err);
394
+ process.stderr.write(`gsd-db: plan_slice tool failed: ${msg}\n`);
395
+ return {
396
+ content: [{ type: "text", text: `Error planning slice: ${msg}` }],
397
+ details: { operation: "plan_slice", error: msg },
398
+ };
399
+ }
400
+ };
401
+ const planSliceTool = {
402
+ name: "gsd_plan_slice",
403
+ label: "Plan Slice",
404
+ description: "Write slice planning state to the GSD database, render S##-PLAN.md plus task PLAN artifacts from DB, and clear caches after a successful render.",
405
+ promptSnippet: "Plan a slice via DB write + PLAN render + cache invalidation",
406
+ promptGuidelines: [
407
+ "Use gsd_plan_slice for slice planning instead of writing S##-PLAN.md or task PLAN files directly.",
408
+ "Keep parameters flat and provide the full slice planning payload, including tasks.",
409
+ "The tool validates input, requires an existing parent slice, writes slice/task planning data, renders PLAN.md and task plan files from DB, and clears both state and parse caches after success.",
410
+ "Use the canonical name gsd_plan_slice; gsd_slice_plan is only an alias.",
411
+ ],
412
+ parameters: Type.Object({
413
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
414
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
415
+ goal: Type.String({ description: "Slice goal" }),
416
+ successCriteria: Type.String({ description: "Slice success criteria block" }),
417
+ proofLevel: Type.String({ description: "Slice proof level" }),
418
+ integrationClosure: Type.String({ description: "Slice integration closure" }),
419
+ observabilityImpact: Type.String({ description: "Slice observability impact" }),
420
+ tasks: Type.Array(Type.Object({
421
+ taskId: Type.String({ description: "Task ID (e.g. T01)" }),
422
+ title: Type.String({ description: "Task title" }),
423
+ description: Type.String({ description: "Task description / steps block" }),
424
+ estimate: Type.String({ description: "Task estimate string" }),
425
+ files: Type.Array(Type.String(), { description: "Files likely touched" }),
426
+ verify: Type.String({ description: "Verification command or block" }),
427
+ inputs: Type.Array(Type.String(), { description: "Input files or references" }),
428
+ expectedOutput: Type.Array(Type.String(), { description: "Expected output files or artifacts" }),
429
+ observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
430
+ }), { description: "Planned tasks for the slice" }),
431
+ }),
432
+ execute: planSliceExecute,
433
+ };
434
+ pi.registerTool(planSliceTool);
435
+ registerAlias(pi, planSliceTool, "gsd_slice_plan", "gsd_plan_slice");
436
+ // ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
437
+ const planTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
438
+ const dbAvailable = await ensureDbOpen();
439
+ if (!dbAvailable) {
440
+ return {
441
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot plan task." }],
442
+ details: { operation: "plan_task", error: "db_unavailable" },
443
+ };
444
+ }
445
+ try {
446
+ const { handlePlanTask } = await import("../tools/plan-task.js");
447
+ const result = await handlePlanTask(params, process.cwd());
448
+ if ("error" in result) {
449
+ return {
450
+ content: [{ type: "text", text: `Error planning task: ${result.error}` }],
451
+ details: { operation: "plan_task", error: result.error },
452
+ };
453
+ }
454
+ return {
455
+ content: [{ type: "text", text: `Planned task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],
456
+ details: {
457
+ operation: "plan_task",
458
+ milestoneId: result.milestoneId,
459
+ sliceId: result.sliceId,
460
+ taskId: result.taskId,
461
+ taskPlanPath: result.taskPlanPath,
462
+ },
463
+ };
464
+ }
465
+ catch (err) {
466
+ const msg = err instanceof Error ? err.message : String(err);
467
+ process.stderr.write(`gsd-db: plan_task tool failed: ${msg}\n`);
468
+ return {
469
+ content: [{ type: "text", text: `Error planning task: ${msg}` }],
470
+ details: { operation: "plan_task", error: msg },
471
+ };
472
+ }
473
+ };
474
+ const planTaskTool = {
475
+ name: "gsd_plan_task",
476
+ label: "Plan Task",
477
+ description: "Write task planning state to the GSD database, render tasks/T##-PLAN.md from DB, and clear caches after a successful render.",
478
+ promptSnippet: "Plan a task via DB write + task PLAN render + cache invalidation",
479
+ promptGuidelines: [
480
+ "Use gsd_plan_task for task planning instead of writing tasks/T##-PLAN.md directly.",
481
+ "Keep parameters flat and provide the full task planning payload.",
482
+ "The tool validates input, requires an existing parent slice, writes task planning data, renders the task PLAN file from DB, and clears both state and parse caches after success.",
483
+ "Use the canonical name gsd_plan_task; gsd_task_plan is only an alias.",
484
+ ],
485
+ parameters: Type.Object({
486
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
487
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
488
+ taskId: Type.String({ description: "Task ID (e.g. T01)" }),
489
+ title: Type.String({ description: "Task title" }),
490
+ description: Type.String({ description: "Task description / steps block" }),
491
+ estimate: Type.String({ description: "Task estimate string" }),
492
+ files: Type.Array(Type.String(), { description: "Files likely touched" }),
493
+ verify: Type.String({ description: "Verification command or block" }),
494
+ inputs: Type.Array(Type.String(), { description: "Input files or references" }),
495
+ expectedOutput: Type.Array(Type.String(), { description: "Expected output files or artifacts" }),
496
+ observabilityImpact: Type.Optional(Type.String({ description: "Task observability impact" })),
497
+ }),
498
+ execute: planTaskExecute,
499
+ };
500
+ pi.registerTool(planTaskTool);
501
+ registerAlias(pi, planTaskTool, "gsd_task_plan", "gsd_plan_task");
502
+ // ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
503
+ const taskCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
504
+ const dbAvailable = await ensureDbOpen();
505
+ if (!dbAvailable) {
506
+ return {
507
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot complete task." }],
508
+ details: { operation: "complete_task", error: "db_unavailable" },
509
+ };
510
+ }
511
+ try {
512
+ const { handleCompleteTask } = await import("../tools/complete-task.js");
513
+ const result = await handleCompleteTask(params, process.cwd());
514
+ if ("error" in result) {
515
+ return {
516
+ content: [{ type: "text", text: `Error completing task: ${result.error}` }],
517
+ details: { operation: "complete_task", error: result.error },
518
+ };
519
+ }
520
+ return {
521
+ content: [{ type: "text", text: `Completed task ${result.taskId} (${result.sliceId}/${result.milestoneId})` }],
522
+ details: {
523
+ operation: "complete_task",
524
+ taskId: result.taskId,
525
+ sliceId: result.sliceId,
526
+ milestoneId: result.milestoneId,
527
+ summaryPath: result.summaryPath,
528
+ },
529
+ };
530
+ }
531
+ catch (err) {
532
+ const msg = err instanceof Error ? err.message : String(err);
533
+ process.stderr.write(`gsd-db: complete_task tool failed: ${msg}\n`);
534
+ return {
535
+ content: [{ type: "text", text: `Error completing task: ${msg}` }],
536
+ details: { operation: "complete_task", error: msg },
537
+ };
538
+ }
539
+ };
540
+ const taskCompleteTool = {
541
+ name: "gsd_task_complete",
542
+ label: "Complete Task",
543
+ description: "Record a completed task to the GSD database, render a SUMMARY.md to disk, and toggle the plan checkbox — all in one atomic operation. " +
544
+ "Writes the task row inside a transaction, then performs filesystem writes outside the transaction.",
545
+ promptSnippet: "Complete a GSD task (DB write + summary render + checkbox toggle)",
546
+ promptGuidelines: [
547
+ "Use gsd_task_complete (or gsd_complete_task) when a task is finished and needs to be recorded.",
548
+ "All string fields are required. verificationEvidence is an array of objects with command, exitCode, verdict, durationMs.",
549
+ "The tool validates required fields and returns an error message if any are missing.",
550
+ "On success, returns the summaryPath where the SUMMARY.md was written.",
551
+ "Idempotent — calling with the same params twice will upsert (INSERT OR REPLACE) without error.",
552
+ ],
553
+ parameters: Type.Object({
554
+ taskId: Type.String({ description: "Task ID (e.g. T01)" }),
555
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
556
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
557
+ oneLiner: Type.String({ description: "One-line summary of what was accomplished" }),
558
+ narrative: Type.String({ description: "Detailed narrative of what happened during the task" }),
559
+ verification: Type.String({ description: "What was verified and how — commands run, tests passed, behavior confirmed" }),
560
+ deviations: Type.String({ description: "Deviations from the task plan, or 'None.'" }),
561
+ knownIssues: Type.String({ description: "Known issues discovered but not fixed, or 'None.'" }),
562
+ keyFiles: Type.Array(Type.String(), { description: "List of key files created or modified" }),
563
+ keyDecisions: Type.Array(Type.String(), { description: "List of key decisions made during this task" }),
564
+ blockerDiscovered: Type.Boolean({ description: "Whether a plan-invalidating blocker was discovered" }),
565
+ verificationEvidence: Type.Array(Type.Object({
566
+ command: Type.String({ description: "Verification command that was run" }),
567
+ exitCode: Type.Number({ description: "Exit code of the command" }),
568
+ verdict: Type.String({ description: "Pass/fail verdict (e.g. '✅ pass', '❌ fail')" }),
569
+ durationMs: Type.Number({ description: "Duration of the command in milliseconds" }),
570
+ }), { description: "Array of verification evidence entries" }),
571
+ }),
572
+ execute: taskCompleteExecute,
573
+ };
574
+ pi.registerTool(taskCompleteTool);
575
+ registerAlias(pi, taskCompleteTool, "gsd_complete_task", "gsd_task_complete");
576
+ // ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
577
+ const sliceCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
578
+ const dbAvailable = await ensureDbOpen();
579
+ if (!dbAvailable) {
580
+ return {
581
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot complete slice." }],
582
+ details: { operation: "complete_slice", error: "db_unavailable" },
583
+ };
584
+ }
585
+ try {
586
+ const { handleCompleteSlice } = await import("../tools/complete-slice.js");
587
+ const result = await handleCompleteSlice(params, process.cwd());
588
+ if ("error" in result) {
589
+ return {
590
+ content: [{ type: "text", text: `Error completing slice: ${result.error}` }],
591
+ details: { operation: "complete_slice", error: result.error },
592
+ };
593
+ }
594
+ return {
595
+ content: [{ type: "text", text: `Completed slice ${result.sliceId} (${result.milestoneId})` }],
596
+ details: {
597
+ operation: "complete_slice",
598
+ sliceId: result.sliceId,
599
+ milestoneId: result.milestoneId,
600
+ summaryPath: result.summaryPath,
601
+ uatPath: result.uatPath,
602
+ },
603
+ };
604
+ }
605
+ catch (err) {
606
+ const msg = err instanceof Error ? err.message : String(err);
607
+ process.stderr.write(`gsd-db: complete_slice tool failed: ${msg}\n`);
608
+ return {
609
+ content: [{ type: "text", text: `Error completing slice: ${msg}` }],
610
+ details: { operation: "complete_slice", error: msg },
611
+ };
612
+ }
613
+ };
614
+ const sliceCompleteTool = {
615
+ name: "gsd_slice_complete",
616
+ label: "Complete Slice",
617
+ description: "Record a completed slice to the GSD database, render SUMMARY.md + UAT.md to disk, and toggle the roadmap checkbox — all in one atomic operation. " +
618
+ "Validates all tasks are complete before proceeding. Writes the slice row inside a transaction, then performs filesystem writes outside the transaction.",
619
+ promptSnippet: "Complete a GSD slice (DB write + summary/UAT render + roadmap checkbox toggle)",
620
+ promptGuidelines: [
621
+ "Use gsd_slice_complete (or gsd_complete_slice) when all tasks in a slice are finished and the slice needs to be recorded.",
622
+ "All tasks in the slice must have status 'complete' — the handler validates this before proceeding.",
623
+ "On success, returns summaryPath and uatPath where the files were written.",
624
+ "Idempotent — calling with the same params twice will not crash.",
625
+ ],
626
+ parameters: Type.Object({
627
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
628
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
629
+ sliceTitle: Type.String({ description: "Title of the slice" }),
630
+ oneLiner: Type.String({ description: "One-line summary of what the slice accomplished" }),
631
+ narrative: Type.String({ description: "Detailed narrative of what happened across all tasks" }),
632
+ verification: Type.String({ description: "What was verified across all tasks" }),
633
+ deviations: Type.String({ description: "Deviations from the slice plan, or 'None.'" }),
634
+ knownLimitations: Type.String({ description: "Known limitations or gaps, or 'None.'" }),
635
+ followUps: Type.String({ description: "Follow-up work discovered during execution, or 'None.'" }),
636
+ keyFiles: Type.Array(Type.String(), { description: "Key files created or modified" }),
637
+ keyDecisions: Type.Array(Type.String(), { description: "Key decisions made during this slice" }),
638
+ patternsEstablished: Type.Array(Type.String(), { description: "Patterns established by this slice" }),
639
+ observabilitySurfaces: Type.Array(Type.String(), { description: "Observability surfaces added" }),
640
+ provides: Type.Array(Type.String(), { description: "What this slice provides to downstream slices" }),
641
+ requirementsSurfaced: Type.Array(Type.String(), { description: "New requirements surfaced" }),
642
+ drillDownPaths: Type.Array(Type.String(), { description: "Paths to task summaries for drill-down" }),
643
+ affects: Type.Array(Type.String(), { description: "Downstream slices affected" }),
644
+ requirementsAdvanced: Type.Array(Type.Object({
645
+ id: Type.String({ description: "Requirement ID" }),
646
+ how: Type.String({ description: "How it was advanced" }),
647
+ }), { description: "Requirements advanced by this slice" }),
648
+ requirementsValidated: Type.Array(Type.Object({
649
+ id: Type.String({ description: "Requirement ID" }),
650
+ proof: Type.String({ description: "What proof validates it" }),
651
+ }), { description: "Requirements validated by this slice" }),
652
+ requirementsInvalidated: Type.Array(Type.Object({
653
+ id: Type.String({ description: "Requirement ID" }),
654
+ what: Type.String({ description: "What changed" }),
655
+ }), { description: "Requirements invalidated or re-scoped" }),
656
+ filesModified: Type.Array(Type.Object({
657
+ path: Type.String({ description: "File path" }),
658
+ description: Type.String({ description: "What changed" }),
659
+ }), { description: "Files modified with descriptions" }),
660
+ requires: Type.Array(Type.Object({
661
+ slice: Type.String({ description: "Dependency slice ID" }),
662
+ provides: Type.String({ description: "What was consumed from it" }),
663
+ }), { description: "Upstream slice dependencies consumed" }),
664
+ uatContent: Type.String({ description: "UAT test content (markdown body)" }),
665
+ }),
666
+ execute: sliceCompleteExecute,
667
+ };
668
+ pi.registerTool(sliceCompleteTool);
669
+ registerAlias(pi, sliceCompleteTool, "gsd_complete_slice", "gsd_slice_complete");
670
+ // ─── gsd_complete_milestone ────────────────────────────────────────────
671
+ const milestoneCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
672
+ const dbAvailable = await ensureDbOpen();
673
+ if (!dbAvailable) {
674
+ return {
675
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot complete milestone." }],
676
+ details: { operation: "complete_milestone", error: "db_unavailable" },
677
+ };
678
+ }
679
+ try {
680
+ const { handleCompleteMilestone } = await import("../tools/complete-milestone.js");
681
+ const result = await handleCompleteMilestone(params, process.cwd());
682
+ if ("error" in result) {
683
+ return {
684
+ content: [{ type: "text", text: `Error completing milestone: ${result.error}` }],
685
+ details: { operation: "complete_milestone", error: result.error },
686
+ };
687
+ }
688
+ return {
689
+ content: [{ type: "text", text: `Completed milestone ${result.milestoneId}. Summary written to ${result.summaryPath}` }],
690
+ details: {
691
+ operation: "complete_milestone",
692
+ milestoneId: result.milestoneId,
693
+ summaryPath: result.summaryPath,
694
+ },
695
+ };
696
+ }
697
+ catch (err) {
698
+ const msg = err instanceof Error ? err.message : String(err);
699
+ process.stderr.write(`gsd-db: complete_milestone tool failed: ${msg}\n`);
700
+ return {
701
+ content: [{ type: "text", text: `Error completing milestone: ${msg}` }],
702
+ details: { operation: "complete_milestone", error: msg },
703
+ };
704
+ }
705
+ };
706
+ const milestoneCompleteTool = {
707
+ name: "gsd_complete_milestone",
708
+ label: "Complete Milestone",
709
+ description: "Record a completed milestone to the GSD database, render MILESTONE-SUMMARY.md to disk — all in one atomic operation. " +
710
+ "Validates all slices are complete before proceeding.",
711
+ promptSnippet: "Complete a GSD milestone (DB write + summary render)",
712
+ promptGuidelines: [
713
+ "Use gsd_complete_milestone when all slices in a milestone are finished and the milestone needs to be recorded.",
714
+ "All slices in the milestone must have status 'complete' — the handler validates this before proceeding.",
715
+ "On success, returns summaryPath where the MILESTONE-SUMMARY.md was written.",
716
+ ],
717
+ parameters: Type.Object({
718
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
719
+ title: Type.String({ description: "Milestone title" }),
720
+ oneLiner: Type.String({ description: "One-sentence summary of what the milestone achieved" }),
721
+ narrative: Type.String({ description: "Detailed narrative of what happened during the milestone" }),
722
+ successCriteriaResults: Type.String({ description: "Markdown detailing how each success criterion was met or not met" }),
723
+ definitionOfDoneResults: Type.String({ description: "Markdown detailing how each definition-of-done item was met" }),
724
+ requirementOutcomes: Type.String({ description: "Markdown detailing requirement status transitions with evidence" }),
725
+ keyDecisions: Type.Array(Type.String(), { description: "Key architectural/pattern decisions made during the milestone" }),
726
+ keyFiles: Type.Array(Type.String(), { description: "Key files created or modified during the milestone" }),
727
+ lessonsLearned: Type.Array(Type.String(), { description: "Lessons learned during the milestone" }),
728
+ followUps: Type.Optional(Type.String({ description: "Follow-up items for future milestones" })),
729
+ deviations: Type.Optional(Type.String({ description: "Deviations from the original plan" })),
730
+ }),
731
+ execute: milestoneCompleteExecute,
732
+ };
733
+ pi.registerTool(milestoneCompleteTool);
734
+ registerAlias(pi, milestoneCompleteTool, "gsd_milestone_complete", "gsd_complete_milestone");
735
+ // ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
736
+ const replanSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
737
+ const dbAvailable = await ensureDbOpen();
738
+ if (!dbAvailable) {
739
+ return {
740
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot replan slice." }],
741
+ details: { operation: "replan_slice", error: "db_unavailable" },
742
+ };
743
+ }
744
+ try {
745
+ const { handleReplanSlice } = await import("../tools/replan-slice.js");
746
+ const result = await handleReplanSlice(params, process.cwd());
747
+ if ("error" in result) {
748
+ return {
749
+ content: [{ type: "text", text: `Error replanning slice: ${result.error}` }],
750
+ details: { operation: "replan_slice", error: result.error },
751
+ };
752
+ }
753
+ return {
754
+ content: [{ type: "text", text: `Replanned slice ${result.sliceId} (${result.milestoneId})` }],
755
+ details: {
756
+ operation: "replan_slice",
757
+ milestoneId: result.milestoneId,
758
+ sliceId: result.sliceId,
759
+ replanPath: result.replanPath,
760
+ planPath: result.planPath,
761
+ },
762
+ };
763
+ }
764
+ catch (err) {
765
+ const msg = err instanceof Error ? err.message : String(err);
766
+ process.stderr.write(`gsd-db: replan_slice tool failed: ${msg}\n`);
767
+ return {
768
+ content: [{ type: "text", text: `Error replanning slice: ${msg}` }],
769
+ details: { operation: "replan_slice", error: msg },
770
+ };
771
+ }
772
+ };
773
+ const replanSliceTool = {
774
+ name: "gsd_replan_slice",
775
+ label: "Replan Slice",
776
+ description: "Replan a slice after a blocker is discovered. Structurally enforces preservation of completed tasks — " +
777
+ "mutations to completed task IDs are rejected with actionable error payloads. Writes replan history to DB, " +
778
+ "applies task mutations, re-renders PLAN.md, and renders REPLAN.md.",
779
+ promptSnippet: "Replan a GSD slice with structural enforcement of completed tasks",
780
+ promptGuidelines: [
781
+ "Use gsd_replan_slice (canonical) or gsd_slice_replan (alias) when a blocker is discovered and the slice plan needs rewriting.",
782
+ "The tool structurally enforces that completed tasks cannot be updated or removed — violations return specific error payloads naming the blocked task ID.",
783
+ "Parameters: milestoneId, sliceId, blockerTaskId, blockerDescription, whatChanged, updatedTasks (array), removedTaskIds (array).",
784
+ "updatedTasks items: taskId, title, description, estimate, files, verify, inputs, expectedOutput.",
785
+ ],
786
+ parameters: Type.Object({
787
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
788
+ sliceId: Type.String({ description: "Slice ID (e.g. S01)" }),
789
+ blockerTaskId: Type.String({ description: "Task ID that discovered the blocker" }),
790
+ blockerDescription: Type.String({ description: "Description of the blocker" }),
791
+ whatChanged: Type.String({ description: "Summary of what changed in the plan" }),
792
+ updatedTasks: Type.Array(Type.Object({
793
+ taskId: Type.String({ description: "Task ID (e.g. T01)" }),
794
+ title: Type.String({ description: "Task title" }),
795
+ description: Type.String({ description: "Task description / steps block" }),
796
+ estimate: Type.String({ description: "Task estimate string" }),
797
+ files: Type.Array(Type.String(), { description: "Files likely touched" }),
798
+ verify: Type.String({ description: "Verification command or block" }),
799
+ inputs: Type.Array(Type.String(), { description: "Input files or references" }),
800
+ expectedOutput: Type.Array(Type.String(), { description: "Expected output files or artifacts" }),
801
+ }), { description: "Tasks to upsert (update existing or insert new)" }),
802
+ removedTaskIds: Type.Array(Type.String(), { description: "Task IDs to remove from the slice" }),
803
+ }),
804
+ execute: replanSliceExecute,
805
+ };
806
+ pi.registerTool(replanSliceTool);
807
+ registerAlias(pi, replanSliceTool, "gsd_slice_replan", "gsd_replan_slice");
808
+ // ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
809
+ const reassessRoadmapExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
810
+ const dbAvailable = await ensureDbOpen();
811
+ if (!dbAvailable) {
812
+ return {
813
+ content: [{ type: "text", text: "Error: GSD database is not available. Cannot reassess roadmap." }],
814
+ details: { operation: "reassess_roadmap", error: "db_unavailable" },
815
+ };
816
+ }
817
+ try {
818
+ const { handleReassessRoadmap } = await import("../tools/reassess-roadmap.js");
819
+ const result = await handleReassessRoadmap(params, process.cwd());
820
+ if ("error" in result) {
821
+ return {
822
+ content: [{ type: "text", text: `Error reassessing roadmap: ${result.error}` }],
823
+ details: { operation: "reassess_roadmap", error: result.error },
824
+ };
825
+ }
826
+ return {
827
+ content: [{ type: "text", text: `Reassessed roadmap for milestone ${result.milestoneId} after ${result.completedSliceId}` }],
828
+ details: {
829
+ operation: "reassess_roadmap",
830
+ milestoneId: result.milestoneId,
831
+ completedSliceId: result.completedSliceId,
832
+ assessmentPath: result.assessmentPath,
833
+ roadmapPath: result.roadmapPath,
834
+ },
835
+ };
836
+ }
837
+ catch (err) {
838
+ const msg = err instanceof Error ? err.message : String(err);
839
+ process.stderr.write(`gsd-db: reassess_roadmap tool failed: ${msg}\n`);
840
+ return {
841
+ content: [{ type: "text", text: `Error reassessing roadmap: ${msg}` }],
842
+ details: { operation: "reassess_roadmap", error: msg },
843
+ };
844
+ }
845
+ };
846
+ const reassessRoadmapTool = {
847
+ name: "gsd_reassess_roadmap",
848
+ label: "Reassess Roadmap",
849
+ description: "Reassess the milestone roadmap after a slice completes. Structurally enforces preservation of completed slices — " +
850
+ "mutations to completed slice IDs are rejected with actionable error payloads. Writes assessment to DB, " +
851
+ "applies slice mutations, re-renders ROADMAP.md, and renders ASSESSMENT.md.",
852
+ promptSnippet: "Reassess a GSD roadmap with structural enforcement of completed slices",
853
+ promptGuidelines: [
854
+ "Use gsd_reassess_roadmap (canonical) or gsd_roadmap_reassess (alias) after a slice completes to reassess the roadmap.",
855
+ "The tool structurally enforces that completed slices cannot be modified or removed — violations return specific error payloads naming the blocked slice ID.",
856
+ "Parameters: milestoneId, completedSliceId, verdict, assessment, sliceChanges (object with modified, added, removed arrays).",
857
+ "sliceChanges.modified items: sliceId, title, risk (optional), depends (optional), demo (optional).",
858
+ ],
859
+ parameters: Type.Object({
860
+ milestoneId: Type.String({ description: "Milestone ID (e.g. M001)" }),
861
+ completedSliceId: Type.String({ description: "Slice ID that just completed" }),
862
+ verdict: Type.String({ description: "Assessment verdict (e.g. 'roadmap-confirmed', 'roadmap-adjusted')" }),
863
+ assessment: Type.String({ description: "Assessment text explaining the decision" }),
864
+ sliceChanges: Type.Object({
865
+ modified: Type.Array(Type.Object({
866
+ sliceId: Type.String({ description: "Slice ID to modify" }),
867
+ title: Type.String({ description: "Updated slice title" }),
868
+ risk: Type.Optional(Type.String({ description: "Updated risk level" })),
869
+ depends: Type.Optional(Type.Array(Type.String(), { description: "Updated dependencies" })),
870
+ demo: Type.Optional(Type.String({ description: "Updated demo text" })),
871
+ }), { description: "Slices to modify" }),
872
+ added: Type.Array(Type.Object({
873
+ sliceId: Type.String({ description: "New slice ID" }),
874
+ title: Type.String({ description: "New slice title" }),
875
+ risk: Type.Optional(Type.String({ description: "Risk level" })),
876
+ depends: Type.Optional(Type.Array(Type.String(), { description: "Dependencies" })),
877
+ demo: Type.Optional(Type.String({ description: "Demo text" })),
878
+ }), { description: "New slices to add" }),
879
+ removed: Type.Array(Type.String(), { description: "Slice IDs to remove" }),
880
+ }, { description: "Slice changes to apply" }),
881
+ }),
882
+ execute: reassessRoadmapExecute,
883
+ };
884
+ pi.registerTool(reassessRoadmapTool);
885
+ registerAlias(pi, reassessRoadmapTool, "gsd_roadmap_reassess", "gsd_reassess_roadmap");
275
886
  }