@opengsd/gsd-pi 1.2.0-dev.844675c9 → 1.2.0-dev.b1abb545

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 (375) hide show
  1. package/dist/cli-web-branch.d.ts +2 -0
  2. package/dist/cli-web-branch.js +9 -2
  3. package/dist/help-text.js +5 -0
  4. package/dist/resources/.managed-resources-content-hash +1 -1
  5. package/dist/resources/extensions/ask-user-questions.js +78 -23
  6. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +84 -228
  7. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
  8. package/dist/resources/extensions/github-sync/templates.js +3 -3
  9. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  10. package/dist/resources/extensions/gsd/auto/loop.js +74 -56
  11. package/dist/resources/extensions/gsd/auto/orchestrator.js +109 -11
  12. package/dist/resources/extensions/gsd/auto/phases.js +28 -3
  13. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  14. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  15. package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
  16. package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
  17. package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
  18. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -3
  19. package/dist/resources/extensions/gsd/auto-prompts.js +81 -8
  20. package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
  21. package/dist/resources/extensions/gsd/auto-runtime-state.js +14 -0
  22. package/dist/resources/extensions/gsd/auto-start.js +12 -23
  23. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  24. package/dist/resources/extensions/gsd/auto-tool-tracking.js +32 -0
  25. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +4 -29
  26. package/dist/resources/extensions/gsd/auto-verification.js +7 -7
  27. package/dist/resources/extensions/gsd/auto-worktree.js +21 -19
  28. package/dist/resources/extensions/gsd/auto.js +11 -7
  29. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
  30. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +11 -37
  31. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  32. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +100 -138
  33. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +63 -4
  34. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
  35. package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
  36. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  37. package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
  38. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  39. package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
  40. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  41. package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
  42. package/dist/resources/extensions/gsd/db-workspace.js +103 -0
  43. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  44. package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
  45. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  46. package/dist/resources/extensions/gsd/doctor.js +16 -9
  47. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  48. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  49. package/dist/resources/extensions/gsd/gsd-db.js +12 -0
  50. package/dist/resources/extensions/gsd/guided-flow.js +34 -468
  51. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  52. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -1
  53. package/dist/resources/extensions/gsd/mcp-filter.js +2 -1
  54. package/dist/resources/extensions/gsd/mcp-tool-name.js +26 -0
  55. package/dist/resources/extensions/gsd/md-importer.js +4 -3
  56. package/dist/resources/extensions/gsd/migrate/safety.js +2 -2
  57. package/dist/resources/extensions/gsd/migration-auto-check.js +3 -2
  58. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  59. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
  60. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  61. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
  62. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  63. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  64. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  65. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
  66. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  67. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  68. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  69. package/dist/resources/extensions/gsd/preferences.js +147 -29
  70. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  71. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  73. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  75. package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  76. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  77. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  78. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  79. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  80. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  81. package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
  82. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  83. package/dist/resources/extensions/gsd/state.js +13 -5
  84. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  85. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  86. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  87. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  88. package/dist/resources/extensions/gsd/tool-contract.js +52 -8
  89. package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
  90. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  91. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  92. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
  93. package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
  94. package/dist/resources/extensions/gsd/uat-policy.js +16 -10
  95. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  96. package/dist/resources/extensions/gsd/unit-context-composer.js +40 -20
  97. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  98. package/dist/resources/extensions/gsd/unit-tool-contracts.js +2 -1
  99. package/dist/resources/extensions/gsd/user-input-boundary.js +23 -0
  100. package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
  101. package/dist/resources/extensions/gsd/web-app-uat.js +80 -0
  102. package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
  103. package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
  104. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  105. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  106. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  107. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  108. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  109. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  110. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  111. package/dist/update-cmd.js +20 -0
  112. package/dist/web/standalone/.next/BUILD_ID +1 -1
  113. package/dist/web/standalone/.next/app-path-routes-manifest.json +7 -7
  114. package/dist/web/standalone/.next/build-manifest.json +3 -3
  115. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  116. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  117. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  130. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/index.html +1 -1
  134. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app-paths-manifest.json +7 -7
  141. package/dist/web/standalone/.next/server/chunks/8357.js +1 -1
  142. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  145. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  146. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  147. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  148. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  149. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  150. package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
  151. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  152. package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
  153. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
  154. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
  155. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  156. package/dist/web-mode.d.ts +2 -0
  157. package/dist/web-mode.js +20 -8
  158. package/package.json +2 -1
  159. package/packages/cloud-mcp-gateway/package.json +2 -2
  160. package/packages/contracts/package.json +1 -1
  161. package/packages/daemon/package.json +4 -4
  162. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  163. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  164. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  165. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  166. package/packages/gsd-agent-core/package.json +5 -5
  167. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  168. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +106 -40
  169. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  170. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  171. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
  172. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  173. package/packages/gsd-agent-modes/package.json +7 -7
  174. package/packages/mcp-server/dist/server.d.ts +10 -0
  175. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  176. package/packages/mcp-server/dist/server.js +8 -0
  177. package/packages/mcp-server/dist/server.js.map +1 -1
  178. package/packages/mcp-server/dist/workflow-tools.d.ts +41 -0
  179. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  180. package/packages/mcp-server/dist/workflow-tools.js +2 -1
  181. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  182. package/packages/mcp-server/package.json +3 -3
  183. package/packages/native/package.json +1 -1
  184. package/packages/pi-agent-core/package.json +1 -1
  185. package/packages/pi-ai/dist/models.generated.d.ts +8 -93
  186. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  187. package/packages/pi-ai/dist/models.generated.js +35 -120
  188. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  189. package/packages/pi-ai/package.json +1 -1
  190. package/packages/pi-coding-agent/package.json +7 -7
  191. package/packages/pi-tui/dist/components/input.js +1 -1
  192. package/packages/pi-tui/dist/components/input.js.map +1 -1
  193. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  194. package/packages/pi-tui/dist/keys.js +39 -30
  195. package/packages/pi-tui/dist/keys.js.map +1 -1
  196. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  197. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  198. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  199. package/packages/pi-tui/package.json +2 -2
  200. package/packages/rpc-client/package.json +2 -2
  201. package/pkg/package.json +1 -1
  202. package/src/resources/extensions/ask-user-questions.ts +87 -24
  203. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +108 -281
  204. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +240 -0
  205. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
  206. package/src/resources/extensions/github-sync/templates.ts +3 -3
  207. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  208. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  209. package/src/resources/extensions/gsd/auto/contracts.ts +32 -2
  210. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  211. package/src/resources/extensions/gsd/auto/loop.ts +83 -61
  212. package/src/resources/extensions/gsd/auto/orchestrator.ts +125 -12
  213. package/src/resources/extensions/gsd/auto/phases.ts +35 -3
  214. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  215. package/src/resources/extensions/gsd/auto/session.ts +4 -0
  216. package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
  217. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
  218. package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
  219. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -3
  220. package/src/resources/extensions/gsd/auto-prompts.ts +107 -9
  221. package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
  222. package/src/resources/extensions/gsd/auto-runtime-state.ts +26 -0
  223. package/src/resources/extensions/gsd/auto-start.ts +17 -20
  224. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  225. package/src/resources/extensions/gsd/auto-tool-tracking.ts +35 -0
  226. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +9 -30
  227. package/src/resources/extensions/gsd/auto-verification.ts +7 -8
  228. package/src/resources/extensions/gsd/auto-worktree.ts +33 -26
  229. package/src/resources/extensions/gsd/auto.ts +15 -8
  230. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
  231. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +10 -37
  232. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  233. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +116 -151
  234. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +107 -3
  235. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
  236. package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
  237. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  238. package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
  239. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  240. package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
  241. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  242. package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
  243. package/src/resources/extensions/gsd/db-workspace.ts +170 -0
  244. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  245. package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
  246. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  247. package/src/resources/extensions/gsd/doctor.ts +15 -5
  248. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  249. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  250. package/src/resources/extensions/gsd/gsd-db.ts +12 -0
  251. package/src/resources/extensions/gsd/guided-flow.ts +47 -558
  252. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  253. package/src/resources/extensions/gsd/markdown-renderer.ts +2 -1
  254. package/src/resources/extensions/gsd/mcp-filter.ts +2 -1
  255. package/src/resources/extensions/gsd/mcp-tool-name.ts +35 -0
  256. package/src/resources/extensions/gsd/md-importer.ts +3 -3
  257. package/src/resources/extensions/gsd/migrate/safety.ts +2 -2
  258. package/src/resources/extensions/gsd/migration-auto-check.ts +2 -2
  259. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  260. package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
  261. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  262. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
  263. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  264. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  265. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  266. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
  267. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  268. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  269. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  270. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  271. package/src/resources/extensions/gsd/preferences.ts +173 -28
  272. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  273. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
  274. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +3 -1
  275. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  276. package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -0
  277. package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  278. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  279. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  280. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  281. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  282. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  283. package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
  284. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  285. package/src/resources/extensions/gsd/state.ts +15 -5
  286. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  287. package/src/resources/extensions/gsd/templates/project.md +1 -0
  288. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  289. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  290. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  291. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
  292. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +321 -5
  293. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  294. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
  295. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +133 -4
  296. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  297. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  298. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
  299. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  300. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +38 -1
  301. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
  302. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +88 -0
  303. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  304. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  305. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  306. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  307. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  308. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  309. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +58 -0
  310. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  311. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
  312. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  313. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  314. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  315. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  316. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
  317. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  318. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
  319. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  320. package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
  321. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +46 -0
  322. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
  323. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  324. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  325. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +94 -0
  326. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  327. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +25 -1
  328. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
  329. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +101 -1
  330. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  331. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +2 -1
  332. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  333. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  334. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +23 -0
  335. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +47 -0
  336. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +86 -1
  337. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  338. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +150 -0
  339. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +126 -9
  340. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
  341. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +21 -0
  342. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  343. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  344. package/src/resources/extensions/gsd/tests/write-gate.test.ts +79 -0
  345. package/src/resources/extensions/gsd/tool-contract.ts +86 -8
  346. package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
  347. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  348. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  349. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
  350. package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
  351. package/src/resources/extensions/gsd/uat-policy.ts +19 -10
  352. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  353. package/src/resources/extensions/gsd/unit-context-composer.ts +85 -20
  354. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  355. package/src/resources/extensions/gsd/unit-tool-contracts.ts +2 -1
  356. package/src/resources/extensions/gsd/user-input-boundary.ts +18 -0
  357. package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
  358. package/src/resources/extensions/gsd/web-app-uat.ts +101 -0
  359. package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
  360. package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
  361. package/src/resources/extensions/gsd/workflow-tool-surface.ts +73 -0
  362. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  363. package/src/resources/extensions/gsd/worktree-lifecycle.ts +7 -16
  364. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  365. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  366. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  367. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  368. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  369. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  370. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  371. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  372. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  373. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  374. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → 3PtrU9qGPEXwNLWkIyiqk}/_buildManifest.js +0 -0
  375. /package/dist/web/standalone/.next/static/{Qbr81pQ-pbQXP4bq2VXLv → 3PtrU9qGPEXwNLWkIyiqk}/_ssgManifest.js +0 -0
@@ -54,6 +54,7 @@ import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
54
54
  import { createAutoWorktree, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
55
55
  import { pruneQueueOrder } from "./queue-order.js";
56
56
  import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
57
+ import { createMilestoneMergeTransaction } from "./milestone-merge-transaction.js";
57
58
  import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
58
59
  import { reconcileMergeState, verifyExpectedArtifact, } from "./auto-recovery.js";
59
60
  import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
@@ -67,6 +68,7 @@ import { MILESTONE_ID_RE } from "./milestone-ids.js";
67
68
  import { updateProgressWidget as _updateProgressWidget, setCompletionProgressWidget, setAutoOutcomeWidget, setAutoActiveStatus, updateSliceProgressCache, clearSliceProgressCache, unitVerb, } from "./auto-dashboard.js";
68
69
  import { registerSigtermHandler as _registerSigtermHandler, deregisterSigtermHandler as _deregisterSigtermHandler, } from "./auto-supervisor.js";
69
70
  import { isDbAvailable, getMilestone, getMilestoneSlices, } from "./gsd-db.js";
71
+ import { closeWorkflowDatabase } from "./db-workspace.js";
70
72
  import { markLatestActiveForWorkerCanceled } from "./db/unit-dispatches.js";
71
73
  import { writeUnitRuntimeRecord } from "./unit-runtime.js";
72
74
  import { countPendingCaptures } from "./captures.js";
@@ -109,7 +111,7 @@ void initTokenCounter().catch((err) => {
109
111
  logWarning("engine", `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`);
110
112
  });
111
113
  export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
112
- import { autoSession as s } from "./auto-runtime-state.js";
114
+ import { autoSession as s, getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
113
115
  import { gsdHome } from "./gsd-home.js";
114
116
  import { createWorkspace, scopeMilestone } from "./workspace.js";
115
117
  import { registerAutoWorker, markWorkerStopping, } from "./db/auto-workers.js";
@@ -463,6 +465,7 @@ function stopAutoCommandPolling() {
463
465
  }
464
466
  export function getAutoDashboardData() {
465
467
  const ledger = getLedger();
468
+ const runtimeSnapshot = getAutoRuntimeSnapshot();
466
469
  const totals = ledger ? getProjectTotals(ledger.units) : null;
467
470
  const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ?? null;
468
471
  const rtkSavings = sessionId && s.basePath
@@ -495,6 +498,7 @@ export function getAutoDashboardData() {
495
498
  pendingCaptureCount,
496
499
  rtkSavings,
497
500
  rtkEnabled,
501
+ toolSurface: runtimeSnapshot.toolSurface,
498
502
  };
499
503
  }
500
504
  // ─── Public API ───────────────────────────────────────────────────────────────
@@ -1003,12 +1007,13 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1003
1007
  // worktree was active, and whether the current milestone was merged before
1004
1008
  // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
1005
1009
  try {
1006
- const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
1010
+ const { autoExitReasonForTerminalOutcome, emitAutoExit, normalizeAutoExitReason, } = await import("./worktree-telemetry.js");
1007
1011
  // Normalize the free-form reason to a closed set so the telemetry
1008
1012
  // aggregator buckets stably. Raw detail is preserved in the phases.ts
1009
1013
  // notification and the notify'd error string.
1010
1014
  const rawReason = reason ?? "stop";
1011
- const normalizedReason = normalizeAutoExitReason(rawReason);
1015
+ const normalizedReason = autoExitReasonForTerminalOutcome(options.terminalOutcome)
1016
+ ?? normalizeAutoExitReason(rawReason);
1012
1017
  const telemetryBase = s.originalBasePath || s.basePath;
1013
1018
  emitAutoExit(telemetryBase, {
1014
1019
  reason: normalizedReason,
@@ -1184,8 +1189,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1184
1189
  // ── Step 6: DB cleanup ──
1185
1190
  if (isDbAvailable()) {
1186
1191
  try {
1187
- const { closeDatabase } = await import("./gsd-db.js");
1188
- closeDatabase();
1192
+ closeWorkflowDatabase();
1189
1193
  }
1190
1194
  catch (e) {
1191
1195
  debugLog("db-close-failed", {
@@ -1622,7 +1626,7 @@ export function buildWorktreeLifecycleDeps() {
1622
1626
  // C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
1623
1627
  //
1624
1628
  // Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
1625
- // worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
1629
+ // worktreeProjection, mergeMilestoneToMain transaction runner). Down from 18 at slice-7
1626
1630
  // closure.
1627
1631
  return {
1628
1632
  gitServiceFactory: (basePath) => {
@@ -1630,7 +1634,7 @@ export function buildWorktreeLifecycleDeps() {
1630
1634
  return new GitServiceImpl(basePath, gitConfig);
1631
1635
  },
1632
1636
  worktreeProjection: new WorktreeStateProjection(),
1633
- mergeMilestoneToMain,
1637
+ mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
1634
1638
  };
1635
1639
  }
1636
1640
  function buildLifecycle() {
@@ -10,6 +10,7 @@ import { logError } from "../workflow-logger.js";
10
10
  import { getErrorMessage } from "../error-utils.js";
11
11
  import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
12
12
  import { prepareSaveGateResultArguments } from "../tools/save-gate-result-args.js";
13
+ import { aliasesForWorkflowTool } from "../workflow-tool-surface.js";
13
14
  async function loadWorkflowExecutors() {
14
15
  return importWorkflowExecutorsModule();
15
16
  }
@@ -41,6 +42,13 @@ function registerAlias(pi, toolDef, aliasName, canonicalName) {
41
42
  execute,
42
43
  });
43
44
  }
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but varies by schema
46
+ function registerWorkflowTool(pi, toolDef) {
47
+ pi.registerTool(toolDef);
48
+ for (const alias of aliasesForWorkflowTool(toolDef.name)) {
49
+ registerAlias(pi, toolDef, alias, toolDef.name);
50
+ }
51
+ }
44
52
  function requirementRootWriteGuard(operation, basePath) {
45
53
  const guard = shouldBlockRootArtifactSaveInSnapshot(loadWriteGateSnapshot(basePath), "REQUIREMENTS");
46
54
  if (!guard.block)
@@ -155,8 +163,7 @@ export function registerDbTools(pi) {
155
163
  return new Text(text, 0, 0);
156
164
  },
157
165
  };
158
- pi.registerTool(decisionSaveTool);
159
- registerAlias(pi, decisionSaveTool, "gsd_save_decision", "gsd_decision_save");
166
+ registerWorkflowTool(pi, decisionSaveTool);
160
167
  // ─── gsd_requirement_update (formerly gsd_update_requirement) ───────────
161
168
  const requirementUpdateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
162
169
  const basePath = resolveCtxCwd(_ctx);
@@ -241,8 +248,7 @@ export function registerDbTools(pi) {
241
248
  return new Text(text, 0, 0);
242
249
  },
243
250
  };
244
- pi.registerTool(requirementUpdateTool);
245
- registerAlias(pi, requirementUpdateTool, "gsd_update_requirement", "gsd_requirement_update");
251
+ registerWorkflowTool(pi, requirementUpdateTool);
246
252
  // ─── gsd_requirement_save ─────────────────────────────────────────────
247
253
  const requirementSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
248
254
  const basePath = resolveCtxCwd(_ctx);
@@ -340,8 +346,7 @@ export function registerDbTools(pi) {
340
346
  return new Text(text, 0, 0);
341
347
  },
342
348
  };
343
- pi.registerTool(requirementSaveTool);
344
- registerAlias(pi, requirementSaveTool, "gsd_save_requirement", "gsd_requirement_save");
349
+ registerWorkflowTool(pi, requirementSaveTool);
345
350
  // ─── gsd_summary_save (formerly gsd_save_summary) ──────────────────────
346
351
  const summarySaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
347
352
  try {
@@ -397,8 +402,7 @@ export function registerDbTools(pi) {
397
402
  return new Text(text, 0, 0);
398
403
  },
399
404
  };
400
- pi.registerTool(summarySaveTool);
401
- registerAlias(pi, summarySaveTool, "gsd_save_summary", "gsd_summary_save");
405
+ registerWorkflowTool(pi, summarySaveTool);
402
406
  // ─── gsd_uat_result_save ─────────────────────────────────────────────────
403
407
  const uatResultSaveExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
404
408
  const { executeUatResultSave } = await loadWorkflowExecutors();
@@ -480,7 +484,7 @@ export function registerDbTools(pi) {
480
484
  return new Text(theme.fg("success", `UAT ${d?.sliceId ?? ""}: ${d?.verdict ?? "saved"}`), 0, 0);
481
485
  },
482
486
  };
483
- pi.registerTool(uatResultSaveTool);
487
+ registerWorkflowTool(pi, uatResultSaveTool);
484
488
  // ─── gsd_milestone_generate_id (formerly gsd_generate_milestone_id) ────
485
489
  const milestoneGenerateIdExecute = async (_toolCallId, _params, _signal, _onUpdate, _ctx) => {
486
490
  try {
@@ -566,8 +570,7 @@ export function registerDbTools(pi) {
566
570
  return new Text(text, 0, 0);
567
571
  },
568
572
  };
569
- pi.registerTool(milestoneGenerateIdTool);
570
- registerAlias(pi, milestoneGenerateIdTool, "gsd_generate_milestone_id", "gsd_milestone_generate_id");
573
+ registerWorkflowTool(pi, milestoneGenerateIdTool);
571
574
  // ─── gsd_plan_milestone (gsd_milestone_plan alias) ─────────────────────
572
575
  const planMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
573
576
  const { executePlanMilestone } = await loadWorkflowExecutors();
@@ -633,8 +636,7 @@ export function registerDbTools(pi) {
633
636
  }),
634
637
  execute: planMilestoneExecute,
635
638
  };
636
- pi.registerTool(planMilestoneTool);
637
- registerAlias(pi, planMilestoneTool, "gsd_milestone_plan", "gsd_plan_milestone");
639
+ registerWorkflowTool(pi, planMilestoneTool);
638
640
  // ─── gsd_plan_slice (gsd_slice_plan alias) ─────────────────────────────
639
641
  const planSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
640
642
  const { executePlanSlice } = await loadWorkflowExecutors();
@@ -678,8 +680,7 @@ export function registerDbTools(pi) {
678
680
  }),
679
681
  execute: planSliceExecute,
680
682
  };
681
- pi.registerTool(planSliceTool);
682
- registerAlias(pi, planSliceTool, "gsd_slice_plan", "gsd_plan_slice");
683
+ registerWorkflowTool(pi, planSliceTool);
683
684
  // ─── gsd_plan_task (gsd_task_plan alias) ───────────────────────────────
684
685
  const planTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
685
686
  const basePath = resolveCtxCwd(_ctx);
@@ -748,8 +749,7 @@ export function registerDbTools(pi) {
748
749
  }),
749
750
  execute: planTaskExecute,
750
751
  };
751
- pi.registerTool(planTaskTool);
752
- registerAlias(pi, planTaskTool, "gsd_task_plan", "gsd_plan_task");
752
+ registerWorkflowTool(pi, planTaskTool);
753
753
  // ─── gsd_task_complete (gsd_complete_task alias) ────────────────────────
754
754
  const taskCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
755
755
  const { executeTaskComplete } = await loadWorkflowExecutors();
@@ -809,8 +809,7 @@ export function registerDbTools(pi) {
809
809
  }),
810
810
  execute: taskCompleteExecute,
811
811
  };
812
- pi.registerTool(taskCompleteTool);
813
- registerAlias(pi, taskCompleteTool, "gsd_complete_task", "gsd_task_complete");
812
+ registerWorkflowTool(pi, taskCompleteTool);
814
813
  // ─── gsd_slice_complete (gsd_complete_slice alias) ─────────────────────
815
814
  const sliceCompleteExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
816
815
  const { executeSliceComplete } = await loadWorkflowExecutors();
@@ -875,8 +874,7 @@ export function registerDbTools(pi) {
875
874
  }),
876
875
  execute: sliceCompleteExecute,
877
876
  };
878
- pi.registerTool(sliceCompleteTool);
879
- registerAlias(pi, sliceCompleteTool, "gsd_complete_slice", "gsd_slice_complete");
877
+ registerWorkflowTool(pi, sliceCompleteTool);
880
878
  // ─── gsd_skip_slice (#3477 / #3487) ───────────────────────────────────
881
879
  const skipSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
882
880
  const basePath = resolveCtxCwd(_ctx);
@@ -941,7 +939,7 @@ export function registerDbTools(pi) {
941
939
  };
942
940
  }
943
941
  };
944
- pi.registerTool({
942
+ registerWorkflowTool(pi, {
945
943
  name: "gsd_skip_slice",
946
944
  label: "Skip Slice",
947
945
  description: "Mark a slice as skipped so auto-mode advances past it without executing. " +
@@ -1000,8 +998,7 @@ export function registerDbTools(pi) {
1000
998
  }),
1001
999
  execute: milestoneCompleteExecute,
1002
1000
  };
1003
- pi.registerTool(milestoneCompleteTool);
1004
- registerAlias(pi, milestoneCompleteTool, "gsd_milestone_complete", "gsd_complete_milestone");
1001
+ registerWorkflowTool(pi, milestoneCompleteTool);
1005
1002
  // ─── gsd_validate_milestone (gsd_milestone_validate alias) ─────────────
1006
1003
  const milestoneValidateExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1007
1004
  const { executeValidateMilestone } = await loadWorkflowExecutors();
@@ -1035,8 +1032,7 @@ export function registerDbTools(pi) {
1035
1032
  }),
1036
1033
  execute: milestoneValidateExecute,
1037
1034
  };
1038
- pi.registerTool(milestoneValidateTool);
1039
- registerAlias(pi, milestoneValidateTool, "gsd_milestone_validate", "gsd_validate_milestone");
1035
+ registerWorkflowTool(pi, milestoneValidateTool);
1040
1036
  // ─── gsd_replan_slice (gsd_slice_replan alias) ─────────────────────────
1041
1037
  const replanSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1042
1038
  const { executeReplanSlice } = await loadWorkflowExecutors();
@@ -1078,8 +1074,7 @@ export function registerDbTools(pi) {
1078
1074
  }),
1079
1075
  execute: replanSliceExecute,
1080
1076
  };
1081
- pi.registerTool(replanSliceTool);
1082
- registerAlias(pi, replanSliceTool, "gsd_slice_replan", "gsd_replan_slice");
1077
+ registerWorkflowTool(pi, replanSliceTool);
1083
1078
  // ─── gsd_reassess_roadmap (gsd_roadmap_reassess alias) ─────────────────
1084
1079
  const reassessRoadmapExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1085
1080
  const { executeReassessRoadmap } = await loadWorkflowExecutors();
@@ -1126,8 +1121,7 @@ export function registerDbTools(pi) {
1126
1121
  }),
1127
1122
  execute: reassessRoadmapExecute,
1128
1123
  };
1129
- pi.registerTool(reassessRoadmapTool);
1130
- registerAlias(pi, reassessRoadmapTool, "gsd_roadmap_reassess", "gsd_reassess_roadmap");
1124
+ registerWorkflowTool(pi, reassessRoadmapTool);
1131
1125
  // ─── gsd_task_reopen (gsd_reopen_task alias) ───────────────────────────
1132
1126
  // Single-writer v3, Stream 3: reversibility tools for closed units.
1133
1127
  const reopenTaskExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
@@ -1190,8 +1184,7 @@ export function registerDbTools(pi) {
1190
1184
  }),
1191
1185
  execute: reopenTaskExecute,
1192
1186
  };
1193
- pi.registerTool(reopenTaskTool);
1194
- registerAlias(pi, reopenTaskTool, "gsd_reopen_task", "gsd_task_reopen");
1187
+ registerWorkflowTool(pi, reopenTaskTool);
1195
1188
  // ─── gsd_slice_reopen (gsd_reopen_slice alias) ─────────────────────────
1196
1189
  const reopenSliceExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1197
1190
  const basePath = resolveCtxCwd(_ctx);
@@ -1253,8 +1246,7 @@ export function registerDbTools(pi) {
1253
1246
  }),
1254
1247
  execute: reopenSliceExecute,
1255
1248
  };
1256
- pi.registerTool(reopenSliceTool);
1257
- registerAlias(pi, reopenSliceTool, "gsd_reopen_slice", "gsd_slice_reopen");
1249
+ registerWorkflowTool(pi, reopenSliceTool);
1258
1250
  // ─── gsd_milestone_reopen (gsd_reopen_milestone alias) ─────────────────
1259
1251
  const reopenMilestoneExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1260
1252
  const basePath = resolveCtxCwd(_ctx);
@@ -1314,8 +1306,7 @@ export function registerDbTools(pi) {
1314
1306
  }),
1315
1307
  execute: reopenMilestoneExecute,
1316
1308
  };
1317
- pi.registerTool(reopenMilestoneTool);
1318
- registerAlias(pi, reopenMilestoneTool, "gsd_reopen_milestone", "gsd_milestone_reopen");
1309
+ registerWorkflowTool(pi, reopenMilestoneTool);
1319
1310
  // ─── gsd_save_gate_result ──────────────────────────────────────────────
1320
1311
  const saveGateResultExecute = async (_toolCallId, params, _signal, _onUpdate, _ctx) => {
1321
1312
  const { executeSaveGateResult } = await loadWorkflowExecutors();
@@ -1378,5 +1369,5 @@ export function registerDbTools(pi) {
1378
1369
  return new Text(theme.fg(color, `${d.gateId}: ${d.verdict}`), 0, 0);
1379
1370
  },
1380
1371
  };
1381
- pi.registerTool(saveGateResultTool);
1372
+ registerWorkflowTool(pi, saveGateResultTool);
1382
1373
  }
@@ -2,11 +2,11 @@
2
2
  // File Purpose: Registers workspace-aware dynamic filesystem and shell tools.
3
3
  import { existsSync, readdirSync } from "node:fs";
4
4
  import { homedir } from "node:os";
5
- import { dirname, join } from "node:path";
5
+ import { join } from "node:path";
6
6
  import { createBashTool, createEditTool, createReadTool, createWriteTool } from "@gsd/pi-coding-agent";
7
7
  import { DEFAULT_BASH_TIMEOUT_SECS } from "../constants.js";
8
- import { setLogBasePath, logWarning } from "../workflow-logger.js";
9
- import { resolveGsdPathContract } from "../paths.js";
8
+ import { logWarning } from "../workflow-logger.js";
9
+ import { openWorkflowDatabase } from "../db-workspace.js";
10
10
  import { getAutoWorktreePath } from "../auto-worktree.js";
11
11
  import { resolveWorktreeProjectRoot } from "../worktree-root.js";
12
12
  export function safeWorkspaceCwd() {
@@ -58,44 +58,18 @@ export function resolveWorkflowToolBasePath(ctx, scope) {
58
58
  }
59
59
  return cwd;
60
60
  }
61
- /**
62
- * Resolve the correct DB path for the current working directory.
63
- * If `basePath` is inside a `.gsd/worktrees/<MID>/` directory, returns
64
- * the project root's `.gsd/gsd.db` (shared WAL — R012). Otherwise
65
- * returns `<basePath>/.gsd/gsd.db`.
66
- */
67
- export function resolveProjectRootDbPath(basePath) {
68
- return resolveGsdPathContract(basePath).projectDb;
69
- }
61
+ export { resolveProjectRootDbPath } from "../db-workspace.js";
70
62
  export async function ensureDbOpen(basePath = safeWorkspaceCwd()) {
71
- try {
72
- const db = await import("../gsd-db.js");
73
- const contract = resolveGsdPathContract(basePath);
74
- const dbPath = contract.projectDb;
75
- const gsdDir = contract.projectGsd;
76
- const projectRoot = dirname(dirname(dbPath));
77
- // Open existing DB file (may be at project root for worktrees)
78
- if (existsSync(dbPath)) {
79
- const opened = db.openDatabase(dbPath);
80
- if (opened)
81
- setLogBasePath(projectRoot);
82
- return opened;
83
- }
84
- // No DB file — create an empty authoritative DB. Markdown migration is
85
- // explicit-only; runtime startup must not import projections into state.
86
- if (existsSync(gsdDir)) {
87
- const opened = db.openDatabase(dbPath);
88
- if (opened)
89
- setLogBasePath(projectRoot);
90
- return opened;
91
- }
63
+ const result = openWorkflowDatabase(basePath);
64
+ if (result.ok)
65
+ return true;
66
+ if (result.reason === "missing-gsd-dir") {
92
67
  logWarning("bootstrap", "ensureDbOpen failed — no .gsd directory found");
93
- return false;
94
68
  }
95
- catch (err) {
96
- logWarning("bootstrap", `ensureDbOpen failed: ${err.message ?? String(err)}`);
97
- return false;
69
+ else {
70
+ logWarning("bootstrap", `ensureDbOpen failed: ${result.error?.message ?? "open failed"}`);
98
71
  }
72
+ return false;
99
73
  }
100
74
  export function registerDynamicTools(pi) {
101
75
  const fallbackRoot = safeWorkspaceCwd();
@@ -3,6 +3,7 @@
3
3
  // gsd-pi — Read-only query tools exposing DB state to the LLM via the WAL connection
4
4
  import { Type } from "@sinclair/typebox";
5
5
  import { ensureDbOpen, resolveCtxCwd } from "./dynamic-tools.js";
6
+ import { checkpointWorkflowDatabase } from "../db-workspace.js";
6
7
  export function registerQueryTools(pi) {
7
8
  pi.registerTool({
8
9
  name: "gsd_milestone_status",
@@ -50,8 +51,7 @@ export function registerQueryTools(pi) {
50
51
  details: { operation: "checkpoint_db", error: "db_unavailable" },
51
52
  };
52
53
  }
53
- const { checkpointDatabase } = await import("../gsd-db.js");
54
- checkpointDatabase();
54
+ checkpointWorkflowDatabase();
55
55
  return {
56
56
  content: [{ type: "text", text: "WAL checkpoint complete. gsd.db is now up to date and safe to stage with git add." }],
57
57
  details: { operation: "checkpoint_db", status: "ok" },