@opengsd/gsd-pi 1.1.1-dev.b2556262 → 1.2.0-dev.4813ead6

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 (500) 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/project-sessions.js +4 -2
  5. package/dist/resources/.managed-resources-content-hash +1 -1
  6. package/dist/resources/extensions/ask-user-questions.js +78 -23
  7. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +101 -237
  8. package/dist/resources/extensions/claude-code-cli/turn-assembler.js +224 -0
  9. package/dist/resources/extensions/github-sync/templates.js +3 -3
  10. package/dist/resources/extensions/gsd/artifact-projection.js +14 -0
  11. package/dist/resources/extensions/gsd/auto/contracts.js +8 -1
  12. package/dist/resources/extensions/gsd/auto/loop.js +74 -56
  13. package/dist/resources/extensions/gsd/auto/orchestrator.js +763 -63
  14. package/dist/resources/extensions/gsd/auto/phases.js +28 -3
  15. package/dist/resources/extensions/gsd/auto/run-unit.js +2 -1
  16. package/dist/resources/extensions/gsd/auto/session.js +3 -0
  17. package/dist/resources/extensions/gsd/auto-dashboard.js +16 -4
  18. package/dist/resources/extensions/gsd/auto-dispatch.js +6 -5
  19. package/dist/resources/extensions/gsd/auto-model-selection.js +8 -0
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -3
  21. package/dist/resources/extensions/gsd/auto-prompts.js +191 -9
  22. package/dist/resources/extensions/gsd/auto-recovery.js +48 -49
  23. package/dist/resources/extensions/gsd/auto-runtime-state.js +17 -0
  24. package/dist/resources/extensions/gsd/auto-start.js +12 -23
  25. package/dist/resources/extensions/gsd/auto-timers.js +16 -2
  26. package/dist/resources/extensions/gsd/auto-tool-tracking.js +37 -0
  27. package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +33 -29
  28. package/dist/resources/extensions/gsd/auto-verification.js +7 -7
  29. package/dist/resources/extensions/gsd/auto-worktree.js +45 -36
  30. package/dist/resources/extensions/gsd/auto.js +73 -471
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +28 -37
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +11 -37
  33. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +2 -2
  34. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +103 -138
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +63 -4
  36. package/dist/resources/extensions/gsd/closeout-consistency-gate.js +21 -4
  37. package/dist/resources/extensions/gsd/codebase-generator.js +8 -4
  38. package/dist/resources/extensions/gsd/commands/handlers/auto.js +3 -0
  39. package/dist/resources/extensions/gsd/commands-handlers.js +20 -0
  40. package/dist/resources/extensions/gsd/commands-inspect.js +4 -8
  41. package/dist/resources/extensions/gsd/commands-maintenance.js +61 -41
  42. package/dist/resources/extensions/gsd/commands-ship.js +2 -2
  43. package/dist/resources/extensions/gsd/commands-verdict.js +12 -2
  44. package/dist/resources/extensions/gsd/db-workspace.js +103 -0
  45. package/dist/resources/extensions/gsd/debug-logger.js +10 -0
  46. package/dist/resources/extensions/gsd/delegation-policy.js +2 -10
  47. package/dist/resources/extensions/gsd/discussion-handoff.js +218 -0
  48. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  49. package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
  50. package/dist/resources/extensions/gsd/doctor.js +16 -9
  51. package/dist/resources/extensions/gsd/error-classifier.js +1 -1
  52. package/dist/resources/extensions/gsd/git-conflict-state.js +16 -1
  53. package/dist/resources/extensions/gsd/gsd-db.js +12 -0
  54. package/dist/resources/extensions/gsd/guided-flow.js +36 -470
  55. package/dist/resources/extensions/gsd/guided-unit-completion.js +225 -0
  56. package/dist/resources/extensions/gsd/markdown-renderer.js +33 -33
  57. package/dist/resources/extensions/gsd/mcp-filter.js +8 -1
  58. package/dist/resources/extensions/gsd/mcp-tool-name.js +26 -0
  59. package/dist/resources/extensions/gsd/md-importer.js +4 -3
  60. package/dist/resources/extensions/gsd/migrate/safety.js +2 -2
  61. package/dist/resources/extensions/gsd/migration-auto-check.js +3 -2
  62. package/dist/resources/extensions/gsd/milestone-closeout-proof.js +72 -0
  63. package/dist/resources/extensions/gsd/milestone-closeout.js +12 -4
  64. package/dist/resources/extensions/gsd/milestone-merge-transaction.js +10 -0
  65. package/dist/resources/extensions/gsd/milestone-planning-persistence.js +156 -0
  66. package/dist/resources/extensions/gsd/milestone-readiness.js +77 -0
  67. package/dist/resources/extensions/gsd/milestone-settlement.js +50 -0
  68. package/dist/resources/extensions/gsd/milestone-validation-evidence.js +73 -0
  69. package/dist/resources/extensions/gsd/milestone-validation-verdict.js +57 -0
  70. package/dist/resources/extensions/gsd/native-git-bridge.js +45 -0
  71. package/dist/resources/extensions/gsd/parallel-eligibility.js +3 -6
  72. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -2
  73. package/dist/resources/extensions/gsd/preferences-diagnostics.js +67 -0
  74. package/dist/resources/extensions/gsd/preferences.js +147 -29
  75. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  76. package/dist/resources/extensions/gsd/prompts/discuss.md +6 -7
  77. package/dist/resources/extensions/gsd/prompts/execute-task.md +2 -0
  78. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  79. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
  80. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  82. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  83. package/dist/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  84. package/dist/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  85. package/dist/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  86. package/dist/resources/extensions/gsd/prompts/system.md +1 -1
  87. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  88. package/dist/resources/extensions/gsd/provider-payload-policy.js +83 -0
  89. package/dist/resources/extensions/gsd/pull-request-process.js +13 -0
  90. package/dist/resources/extensions/gsd/quality-gate-closure.js +109 -0
  91. package/dist/resources/extensions/gsd/question-transport.js +86 -0
  92. package/dist/resources/extensions/gsd/roadmap-slices.js +8 -2
  93. package/dist/resources/extensions/gsd/schemas/parsers.js +6 -1
  94. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +3 -2
  95. package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
  96. package/dist/resources/extensions/gsd/state.js +13 -5
  97. package/dist/resources/extensions/gsd/templates/plan.md +7 -0
  98. package/dist/resources/extensions/gsd/templates/project.md +1 -0
  99. package/dist/resources/extensions/gsd/templates/roadmap.md +1 -1
  100. package/dist/resources/extensions/gsd/templates/uat.md +5 -1
  101. package/dist/resources/extensions/gsd/tool-contract.js +52 -8
  102. package/dist/resources/extensions/gsd/tool-presentation-plan.js +15 -34
  103. package/dist/resources/extensions/gsd/tool-surface-snapshot.js +17 -0
  104. package/dist/resources/extensions/gsd/tools/plan-milestone.js +15 -143
  105. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +39 -0
  106. package/dist/resources/extensions/gsd/tools/validate-milestone.js +15 -78
  107. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +169 -20
  108. package/dist/resources/extensions/gsd/uat-policy.js +16 -10
  109. package/dist/resources/extensions/gsd/uat-run.js +9 -14
  110. package/dist/resources/extensions/gsd/unit-context-composer.js +40 -20
  111. package/dist/resources/extensions/gsd/unit-runtime.js +3 -2
  112. package/dist/resources/extensions/gsd/unit-tool-contracts.js +2 -1
  113. package/dist/resources/extensions/gsd/user-input-boundary.js +65 -4
  114. package/dist/resources/extensions/gsd/validation-block-guard.js +2 -0
  115. package/dist/resources/extensions/gsd/web-app-uat.js +80 -0
  116. package/dist/resources/extensions/gsd/workflow-mcp.js +15 -102
  117. package/dist/resources/extensions/gsd/workflow-reconcile.js +4 -3
  118. package/dist/resources/extensions/gsd/workflow-tool-surface.js +46 -0
  119. package/dist/resources/extensions/gsd/workspace-git-guard.js +2 -0
  120. package/dist/resources/extensions/gsd/worktree-state-projection.js +33 -4
  121. package/dist/resources/extensions/gsd/worktree-telemetry.js +12 -0
  122. package/dist/resources/extensions/shared/interview-ui.js +2 -2
  123. package/dist/resources/shared/claude-runtime-floor.js +182 -0
  124. package/dist/tsconfig.extensions.tsbuildinfo +1 -0
  125. package/dist/update-cmd.js +20 -0
  126. package/dist/web/standalone/.next/BUILD_ID +1 -1
  127. package/dist/web/standalone/.next/app-path-routes-manifest.json +5 -5
  128. package/dist/web/standalone/.next/build-manifest.json +3 -3
  129. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  130. package/dist/web/standalone/.next/react-loadable-manifest.json +8 -8
  131. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  132. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  133. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  134. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  135. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  140. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  147. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  149. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  151. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  153. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  155. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  157. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  161. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  163. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  169. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  171. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
  175. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  177. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  179. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  189. package/dist/web/standalone/.next/server/app-paths-manifest.json +5 -5
  190. package/dist/web/standalone/.next/server/chunks/5047.js +2 -0
  191. package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
  192. package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
  193. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  196. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  197. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  198. package/dist/web/standalone/.next/static/chunks/2659.b7b129ee6a769448.js +1 -0
  199. package/dist/web/standalone/.next/static/chunks/2772.bfa657f49f955239.js +1 -0
  200. package/dist/web/standalone/.next/static/chunks/{3616.4113d484a994e411.js → 3616.3c60753b8ffcbd2e.js} +1 -1
  201. package/dist/web/standalone/.next/static/chunks/4283.e4873b058df143a1.js +2 -0
  202. package/dist/web/standalone/.next/static/chunks/5826.a46ecdd1cfe8dabc.js +1 -0
  203. package/dist/web/standalone/.next/static/chunks/796.cf859a427a2cb2ac.js +10 -0
  204. package/dist/web/standalone/.next/static/chunks/8785.2e5a118797fb2dd2.js +1 -0
  205. package/dist/web/standalone/.next/static/chunks/{webpack-dda80a1ef5587410.js → webpack-fbea77b5f9953368.js} +1 -1
  206. package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
  207. package/dist/web/standalone/node_modules/node-pty/build/Makefile +1 -1
  208. package/dist/web/standalone/node_modules/postcss/lib/container.js +26 -18
  209. package/dist/web/standalone/node_modules/postcss/lib/css-syntax-error.js +47 -14
  210. package/dist/web/standalone/node_modules/postcss/lib/declaration.js +4 -4
  211. package/dist/web/standalone/node_modules/postcss/lib/fromJSON.js +3 -3
  212. package/dist/web/standalone/node_modules/postcss/lib/input.js +54 -29
  213. package/dist/web/standalone/node_modules/postcss/lib/lazy-result.js +47 -37
  214. package/dist/web/standalone/node_modules/postcss/lib/map-generator.js +26 -9
  215. package/dist/web/standalone/node_modules/postcss/lib/no-work-result.js +57 -55
  216. package/dist/web/standalone/node_modules/postcss/lib/node.js +99 -31
  217. package/dist/web/standalone/node_modules/postcss/lib/parse.js +1 -1
  218. package/dist/web/standalone/node_modules/postcss/lib/parser.js +10 -9
  219. package/dist/web/standalone/node_modules/postcss/lib/postcss.js +12 -12
  220. package/dist/web/standalone/node_modules/postcss/lib/previous-map.js +30 -11
  221. package/dist/web/standalone/node_modules/postcss/lib/processor.js +7 -7
  222. package/dist/web/standalone/node_modules/postcss/lib/result.js +5 -5
  223. package/dist/web/standalone/node_modules/postcss/lib/rule.js +6 -6
  224. package/dist/web/standalone/node_modules/postcss/lib/stringifier.js +69 -28
  225. package/dist/web/standalone/node_modules/postcss/lib/tokenize.js +6 -2
  226. package/dist/web/standalone/node_modules/postcss/package.json +48 -48
  227. package/dist/web-mode.d.ts +2 -0
  228. package/dist/web-mode.js +20 -8
  229. package/package.json +17 -11
  230. package/packages/cloud-mcp-gateway/package.json +2 -2
  231. package/packages/contracts/package.json +1 -1
  232. package/packages/daemon/package.json +4 -4
  233. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts +2 -0
  234. package/packages/gsd-agent-core/dist/session/agent-session-extensions.d.ts.map +1 -1
  235. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js +14 -0
  236. package/packages/gsd-agent-core/dist/session/agent-session-extensions.js.map +1 -1
  237. package/packages/gsd-agent-core/package.json +5 -5
  238. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  239. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js +3 -0
  240. package/packages/gsd-agent-modes/dist/modes/interactive/components/tool-execution.js.map +1 -1
  241. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
  242. package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
  243. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  244. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +106 -40
  245. package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  246. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -1
  247. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js +6 -0
  248. package/packages/gsd-agent-modes/dist/modes/interactive/interactive-extension-widgets.js.map +1 -1
  249. package/packages/gsd-agent-modes/package.json +7 -7
  250. package/packages/mcp-server/dist/server.d.ts +10 -0
  251. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  252. package/packages/mcp-server/dist/server.js +8 -0
  253. package/packages/mcp-server/dist/server.js.map +1 -1
  254. package/packages/mcp-server/dist/workflow-tools.d.ts +41 -0
  255. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  256. package/packages/mcp-server/dist/workflow-tools.js +2 -1
  257. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  258. package/packages/mcp-server/package.json +3 -3
  259. package/packages/native/package.json +1 -1
  260. package/packages/pi-agent-core/package.json +1 -1
  261. package/packages/pi-ai/dist/image-models.generated.d.ts +30 -0
  262. package/packages/pi-ai/dist/image-models.generated.d.ts.map +1 -1
  263. package/packages/pi-ai/dist/image-models.generated.js +30 -0
  264. package/packages/pi-ai/dist/image-models.generated.js.map +1 -1
  265. package/packages/pi-ai/dist/models.generated.d.ts +8 -127
  266. package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
  267. package/packages/pi-ai/dist/models.generated.js +47 -166
  268. package/packages/pi-ai/dist/models.generated.js.map +1 -1
  269. package/packages/pi-ai/package.json +1 -1
  270. package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/auth-storage.js +11 -3
  272. package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
  273. package/packages/pi-coding-agent/package.json +7 -7
  274. package/packages/pi-tui/dist/components/input.js +1 -1
  275. package/packages/pi-tui/dist/components/input.js.map +1 -1
  276. package/packages/pi-tui/dist/keys.d.ts.map +1 -1
  277. package/packages/pi-tui/dist/keys.js +39 -30
  278. package/packages/pi-tui/dist/keys.js.map +1 -1
  279. package/packages/pi-tui/dist/stdin-buffer.d.ts.map +1 -1
  280. package/packages/pi-tui/dist/stdin-buffer.js +22 -0
  281. package/packages/pi-tui/dist/stdin-buffer.js.map +1 -1
  282. package/packages/pi-tui/package.json +2 -2
  283. package/packages/rpc-client/package.json +2 -2
  284. package/pkg/package.json +1 -1
  285. package/scripts/install/deps.js +10 -0
  286. package/scripts/link-workspace-packages.cjs +7 -40
  287. package/src/resources/extensions/ask-user-questions.ts +87 -24
  288. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +126 -289
  289. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +242 -2
  290. package/src/resources/extensions/claude-code-cli/turn-assembler.ts +287 -0
  291. package/src/resources/extensions/github-sync/templates.ts +3 -3
  292. package/src/resources/extensions/github-sync/tests/templates.test.ts +2 -2
  293. package/src/resources/extensions/gsd/artifact-projection.ts +31 -0
  294. package/src/resources/extensions/gsd/auto/contracts.ts +40 -121
  295. package/src/resources/extensions/gsd/auto/loop-deps.ts +2 -0
  296. package/src/resources/extensions/gsd/auto/loop.ts +83 -61
  297. package/src/resources/extensions/gsd/auto/orchestrator.ts +913 -64
  298. package/src/resources/extensions/gsd/auto/phases.ts +35 -3
  299. package/src/resources/extensions/gsd/auto/run-unit.ts +2 -1
  300. package/src/resources/extensions/gsd/auto/session.ts +4 -0
  301. package/src/resources/extensions/gsd/auto-dashboard.ts +18 -4
  302. package/src/resources/extensions/gsd/auto-dispatch.ts +20 -7
  303. package/src/resources/extensions/gsd/auto-model-selection.ts +8 -0
  304. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -3
  305. package/src/resources/extensions/gsd/auto-prompts.ts +220 -9
  306. package/src/resources/extensions/gsd/auto-recovery.ts +50 -50
  307. package/src/resources/extensions/gsd/auto-runtime-state.ts +30 -0
  308. package/src/resources/extensions/gsd/auto-start.ts +17 -20
  309. package/src/resources/extensions/gsd/auto-timers.ts +16 -2
  310. package/src/resources/extensions/gsd/auto-tool-tracking.ts +40 -0
  311. package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +42 -30
  312. package/src/resources/extensions/gsd/auto-verification.ts +7 -8
  313. package/src/resources/extensions/gsd/auto-worktree.ts +57 -42
  314. package/src/resources/extensions/gsd/auto.ts +96 -508
  315. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +29 -37
  316. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +10 -37
  317. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +2 -2
  318. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +120 -151
  319. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +107 -3
  320. package/src/resources/extensions/gsd/closeout-consistency-gate.ts +27 -5
  321. package/src/resources/extensions/gsd/codebase-generator.ts +9 -5
  322. package/src/resources/extensions/gsd/commands/handlers/auto.ts +3 -0
  323. package/src/resources/extensions/gsd/commands-handlers.ts +18 -0
  324. package/src/resources/extensions/gsd/commands-inspect.ts +7 -8
  325. package/src/resources/extensions/gsd/commands-maintenance.ts +74 -40
  326. package/src/resources/extensions/gsd/commands-ship.ts +2 -2
  327. package/src/resources/extensions/gsd/commands-verdict.ts +19 -2
  328. package/src/resources/extensions/gsd/db-workspace.ts +170 -0
  329. package/src/resources/extensions/gsd/debug-logger.ts +11 -0
  330. package/src/resources/extensions/gsd/delegation-policy.ts +3 -11
  331. package/src/resources/extensions/gsd/discussion-handoff.ts +276 -0
  332. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -0
  333. package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
  334. package/src/resources/extensions/gsd/doctor.ts +15 -5
  335. package/src/resources/extensions/gsd/error-classifier.ts +1 -1
  336. package/src/resources/extensions/gsd/git-conflict-state.ts +17 -1
  337. package/src/resources/extensions/gsd/gsd-db.ts +12 -0
  338. package/src/resources/extensions/gsd/guided-flow.ts +49 -560
  339. package/src/resources/extensions/gsd/guided-unit-completion.ts +275 -0
  340. package/src/resources/extensions/gsd/markdown-renderer.ts +40 -20
  341. package/src/resources/extensions/gsd/mcp-filter.ts +9 -1
  342. package/src/resources/extensions/gsd/mcp-tool-name.ts +35 -0
  343. package/src/resources/extensions/gsd/md-importer.ts +3 -3
  344. package/src/resources/extensions/gsd/migrate/safety.ts +2 -2
  345. package/src/resources/extensions/gsd/migration-auto-check.ts +2 -2
  346. package/src/resources/extensions/gsd/milestone-closeout-proof.ts +131 -0
  347. package/src/resources/extensions/gsd/milestone-closeout.ts +12 -4
  348. package/src/resources/extensions/gsd/milestone-merge-transaction.ts +47 -0
  349. package/src/resources/extensions/gsd/milestone-planning-persistence.ts +224 -0
  350. package/src/resources/extensions/gsd/milestone-readiness.ts +125 -0
  351. package/src/resources/extensions/gsd/milestone-settlement.ts +81 -0
  352. package/src/resources/extensions/gsd/milestone-validation-evidence.ts +95 -0
  353. package/src/resources/extensions/gsd/milestone-validation-verdict.ts +80 -0
  354. package/src/resources/extensions/gsd/native-git-bridge.ts +48 -0
  355. package/src/resources/extensions/gsd/parallel-eligibility.ts +4 -5
  356. package/src/resources/extensions/gsd/parallel-orchestrator.ts +6 -2
  357. package/src/resources/extensions/gsd/preferences-diagnostics.ts +98 -0
  358. package/src/resources/extensions/gsd/preferences-types.ts +16 -0
  359. package/src/resources/extensions/gsd/preferences.ts +173 -28
  360. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -0
  361. package/src/resources/extensions/gsd/prompts/discuss.md +6 -7
  362. package/src/resources/extensions/gsd/prompts/execute-task.md +2 -0
  363. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +5 -7
  364. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +6 -6
  365. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +1 -2
  366. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +5 -6
  367. package/src/resources/extensions/gsd/prompts/plan-milestone.md +2 -0
  368. package/src/resources/extensions/gsd/prompts/plan-slice.md +2 -1
  369. package/src/resources/extensions/gsd/prompts/refine-slice.md +1 -0
  370. package/src/resources/extensions/gsd/prompts/research-milestone.md +2 -2
  371. package/src/resources/extensions/gsd/prompts/system.md +1 -1
  372. package/src/resources/extensions/gsd/prompts/validate-milestone.md +5 -3
  373. package/src/resources/extensions/gsd/provider-payload-policy.ts +140 -0
  374. package/src/resources/extensions/gsd/pull-request-process.ts +41 -0
  375. package/src/resources/extensions/gsd/quality-gate-closure.ts +140 -0
  376. package/src/resources/extensions/gsd/question-transport.ts +138 -0
  377. package/src/resources/extensions/gsd/roadmap-slices.ts +8 -2
  378. package/src/resources/extensions/gsd/schemas/parsers.ts +6 -1
  379. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +6 -2
  380. package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
  381. package/src/resources/extensions/gsd/state.ts +15 -5
  382. package/src/resources/extensions/gsd/templates/plan.md +7 -0
  383. package/src/resources/extensions/gsd/templates/project.md +1 -0
  384. package/src/resources/extensions/gsd/templates/roadmap.md +1 -1
  385. package/src/resources/extensions/gsd/templates/uat.md +5 -1
  386. package/src/resources/extensions/gsd/tests/artifact-db-drift-memo.test.ts +66 -0
  387. package/src/resources/extensions/gsd/tests/ask-user-questions-render.test.ts +92 -0
  388. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +29 -1
  389. package/src/resources/extensions/gsd/tests/auto-dispatch-baseline-harness.test.ts +53 -0
  390. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +321 -5
  391. package/src/resources/extensions/gsd/tests/auto-milestone-target.test.ts +23 -0
  392. package/src/resources/extensions/gsd/tests/auto-model-selection-tool-poisoning.test.ts +18 -0
  393. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +709 -845
  394. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +38 -10
  395. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +34 -0
  396. package/src/resources/extensions/gsd/tests/canonical-milestone-root.test.ts +20 -0
  397. package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
  398. package/src/resources/extensions/gsd/tests/commands-dispatcher-workspace-git.test.ts +11 -0
  399. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +38 -1
  400. package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
  401. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +34 -3
  402. package/src/resources/extensions/gsd/tests/dispatch-run-uat-browser-tools.test.ts +88 -0
  403. package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +18 -0
  404. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
  405. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +1 -0
  406. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +1 -5
  407. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +1 -5
  408. package/src/resources/extensions/gsd/tests/gate-state-canonicalization.test.ts +48 -1
  409. package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +157 -0
  410. package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
  411. package/src/resources/extensions/gsd/tests/mcp-tool-name.test.ts +34 -0
  412. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +58 -0
  413. package/src/resources/extensions/gsd/tests/milestone-closeout-proof.test.ts +99 -0
  414. package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +25 -0
  415. package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +46 -0
  416. package/src/resources/extensions/gsd/tests/milestone-readiness.test.ts +65 -0
  417. package/src/resources/extensions/gsd/tests/milestone-validation-evidence.test.ts +41 -0
  418. package/src/resources/extensions/gsd/tests/milestone-validation-verdict.test.ts +55 -0
  419. package/src/resources/extensions/gsd/tests/native-merge-regular.test.ts +139 -0
  420. package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
  421. package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
  422. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +45 -0
  423. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +6 -2
  424. package/src/resources/extensions/gsd/tests/planning-crossval.test.ts +45 -0
  425. package/src/resources/extensions/gsd/tests/preferences-diagnostics.test.ts +67 -0
  426. package/src/resources/extensions/gsd/tests/preferences.test.ts +183 -0
  427. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +75 -2
  428. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +9 -0
  429. package/src/resources/extensions/gsd/tests/provider-payload-policy.test.ts +165 -0
  430. package/src/resources/extensions/gsd/tests/pull-request-process.test.ts +47 -0
  431. package/src/resources/extensions/gsd/tests/register-hooks-depth-verification.test.ts +94 -0
  432. package/src/resources/extensions/gsd/tests/research-milestone-composer.test.ts +65 -0
  433. package/src/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +40 -0
  434. package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +25 -1
  435. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +80 -0
  436. package/src/resources/extensions/gsd/tests/single-writer-invariant.test.ts +101 -1
  437. package/src/resources/extensions/gsd/tests/stale-queued-milestone.test.ts +27 -0
  438. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +21 -6
  439. package/src/resources/extensions/gsd/tests/token-tool-gating.test.ts +38 -0
  440. package/src/resources/extensions/gsd/tests/tool-availability-audit.test.ts +35 -0
  441. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +35 -42
  442. package/src/resources/extensions/gsd/tests/uat-policy.test.ts +23 -0
  443. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +47 -0
  444. package/src/resources/extensions/gsd/tests/user-input-boundary.test.ts +147 -0
  445. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +39 -0
  446. package/src/resources/extensions/gsd/tests/web-app-uat.test.ts +150 -0
  447. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +126 -9
  448. package/src/resources/extensions/gsd/tests/workspace-git-preflight.test.ts +15 -0
  449. package/src/resources/extensions/gsd/tests/worktree-manager.test.ts +21 -0
  450. package/src/resources/extensions/gsd/tests/worktree-projection-writers.test.ts +1 -1
  451. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +24 -0
  452. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +22 -0
  453. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -3
  454. package/src/resources/extensions/gsd/tests/write-gate.test.ts +79 -0
  455. package/src/resources/extensions/gsd/tool-contract.ts +86 -8
  456. package/src/resources/extensions/gsd/tool-presentation-plan.ts +16 -33
  457. package/src/resources/extensions/gsd/tool-surface-snapshot.ts +47 -0
  458. package/src/resources/extensions/gsd/tools/plan-milestone.ts +19 -160
  459. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +43 -0
  460. package/src/resources/extensions/gsd/tools/validate-milestone.ts +25 -84
  461. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +183 -21
  462. package/src/resources/extensions/gsd/uat-policy.ts +19 -10
  463. package/src/resources/extensions/gsd/uat-run.ts +10 -14
  464. package/src/resources/extensions/gsd/unit-context-composer.ts +85 -20
  465. package/src/resources/extensions/gsd/unit-runtime.ts +3 -2
  466. package/src/resources/extensions/gsd/unit-tool-contracts.ts +2 -1
  467. package/src/resources/extensions/gsd/user-input-boundary.ts +55 -5
  468. package/src/resources/extensions/gsd/validation-block-guard.ts +2 -0
  469. package/src/resources/extensions/gsd/web-app-uat.ts +101 -0
  470. package/src/resources/extensions/gsd/workflow-mcp.ts +22 -110
  471. package/src/resources/extensions/gsd/workflow-reconcile.ts +3 -3
  472. package/src/resources/extensions/gsd/workflow-tool-surface.ts +73 -0
  473. package/src/resources/extensions/gsd/workspace-git-guard.ts +1 -0
  474. package/src/resources/extensions/gsd/worktree-lifecycle.ts +7 -16
  475. package/src/resources/extensions/gsd/worktree-state-projection.ts +55 -7
  476. package/src/resources/extensions/gsd/worktree-telemetry.ts +16 -0
  477. package/src/resources/extensions/shared/interview-ui.ts +15 -2
  478. package/src/resources/shared/claude-runtime-floor.ts +248 -0
  479. package/dist/web/standalone/.next/server/chunks/678.js +0 -2
  480. package/dist/web/standalone/.next/static/chunks/2659.feb6499ca863ebfc.js +0 -1
  481. package/dist/web/standalone/.next/static/chunks/2772.151789db0edea835.js +0 -1
  482. package/dist/web/standalone/.next/static/chunks/4283.10a065467b5340d8.js +0 -2
  483. package/dist/web/standalone/.next/static/chunks/5826.960dc4634cc9b0d3.js +0 -1
  484. package/dist/web/standalone/.next/static/chunks/796.46f811c0fac23aab.js +0 -10
  485. package/dist/web/standalone/.next/static/chunks/8785.d32f7a61f55c1600.js +0 -1
  486. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts +0 -21
  487. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.d.ts.map +0 -1
  488. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js +0 -213
  489. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/gsd-widget-prototype.js.map +0 -1
  490. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts +0 -28
  491. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.d.ts.map +0 -1
  492. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js +0 -249
  493. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-density-prototype.js.map +0 -1
  494. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts +0 -19
  495. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.d.ts.map +0 -1
  496. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js +0 -797
  497. package/packages/gsd-agent-modes/dist/modes/interactive/components/__prototype__/transcript-design-prototype.js.map +0 -1
  498. package/scripts/ensure-workspace-builds.cjs +0 -129
  499. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → tkLHUSzPA2kMmWz4DmGwI}/_buildManifest.js +0 -0
  500. /package/dist/web/standalone/.next/static/{tJOKQbQRO-9MiFDO8DIDS → tkLHUSzPA2kMmWz4DmGwI}/_ssgManifest.js +0 -0
@@ -30,11 +30,11 @@ import { playNotificationBell, sendDesktopNotification } from "./notifications.j
30
30
  import { getBudgetAlertLevel, getNewBudgetAlertLevel, getBudgetEnforcementAction, resolveCompactionThresholdPercent, shouldRerootStepSessionForContext, } from "./auto-budget.js";
31
31
  import { markToolStart as _markToolStart, markToolEnd as _markToolEnd, getOldestInFlightToolAgeMs as _getOldestInFlightToolAgeMs, clearInFlightTools, isToolInvocationError, isQueuedUserMessageSkip, isDeterministicPolicyError, } from "./auto-tool-tracking.js";
32
32
  import { closeoutUnit } from "./auto-unit-closeout.js";
33
- import { selectAndApplyModel, resolveModelId, clearToolBaseline, getToolBaselineSnapshot } from "./auto-model-selection.js";
33
+ import { selectAndApplyModel, resolveModelId, clearToolBaseline } from "./auto-model-selection.js";
34
34
  import { resetRoutingHistory, recordOutcome } from "./routing-history.js";
35
35
  import { resetHookState, runPreDispatchHooks, restoreHookState, clearPersistedHookState, } from "./post-unit-hooks.js";
36
36
  import { runGSDDoctor, rebuildState } from "./doctor.js";
37
- import { preDispatchHealthGate, recordHealthSnapshot, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
37
+ import { preDispatchHealthGate, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
38
38
  import { clearSkillSnapshot } from "./skill-discovery.js";
39
39
  import { captureAvailableSkills, resetSkillTelemetry, } from "./skill-telemetry.js";
40
40
  import { getInstalledSkillNames } from "./skills.js";
@@ -48,12 +48,13 @@ import { isAbsolute, join } from "node:path";
48
48
  import { pathToFileURL } from "node:url";
49
49
  import { readFileSync, existsSync, mkdirSync } from "node:fs";
50
50
  import { atomicWriteSync } from "./atomic-write.js";
51
- import { captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, resolveProjectRoot, } from "./worktree.js";
51
+ import { captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, } from "./worktree.js";
52
52
  import { GitServiceImpl } from "./git-service.js";
53
53
  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";
@@ -66,7 +67,8 @@ import { isClosedStatus } from "./status-guards.js";
66
67
  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
- import { isDbAvailable, getMilestone, getMilestoneSlices, getSlice, getTask, refreshOpenDatabaseFromDisk, } from "./gsd-db.js";
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";
@@ -94,13 +96,7 @@ import { runAutoLoopWithUok } from "./uok/kernel.js";
94
96
  import { resolveUokFlags } from "./uok/flags.js";
95
97
  import { validateDirectory } from "./validate-directory.js";
96
98
  import { createAutoOrchestrator } from "./auto/orchestrator.js";
97
- import { reconcileBeforeDispatch } from "./state-reconciliation.js";
98
- import { compileUnitToolContract } from "./tool-contract.js";
99
- import { createWorktreeSafetyModule } from "./worktree-safety.js";
100
- import { repairAutoWorktreeSafetyFailure, resolvePausedAutoWorktreePath, } from "./auto-worktree-repair.js";
101
- import { resolveManifest } from "./unit-context-manifest.js";
102
- import { classifyFailure } from "./recovery-classification.js";
103
- import { supportsStructuredQuestions } from "./workflow-mcp.js";
99
+ import { resolvePausedAutoWorktreePath, } from "./auto-worktree-repair.js";
104
100
  import { WorktreeLifecycle, } from "./worktree-lifecycle.js";
105
101
  import { WorktreeStateProjection } from "./worktree-state-projection.js";
106
102
  import { reorderForCaching } from "./prompt-ordering.js";
@@ -115,7 +111,7 @@ void initTokenCounter().catch((err) => {
115
111
  logWarning("engine", `token counter warm-up failed: ${err instanceof Error ? err.message : String(err)}`);
116
112
  });
117
113
  export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
118
- import { autoSession as s } from "./auto-runtime-state.js";
114
+ import { autoSession as s, getAutoRuntimeSnapshot } from "./auto-runtime-state.js";
119
115
  import { gsdHome } from "./gsd-home.js";
120
116
  import { createWorkspace, scopeMilestone } from "./workspace.js";
121
117
  import { registerAutoWorker, markWorkerStopping, } from "./db/auto-workers.js";
@@ -350,6 +346,15 @@ export function startAutoDetached(ctx, pi, base, verboseMode, options) {
350
346
  export function shouldUseWorktreeIsolation(basePath) {
351
347
  return getIsolationMode(basePath) === "worktree";
352
348
  }
349
+ function resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded) {
350
+ return configuredMode === "worktree" && isolationDegraded ? "branch" : configuredMode;
351
+ }
352
+ export function _resolveEffectiveUnitIsolationModeForTest(configuredMode, isolationDegraded) {
353
+ return resolveEffectiveUnitIsolationMode(configuredMode, isolationDegraded);
354
+ }
355
+ function getEffectiveUnitIsolationMode(basePath) {
356
+ return resolveEffectiveUnitIsolationMode(getIsolationMode(basePath), s.isolationDegraded);
357
+ }
353
358
  /** Crash recovery prompt — set by startAuto, consumed by the main loop */
354
359
  /** Pending verification retry — set when gate fails with retries remaining, consumed by autoLoop */
355
360
  /** Verification retry count per unitId — separate from s.unitDispatchCount which tracks artifact-missing retries */
@@ -460,6 +465,7 @@ function stopAutoCommandPolling() {
460
465
  }
461
466
  export function getAutoDashboardData() {
462
467
  const ledger = getLedger();
468
+ const runtimeSnapshot = getAutoRuntimeSnapshot();
463
469
  const totals = ledger ? getProjectTotals(ledger.units) : null;
464
470
  const sessionId = s.cmdCtx?.sessionManager?.getSessionId?.() ?? null;
465
471
  const rtkSavings = sessionId && s.basePath
@@ -492,6 +498,7 @@ export function getAutoDashboardData() {
492
498
  pendingCaptureCount,
493
499
  rtkSavings,
494
500
  rtkEnabled,
501
+ toolSurface: runtimeSnapshot.toolSurface,
495
502
  };
496
503
  }
497
504
  // ─── Public API ───────────────────────────────────────────────────────────────
@@ -730,6 +737,38 @@ function setLifecycleOutcome(ctx, input) {
730
737
  startedAt: s.autoStartTime,
731
738
  });
732
739
  }
740
+ const TERMINAL_CLOSEOUT_COMMANDS = [
741
+ "/gsd status for overview",
742
+ "/gsd visualize to inspect",
743
+ "/gsd notifications for history",
744
+ "/gsd start for new work",
745
+ ];
746
+ function setTerminalCloseoutOutcome(ctx, input) {
747
+ if (!ctx?.hasUI)
748
+ return;
749
+ const milestoneLabel = input.milestoneId ? `Milestone ${input.milestoneId}` : "Milestone";
750
+ const title = input.allMilestonesComplete ? "All milestones complete" : `${milestoneLabel} complete`;
751
+ const titleLine = input.milestoneTitle && input.milestoneId
752
+ ? `${input.milestoneTitle}. `
753
+ : "";
754
+ const nextAction = input.allMilestonesComplete
755
+ ? "Review the closeout, then start new work when ready."
756
+ : "Review the closeout, then start the next milestone when ready.";
757
+ ctx.ui.setHeader?.(() => ({
758
+ render() { return []; },
759
+ invalidate() { },
760
+ }));
761
+ ctx.ui.setStatus?.("gsd-step", undefined);
762
+ ctx.ui.setWidget?.("gsd-progress", undefined);
763
+ setLifecycleOutcome(ctx, {
764
+ status: "complete",
765
+ title,
766
+ detail: `${titleLine}${input.reason ?? "Milestone closeout finished."}`,
767
+ nextAction,
768
+ commands: TERMINAL_CLOSEOUT_COMMANDS,
769
+ unitLabel: input.milestoneId ? `complete-milestone ${input.milestoneId}` : null,
770
+ });
771
+ }
733
772
  function handleLostSessionLock(ctx, lockStatus) {
734
773
  debugLog("session-lock-lost", {
735
774
  lockBase: lockBase(),
@@ -849,7 +888,6 @@ export async function cleanupAfterLoopExit(ctx) {
849
888
  if (!s.paused) {
850
889
  if (preserveCompletionSurface) {
851
890
  ctx.ui.setStatus("gsd-auto", undefined);
852
- s.completionStopInProgress = false;
853
891
  if (preserveStepSurface) {
854
892
  s.preserveStepSurfaceAfterLoopExit = false;
855
893
  }
@@ -961,6 +999,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
961
999
  const completionStopRequested = Boolean(options.completionWidget);
962
1000
  const preserveCloseoutTranscript = !isHeadlessStop && (options.preserveCloseoutTranscript ?? completionStopRequested);
963
1001
  const installCompletionWidget = completionStopRequested && !preserveCloseoutTranscript;
1002
+ const installTerminalCloseoutOutcome = completionStopRequested && preserveCloseoutTranscript;
964
1003
  const preserveCompletionSurface = completionStopRequested || preserveCloseoutTranscript;
965
1004
  s.completionStopInProgress = preserveCompletionSurface;
966
1005
  playNotificationBell("stop", loadedPreferences?.notifications);
@@ -968,12 +1007,13 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
968
1007
  // worktree was active, and whether the current milestone was merged before
969
1008
  // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
970
1009
  try {
971
- const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
1010
+ const { autoExitReasonForTerminalOutcome, emitAutoExit, normalizeAutoExitReason, } = await import("./worktree-telemetry.js");
972
1011
  // Normalize the free-form reason to a closed set so the telemetry
973
1012
  // aggregator buckets stably. Raw detail is preserved in the phases.ts
974
1013
  // notification and the notify'd error string.
975
1014
  const rawReason = reason ?? "stop";
976
- const normalizedReason = normalizeAutoExitReason(rawReason);
1015
+ const normalizedReason = autoExitReasonForTerminalOutcome(options.terminalOutcome)
1016
+ ?? normalizeAutoExitReason(rawReason);
977
1017
  const telemetryBase = s.originalBasePath || s.basePath;
978
1018
  emitAutoExit(telemetryBase, {
979
1019
  reason: normalizedReason,
@@ -1149,8 +1189,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1149
1189
  // ── Step 6: DB cleanup ──
1150
1190
  if (isDbAvailable()) {
1151
1191
  try {
1152
- const { closeDatabase } = await import("./gsd-db.js");
1153
- closeDatabase();
1192
+ closeWorkflowDatabase();
1154
1193
  }
1155
1194
  catch (e) {
1156
1195
  debugLog("db-close-failed", {
@@ -1270,6 +1309,14 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1270
1309
  ctx.ui.notify(`${stopNotificationPrefix}.`, "info");
1271
1310
  }
1272
1311
  }
1312
+ if (installTerminalCloseoutOutcome && ctx && options.completionWidget) {
1313
+ setTerminalCloseoutOutcome(ctx, {
1314
+ milestoneId: completionMilestoneId,
1315
+ milestoneTitle: options.completionWidget.milestoneTitle ?? null,
1316
+ allMilestonesComplete: options.completionWidget.allMilestonesComplete,
1317
+ reason: reason ?? "Milestone closeout finished.",
1318
+ });
1319
+ }
1273
1320
  // ── Step 9: Cmux sidebar / event log ──
1274
1321
  try {
1275
1322
  pi?.events.emit(CMUX_CHANNELS.SIDEBAR, { action: "clear", preferences: loadedPreferences });
@@ -1579,7 +1626,7 @@ export function buildWorktreeLifecycleDeps() {
1579
1626
  // C4 (#5627) — GitServiceImpl constructor → gitServiceFactory
1580
1627
  //
1581
1628
  // Final WorktreeLifecycleDeps shape: 3 fields (gitServiceFactory,
1582
- // worktreeProjection, mergeMilestoneToMain). Down from 18 at slice-7
1629
+ // worktreeProjection, mergeMilestoneToMain transaction runner). Down from 18 at slice-7
1583
1630
  // closure.
1584
1631
  return {
1585
1632
  gitServiceFactory: (basePath) => {
@@ -1587,463 +1634,12 @@ export function buildWorktreeLifecycleDeps() {
1587
1634
  return new GitServiceImpl(basePath, gitConfig);
1588
1635
  },
1589
1636
  worktreeProjection: new WorktreeStateProjection(),
1590
- mergeMilestoneToMain,
1637
+ mergeMilestoneToMain: createMilestoneMergeTransaction(mergeMilestoneToMain),
1591
1638
  };
1592
1639
  }
1593
1640
  function buildLifecycle() {
1594
1641
  return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
1595
1642
  }
1596
- /**
1597
- * Build the production `DispatchAdapter` used by `createWiredAutoOrchestrationModule`.
1598
- *
1599
- * Exported so tests can verify parity with `runDispatch`'s `resolveDispatch` call —
1600
- * the wired adapter must derive `structuredQuestionsAvailable`, `sessionContextWindow`,
1601
- * `sessionProvider`, and `modelRegistry` the same way phases.ts:runDispatch does.
1602
- */
1603
- export function createWiredDispatchAdapter(ctx, pi, dispatchBasePath, session) {
1604
- function getAlreadyClosedDispatchReason(unitType, unitId) {
1605
- if (!isDbAvailable())
1606
- return null;
1607
- refreshOpenDatabaseFromDisk();
1608
- const { milestone, slice, task } = parseUnitId(unitId);
1609
- if (unitType === "execute-task" && milestone && slice && task) {
1610
- const row = getTask(milestone, slice, task);
1611
- return row && isClosedStatus(row.status)
1612
- ? `execute-task ${unitId} is already ${row.status}`
1613
- : null;
1614
- }
1615
- if (unitType === "complete-slice" && milestone && slice) {
1616
- const row = getSlice(milestone, slice);
1617
- return row && isClosedStatus(row.status)
1618
- ? `complete-slice ${unitId} is already ${row.status}`
1619
- : null;
1620
- }
1621
- return null;
1622
- }
1623
- function shouldAdoptActiveMilestone(state, activeSession, activeDispatchBasePath) {
1624
- const activeMilestoneId = state.activeMilestone?.id;
1625
- const currentMilestoneId = activeSession?.currentMilestoneId;
1626
- if (!activeSession || !activeMilestoneId || !currentMilestoneId || activeMilestoneId === currentMilestoneId) {
1627
- return false;
1628
- }
1629
- const scopedWorktreeMilestone = (activeSession.basePath ? detectWorktreeName(activeSession.basePath) : null) ??
1630
- detectWorktreeName(activeDispatchBasePath);
1631
- if (scopedWorktreeMilestone && scopedWorktreeMilestone !== activeMilestoneId) {
1632
- return false;
1633
- }
1634
- const currentMilestone = state.registry.find((milestone) => milestone.id === currentMilestoneId);
1635
- return !!currentMilestone && isClosedStatus(currentMilestone.status);
1636
- }
1637
- return {
1638
- async decideNextUnit(input) {
1639
- const state = input.stateSnapshot;
1640
- const active = state.activeMilestone;
1641
- if (!active)
1642
- return null;
1643
- const activeSession = input.session ?? session;
1644
- const activeDispatchBasePath = activeSession?.basePath || dispatchBasePath;
1645
- if (activeSession && shouldAdoptActiveMilestone(state, activeSession, activeDispatchBasePath)) {
1646
- activeSession.currentMilestoneId = active.id;
1647
- }
1648
- const prefs = loadEffectiveGSDPreferences(activeDispatchBasePath)?.preferences;
1649
- // Derive session-derived dispatch inputs the same way phases.ts:runDispatch does
1650
- // (#5789). Prefer caller-supplied values when present so test harnesses and
1651
- // alternative wirings can inject deterministic snapshots; otherwise pull from
1652
- // the captured pi/ctx references.
1653
- const sessionProvider = input.sessionProvider ?? ctx.model?.provider;
1654
- const sessionContextWindow = input.sessionContextWindow ?? ctx.model?.contextWindow;
1655
- const modelRegistry = input.modelRegistry ?? ctx.modelRegistry;
1656
- const authMode = sessionProvider && typeof ctx.modelRegistry?.getProviderAuthMode === "function"
1657
- ? ctx.modelRegistry.getProviderAuthMode(sessionProvider)
1658
- : undefined;
1659
- // Use baseline snapshot — same reason as phases.ts:runDispatch: the live
1660
- // active set may be narrowed by the prior unit before selectAndApplyModel
1661
- // restores it, causing false transport-preflight failures (#477 follow-up).
1662
- const activeTools = getToolBaselineSnapshot(pi);
1663
- // Mirrors runDispatch: deep-planning keeps approval gates in plain chat
1664
- // because structured questions can be cancelled outside the chat turn on
1665
- // some transports.
1666
- const structuredQuestionsAvailable = input.structuredQuestionsAvailable ??
1667
- (prefs?.planning_depth === "deep"
1668
- ? "false"
1669
- : supportsStructuredQuestions(activeTools, {
1670
- authMode,
1671
- baseUrl: ctx.model?.baseUrl,
1672
- })
1673
- ? "true"
1674
- : "false");
1675
- const pendingRetry = session?.pendingVerificationRetryDispatch;
1676
- if (session && pendingRetry) {
1677
- session.pendingVerificationRetryDispatch = null;
1678
- const alreadyClosedReason = getAlreadyClosedDispatchReason(pendingRetry.unitType, pendingRetry.unitId);
1679
- if (alreadyClosedReason) {
1680
- session.pendingOrchestrationDispatch = null;
1681
- session.pendingVerificationRetry = null;
1682
- return { kind: "skipped", reason: alreadyClosedReason };
1683
- }
1684
- session.pendingOrchestrationDispatch = pendingRetry;
1685
- return {
1686
- unitType: pendingRetry.unitType,
1687
- unitId: pendingRetry.unitId,
1688
- reason: "verification-retry",
1689
- preconditions: [],
1690
- };
1691
- }
1692
- const action = await resolveDispatch({
1693
- basePath: activeDispatchBasePath,
1694
- mid: active.id,
1695
- midTitle: active.title,
1696
- state,
1697
- prefs,
1698
- session: activeSession,
1699
- structuredQuestionsAvailable,
1700
- sessionContextWindow,
1701
- sessionProvider,
1702
- modelRegistry,
1703
- activeTools,
1704
- sessionAuthMode: authMode,
1705
- sessionBaseUrl: ctx.model?.baseUrl,
1706
- });
1707
- if (action.action === "stop") {
1708
- if (session)
1709
- session.pendingOrchestrationDispatch = null;
1710
- return {
1711
- kind: "blocked",
1712
- reason: action.reason,
1713
- action: action.level === "warning" ? "pause" : "stop",
1714
- };
1715
- }
1716
- if (action.action !== "dispatch") {
1717
- if (session)
1718
- session.pendingOrchestrationDispatch = null;
1719
- return {
1720
- kind: "skipped",
1721
- reason: action.matchedRule ?? "dispatch-skip",
1722
- };
1723
- }
1724
- const alreadyClosedReason = getAlreadyClosedDispatchReason(action.unitType, action.unitId);
1725
- if (alreadyClosedReason) {
1726
- if (session) {
1727
- session.pendingOrchestrationDispatch = null;
1728
- session.pendingVerificationRetry = null;
1729
- }
1730
- return { kind: "skipped", reason: alreadyClosedReason };
1731
- }
1732
- if (session) {
1733
- const pending = {
1734
- unitType: action.unitType,
1735
- unitId: action.unitId,
1736
- prompt: action.prompt,
1737
- pauseAfterUatDispatch: action.pauseAfterDispatch ?? false,
1738
- state,
1739
- mid: active.id,
1740
- midTitle: active.title,
1741
- };
1742
- session.pendingOrchestrationDispatch = pending;
1743
- }
1744
- return {
1745
- unitType: action.unitType,
1746
- unitId: action.unitId,
1747
- reason: action.matchedRule ?? "dispatch",
1748
- preconditions: [],
1749
- };
1750
- },
1751
- };
1752
- }
1753
- function isUsableLiveOrchestratorBasePath(basePath) {
1754
- if (!basePath || !existsSync(basePath))
1755
- return false;
1756
- if (!detectWorktreeName(basePath))
1757
- return true;
1758
- try {
1759
- return readFileSync(join(basePath, ".git"), "utf8").trim().startsWith("gitdir: ");
1760
- }
1761
- catch {
1762
- return false;
1763
- }
1764
- }
1765
- export function resolveLiveOrchestratorBasePath(input) {
1766
- const primary = input.sessionBasePath || input.capturedBasePath;
1767
- if (isUsableLiveOrchestratorBasePath(primary))
1768
- return primary;
1769
- const fallbacks = [
1770
- input.originalBasePath,
1771
- input.runtimeBasePath,
1772
- resolveProjectRoot(input.capturedBasePath),
1773
- ];
1774
- for (const candidate of fallbacks) {
1775
- if (candidate && isUsableLiveOrchestratorBasePath(candidate)) {
1776
- return candidate;
1777
- }
1778
- }
1779
- return input.runtimeBasePath || input.capturedBasePath;
1780
- }
1781
- /**
1782
- * Thin entry glue for the new Auto Orchestration module.
1783
- *
1784
- * This intentionally wires only dispatch + error notification today, with
1785
- * no behavior changes to the existing auto loop. It provides a concrete seam
1786
- * the next refactor steps can adopt incrementally.
1787
- */
1788
- export function createWiredAutoOrchestrationModule(ctx, pi, dispatchBasePath, runtimeBasePath = resolveProjectRoot(dispatchBasePath)) {
1789
- const flowId = `auto-orchestrator-${Date.now()}`;
1790
- let seq = 0;
1791
- const getLiveDispatchBasePath = () => resolveLiveOrchestratorBasePath({
1792
- capturedBasePath: dispatchBasePath,
1793
- runtimeBasePath,
1794
- sessionBasePath: s.basePath,
1795
- originalBasePath: s.originalBasePath,
1796
- });
1797
- const deps = {
1798
- stateReconciliation: {
1799
- async reconcileBeforeDispatch() {
1800
- const activeBasePath = getLiveDispatchBasePath();
1801
- const result = await reconcileBeforeDispatch(activeBasePath);
1802
- // Failure-path summaries written by gsd_summary_save create
1803
- // artifact-db-status-divergence blockers for tasks that are still
1804
- // pending (gsd_task_complete never ran). These tasks can still be
1805
- // dispatched and the drift self-heals once they complete successfully.
1806
- const hardBlockers = result.blockers.filter((b) => !b.includes("has SUMMARY artifact while DB status is") &&
1807
- !b.includes("has SUMMARY on disk while DB status is") &&
1808
- !b.includes("has task SUMMARY artifacts but no DB tasks"));
1809
- if (hardBlockers.length > 0) {
1810
- return {
1811
- ok: false,
1812
- reason: hardBlockers[0],
1813
- stateSnapshot: result.stateSnapshot,
1814
- };
1815
- }
1816
- const repairedKinds = result.repaired.map((d) => d.kind);
1817
- return {
1818
- ok: true,
1819
- reason: repairedKinds.length > 0
1820
- ? `repaired: ${repairedKinds.join(", ")}`
1821
- : "clean",
1822
- stateSnapshot: result.stateSnapshot,
1823
- };
1824
- },
1825
- },
1826
- dispatch: createWiredDispatchAdapter(ctx, pi, dispatchBasePath, s),
1827
- recovery: {
1828
- async classifyAndRecover(input) {
1829
- const recovery = classifyFailure(input);
1830
- return { action: recovery.action, reason: recovery.reason };
1831
- },
1832
- },
1833
- toolContract: {
1834
- async compileUnitToolContract(unitType) {
1835
- const result = compileUnitToolContract(unitType);
1836
- if (!result.ok)
1837
- return { ok: false, reason: result.detail };
1838
- return { ok: true, reason: result.contract.validationRules.join(", ") };
1839
- },
1840
- },
1841
- worktree: {
1842
- async prepareForUnit(unitType, unitId) {
1843
- const manifest = resolveManifest(unitType);
1844
- if (!manifest) {
1845
- return {
1846
- ok: false,
1847
- reason: `No Unit manifest is registered for ${unitType}`,
1848
- };
1849
- }
1850
- if (getIsolationMode(runtimeBasePath) !== "worktree") {
1851
- return { ok: true, reason: "not-required" };
1852
- }
1853
- const writeScope = manifest.tools.mode === "all" || manifest.tools.mode === "docs"
1854
- ? "source-writing"
1855
- : "planning-only";
1856
- if (getIsolationMode(runtimeBasePath) !== "worktree") {
1857
- return { ok: true, reason: "isolation-not-worktree" };
1858
- }
1859
- const safety = createWorktreeSafetyModule();
1860
- const activeBasePath = getLiveDispatchBasePath();
1861
- const snapshot = await deriveState(activeBasePath);
1862
- const milestoneId = snapshot.activeMilestone?.id ?? null;
1863
- const expectedBranch = milestoneId ? autoWorktreeBranch(milestoneId) : null;
1864
- let result = safety.validateUnitRoot({
1865
- unitType,
1866
- unitId,
1867
- writeScope,
1868
- projectRoot: runtimeBasePath,
1869
- unitRoot: activeBasePath,
1870
- milestoneId,
1871
- isolationMode: getIsolationMode(runtimeBasePath),
1872
- expectedBranch,
1873
- });
1874
- if (!result.ok) {
1875
- const repaired = await repairAutoWorktreeSafetyFailure({
1876
- safetyResult: result,
1877
- projectRoot: runtimeBasePath,
1878
- activeRoot: activeBasePath,
1879
- milestoneId,
1880
- enterMilestone: async (id) => {
1881
- buildLifecycle().adoptSessionRoot(runtimeBasePath, s.originalBasePath || runtimeBasePath);
1882
- const enterResult = buildLifecycle().enterMilestone(id, {
1883
- notify: ctx.ui.notify.bind(ctx.ui),
1884
- });
1885
- if (!enterResult.ok)
1886
- return { ok: false, reason: enterResult.reason };
1887
- rebuildScope(s.basePath, s.currentMilestoneId);
1888
- return { ok: true };
1889
- },
1890
- revalidate: () => safety.validateUnitRoot({
1891
- unitType,
1892
- unitId,
1893
- writeScope,
1894
- projectRoot: runtimeBasePath,
1895
- unitRoot: getLiveDispatchBasePath(),
1896
- milestoneId,
1897
- isolationMode: getIsolationMode(runtimeBasePath),
1898
- expectedBranch,
1899
- }),
1900
- });
1901
- result = repaired.result;
1902
- if (result.ok) {
1903
- return { ok: true, reason: repaired.repaired ? `repaired-${result.kind}` : result.kind };
1904
- }
1905
- const repairDetail = repaired.repairReason
1906
- ? ` (repair skipped: ${repaired.repairReason})`
1907
- : "";
1908
- return { ok: false, reason: `${result.kind}: ${result.reason}${repairDetail}` };
1909
- }
1910
- return { ok: true, reason: result.kind };
1911
- },
1912
- async syncAfterUnit() { },
1913
- async cleanupOnStop() { },
1914
- },
1915
- health: {
1916
- checkResourcesStale() {
1917
- return checkResourcesStale(s.resourceVersionOnStart);
1918
- },
1919
- async preAdvanceGate() {
1920
- try {
1921
- const gate = await preDispatchHealthGate(getLiveDispatchBasePath());
1922
- if (gate.proceed) {
1923
- return {
1924
- kind: "pass",
1925
- fixesApplied: gate.fixesApplied,
1926
- };
1927
- }
1928
- return {
1929
- kind: "fail",
1930
- reason: gate.reason ?? "Pre-dispatch health check failed — run /gsd doctor for details.",
1931
- action: gate.severity ?? "pause",
1932
- };
1933
- }
1934
- catch (error) {
1935
- return { kind: "threw", error };
1936
- }
1937
- },
1938
- async postAdvanceRecord(result) {
1939
- if (result.kind === "error") {
1940
- recordHealthSnapshot(1, 0, 0, [{
1941
- code: "orchestration-error",
1942
- message: result.reason ?? "orchestration error",
1943
- severity: "error",
1944
- unitId: "orchestration",
1945
- }], [], "orchestration");
1946
- }
1947
- else if (result.kind === "blocked") {
1948
- recordHealthSnapshot(0, 1, 0, [{
1949
- code: "orchestration-blocked",
1950
- message: result.reason ?? "orchestration blocked",
1951
- severity: "warning",
1952
- unitId: "orchestration",
1953
- }], [], "orchestration");
1954
- }
1955
- },
1956
- },
1957
- runtime: {
1958
- async ensureLockOwnership() {
1959
- const status = getSessionLockStatus(runtimeBasePath);
1960
- if (!status.valid || status.failureReason === "pid-mismatch") {
1961
- throw new Error("session lock held by another process");
1962
- }
1963
- },
1964
- async journalTransition(event) {
1965
- const eventType = event.name === "start"
1966
- ? "orchestrator-iteration-start"
1967
- : event.name === "resume"
1968
- ? "orchestrator-iteration-start"
1969
- : event.name === "advance"
1970
- ? "orchestrator-dispatch-match"
1971
- : event.name === "advance-blocked"
1972
- ? "orchestrator-guard-block"
1973
- : event.name === "advance-stopped"
1974
- ? "orchestrator-dispatch-stop"
1975
- : event.name === "advance-error"
1976
- ? "orchestrator-iteration-end"
1977
- : event.name === "advance-paused" || event.name === "advance-retry"
1978
- ? "orchestrator-guard-block"
1979
- : event.name === "stop"
1980
- ? "orchestrator-terminal"
1981
- : "orchestrator-iteration-end";
1982
- _emitJournalEvent(runtimeBasePath, {
1983
- ts: new Date().toISOString(),
1984
- flowId,
1985
- seq: ++seq,
1986
- eventType,
1987
- data: {
1988
- source: "auto-orchestrator",
1989
- name: event.name,
1990
- reason: event.reason,
1991
- unitType: event.unitType,
1992
- unitId: event.unitId,
1993
- },
1994
- });
1995
- },
1996
- },
1997
- notifications: {
1998
- async notifyLifecycle(event) {
1999
- if (event.name === "error") {
2000
- ctx.ui.notify(event.detail ?? "auto orchestration error", "error");
2001
- }
2002
- },
2003
- },
2004
- uokGate: {
2005
- async emit(input) {
2006
- const activeBasePath = getLiveDispatchBasePath();
2007
- const prefs = loadEffectiveGSDPreferences(activeBasePath)?.preferences;
2008
- const uokFlags = resolveUokFlags(prefs);
2009
- if (!uokFlags.gates)
2010
- return;
2011
- const milestoneId = input.milestoneId ?? s.currentMilestoneId ?? undefined;
2012
- try {
2013
- const { UokGateRunner } = await import("./uok/gate-runner.js");
2014
- const runner = new UokGateRunner();
2015
- runner.register({
2016
- id: input.gateId,
2017
- type: input.gateType,
2018
- execute: async () => ({
2019
- outcome: input.outcome,
2020
- failureClass: input.failureClass,
2021
- rationale: input.rationale,
2022
- findings: input.findings ?? "",
2023
- }),
2024
- });
2025
- await runner.run(input.gateId, {
2026
- basePath: activeBasePath,
2027
- traceId: `pre-dispatch:${flowId}`,
2028
- turnId: `orch-${seq}`,
2029
- milestoneId,
2030
- unitType: "pre-dispatch",
2031
- unitId: `orch-${seq}`,
2032
- });
2033
- }
2034
- catch (err) {
2035
- logWarning("engine", `uok gate emit failed: ${getErrorMessage(err)}`, {
2036
- file: "auto.ts",
2037
- gateId: input.gateId,
2038
- gateType: input.gateType,
2039
- ...(milestoneId ? { milestoneId } : {}),
2040
- });
2041
- }
2042
- },
2043
- },
2044
- };
2045
- return createAutoOrchestrator(deps);
2046
- }
2047
1643
  function notifyResumeBlocked(ctx, result) {
2048
1644
  const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
2049
1645
  ctx.ui.notify(`Auto-mode blocked: ${result.reason}. Fix and run ${resumeCmd} to resume.`, "warning");
@@ -2056,7 +1652,13 @@ function notifyResumeBlocked(ctx, result) {
2056
1652
  });
2057
1653
  }
2058
1654
  function ensureOrchestrationModule(ctx, pi, basePath) {
2059
- s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
1655
+ s.orchestration = createAutoOrchestrator({
1656
+ ctx,
1657
+ pi,
1658
+ dispatchBasePath: basePath,
1659
+ runtimeBasePath: lockBase(),
1660
+ session: s,
1661
+ });
2060
1662
  }
2061
1663
  /**
2062
1664
  * Build the LoopDeps object from auto.ts private scope.