gsd-pi 2.82.0 → 3.0.0-dev.1b44e695b

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 (799) hide show
  1. package/README.md +125 -32
  2. package/dist/cli.js +20 -9
  3. package/dist/headless-ui.js +13 -6
  4. package/dist/headless.js +9 -2
  5. package/dist/resources/.managed-resources-content-hash +1 -1
  6. package/dist/resources/GSD-WORKFLOW.md +10 -1
  7. package/dist/resources/extensions/browser-tools/tools/screenshot.js +1 -0
  8. package/dist/resources/extensions/browser-tools/tools/zoom.js +1 -0
  9. package/dist/resources/extensions/claude-code-cli/partial-builder.js +2 -1
  10. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -6
  11. package/dist/resources/extensions/cmux/index.js +5 -0
  12. package/dist/resources/extensions/gsd/auto/detect-stuck.js +1 -1
  13. package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
  14. package/dist/resources/extensions/gsd/auto/loop.js +122 -40
  15. package/dist/resources/extensions/gsd/auto/orchestrator.js +126 -8
  16. package/dist/resources/extensions/gsd/auto/phases.js +143 -49
  17. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  18. package/dist/resources/extensions/gsd/auto/unit-runner-events.js +7 -1
  19. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
  21. package/dist/resources/extensions/gsd/auto-budget.js +9 -0
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
  23. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
  24. package/dist/resources/extensions/gsd/auto-dispatch.js +144 -30
  25. package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
  26. package/dist/resources/extensions/gsd/auto-post-unit.js +329 -137
  27. package/dist/resources/extensions/gsd/auto-prompts.js +47 -13
  28. package/dist/resources/extensions/gsd/auto-recovery.js +82 -16
  29. package/dist/resources/extensions/gsd/auto-start.js +99 -16
  30. package/dist/resources/extensions/gsd/auto-timers.js +11 -3
  31. package/dist/resources/extensions/gsd/auto-verification.js +146 -34
  32. package/dist/resources/extensions/gsd/auto-worktree.js +185 -26
  33. package/dist/resources/extensions/gsd/auto.js +251 -99
  34. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +65 -10
  35. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +13 -10
  36. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +19 -4
  37. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
  38. package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
  39. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +24 -9
  40. package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
  41. package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
  42. package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -1
  43. package/dist/resources/extensions/gsd/commands/handlers/ops.js +20 -0
  44. package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
  45. package/dist/resources/extensions/gsd/commands-handlers.js +17 -2
  46. package/dist/resources/extensions/gsd/commands-mcp-status.js +9 -0
  47. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +10 -2
  48. package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
  49. package/dist/resources/extensions/gsd/context-store.js +112 -0
  50. package/dist/resources/extensions/gsd/crash-recovery.js +55 -7
  51. package/dist/resources/extensions/gsd/db/auto-workers.js +30 -0
  52. package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
  53. package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
  54. package/dist/resources/extensions/gsd/db-base-schema.js +2 -0
  55. package/dist/resources/extensions/gsd/db-migration-steps.js +4 -0
  56. package/dist/resources/extensions/gsd/db-task-slice-rows.js +2 -0
  57. package/dist/resources/extensions/gsd/db-writer.js +150 -84
  58. package/dist/resources/extensions/gsd/dispatch-guard.js +46 -2
  59. package/dist/resources/extensions/gsd/docs/preferences-reference.md +11 -1
  60. package/dist/resources/extensions/gsd/doctor-git-checks.js +87 -7
  61. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
  62. package/dist/resources/extensions/gsd/doctor.js +2 -28
  63. package/dist/resources/extensions/gsd/export-html.js +27 -425
  64. package/dist/resources/extensions/gsd/forensics.js +10 -3
  65. package/dist/resources/extensions/gsd/git-service.js +152 -15
  66. package/dist/resources/extensions/gsd/gsd-db.js +76 -33
  67. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
  68. package/dist/resources/extensions/gsd/guided-flow.js +110 -117
  69. package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
  70. package/dist/resources/extensions/gsd/init-wizard.js +17 -2
  71. package/dist/resources/extensions/gsd/knowledge-backfill.js +144 -0
  72. package/dist/resources/extensions/gsd/knowledge-capture.js +136 -0
  73. package/dist/resources/extensions/gsd/knowledge-parser.js +154 -0
  74. package/dist/resources/extensions/gsd/knowledge-projection.js +210 -0
  75. package/dist/resources/extensions/gsd/markdown-renderer.js +20 -12
  76. package/dist/resources/extensions/gsd/mcp-filter.js +58 -0
  77. package/dist/resources/extensions/gsd/md-importer.js +1 -1
  78. package/dist/resources/extensions/gsd/memory-backfill.js +73 -17
  79. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +222 -0
  80. package/dist/resources/extensions/gsd/migrate/command.js +5 -0
  81. package/dist/resources/extensions/gsd/migrate/parsers.js +121 -2
  82. package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
  83. package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
  84. package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
  85. package/dist/resources/extensions/gsd/migration-auto-check.js +12 -17
  86. package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
  87. package/dist/resources/extensions/gsd/native-git-bridge.js +57 -14
  88. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -0
  89. package/dist/resources/extensions/gsd/paths.js +4 -0
  90. package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
  91. package/dist/resources/extensions/gsd/planning-path-scope.js +9 -3
  92. package/dist/resources/extensions/gsd/post-execution-checks.js +73 -9
  93. package/dist/resources/extensions/gsd/pre-execution-checks.js +54 -19
  94. package/dist/resources/extensions/gsd/preferences-mcp.js +19 -0
  95. package/dist/resources/extensions/gsd/preferences-types.js +3 -0
  96. package/dist/resources/extensions/gsd/preferences-validation.js +147 -0
  97. package/dist/resources/extensions/gsd/preferences.js +6 -0
  98. package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
  99. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  100. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  101. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  102. package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
  103. package/dist/resources/extensions/gsd/prompts/forensics.md +3 -3
  104. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  105. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  106. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  107. package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
  108. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  109. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  110. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  111. package/dist/resources/extensions/gsd/prompts/system.md +2 -2
  112. package/dist/resources/extensions/gsd/provider-switch-observer.js +146 -0
  113. package/dist/resources/extensions/gsd/queue-reorder-ui.js +30 -13
  114. package/dist/resources/extensions/gsd/repo-identity.js +39 -22
  115. package/dist/resources/extensions/gsd/repository-registry.js +44 -0
  116. package/dist/resources/extensions/gsd/safety/evidence-collector.js +2 -0
  117. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +42 -18
  118. package/dist/resources/extensions/gsd/session-lock.js +15 -2
  119. package/dist/resources/extensions/gsd/slice-parallel-conflict.js +2 -2
  120. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +84 -5
  121. package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
  122. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
  123. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
  124. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
  125. package/dist/resources/extensions/gsd/state.js +28 -7
  126. package/dist/resources/extensions/gsd/status-guards.js +14 -2
  127. package/dist/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  128. package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
  129. package/dist/resources/extensions/gsd/templates/plan.md +9 -5
  130. package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
  131. package/dist/resources/extensions/gsd/tools/complete-milestone.js +15 -9
  132. package/dist/resources/extensions/gsd/tools/complete-slice.js +56 -10
  133. package/dist/resources/extensions/gsd/tools/exec-tool.js +87 -5
  134. package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
  135. package/dist/resources/extensions/gsd/tools/plan-slice.js +151 -15
  136. package/dist/resources/extensions/gsd/tools/validate-milestone.js +32 -1
  137. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +185 -40
  138. package/dist/resources/extensions/gsd/unit-context-composer.js +2 -0
  139. package/dist/resources/extensions/gsd/unit-context-manifest.js +69 -17
  140. package/dist/resources/extensions/gsd/validation.js +23 -1
  141. package/dist/resources/extensions/gsd/verification-gate.js +142 -7
  142. package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
  143. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  144. package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
  145. package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
  146. package/dist/resources/extensions/gsd/worktree-lifecycle.js +86 -19
  147. package/dist/resources/extensions/gsd/worktree-manager.js +11 -2
  148. package/dist/resources/extensions/gsd/worktree-safety.js +43 -4
  149. package/dist/resources/extensions/gsd/worktree-state-projection.js +31 -0
  150. package/dist/resources/extensions/gsd/worktree-telemetry.js +32 -0
  151. package/dist/resources/extensions/shared/html-shell.js +388 -0
  152. package/dist/resources/extensions/shared/interview-ui.js +6 -4
  153. package/dist/resources/extensions/shared/next-action-ui.js +13 -5
  154. package/dist/resources/extensions/subagent/index.js +448 -78
  155. package/dist/resources/extensions/subagent/launch.js +77 -0
  156. package/dist/resources/extensions/subagent/run-store.js +148 -0
  157. package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
  158. package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
  159. package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
  160. package/dist/resources/extensions/visual-brief/index.js +5 -0
  161. package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
  162. package/dist/resources/extensions/visual-brief/prompts.js +140 -0
  163. package/dist/resources/skills/forensics/SKILL.md +1 -1
  164. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  165. package/dist/web/standalone/.next/BUILD_ID +1 -1
  166. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  167. package/dist/web/standalone/.next/build-manifest.json +4 -4
  168. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  169. package/dist/web/standalone/.next/react-loadable-manifest.json +5 -5
  170. package/dist/web/standalone/.next/required-server-files.json +4 -4
  171. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  172. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  174. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  175. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  176. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  177. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  178. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  179. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  180. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  181. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  182. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  185. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
  186. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
  187. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  188. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -5
  189. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  190. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  191. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
  192. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  199. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  211. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  221. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  226. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  231. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  232. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  241. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  246. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  247. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  253. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  256. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  259. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  263. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  264. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  267. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  268. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  269. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  270. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  271. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  272. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  273. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  274. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  275. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  276. package/dist/web/standalone/.next/server/app/index.html +1 -1
  277. package/dist/web/standalone/.next/server/app/index.rsc +5 -8
  278. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  279. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -8
  280. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  281. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -5
  282. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
  283. package/dist/web/standalone/.next/server/app/page.js +2 -2
  284. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  285. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  286. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  287. package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
  288. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  289. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  290. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  291. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  292. package/dist/web/standalone/.next/server/middleware.js +2 -2
  293. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  294. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  295. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  296. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  297. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  298. package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
  299. package/dist/web/standalone/.next/static/chunks/8359.65b24fac92188a6b.js +10 -0
  300. package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
  301. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  302. package/dist/web/standalone/.next/static/chunks/app/layout-8c10ec293ae0f1d5.js +1 -0
  303. package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
  304. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  305. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  306. package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-855d616060cb6e59.js} +1 -1
  307. package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
  308. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  309. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  310. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  311. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  312. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  313. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  314. package/dist/web/standalone/server.js +1 -1
  315. package/package.json +6 -5
  316. package/packages/contracts/dist/rpc.test.js +7 -0
  317. package/packages/contracts/dist/rpc.test.js.map +1 -1
  318. package/packages/contracts/dist/workflow.d.ts +21 -0
  319. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  320. package/packages/contracts/dist/workflow.js +24 -0
  321. package/packages/contracts/dist/workflow.js.map +1 -1
  322. package/packages/contracts/src/rpc.test.ts +8 -0
  323. package/packages/contracts/src/workflow.ts +24 -0
  324. package/packages/daemon/package.json +2 -2
  325. package/packages/mcp-server/README.md +14 -3
  326. package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
  327. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  328. package/packages/mcp-server/dist/workflow-tools.js +80 -0
  329. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  330. package/packages/mcp-server/package.json +2 -2
  331. package/packages/mcp-server/src/workflow-tools-parity.test.ts +244 -0
  332. package/packages/mcp-server/src/workflow-tools.test.ts +23 -1
  333. package/packages/mcp-server/src/workflow-tools.ts +168 -0
  334. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  335. package/packages/native/package.json +1 -1
  336. package/packages/native/tsconfig.json +2 -1
  337. package/packages/native/tsconfig.tsbuildinfo +1 -1
  338. package/packages/pi-agent-core/package.json +1 -1
  339. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  340. package/packages/pi-ai/dist/index.d.ts +2 -2
  341. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  342. package/packages/pi-ai/dist/index.js +1 -1
  343. package/packages/pi-ai/dist/index.js.map +1 -1
  344. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  345. package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
  346. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  347. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
  348. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
  349. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
  350. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
  351. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  352. package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
  353. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  354. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
  355. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
  356. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
  357. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
  358. package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
  359. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  360. package/packages/pi-ai/dist/providers/simple-options.js +5 -6
  361. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  362. package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
  363. package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
  364. package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
  365. package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
  366. package/packages/pi-ai/dist/providers/transform-messages.d.ts +11 -0
  367. package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  368. package/packages/pi-ai/dist/providers/transform-messages.js +20 -0
  369. package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
  370. package/packages/pi-ai/package.json +1 -1
  371. package/packages/pi-ai/src/index.ts +7 -2
  372. package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +49 -0
  373. package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
  374. package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
  375. package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
  376. package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
  377. package/packages/pi-ai/src/providers/simple-options.ts +5 -6
  378. package/packages/pi-ai/src/providers/transform-messages.ts +24 -0
  379. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  380. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts +2 -0
  381. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
  382. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
  383. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
  384. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  385. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  386. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
  387. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  388. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +6 -1
  389. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  390. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +7 -2
  391. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  392. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +14 -1
  393. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  394. package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
  395. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  396. package/packages/pi-coding-agent/dist/core/system-prompt.js +4 -4
  397. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  398. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +8 -2
  399. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  400. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  401. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
  402. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  403. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +1 -1
  404. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  406. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +82 -97
  407. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  408. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -7
  409. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  410. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +11 -0
  411. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  412. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
  413. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
  414. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  415. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  416. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +24 -10
  417. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  418. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts +2 -0
  419. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts.map +1 -0
  420. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +17 -0
  421. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -0
  422. package/packages/pi-coding-agent/package.json +1 -1
  423. package/packages/pi-coding-agent/src/core/agent-session-thinking-level.test.ts +79 -0
  424. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  425. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
  426. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +23 -1
  427. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +7 -2
  428. package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
  429. package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
  430. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +17 -1
  431. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
  432. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +1 -1
  433. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +91 -102
  434. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +15 -1
  435. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +9 -9
  436. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
  437. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
  438. package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +22 -0
  439. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  440. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts +2 -0
  441. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
  442. package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
  443. package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
  444. package/packages/pi-tui/dist/__tests__/tui.test.js +45 -2
  445. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  446. package/packages/pi-tui/dist/terminal.d.ts +2 -0
  447. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  448. package/packages/pi-tui/dist/terminal.js +12 -0
  449. package/packages/pi-tui/dist/terminal.js.map +1 -1
  450. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  451. package/packages/pi-tui/dist/tui.js +108 -24
  452. package/packages/pi-tui/dist/tui.js.map +1 -1
  453. package/packages/pi-tui/package.json +1 -1
  454. package/packages/pi-tui/src/__tests__/terminal.test.ts +121 -0
  455. package/packages/pi-tui/src/__tests__/tui.test.ts +59 -2
  456. package/packages/pi-tui/src/terminal.ts +11 -0
  457. package/packages/pi-tui/src/tui.ts +111 -24
  458. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  459. package/packages/rpc-client/package.json +1 -1
  460. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  461. package/pkg/package.json +1 -1
  462. package/src/resources/GSD-WORKFLOW.md +10 -1
  463. package/src/resources/extensions/browser-tools/tools/screenshot.ts +1 -0
  464. package/src/resources/extensions/browser-tools/tools/zoom.ts +1 -0
  465. package/src/resources/extensions/claude-code-cli/partial-builder.ts +2 -1
  466. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +52 -6
  467. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
  468. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +49 -2
  469. package/src/resources/extensions/cmux/index.ts +6 -0
  470. package/src/resources/extensions/gsd/auto/contracts.ts +64 -16
  471. package/src/resources/extensions/gsd/auto/detect-stuck.ts +1 -0
  472. package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
  473. package/src/resources/extensions/gsd/auto/loop.ts +123 -40
  474. package/src/resources/extensions/gsd/auto/orchestrator.ts +131 -8
  475. package/src/resources/extensions/gsd/auto/phases.ts +174 -60
  476. package/src/resources/extensions/gsd/auto/session.ts +16 -0
  477. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  478. package/src/resources/extensions/gsd/auto/unit-runner-events.ts +6 -2
  479. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
  480. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
  481. package/src/resources/extensions/gsd/auto-budget.ts +11 -0
  482. package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
  483. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
  484. package/src/resources/extensions/gsd/auto-dispatch.ts +164 -29
  485. package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
  486. package/src/resources/extensions/gsd/auto-post-unit.ts +369 -148
  487. package/src/resources/extensions/gsd/auto-prompts.ts +47 -16
  488. package/src/resources/extensions/gsd/auto-recovery.ts +86 -13
  489. package/src/resources/extensions/gsd/auto-start.ts +109 -14
  490. package/src/resources/extensions/gsd/auto-timers.ts +10 -3
  491. package/src/resources/extensions/gsd/auto-verification.ts +174 -42
  492. package/src/resources/extensions/gsd/auto-worktree.ts +202 -30
  493. package/src/resources/extensions/gsd/auto.ts +296 -107
  494. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +66 -10
  495. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +13 -10
  496. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -4
  497. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
  498. package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
  499. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +27 -10
  500. package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
  501. package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
  502. package/src/resources/extensions/gsd/commands/handlers/core.ts +42 -1
  503. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  504. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  505. package/src/resources/extensions/gsd/commands-handlers.ts +21 -2
  506. package/src/resources/extensions/gsd/commands-mcp-status.ts +8 -0
  507. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +11 -3
  508. package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
  509. package/src/resources/extensions/gsd/context-store.ts +120 -1
  510. package/src/resources/extensions/gsd/crash-recovery.ts +55 -6
  511. package/src/resources/extensions/gsd/db/auto-workers.ts +37 -0
  512. package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
  513. package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
  514. package/src/resources/extensions/gsd/db-base-schema.ts +2 -0
  515. package/src/resources/extensions/gsd/db-migration-steps.ts +5 -0
  516. package/src/resources/extensions/gsd/db-task-slice-rows.ts +4 -0
  517. package/src/resources/extensions/gsd/db-writer.ts +167 -84
  518. package/src/resources/extensions/gsd/dispatch-guard.ts +60 -2
  519. package/src/resources/extensions/gsd/docs/preferences-reference.md +11 -1
  520. package/src/resources/extensions/gsd/doctor-git-checks.ts +89 -7
  521. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
  522. package/src/resources/extensions/gsd/doctor-types.ts +3 -0
  523. package/src/resources/extensions/gsd/doctor.ts +2 -27
  524. package/src/resources/extensions/gsd/export-html.ts +27 -427
  525. package/src/resources/extensions/gsd/forensics.ts +9 -3
  526. package/src/resources/extensions/gsd/git-service.ts +182 -16
  527. package/src/resources/extensions/gsd/gsd-db.ts +80 -31
  528. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
  529. package/src/resources/extensions/gsd/guided-flow.ts +142 -134
  530. package/src/resources/extensions/gsd/guided-unit-context.ts +30 -0
  531. package/src/resources/extensions/gsd/init-wizard.ts +17 -2
  532. package/src/resources/extensions/gsd/journal.ts +8 -1
  533. package/src/resources/extensions/gsd/knowledge-backfill.ts +164 -0
  534. package/src/resources/extensions/gsd/knowledge-capture.ts +160 -0
  535. package/src/resources/extensions/gsd/knowledge-parser.ts +174 -0
  536. package/src/resources/extensions/gsd/knowledge-projection.ts +241 -0
  537. package/src/resources/extensions/gsd/markdown-renderer.ts +20 -12
  538. package/src/resources/extensions/gsd/mcp-filter.ts +80 -0
  539. package/src/resources/extensions/gsd/md-importer.ts +1 -1
  540. package/src/resources/extensions/gsd/memory-backfill.ts +89 -17
  541. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +277 -0
  542. package/src/resources/extensions/gsd/migrate/command.ts +5 -0
  543. package/src/resources/extensions/gsd/migrate/parsers.ts +139 -2
  544. package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
  545. package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
  546. package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
  547. package/src/resources/extensions/gsd/migration-auto-check.ts +15 -23
  548. package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
  549. package/src/resources/extensions/gsd/native-git-bridge.ts +63 -14
  550. package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -0
  551. package/src/resources/extensions/gsd/paths.ts +5 -0
  552. package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
  553. package/src/resources/extensions/gsd/planning-path-scope.ts +10 -2
  554. package/src/resources/extensions/gsd/post-execution-checks.ts +87 -12
  555. package/src/resources/extensions/gsd/pre-execution-checks.ts +67 -19
  556. package/src/resources/extensions/gsd/preferences-mcp.ts +27 -0
  557. package/src/resources/extensions/gsd/preferences-types.ts +35 -0
  558. package/src/resources/extensions/gsd/preferences-validation.ts +154 -0
  559. package/src/resources/extensions/gsd/preferences.ts +9 -0
  560. package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
  561. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  562. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  563. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  564. package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
  565. package/src/resources/extensions/gsd/prompts/forensics.md +3 -3
  566. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  567. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  568. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  569. package/src/resources/extensions/gsd/prompts/queue.md +4 -4
  570. package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  571. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  572. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  573. package/src/resources/extensions/gsd/prompts/system.md +2 -2
  574. package/src/resources/extensions/gsd/provider-switch-observer.ts +185 -0
  575. package/src/resources/extensions/gsd/queue-reorder-ui.ts +31 -13
  576. package/src/resources/extensions/gsd/repo-identity.ts +45 -25
  577. package/src/resources/extensions/gsd/repository-registry.ts +77 -0
  578. package/src/resources/extensions/gsd/safety/evidence-collector.ts +2 -0
  579. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +54 -19
  580. package/src/resources/extensions/gsd/session-lock.ts +15 -2
  581. package/src/resources/extensions/gsd/slice-parallel-conflict.ts +2 -2
  582. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +75 -3
  583. package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
  584. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
  585. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
  586. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
  587. package/src/resources/extensions/gsd/state.ts +33 -7
  588. package/src/resources/extensions/gsd/status-guards.ts +16 -2
  589. package/src/resources/extensions/gsd/templates/PREFERENCES.md +1 -0
  590. package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
  591. package/src/resources/extensions/gsd/templates/plan.md +9 -5
  592. package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
  593. package/src/resources/extensions/gsd/tests/artifact-retry-cap.test.ts +1 -1
  594. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +10 -1
  595. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
  596. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
  597. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +875 -59
  598. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +637 -16
  599. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
  600. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
  601. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
  602. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +136 -13
  603. package/src/resources/extensions/gsd/tests/auto-remote-session-lock-cleanup.test.ts +64 -0
  604. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -0
  605. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +4 -4
  606. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
  607. package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
  608. package/src/resources/extensions/gsd/tests/auto-workers.test.ts +29 -0
  609. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
  610. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +21 -0
  611. package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
  612. package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
  613. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +87 -0
  614. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
  615. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +32 -4
  616. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
  617. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
  618. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +55 -2
  619. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +60 -9
  620. package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
  621. package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
  622. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +104 -2
  623. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  624. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
  625. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -0
  626. package/src/resources/extensions/gsd/tests/db-writer.test.ts +13 -8
  627. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +453 -0
  628. package/src/resources/extensions/gsd/tests/decisions-stop-table-writes.test.ts +348 -0
  629. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +61 -2
  630. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +111 -1
  631. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +68 -1
  632. package/src/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +140 -1
  633. package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
  634. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +50 -0
  635. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +97 -0
  636. package/src/resources/extensions/gsd/tests/exec-sandbox.test.ts +99 -1
  637. package/src/resources/extensions/gsd/tests/execution-entry-missing-context-4671.test.ts +15 -1
  638. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
  639. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
  640. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +28 -0
  641. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
  642. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
  643. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
  644. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
  645. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
  646. package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
  647. package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
  648. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
  649. package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
  650. package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
  651. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
  652. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +22 -0
  653. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
  654. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
  655. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +226 -2
  656. package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
  657. package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
  658. package/src/resources/extensions/gsd/tests/integration/state-machine-edge-cases.test.ts +5 -21
  659. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +15 -0
  660. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
  661. package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +40 -0
  662. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +49 -3
  663. package/src/resources/extensions/gsd/tests/journal.test.ts +32 -0
  664. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +323 -0
  665. package/src/resources/extensions/gsd/tests/knowledge-capture.test.ts +242 -0
  666. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -2
  667. package/src/resources/extensions/gsd/tests/load-knowledge-block-rules-only.test.ts +209 -0
  668. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +287 -0
  669. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +11 -0
  670. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
  671. package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
  672. package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +21 -40
  673. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
  674. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +59 -1
  675. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
  676. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
  677. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +80 -2
  678. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
  679. package/src/resources/extensions/gsd/tests/parallel-orchestrator-zombie-cleanup.test.ts +55 -0
  680. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
  681. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
  682. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
  683. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
  684. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
  685. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  686. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +343 -3
  687. package/src/resources/extensions/gsd/tests/plan-task.test.ts +18 -1
  688. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  689. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -3
  690. package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +8 -1
  691. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
  692. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +147 -0
  693. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +54 -0
  694. package/src/resources/extensions/gsd/tests/preferences-mcp.test.ts +128 -0
  695. package/src/resources/extensions/gsd/tests/preferences.test.ts +75 -0
  696. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +79 -0
  697. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +42 -1
  698. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -0
  699. package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
  700. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
  701. package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
  702. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
  703. package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
  704. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
  705. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +28 -1
  706. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +52 -0
  707. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -3
  708. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +35 -0
  709. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +16 -4
  710. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +59 -1
  711. package/src/resources/extensions/gsd/tests/slice-parallel-conflict.test.ts +2 -2
  712. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +112 -1
  713. package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
  714. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +94 -2
  715. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
  716. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
  717. package/src/resources/extensions/gsd/tests/status-guards.test.ts +17 -1
  718. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
  719. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +2 -1
  720. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
  721. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +1 -0
  722. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +131 -9
  723. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +111 -1
  724. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
  725. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +68 -0
  726. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +42 -1
  727. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +188 -1
  728. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
  729. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
  730. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
  731. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
  732. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +153 -1
  733. package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
  734. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
  735. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +73 -2
  736. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +25 -0
  737. package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +90 -0
  738. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +95 -0
  739. package/src/resources/extensions/gsd/tests/worktree-telemetry.test.ts +16 -0
  740. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +27 -0
  741. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +59 -0
  742. package/src/resources/extensions/gsd/tools/complete-milestone.ts +18 -10
  743. package/src/resources/extensions/gsd/tools/complete-slice.ts +57 -10
  744. package/src/resources/extensions/gsd/tools/exec-tool.ts +98 -5
  745. package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
  746. package/src/resources/extensions/gsd/tools/plan-slice.ts +172 -12
  747. package/src/resources/extensions/gsd/tools/validate-milestone.ts +31 -0
  748. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +166 -17
  749. package/src/resources/extensions/gsd/types.ts +1 -1
  750. package/src/resources/extensions/gsd/unit-context-composer.ts +3 -0
  751. package/src/resources/extensions/gsd/unit-context-manifest.ts +86 -19
  752. package/src/resources/extensions/gsd/validation.ts +23 -1
  753. package/src/resources/extensions/gsd/verification-gate.ts +170 -6
  754. package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
  755. package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
  756. package/src/resources/extensions/gsd/workflow-manifest.ts +2 -0
  757. package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
  758. package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
  759. package/src/resources/extensions/gsd/worktree-lifecycle.ts +98 -20
  760. package/src/resources/extensions/gsd/worktree-manager.ts +14 -2
  761. package/src/resources/extensions/gsd/worktree-safety.ts +57 -10
  762. package/src/resources/extensions/gsd/worktree-state-projection.ts +43 -0
  763. package/src/resources/extensions/gsd/worktree-telemetry.ts +39 -0
  764. package/src/resources/extensions/shared/html-shell.ts +412 -0
  765. package/src/resources/extensions/shared/interview-ui.ts +6 -4
  766. package/src/resources/extensions/shared/next-action-ui.ts +11 -5
  767. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +15 -0
  768. package/src/resources/extensions/shared/tests/next-action-ui-hasui.test.ts +32 -0
  769. package/src/resources/extensions/subagent/index.ts +567 -103
  770. package/src/resources/extensions/subagent/launch.ts +131 -0
  771. package/src/resources/extensions/subagent/run-store.ts +218 -0
  772. package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
  773. package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
  774. package/src/resources/extensions/ttsr/ttsr-manager.ts +5 -1
  775. package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
  776. package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
  777. package/src/resources/extensions/visual-brief/index.ts +8 -0
  778. package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
  779. package/src/resources/extensions/visual-brief/prompts.ts +183 -0
  780. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
  781. package/src/resources/skills/forensics/SKILL.md +1 -1
  782. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  783. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  784. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
  785. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  786. package/dist/web/standalone/.next/static/chunks/app/layout-9ecfd95f343793f0.js +0 -1
  787. package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.js +0 -1
  788. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  789. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  790. package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
  791. package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
  792. package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  793. package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  794. package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  795. package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  796. package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  797. package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  798. /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → Z8H5evS-hDo0qdP22XJPA}/_buildManifest.js +0 -0
  799. /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → Z8H5evS-hDo0qdP22XJPA}/_ssgManifest.js +0 -0
@@ -22,7 +22,7 @@ import { gsdRoot, resolveMilestoneFile, resolveMilestonePath, resolveDir, milest
22
22
  import { invalidateAllCaches } from "./cache.js";
23
23
  import { clearActivityLogState } from "./activity-log.js";
24
24
  import { synthesizeCrashRecovery, getDeepDiagnostic, readActiveMilestoneId, } from "./session-forensics.js";
25
- import { writeLock, clearLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, emitOpenUnitEndForUnit, } from "./crash-recovery.js";
25
+ import { writeLock, clearLock, clearStaleWorkerLock, readCrashLock, isLockProcessAlive, formatCrashInfo, emitCrashRecoveredUnitEnd, emitOpenUnitEndForUnit, } from "./crash-recovery.js";
26
26
  import { acquireSessionLock, getSessionLockStatus, releaseSessionLock, updateSessionLock, } from "./session-lock.js";
27
27
  import { resolveAutoSupervisorConfig, loadEffectiveGSDPreferences, getIsolationMode, } from "./preferences.js";
28
28
  import { sendDesktopNotification } from "./notifications.js";
@@ -52,7 +52,7 @@ import { createAutoWorktree, teardownAutoWorktree, isInAutoWorktree, getAutoWork
52
52
  import { pruneQueueOrder } from "./queue-order.js";
53
53
  import { startCommandPolling as _startCommandPolling, isRemoteConfigured } from "../remote-questions/manager.js";
54
54
  import { debugLog, isDebugEnabled, writeDebugSummary } from "./debug-logger.js";
55
- import { reconcileMergeState, } from "./auto-recovery.js";
55
+ import { reconcileMergeState, verifyExpectedArtifact, } from "./auto-recovery.js";
56
56
  import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
57
57
  import { resolveDispatch, DISPATCH_RULES } from "./auto-dispatch.js";
58
58
  import { getErrorMessage } from "./error-utils.js";
@@ -92,6 +92,7 @@ import { compileUnitToolContract } from "./tool-contract.js";
92
92
  import { createWorktreeSafetyModule } from "./worktree-safety.js";
93
93
  import { resolveManifest } from "./unit-context-manifest.js";
94
94
  import { classifyFailure } from "./recovery-classification.js";
95
+ import { supportsStructuredQuestions } from "./workflow-mcp.js";
95
96
  import { WorktreeLifecycle, } from "./worktree-lifecycle.js";
96
97
  import { WorktreeStateProjection } from "./worktree-state-projection.js";
97
98
  import { reorderForCaching } from "./prompt-ordering.js";
@@ -109,7 +110,7 @@ export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session
109
110
  import { autoSession as s } from "./auto-runtime-state.js";
110
111
  import { gsdHome } from "./gsd-home.js";
111
112
  import { createWorkspace, scopeMilestone } from "./workspace.js";
112
- import { registerAutoWorker, markWorkerStopping } from "./db/auto-workers.js";
113
+ import { registerAutoWorker, markWorkerStopping, } from "./db/auto-workers.js";
113
114
  import { releaseMilestoneLease } from "./db/milestone-leases.js";
114
115
  import { normalizeRealPath } from "./paths.js";
115
116
  // ── ENCAPSULATION INVARIANT ─────────────────────────────────────────────────
@@ -126,6 +127,12 @@ import { normalizeRealPath } from "./paths.js";
126
127
  // ─────────────────────────────────────────────────────────────────────────────
127
128
  /** Throttle STATE.md rebuilds — at most once per 30 seconds */
128
129
  const STATE_REBUILD_MIN_INTERVAL_MS = 30_000;
130
+ export function formatAutoStopNotification(prefix, totals, unitCount) {
131
+ return [
132
+ `${prefix}.`,
133
+ `Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${unitCount} units`,
134
+ ].join("\n");
135
+ }
129
136
  /**
130
137
  * Phase B — register this auto-mode process in the workers table so other
131
138
  * workers and janitors can detect liveness via heartbeat. Best-effort: if
@@ -252,6 +259,32 @@ function synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile
252
259
  export function _synthesizePausedSessionRecoveryForTest(basePath, unitType, unitId, sessionFile) {
253
260
  return synthesizePausedSessionRecovery(basePath, unitType, unitId, sessionFile);
254
261
  }
262
+ function handlePausedSessionResumeRecovery(basePath, state, notify) {
263
+ if (!state.pausedSessionFile)
264
+ return { skippedReplay: false };
265
+ const pausedRecoveryUnitType = state.currentUnit?.type ?? state.pausedUnitType ?? "unknown";
266
+ const pausedRecoveryUnitId = state.currentUnit?.id ?? state.pausedUnitId ?? "unknown";
267
+ const completedPausedUnit = verifyExpectedArtifact(pausedRecoveryUnitType, pausedRecoveryUnitId, basePath);
268
+ if (completedPausedUnit) {
269
+ state.pausedSessionFile = null;
270
+ state.pausedUnitType = null;
271
+ state.pausedUnitId = null;
272
+ state.pendingCrashRecovery = null;
273
+ return { skippedReplay: true };
274
+ }
275
+ const recovery = synthesizePausedSessionRecovery(basePath, pausedRecoveryUnitType, pausedRecoveryUnitId, state.pausedSessionFile);
276
+ if (recovery && recovery.trace.toolCallCount > 0) {
277
+ state.pendingCrashRecovery = recovery.prompt;
278
+ notify(`Recovered ${recovery.trace.toolCallCount} tool calls from paused session. Resuming with context.`);
279
+ }
280
+ state.pausedSessionFile = null;
281
+ state.pausedUnitType = null;
282
+ state.pausedUnitId = null;
283
+ return { skippedReplay: false };
284
+ }
285
+ export function _handlePausedSessionResumeRecoveryForTest(basePath, state) {
286
+ return handlePausedSessionResumeRecovery(basePath, state, () => { });
287
+ }
255
288
  // `_resolvePausedResumeBasePathForTest` was retired in ADR-016 phase 2 / B3
256
289
  // (#5621). Production callers go through
257
290
  // `WorktreeLifecycle.resumeFromPausedSession`; the pure helper for tests is
@@ -559,6 +592,7 @@ export function checkRemoteAutoSession(projectRoot) {
559
592
  return { running: false };
560
593
  if (!isLockProcessAlive(lock)) {
561
594
  // Stale lock from a dead process — not a live remote session
595
+ clearLock(projectRoot);
562
596
  return { running: false };
563
597
  }
564
598
  return {
@@ -682,6 +716,8 @@ export async function rerootCommandSession(cmdCtx, workspaceRoot) {
682
716
  }
683
717
  }
684
718
  export async function cleanupAfterLoopExit(ctx) {
719
+ const preserveStepSurface = s.preserveStepSurfaceAfterLoopExit;
720
+ const preservePausedSurface = s.paused;
685
721
  s.currentUnit = null;
686
722
  s.active = false;
687
723
  deactivateGSD();
@@ -705,34 +741,32 @@ export async function cleanupAfterLoopExit(ctx) {
705
741
  // A transient provider-error pause intentionally leaves the paused badge
706
742
  // visible so the user still has a resumable auto-mode signal on screen.
707
743
  if (!s.paused) {
708
- ctx.ui.setStatus("gsd-auto", undefined);
709
- if (s.completionStopInProgress) {
710
- s.completionStopInProgress = false;
744
+ if (preserveStepSurface) {
745
+ s.preserveStepSurfaceAfterLoopExit = false;
746
+ }
747
+ else {
748
+ ctx.ui.setStatus("gsd-auto", undefined);
749
+ ctx.ui.setWidget("gsd-progress", undefined);
750
+ if (s.completionStopInProgress) {
751
+ s.completionStopInProgress = false;
752
+ }
753
+ initHealthWidget(ctx);
711
754
  }
712
- initHealthWidget(ctx);
713
755
  }
714
- // ADR-016 phase 3 (#5693): the stop-path basePath restore routes through
715
- // `Lifecycle.restoreToProjectRoot()`, the sole owner of `s.basePath`
716
- // mutation. The verb assigns `s.basePath` before any throwable work
717
- // (rebuildGitService, cache invalidation), so a thrown error still leaves
718
- // basePath restored no fallback assignment needed at the call site.
719
- // The chdir stays here because `restoreToProjectRoot` is a pure
720
- // session-state mutation.
721
- if (s.originalBasePath) {
756
+ // ADR-016 phase 3 (#5693): the stop-path basePath restore + chdir routes
757
+ // through `Lifecycle.restoreToProjectRoot()`, the sole owner of both
758
+ // `s.basePath` mutation and the paired `process.chdir` for auto-loop
759
+ // transitions. The verb assigns `s.basePath` before any throwable work, so
760
+ // a thrown error still leaves basePath restored.
761
+ if (s.originalBasePath && !preserveStepSurface && !preservePausedSurface) {
722
762
  try {
723
763
  buildLifecycle().restoreToProjectRoot();
724
764
  }
725
765
  catch (err) {
726
766
  logWarning("engine", `restore project root failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
727
767
  }
728
- try {
729
- process.chdir(s.originalBasePath);
730
- }
731
- catch (err) {
732
- logWarning("engine", `basePath restore/chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
733
- }
734
768
  }
735
- if (s.originalBasePath && s.cmdCtx) {
769
+ if (s.originalBasePath && s.cmdCtx && !preserveStepSurface && !preservePausedSurface) {
736
770
  const result = await rerootCommandSession(s.cmdCtx, s.originalBasePath);
737
771
  if (result.status === "cancelled") {
738
772
  logWarning("engine", "post-loop session re-root was cancelled", { file: "auto.ts", basePath: s.originalBasePath });
@@ -803,29 +837,16 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
803
837
  // worktree was active, and whether the current milestone was merged before
804
838
  // stopAuto. The unmerged-work warning is only meaningful for real worktrees.
805
839
  try {
806
- const { emitAutoExit } = await import("./worktree-telemetry.js");
840
+ const { emitAutoExit, normalizeAutoExitReason } = await import("./worktree-telemetry.js");
807
841
  // Normalize the free-form reason to a closed set so the telemetry
808
842
  // aggregator buckets stably. Raw detail is preserved in the phases.ts
809
843
  // notification and the notify'd error string.
810
844
  const rawReason = reason ?? "stop";
811
- const normalizedReason = rawReason.startsWith("Blocked:")
812
- ? "blocked"
813
- : rawReason.startsWith("Merge conflict")
814
- ? "merge-conflict"
815
- : rawReason.startsWith("Merge error") || rawReason.startsWith("Merge failed")
816
- ? "merge-failed"
817
- : rawReason.startsWith("slice-merge-conflict")
818
- ? "slice-merge-conflict"
819
- : rawReason === "All milestones complete"
820
- ? "all-complete"
821
- : rawReason === "No active milestone"
822
- ? "no-active-milestone"
823
- : rawReason === "stop" || rawReason === "pause"
824
- ? rawReason
825
- : "other";
845
+ const normalizedReason = normalizeAutoExitReason(rawReason);
826
846
  const telemetryBase = s.originalBasePath || s.basePath;
827
847
  emitAutoExit(telemetryBase, {
828
848
  reason: normalizedReason,
849
+ rawReason,
829
850
  milestoneId: s.currentMilestoneId ?? undefined,
830
851
  milestoneMerged: s.milestoneMergedInPhases === true,
831
852
  isolationMode: getIsolationMode(telemetryBase),
@@ -1001,8 +1022,8 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1001
1022
  }
1002
1023
  }
1003
1024
  // ── Step 7: Restore basePath and chdir (ADR-016 phase 3, #5693) ──
1004
- // `restoreToProjectRoot` assigns s.basePath before any throwable work;
1005
- // no fallback assignment is needed at the call site.
1025
+ // `restoreToProjectRoot` owns both s.basePath restore and process.chdir;
1026
+ // no paired chdir is needed at the call site.
1006
1027
  if (s.originalBasePath) {
1007
1028
  try {
1008
1029
  buildLifecycle().restoreToProjectRoot();
@@ -1010,13 +1031,6 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1010
1031
  catch (e) {
1011
1032
  debugLog("stop-cleanup-basepath", { error: e instanceof Error ? e.message : String(e) });
1012
1033
  }
1013
- try {
1014
- process.chdir(s.basePath);
1015
- }
1016
- catch (err) {
1017
- /* best-effort */
1018
- logWarning("engine", `chdir failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1019
- }
1020
1034
  }
1021
1035
  // Re-root the active command session/tool runtime after worktree teardown.
1022
1036
  // mergeAndExit restores process.cwd(), but AgentSession has already captured
@@ -1043,7 +1057,7 @@ export async function stopAuto(ctx, pi, reason, options = {}) {
1043
1057
  : `Auto-mode stopped${reasonSuffix}`;
1044
1058
  if (ledger && ledger.units.length > 0) {
1045
1059
  const totals = getProjectTotals(ledger.units);
1046
- ctx?.ui.notify(`${notificationPrefix}. Session: ${formatCost(totals.cost)} · ${formatTokenCount(totals.tokens.total)} tokens · ${ledger.units.length} units`, "info");
1060
+ ctx?.ui.notify(formatAutoStopNotification(notificationPrefix, totals, ledger.units.length), "info");
1047
1061
  }
1048
1062
  else {
1049
1063
  ctx?.ui.notify(`${notificationPrefix}.`, "info");
@@ -1332,7 +1346,6 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
1332
1346
  restoreProjectRootEnv();
1333
1347
  restoreMilestoneLockEnv();
1334
1348
  s.pendingVerificationRetry = null;
1335
- s.verificationRetryCount.clear();
1336
1349
  ctx?.ui.setStatus("gsd-auto", "paused");
1337
1350
  ctx?.ui.setWidget("gsd-progress", undefined);
1338
1351
  const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
@@ -1385,6 +1398,93 @@ export function buildWorktreeLifecycleDeps() {
1385
1398
  function buildLifecycle() {
1386
1399
  return new WorktreeLifecycle(s, buildWorktreeLifecycleDeps());
1387
1400
  }
1401
+ /**
1402
+ * Build the production `DispatchAdapter` used by `createWiredAutoOrchestrationModule`.
1403
+ *
1404
+ * Exported so tests can verify parity with `runDispatch`'s `resolveDispatch` call —
1405
+ * the wired adapter must derive `structuredQuestionsAvailable`, `sessionContextWindow`,
1406
+ * `sessionProvider`, and `modelRegistry` the same way phases.ts:runDispatch does.
1407
+ */
1408
+ export function createWiredDispatchAdapter(ctx, pi, dispatchBasePath, session) {
1409
+ return {
1410
+ async decideNextUnit(input) {
1411
+ const state = input.stateSnapshot;
1412
+ const active = state.activeMilestone;
1413
+ if (!active)
1414
+ return null;
1415
+ const activeSession = input.session ?? session;
1416
+ const activeDispatchBasePath = activeSession?.basePath || dispatchBasePath;
1417
+ const prefs = loadEffectiveGSDPreferences(activeDispatchBasePath)?.preferences;
1418
+ // Derive session-derived dispatch inputs the same way phases.ts:runDispatch does
1419
+ // (#5789). Prefer caller-supplied values when present so test harnesses and
1420
+ // alternative wirings can inject deterministic snapshots; otherwise pull from
1421
+ // the captured pi/ctx references.
1422
+ const sessionProvider = input.sessionProvider ?? ctx.model?.provider;
1423
+ const sessionContextWindow = input.sessionContextWindow ?? ctx.model?.contextWindow;
1424
+ const modelRegistry = input.modelRegistry ?? ctx.modelRegistry;
1425
+ const authMode = sessionProvider && typeof ctx.modelRegistry?.getProviderAuthMode === "function"
1426
+ ? ctx.modelRegistry.getProviderAuthMode(sessionProvider)
1427
+ : undefined;
1428
+ const activeTools = typeof pi.getActiveTools === "function" ? pi.getActiveTools() : [];
1429
+ // Mirrors runDispatch: deep-planning keeps approval gates in plain chat
1430
+ // because structured questions can be cancelled outside the chat turn on
1431
+ // some transports.
1432
+ const structuredQuestionsAvailable = input.structuredQuestionsAvailable ??
1433
+ (prefs?.planning_depth === "deep"
1434
+ ? "false"
1435
+ : supportsStructuredQuestions(activeTools, {
1436
+ authMode,
1437
+ baseUrl: ctx.model?.baseUrl,
1438
+ })
1439
+ ? "true"
1440
+ : "false");
1441
+ const action = await resolveDispatch({
1442
+ basePath: activeDispatchBasePath,
1443
+ mid: active.id,
1444
+ midTitle: active.title,
1445
+ state,
1446
+ prefs,
1447
+ session: activeSession,
1448
+ structuredQuestionsAvailable,
1449
+ sessionContextWindow,
1450
+ sessionProvider,
1451
+ modelRegistry,
1452
+ });
1453
+ if (action.action === "stop") {
1454
+ if (session)
1455
+ session.pendingOrchestrationDispatch = null;
1456
+ return {
1457
+ kind: "blocked",
1458
+ reason: action.reason,
1459
+ action: action.level === "warning" ? "pause" : "stop",
1460
+ };
1461
+ }
1462
+ if (action.action !== "dispatch") {
1463
+ if (session)
1464
+ session.pendingOrchestrationDispatch = null;
1465
+ return null;
1466
+ }
1467
+ if (session) {
1468
+ const pending = {
1469
+ unitType: action.unitType,
1470
+ unitId: action.unitId,
1471
+ prompt: action.prompt,
1472
+ pauseAfterUatDispatch: action.pauseAfterDispatch ?? false,
1473
+ state,
1474
+ mid: active.id,
1475
+ midTitle: active.title,
1476
+ };
1477
+ session.pendingOrchestrationDispatch = pending;
1478
+ }
1479
+ return {
1480
+ unitType: action.unitType,
1481
+ unitId: action.unitId,
1482
+ reason: action.matchedRule ?? "dispatch",
1483
+ preconditions: [],
1484
+ };
1485
+ },
1486
+ };
1487
+ }
1388
1488
  /**
1389
1489
  * Thin entry glue for the new Auto Orchestration module.
1390
1490
  *
@@ -1392,7 +1492,7 @@ function buildLifecycle() {
1392
1492
  * no behavior changes to the existing auto loop. It provides a concrete seam
1393
1493
  * the next refactor steps can adopt incrementally.
1394
1494
  */
1395
- export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, runtimeBasePath = resolveProjectRoot(dispatchBasePath)) {
1495
+ export function createWiredAutoOrchestrationModule(ctx, pi, dispatchBasePath, runtimeBasePath = resolveProjectRoot(dispatchBasePath)) {
1396
1496
  const flowId = `auto-orchestrator-${Date.now()}`;
1397
1497
  let seq = 0;
1398
1498
  const deps = {
@@ -1416,30 +1516,7 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1416
1516
  };
1417
1517
  },
1418
1518
  },
1419
- dispatch: {
1420
- async decideNextUnit(input) {
1421
- const state = input.stateSnapshot;
1422
- const active = state.activeMilestone;
1423
- if (!active)
1424
- return null;
1425
- const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
1426
- const action = await resolveDispatch({
1427
- basePath: dispatchBasePath,
1428
- mid: active.id,
1429
- midTitle: active.title,
1430
- state,
1431
- prefs,
1432
- });
1433
- if (action.action !== "dispatch")
1434
- return null;
1435
- return {
1436
- unitType: action.unitType,
1437
- unitId: action.unitId,
1438
- reason: action.matchedRule ?? "dispatch",
1439
- preconditions: [],
1440
- };
1441
- },
1442
- },
1519
+ dispatch: createWiredDispatchAdapter(ctx, pi, dispatchBasePath, s),
1443
1520
  recovery: {
1444
1521
  async classifyAndRecover(input) {
1445
1522
  const recovery = classifyFailure(input);
@@ -1463,9 +1540,15 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1463
1540
  reason: `No Unit manifest is registered for ${unitType}`,
1464
1541
  };
1465
1542
  }
1543
+ if (getIsolationMode(runtimeBasePath) !== "worktree") {
1544
+ return { ok: true, reason: "not-required" };
1545
+ }
1466
1546
  const writeScope = manifest.tools.mode === "all" || manifest.tools.mode === "docs"
1467
1547
  ? "source-writing"
1468
1548
  : "planning-only";
1549
+ if (getIsolationMode(runtimeBasePath) !== "worktree") {
1550
+ return { ok: true, reason: "isolation-not-worktree" };
1551
+ }
1469
1552
  const safety = createWorktreeSafetyModule();
1470
1553
  const snapshot = await deriveState(dispatchBasePath);
1471
1554
  const milestoneId = snapshot.activeMilestone?.id ?? null;
@@ -1477,6 +1560,7 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1477
1560
  projectRoot: runtimeBasePath,
1478
1561
  unitRoot: dispatchBasePath,
1479
1562
  milestoneId,
1563
+ isolationMode: getIsolationMode(runtimeBasePath),
1480
1564
  expectedBranch,
1481
1565
  });
1482
1566
  if (!result.ok) {
@@ -1488,12 +1572,26 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1488
1572
  async cleanupOnStop() { },
1489
1573
  },
1490
1574
  health: {
1575
+ checkResourcesStale() {
1576
+ return checkResourcesStale(s.resourceVersionOnStart);
1577
+ },
1491
1578
  async preAdvanceGate() {
1492
- const gate = await preDispatchHealthGate(dispatchBasePath);
1493
- return {
1494
- allow: gate.proceed,
1495
- reason: gate.reason,
1496
- };
1579
+ try {
1580
+ const gate = await preDispatchHealthGate(dispatchBasePath);
1581
+ if (gate.proceed) {
1582
+ return {
1583
+ kind: "pass",
1584
+ fixesApplied: gate.fixesApplied,
1585
+ };
1586
+ }
1587
+ return {
1588
+ kind: "fail",
1589
+ reason: gate.reason ?? "Pre-dispatch health check failed — run /gsd doctor for details.",
1590
+ };
1591
+ }
1592
+ catch (error) {
1593
+ return { kind: "threw", error };
1594
+ }
1497
1595
  },
1498
1596
  async postAdvanceRecord(result) {
1499
1597
  if (result.kind === "error") {
@@ -1523,22 +1621,22 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1523
1621
  },
1524
1622
  async journalTransition(event) {
1525
1623
  const eventType = event.name === "start"
1526
- ? "iteration-start"
1624
+ ? "orchestrator-iteration-start"
1527
1625
  : event.name === "resume"
1528
- ? "iteration-start"
1626
+ ? "orchestrator-iteration-start"
1529
1627
  : event.name === "advance"
1530
- ? "dispatch-match"
1628
+ ? "orchestrator-dispatch-match"
1531
1629
  : event.name === "advance-blocked"
1532
- ? "guard-block"
1630
+ ? "orchestrator-guard-block"
1533
1631
  : event.name === "advance-stopped"
1534
- ? "dispatch-stop"
1632
+ ? "orchestrator-dispatch-stop"
1535
1633
  : event.name === "advance-error"
1536
- ? "iteration-end"
1634
+ ? "orchestrator-iteration-end"
1537
1635
  : event.name === "advance-paused" || event.name === "advance-retry"
1538
- ? "guard-block"
1636
+ ? "orchestrator-guard-block"
1539
1637
  : event.name === "stop"
1540
- ? "terminal"
1541
- : "iteration-end";
1638
+ ? "orchestrator-terminal"
1639
+ : "orchestrator-iteration-end";
1542
1640
  _emitJournalEvent(runtimeBasePath, {
1543
1641
  ts: new Date().toISOString(),
1544
1642
  flowId,
@@ -1561,9 +1659,59 @@ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, r
1561
1659
  }
1562
1660
  },
1563
1661
  },
1662
+ uokGate: {
1663
+ async emit(input) {
1664
+ const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
1665
+ const uokFlags = resolveUokFlags(prefs);
1666
+ if (!uokFlags.gates)
1667
+ return;
1668
+ const milestoneId = input.milestoneId ?? s.currentMilestoneId ?? undefined;
1669
+ try {
1670
+ const { UokGateRunner } = await import("./uok/gate-runner.js");
1671
+ const runner = new UokGateRunner();
1672
+ runner.register({
1673
+ id: input.gateId,
1674
+ type: input.gateType,
1675
+ execute: async () => ({
1676
+ outcome: input.outcome,
1677
+ failureClass: input.failureClass,
1678
+ rationale: input.rationale,
1679
+ findings: input.findings ?? "",
1680
+ }),
1681
+ });
1682
+ await runner.run(input.gateId, {
1683
+ basePath: dispatchBasePath,
1684
+ traceId: `pre-dispatch:${flowId}`,
1685
+ turnId: `orch-${seq}`,
1686
+ milestoneId,
1687
+ unitType: "pre-dispatch",
1688
+ unitId: `orch-${seq}`,
1689
+ });
1690
+ }
1691
+ catch (err) {
1692
+ logWarning("engine", `uok gate emit failed: ${getErrorMessage(err)}`, {
1693
+ file: "auto.ts",
1694
+ gateId: input.gateId,
1695
+ gateType: input.gateType,
1696
+ ...(milestoneId ? { milestoneId } : {}),
1697
+ });
1698
+ }
1699
+ },
1700
+ },
1564
1701
  };
1565
1702
  return createAutoOrchestrator(deps);
1566
1703
  }
1704
+ function notifyResumeBlocked(ctx, result) {
1705
+ const resumeCmd = s.stepMode ? "/gsd next" : "/gsd auto";
1706
+ ctx.ui.notify(`Auto-mode blocked: ${result.reason}. Fix and run ${resumeCmd} to resume.`, "warning");
1707
+ setLifecycleOutcome(ctx, {
1708
+ status: "blocked",
1709
+ title: "Auto-mode blocked",
1710
+ detail: result.reason,
1711
+ nextAction: `Fix the blocker, then run ${resumeCmd} to resume.`,
1712
+ commands: ["/gsd status for overview", `${resumeCmd} to resume`, "/gsd doctor to diagnose"],
1713
+ });
1714
+ }
1567
1715
  function ensureOrchestrationModule(ctx, pi, basePath) {
1568
1716
  s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
1569
1717
  }
@@ -1848,7 +1996,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1848
1996
  // This closes the journal gap reported in #3348 where the worker wrote side
1849
1997
  // effects (SUMMARY.md, DB updates) but died before emitting unit-end.
1850
1998
  emitCrashRecoveredUnitEnd(base, freshStartAssessment.lock);
1851
- clearLock(base);
1999
+ clearStaleWorkerLock(base);
1852
2000
  }
1853
2001
  if (!s.paused) {
1854
2002
  s.pendingCrashRecovery =
@@ -1911,6 +2059,8 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1911
2059
  initMetrics(base);
1912
2060
  if (s.currentMilestoneId)
1913
2061
  setActiveMilestoneId(base, s.currentMilestoneId);
2062
+ await openProjectDbIfPresent(base);
2063
+ registerAutoWorkerForSession(s, base);
1914
2064
  // Re-register health level notification callback lost across process restart
1915
2065
  setLevelChangeCallback((_from, to, summary) => {
1916
2066
  const level = to === "red" ? "error" : to === "yellow" ? "warning" : "info";
@@ -1969,24 +2119,25 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1969
2119
  });
1970
2120
  }
1971
2121
  invalidateAllCaches();
1972
- if (s.pausedSessionFile) {
1973
- const recovery = synthesizePausedSessionRecovery(s.basePath, s.currentUnit?.type ?? s.pausedUnitType ?? "unknown", s.currentUnit?.id ?? s.pausedUnitId ?? "unknown", s.pausedSessionFile);
1974
- if (recovery && recovery.trace.toolCallCount > 0) {
1975
- s.pendingCrashRecovery = recovery.prompt;
1976
- ctx.ui.notify(`Recovered ${recovery.trace.toolCallCount} tool calls from paused session. Resuming with context.`, "info");
1977
- }
1978
- s.pausedSessionFile = null;
1979
- }
2122
+ handlePausedSessionResumeRecovery(s.basePath, s, (message) => ctx.ui.notify(message, "info"));
1980
2123
  captureProjectRootEnv(s.originalBasePath || s.basePath);
1981
2124
  registerAutoWorkerForSession(s);
1982
2125
  updateSessionLock(lockBase(), "resuming", s.currentMilestoneId ?? "unknown");
1983
2126
  if (s.workerId) {
1984
2127
  writeLock(lockBase(), "resuming", s.currentMilestoneId ?? "unknown");
1985
- clearPausedSession("paused-session DB cleanup failed (resume activation)");
1986
2128
  }
2129
+ clearPausedSession("paused-session DB cleanup failed (resume activation)");
1987
2130
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
1988
2131
  try {
1989
- await s.orchestration?.resume();
2132
+ const resumeResult = await s.orchestration?.resume();
2133
+ if (resumeResult?.kind === "blocked" && resumeResult.action === "stop") {
2134
+ notifyResumeBlocked(ctx, resumeResult);
2135
+ await cleanupAfterLoopExit(ctx);
2136
+ return;
2137
+ }
2138
+ if (resumeResult?.kind === "blocked") {
2139
+ notifyResumeBlocked(ctx, resumeResult);
2140
+ }
1990
2141
  }
1991
2142
  catch (err) {
1992
2143
  debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
@@ -2007,6 +2158,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
2007
2158
  const bootstrapDeps = {
2008
2159
  shouldUseWorktreeIsolation,
2009
2160
  registerSigtermHandler,
2161
+ registerAutoWorkerForSession: (projectRoot) => registerAutoWorkerForSession(s, projectRoot),
2010
2162
  lockBase,
2011
2163
  buildLifecycle,
2012
2164
  };