gsd-pi 2.82.0 → 3.0.0-dev.8b8d129d7

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 (744) hide show
  1. package/README.md +125 -32
  2. package/dist/cli.js +20 -9
  3. package/dist/headless.js +9 -2
  4. package/dist/resources/.managed-resources-content-hash +1 -1
  5. package/dist/resources/GSD-WORKFLOW.md +10 -1
  6. package/dist/resources/extensions/browser-tools/tools/screenshot.js +1 -0
  7. package/dist/resources/extensions/browser-tools/tools/zoom.js +1 -0
  8. package/dist/resources/extensions/claude-code-cli/partial-builder.js +2 -1
  9. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -6
  10. package/dist/resources/extensions/cmux/index.js +5 -0
  11. package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
  12. package/dist/resources/extensions/gsd/auto/loop.js +110 -37
  13. package/dist/resources/extensions/gsd/auto/orchestrator.js +124 -6
  14. package/dist/resources/extensions/gsd/auto/phases.js +106 -38
  15. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
  18. package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
  19. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
  20. package/dist/resources/extensions/gsd/auto-dispatch.js +20 -19
  21. package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
  22. package/dist/resources/extensions/gsd/auto-post-unit.js +278 -137
  23. package/dist/resources/extensions/gsd/auto-prompts.js +47 -13
  24. package/dist/resources/extensions/gsd/auto-recovery.js +79 -14
  25. package/dist/resources/extensions/gsd/auto-start.js +87 -14
  26. package/dist/resources/extensions/gsd/auto-timers.js +11 -3
  27. package/dist/resources/extensions/gsd/auto-verification.js +102 -34
  28. package/dist/resources/extensions/gsd/auto-worktree.js +178 -11
  29. package/dist/resources/extensions/gsd/auto.js +216 -81
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +31 -7
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -9
  32. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +10 -4
  33. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +55 -12
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +24 -9
  36. package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
  37. package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
  38. package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -1
  39. package/dist/resources/extensions/gsd/commands/handlers/ops.js +20 -0
  40. package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
  41. package/dist/resources/extensions/gsd/commands-handlers.js +17 -2
  42. package/dist/resources/extensions/gsd/commands-mcp-status.js +9 -0
  43. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +7 -2
  44. package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
  45. package/dist/resources/extensions/gsd/context-store.js +112 -0
  46. package/dist/resources/extensions/gsd/crash-recovery.js +43 -5
  47. package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
  48. package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
  49. package/dist/resources/extensions/gsd/db-base-schema.js +2 -0
  50. package/dist/resources/extensions/gsd/db-migration-steps.js +4 -0
  51. package/dist/resources/extensions/gsd/db-task-slice-rows.js +2 -0
  52. package/dist/resources/extensions/gsd/db-writer.js +150 -84
  53. package/dist/resources/extensions/gsd/dispatch-guard.js +46 -2
  54. package/dist/resources/extensions/gsd/docs/preferences-reference.md +9 -1
  55. package/dist/resources/extensions/gsd/doctor-git-checks.js +87 -7
  56. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
  57. package/dist/resources/extensions/gsd/doctor.js +2 -28
  58. package/dist/resources/extensions/gsd/export-html.js +27 -425
  59. package/dist/resources/extensions/gsd/forensics.js +8 -3
  60. package/dist/resources/extensions/gsd/git-service.js +138 -10
  61. package/dist/resources/extensions/gsd/gsd-db.js +76 -33
  62. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
  63. package/dist/resources/extensions/gsd/guided-flow.js +110 -117
  64. package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
  65. package/dist/resources/extensions/gsd/init-wizard.js +17 -2
  66. package/dist/resources/extensions/gsd/knowledge-backfill.js +144 -0
  67. package/dist/resources/extensions/gsd/knowledge-capture.js +136 -0
  68. package/dist/resources/extensions/gsd/knowledge-parser.js +154 -0
  69. package/dist/resources/extensions/gsd/knowledge-projection.js +210 -0
  70. package/dist/resources/extensions/gsd/markdown-renderer.js +16 -9
  71. package/dist/resources/extensions/gsd/mcp-filter.js +58 -0
  72. package/dist/resources/extensions/gsd/md-importer.js +1 -1
  73. package/dist/resources/extensions/gsd/memory-backfill.js +73 -17
  74. package/dist/resources/extensions/gsd/memory-consolidation-scanner.js +222 -0
  75. package/dist/resources/extensions/gsd/migrate/command.js +5 -0
  76. package/dist/resources/extensions/gsd/migrate/parsers.js +10 -0
  77. package/dist/resources/extensions/gsd/migrate/preview.js +9 -0
  78. package/dist/resources/extensions/gsd/migrate/transformer.js +51 -4
  79. package/dist/resources/extensions/gsd/migrate/writer.js +11 -1
  80. package/dist/resources/extensions/gsd/migration-auto-check.js +12 -17
  81. package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
  82. package/dist/resources/extensions/gsd/native-git-bridge.js +57 -14
  83. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -0
  84. package/dist/resources/extensions/gsd/paths.js +4 -0
  85. package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
  86. package/dist/resources/extensions/gsd/planning-path-scope.js +9 -3
  87. package/dist/resources/extensions/gsd/post-execution-checks.js +73 -9
  88. package/dist/resources/extensions/gsd/pre-execution-checks.js +38 -11
  89. package/dist/resources/extensions/gsd/preferences-mcp.js +19 -0
  90. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  91. package/dist/resources/extensions/gsd/preferences-validation.js +138 -0
  92. package/dist/resources/extensions/gsd/preferences.js +2 -0
  93. package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
  94. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  95. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  96. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  97. package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
  98. package/dist/resources/extensions/gsd/prompts/forensics.md +3 -3
  99. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  100. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  101. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  102. package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
  103. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  104. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  105. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  106. package/dist/resources/extensions/gsd/prompts/system.md +2 -2
  107. package/dist/resources/extensions/gsd/provider-switch-observer.js +146 -0
  108. package/dist/resources/extensions/gsd/queue-reorder-ui.js +30 -13
  109. package/dist/resources/extensions/gsd/repository-registry.js +44 -0
  110. package/dist/resources/extensions/gsd/safety/evidence-collector.js +2 -0
  111. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +42 -18
  112. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +59 -2
  113. package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
  114. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
  115. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
  116. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
  117. package/dist/resources/extensions/gsd/state.js +14 -4
  118. package/dist/resources/extensions/gsd/status-guards.js +14 -2
  119. package/dist/resources/extensions/gsd/templates/knowledge.md +2 -2
  120. package/dist/resources/extensions/gsd/templates/plan.md +9 -5
  121. package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
  122. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
  123. package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
  124. package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
  125. package/dist/resources/extensions/gsd/tools/plan-slice.js +151 -15
  126. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
  127. package/dist/resources/extensions/gsd/unit-context-manifest.js +36 -17
  128. package/dist/resources/extensions/gsd/validation.js +23 -1
  129. package/dist/resources/extensions/gsd/verification-gate.js +142 -7
  130. package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
  131. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  132. package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
  133. package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
  134. package/dist/resources/extensions/gsd/worktree-lifecycle.js +54 -10
  135. package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
  136. package/dist/resources/extensions/gsd/worktree-state-projection.js +31 -0
  137. package/dist/resources/extensions/shared/html-shell.js +388 -0
  138. package/dist/resources/extensions/shared/interview-ui.js +6 -4
  139. package/dist/resources/extensions/subagent/index.js +448 -78
  140. package/dist/resources/extensions/subagent/launch.js +77 -0
  141. package/dist/resources/extensions/subagent/run-store.js +148 -0
  142. package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
  143. package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
  144. package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
  145. package/dist/resources/extensions/visual-brief/index.js +5 -0
  146. package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
  147. package/dist/resources/extensions/visual-brief/prompts.js +140 -0
  148. package/dist/resources/skills/forensics/SKILL.md +1 -1
  149. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  150. package/dist/web/standalone/.next/BUILD_ID +1 -1
  151. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  152. package/dist/web/standalone/.next/build-manifest.json +4 -4
  153. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  154. package/dist/web/standalone/.next/react-loadable-manifest.json +5 -5
  155. package/dist/web/standalone/.next/required-server-files.json +3 -3
  156. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  157. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  158. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  159. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  160. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  161. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  162. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  163. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  164. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  165. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  166. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  167. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  170. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
  171. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
  172. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  173. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -5
  174. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  175. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  176. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
  177. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  184. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  186. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  192. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  196. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  198. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  201. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  204. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  209. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  210. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  213. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  216. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  218. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  221. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  223. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  226. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  229. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  231. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  232. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  233. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  234. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  235. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  238. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  243. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  246. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  248. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  249. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  252. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  253. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  256. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  258. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  259. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  261. package/dist/web/standalone/.next/server/app/index.html +1 -1
  262. package/dist/web/standalone/.next/server/app/index.rsc +5 -8
  263. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  264. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +5 -8
  265. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  266. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -5
  267. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
  268. package/dist/web/standalone/.next/server/app/page.js +2 -2
  269. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  270. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  271. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  272. package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
  273. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  274. package/dist/web/standalone/.next/server/chunks/6897.js +1 -1
  275. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  276. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  277. package/dist/web/standalone/.next/server/middleware.js +2 -2
  278. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  279. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  280. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  281. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  282. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  283. package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
  284. package/dist/web/standalone/.next/static/chunks/8359.65b24fac92188a6b.js +10 -0
  285. package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
  286. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  287. package/dist/web/standalone/.next/static/chunks/app/layout-8c10ec293ae0f1d5.js +1 -0
  288. package/dist/web/standalone/.next/static/chunks/app/page-752f1e2ebdaa3e45.js +1 -0
  289. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  290. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  291. package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-855d616060cb6e59.js} +1 -1
  292. package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
  293. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  294. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  295. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  296. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  297. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  298. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  299. package/dist/web/standalone/server.js +1 -1
  300. package/package.json +6 -5
  301. package/packages/contracts/dist/rpc.test.js +7 -0
  302. package/packages/contracts/dist/rpc.test.js.map +1 -1
  303. package/packages/contracts/dist/workflow.d.ts +21 -0
  304. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  305. package/packages/contracts/dist/workflow.js +24 -0
  306. package/packages/contracts/dist/workflow.js.map +1 -1
  307. package/packages/contracts/src/rpc.test.ts +8 -0
  308. package/packages/contracts/src/workflow.ts +24 -0
  309. package/packages/daemon/package.json +2 -2
  310. package/packages/mcp-server/README.md +14 -3
  311. package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
  312. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  313. package/packages/mcp-server/dist/workflow-tools.js +80 -0
  314. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  315. package/packages/mcp-server/package.json +2 -2
  316. package/packages/mcp-server/src/workflow-tools-parity.test.ts +244 -0
  317. package/packages/mcp-server/src/workflow-tools.test.ts +23 -1
  318. package/packages/mcp-server/src/workflow-tools.ts +168 -0
  319. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  320. package/packages/native/package.json +1 -1
  321. package/packages/native/tsconfig.json +2 -1
  322. package/packages/native/tsconfig.tsbuildinfo +1 -1
  323. package/packages/pi-agent-core/package.json +1 -1
  324. package/packages/pi-agent-core/tsconfig.tsbuildinfo +1 -1
  325. package/packages/pi-ai/dist/index.d.ts +2 -2
  326. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  327. package/packages/pi-ai/dist/index.js +1 -1
  328. package/packages/pi-ai/dist/index.js.map +1 -1
  329. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  330. package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
  331. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  332. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
  333. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
  334. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
  335. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
  336. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  337. package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
  338. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  339. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
  340. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
  341. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
  342. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
  343. package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
  344. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  345. package/packages/pi-ai/dist/providers/simple-options.js +5 -6
  346. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  347. package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
  348. package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
  349. package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
  350. package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
  351. package/packages/pi-ai/dist/providers/transform-messages.d.ts +11 -0
  352. package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
  353. package/packages/pi-ai/dist/providers/transform-messages.js +20 -0
  354. package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
  355. package/packages/pi-ai/package.json +1 -1
  356. package/packages/pi-ai/src/index.ts +7 -2
  357. package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +49 -0
  358. package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
  359. package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
  360. package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
  361. package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
  362. package/packages/pi-ai/src/providers/simple-options.ts +5 -6
  363. package/packages/pi-ai/src/providers/transform-messages.ts +24 -0
  364. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  365. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts +2 -0
  366. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
  367. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
  368. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
  369. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  370. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  371. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
  372. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  373. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +6 -1
  374. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  375. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +7 -2
  376. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  377. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +14 -1
  378. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  379. package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
  380. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  381. package/packages/pi-coding-agent/dist/core/system-prompt.js +4 -4
  382. package/packages/pi-coding-agent/dist/core/system-prompt.js.map +1 -1
  383. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  384. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
  385. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  386. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +71 -97
  388. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -7
  390. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  391. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +11 -0
  392. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  393. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
  394. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
  395. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  396. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  397. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +24 -10
  398. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  399. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts +2 -0
  400. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.d.ts.map +1 -0
  401. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js +17 -0
  402. package/packages/pi-coding-agent/dist/tests/system-prompt-file-safety.test.js.map +1 -0
  403. package/packages/pi-coding-agent/package.json +1 -1
  404. package/packages/pi-coding-agent/src/core/agent-session-thinking-level.test.ts +79 -0
  405. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  406. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
  407. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +23 -1
  408. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +7 -2
  409. package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
  410. package/packages/pi-coding-agent/src/core/system-prompt.ts +4 -4
  411. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
  412. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -102
  413. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +15 -1
  414. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +9 -9
  415. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
  416. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
  417. package/packages/pi-coding-agent/src/tests/system-prompt-file-safety.test.ts +22 -0
  418. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  419. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts +2 -0
  420. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
  421. package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
  422. package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
  423. package/packages/pi-tui/dist/__tests__/tui.test.js +45 -2
  424. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  425. package/packages/pi-tui/dist/terminal.d.ts +2 -0
  426. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  427. package/packages/pi-tui/dist/terminal.js +12 -0
  428. package/packages/pi-tui/dist/terminal.js.map +1 -1
  429. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  430. package/packages/pi-tui/dist/tui.js +108 -24
  431. package/packages/pi-tui/dist/tui.js.map +1 -1
  432. package/packages/pi-tui/package.json +1 -1
  433. package/packages/pi-tui/src/__tests__/terminal.test.ts +121 -0
  434. package/packages/pi-tui/src/__tests__/tui.test.ts +59 -2
  435. package/packages/pi-tui/src/terminal.ts +11 -0
  436. package/packages/pi-tui/src/tui.ts +111 -24
  437. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  438. package/packages/rpc-client/package.json +1 -1
  439. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  440. package/pkg/package.json +1 -1
  441. package/src/resources/GSD-WORKFLOW.md +10 -1
  442. package/src/resources/extensions/browser-tools/tools/screenshot.ts +1 -0
  443. package/src/resources/extensions/browser-tools/tools/zoom.ts +1 -0
  444. package/src/resources/extensions/claude-code-cli/partial-builder.ts +2 -1
  445. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +52 -6
  446. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
  447. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +49 -2
  448. package/src/resources/extensions/cmux/index.ts +6 -0
  449. package/src/resources/extensions/gsd/auto/contracts.ts +62 -16
  450. package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
  451. package/src/resources/extensions/gsd/auto/loop.ts +111 -38
  452. package/src/resources/extensions/gsd/auto/orchestrator.ts +129 -6
  453. package/src/resources/extensions/gsd/auto/phases.ts +129 -49
  454. package/src/resources/extensions/gsd/auto/session.ts +16 -0
  455. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  456. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
  457. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
  458. package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
  459. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
  460. package/src/resources/extensions/gsd/auto-dispatch.ts +21 -19
  461. package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
  462. package/src/resources/extensions/gsd/auto-post-unit.ts +312 -148
  463. package/src/resources/extensions/gsd/auto-prompts.ts +47 -16
  464. package/src/resources/extensions/gsd/auto-recovery.ts +83 -11
  465. package/src/resources/extensions/gsd/auto-start.ts +94 -12
  466. package/src/resources/extensions/gsd/auto-timers.ts +10 -3
  467. package/src/resources/extensions/gsd/auto-verification.ts +124 -42
  468. package/src/resources/extensions/gsd/auto-worktree.ts +195 -11
  469. package/src/resources/extensions/gsd/auto.ts +217 -70
  470. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +42 -7
  471. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -9
  472. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +11 -4
  473. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
  474. package/src/resources/extensions/gsd/bootstrap/system-context.ts +58 -15
  475. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +27 -10
  476. package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
  477. package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
  478. package/src/resources/extensions/gsd/commands/handlers/core.ts +42 -1
  479. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  480. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  481. package/src/resources/extensions/gsd/commands-handlers.ts +21 -2
  482. package/src/resources/extensions/gsd/commands-mcp-status.ts +8 -0
  483. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +8 -3
  484. package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
  485. package/src/resources/extensions/gsd/context-store.ts +120 -1
  486. package/src/resources/extensions/gsd/crash-recovery.ts +44 -4
  487. package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
  488. package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
  489. package/src/resources/extensions/gsd/db-base-schema.ts +2 -0
  490. package/src/resources/extensions/gsd/db-migration-steps.ts +5 -0
  491. package/src/resources/extensions/gsd/db-task-slice-rows.ts +4 -0
  492. package/src/resources/extensions/gsd/db-writer.ts +167 -84
  493. package/src/resources/extensions/gsd/dispatch-guard.ts +60 -2
  494. package/src/resources/extensions/gsd/docs/preferences-reference.md +9 -1
  495. package/src/resources/extensions/gsd/doctor-git-checks.ts +89 -7
  496. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
  497. package/src/resources/extensions/gsd/doctor-types.ts +3 -0
  498. package/src/resources/extensions/gsd/doctor.ts +2 -27
  499. package/src/resources/extensions/gsd/export-html.ts +27 -427
  500. package/src/resources/extensions/gsd/forensics.ts +7 -3
  501. package/src/resources/extensions/gsd/git-service.ts +166 -11
  502. package/src/resources/extensions/gsd/gsd-db.ts +80 -31
  503. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
  504. package/src/resources/extensions/gsd/guided-flow.ts +142 -134
  505. package/src/resources/extensions/gsd/guided-unit-context.ts +30 -0
  506. package/src/resources/extensions/gsd/init-wizard.ts +17 -2
  507. package/src/resources/extensions/gsd/journal.ts +8 -1
  508. package/src/resources/extensions/gsd/knowledge-backfill.ts +164 -0
  509. package/src/resources/extensions/gsd/knowledge-capture.ts +160 -0
  510. package/src/resources/extensions/gsd/knowledge-parser.ts +174 -0
  511. package/src/resources/extensions/gsd/knowledge-projection.ts +241 -0
  512. package/src/resources/extensions/gsd/markdown-renderer.ts +16 -9
  513. package/src/resources/extensions/gsd/mcp-filter.ts +80 -0
  514. package/src/resources/extensions/gsd/md-importer.ts +1 -1
  515. package/src/resources/extensions/gsd/memory-backfill.ts +89 -17
  516. package/src/resources/extensions/gsd/memory-consolidation-scanner.ts +277 -0
  517. package/src/resources/extensions/gsd/migrate/command.ts +5 -0
  518. package/src/resources/extensions/gsd/migrate/parsers.ts +11 -0
  519. package/src/resources/extensions/gsd/migrate/preview.ts +10 -0
  520. package/src/resources/extensions/gsd/migrate/transformer.ts +58 -4
  521. package/src/resources/extensions/gsd/migrate/writer.ts +14 -1
  522. package/src/resources/extensions/gsd/migration-auto-check.ts +15 -23
  523. package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
  524. package/src/resources/extensions/gsd/native-git-bridge.ts +63 -14
  525. package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -0
  526. package/src/resources/extensions/gsd/paths.ts +5 -0
  527. package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
  528. package/src/resources/extensions/gsd/planning-path-scope.ts +10 -2
  529. package/src/resources/extensions/gsd/post-execution-checks.ts +87 -12
  530. package/src/resources/extensions/gsd/pre-execution-checks.ts +49 -11
  531. package/src/resources/extensions/gsd/preferences-mcp.ts +27 -0
  532. package/src/resources/extensions/gsd/preferences-types.ts +33 -0
  533. package/src/resources/extensions/gsd/preferences-validation.ts +145 -0
  534. package/src/resources/extensions/gsd/preferences.ts +5 -0
  535. package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
  536. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  537. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  538. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  539. package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
  540. package/src/resources/extensions/gsd/prompts/forensics.md +3 -3
  541. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  542. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  543. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  544. package/src/resources/extensions/gsd/prompts/queue.md +4 -4
  545. package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  546. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  547. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  548. package/src/resources/extensions/gsd/prompts/system.md +2 -2
  549. package/src/resources/extensions/gsd/provider-switch-observer.ts +185 -0
  550. package/src/resources/extensions/gsd/queue-reorder-ui.ts +31 -13
  551. package/src/resources/extensions/gsd/repository-registry.ts +77 -0
  552. package/src/resources/extensions/gsd/safety/evidence-collector.ts +2 -0
  553. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +54 -19
  554. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +52 -1
  555. package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
  556. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
  557. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
  558. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
  559. package/src/resources/extensions/gsd/state.ts +15 -4
  560. package/src/resources/extensions/gsd/status-guards.ts +16 -2
  561. package/src/resources/extensions/gsd/templates/knowledge.md +2 -2
  562. package/src/resources/extensions/gsd/templates/plan.md +9 -5
  563. package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
  564. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
  565. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
  566. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +375 -1
  567. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +578 -8
  568. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
  569. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
  570. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
  571. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +129 -6
  572. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -0
  573. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +4 -4
  574. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
  575. package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
  576. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
  577. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +21 -0
  578. package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
  579. package/src/resources/extensions/gsd/tests/browser-tools-compatibility-declarations.test.ts +62 -0
  580. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +87 -0
  581. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
  582. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +32 -4
  583. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
  584. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
  585. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
  586. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +5 -9
  587. package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
  588. package/src/resources/extensions/gsd/tests/context-store-decisions-from-memories.test.ts +312 -0
  589. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +86 -2
  590. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  591. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
  592. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -0
  593. package/src/resources/extensions/gsd/tests/db-writer.test.ts +13 -8
  594. package/src/resources/extensions/gsd/tests/decisions-projection-from-memories.test.ts +453 -0
  595. package/src/resources/extensions/gsd/tests/decisions-stop-table-writes.test.ts +348 -0
  596. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +61 -2
  597. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +66 -0
  598. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +68 -1
  599. package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
  600. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +50 -0
  601. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +97 -0
  602. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
  603. package/src/resources/extensions/gsd/tests/freeform-decisions.test.ts +8 -4
  604. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +28 -0
  605. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +11 -7
  606. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
  607. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
  608. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
  609. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
  610. package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
  611. package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
  612. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
  613. package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
  614. package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
  615. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
  616. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +22 -0
  617. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +44 -0
  618. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
  619. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +199 -2
  620. package/src/resources/extensions/gsd/tests/integration/integration-lifecycle.test.ts +13 -5
  621. package/src/resources/extensions/gsd/tests/integration/migrate-command.test.ts +48 -3
  622. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
  623. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +49 -3
  624. package/src/resources/extensions/gsd/tests/journal.test.ts +32 -0
  625. package/src/resources/extensions/gsd/tests/knowledge-backfill-projection.test.ts +323 -0
  626. package/src/resources/extensions/gsd/tests/knowledge-capture.test.ts +242 -0
  627. package/src/resources/extensions/gsd/tests/knowledge.test.ts +47 -2
  628. package/src/resources/extensions/gsd/tests/load-knowledge-block-rules-only.test.ts +209 -0
  629. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +287 -0
  630. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +11 -0
  631. package/src/resources/extensions/gsd/tests/memory-consolidation-scanner.test.ts +316 -0
  632. package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
  633. package/src/resources/extensions/gsd/tests/migrate-transformer.test.ts +5 -1
  634. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
  635. package/src/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +6 -1
  636. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
  637. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +80 -2
  638. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
  639. package/src/resources/extensions/gsd/tests/parallel-orchestrator-zombie-cleanup.test.ts +55 -0
  640. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
  641. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
  642. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
  643. package/src/resources/extensions/gsd/tests/plan-milestone-sketch-render.test.ts +157 -0
  644. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
  645. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  646. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +343 -3
  647. package/src/resources/extensions/gsd/tests/plan-task.test.ts +18 -1
  648. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  649. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -3
  650. package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
  651. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
  652. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +59 -0
  653. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +54 -0
  654. package/src/resources/extensions/gsd/tests/preferences-mcp.test.ts +128 -0
  655. package/src/resources/extensions/gsd/tests/preferences.test.ts +75 -0
  656. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +70 -0
  657. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +8 -0
  658. package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
  659. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
  660. package/src/resources/extensions/gsd/tests/provider-switch-observer.test.ts +252 -0
  661. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
  662. package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
  663. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
  664. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +52 -0
  665. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -3
  666. package/src/resources/extensions/gsd/tests/session-start-footer.test.ts +16 -4
  667. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +10 -0
  668. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +72 -1
  669. package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
  670. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +53 -2
  671. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
  672. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
  673. package/src/resources/extensions/gsd/tests/status-guards.test.ts +17 -1
  674. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
  675. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +2 -1
  676. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
  677. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +128 -9
  678. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +111 -1
  679. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
  680. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +42 -1
  681. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +173 -1
  682. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
  683. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
  684. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
  685. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
  686. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
  687. package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
  688. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
  689. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +25 -0
  690. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +25 -0
  691. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +95 -0
  692. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +27 -0
  693. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +59 -0
  694. package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
  695. package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
  696. package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
  697. package/src/resources/extensions/gsd/tools/plan-slice.ts +172 -12
  698. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
  699. package/src/resources/extensions/gsd/types.ts +1 -1
  700. package/src/resources/extensions/gsd/unit-context-manifest.ts +51 -18
  701. package/src/resources/extensions/gsd/validation.ts +23 -1
  702. package/src/resources/extensions/gsd/verification-gate.ts +170 -6
  703. package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
  704. package/src/resources/extensions/gsd/workflow-logger.ts +4 -0
  705. package/src/resources/extensions/gsd/workflow-manifest.ts +2 -0
  706. package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
  707. package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
  708. package/src/resources/extensions/gsd/worktree-lifecycle.ts +61 -10
  709. package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
  710. package/src/resources/extensions/gsd/worktree-state-projection.ts +43 -0
  711. package/src/resources/extensions/shared/html-shell.ts +412 -0
  712. package/src/resources/extensions/shared/interview-ui.ts +6 -4
  713. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +15 -0
  714. package/src/resources/extensions/subagent/index.ts +567 -103
  715. package/src/resources/extensions/subagent/launch.ts +131 -0
  716. package/src/resources/extensions/subagent/run-store.ts +218 -0
  717. package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
  718. package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
  719. package/src/resources/extensions/ttsr/ttsr-manager.ts +5 -1
  720. package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
  721. package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
  722. package/src/resources/extensions/visual-brief/index.ts +8 -0
  723. package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
  724. package/src/resources/extensions/visual-brief/prompts.ts +183 -0
  725. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
  726. package/src/resources/skills/forensics/SKILL.md +1 -1
  727. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  728. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  729. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
  730. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  731. package/dist/web/standalone/.next/static/chunks/app/layout-9ecfd95f343793f0.js +0 -1
  732. package/dist/web/standalone/.next/static/chunks/app/page-200592a7f3baf579.js +0 -1
  733. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  734. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  735. package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
  736. package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
  737. package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  738. package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  739. package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  740. package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  741. package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  742. package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  743. /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → _kljR-_Miq_YV1IW0wpRO}/_buildManifest.js +0 -0
  744. /package/dist/web/standalone/.next/static/{S44UQTFCUdA44dkjfYt6S → _kljR-_Miq_YV1IW0wpRO}/_ssgManifest.js +0 -0
@@ -728,12 +728,20 @@ export async function inlineDecisionsFromDb(base, milestoneId, scope, level) {
728
728
  try {
729
729
  const { isDbAvailable } = await import("./gsd-db.js");
730
730
  if (isDbAvailable()) {
731
- const { queryDecisions, formatDecisionsForPrompt } = await import("./context-store.js");
731
+ // ADR-013 Phase 6 cutover (Stage 1): read decisions from the `memories`
732
+ // table. Both `queryDecisions` (legacy) and `queryDecisionsFromMemories`
733
+ // return identical Decision[] for active rows once Phase 5 dual-write is
734
+ // caught up. Switching the read here lets the destructive Phase 6 step
735
+ // (#5755) retire the legacy `decisions` table without changing prompt
736
+ // contents. Projection regen (`DECISIONS.md`) still sources from the
737
+ // legacy table — that switch lands separately to handle superseded
738
+ // history cleanly.
739
+ const { queryDecisionsFromMemories, formatDecisionsForPrompt } = await import("./context-store.js");
732
740
  // First query: try with both milestoneId and scope (if scope provided)
733
- let decisions = queryDecisions({ milestoneId, scope });
741
+ let decisions = queryDecisionsFromMemories({ milestoneId, scope });
734
742
  // Cascade: if empty AND scope was provided, retry without scope
735
743
  if (decisions.length === 0 && scope) {
736
- decisions = queryDecisions({ milestoneId });
744
+ decisions = queryDecisionsFromMemories({ milestoneId });
737
745
  }
738
746
  if (decisions.length > 0) {
739
747
  // Use compact format for non-full levels to save ~35% tokens
@@ -2689,14 +2697,40 @@ export async function buildReactiveExecutePrompt(mid, midTitle, sid, sTitle, rea
2689
2697
  readyTaskListLines.push(`- **${tid}: ${tTitle}**`);
2690
2698
  // Build dependency-scoped carry-forward paths for this task
2691
2699
  const depPaths = await getDependencyTaskSummaryPaths(mid, sid, tid, node?.dependsOn ?? [], base);
2692
- // Build a full execute-task prompt with dependency-based carry-forward
2693
- const taskPrompt = await buildExecuteTaskPrompt(mid, sid, sTitle, tid, tTitle, base, {
2694
- carryForwardPaths: depPaths,
2695
- sessionContextWindow: opts?.sessionContextWindow,
2696
- modelRegistry: opts?.modelRegistry,
2697
- sessionProvider: opts?.sessionProvider,
2698
- contextModeRenderMode: "nested",
2699
- });
2700
+ const taskPlanPath = resolveTaskFile(base, mid, sid, tid, "PLAN");
2701
+ const taskPlanContent = taskPlanPath ? await loadFile(taskPlanPath) : null;
2702
+ const taskPlanRelPath = `${relSlicePath(base, mid, sid)}/tasks/${tid}-PLAN.md`;
2703
+ const taskPlanInline = taskPlanContent
2704
+ ? [
2705
+ "## Inlined Task Plan (authoritative local execution contract)",
2706
+ `Source: \`${taskPlanRelPath}\``,
2707
+ "",
2708
+ taskPlanContent.trim(),
2709
+ ].join("\n")
2710
+ : [
2711
+ "## Inlined Task Plan (authoritative local execution contract)",
2712
+ `Task plan not found at dispatch time. Read \`${taskPlanRelPath}\` before executing.`,
2713
+ ].join("\n");
2714
+ const carryForwardSection = await buildCarryForwardSection(depPaths, base);
2715
+ const taskSummaryPath = `${relSlicePath(base, mid, sid)}/tasks/${tid}-SUMMARY.md`;
2716
+ const taskPrompt = [
2717
+ `## UNIT: Execute Task ${tid} ("${tTitle}")`,
2718
+ "",
2719
+ "Work only in the repository root.",
2720
+ "Implement from the inlined task plan below. Verify changes, then call `gsd_task_complete`.",
2721
+ "Do not run git commands.",
2722
+ "",
2723
+ carryForwardSection,
2724
+ "",
2725
+ taskPlanInline,
2726
+ "",
2727
+ "## Completion Contract",
2728
+ `- Call \`gsd_task_complete\` with camelCase fields: \`milestoneId\`, \`sliceId\`, \`taskId\`, \`oneLiner\`, \`narrative\`, \`verification\`, and \`verificationEvidence\`.`,
2729
+ `- Do not manually write \`${taskSummaryPath}\` or edit PLAN checkboxes; the completion tool is canonical.`,
2730
+ `- Use \`blocker_discovered: true\` only if the task cannot be completed due to a real blocker.`,
2731
+ "",
2732
+ `When done, say: "Task ${tid} complete."`,
2733
+ ].join("\n");
2700
2734
  const modelSuffix = subagentModel ? ` with model: "${subagentModel}"` : "";
2701
2735
  subagentSections.push([
2702
2736
  `### ${tid}: ${tTitle}`,
@@ -2769,7 +2803,7 @@ export async function buildParallelResearchSlicesPrompt(mid, midTitle, slices, b
2769
2803
  subagentSections.push([
2770
2804
  `### ${slice.id}: ${slice.title}`,
2771
2805
  "",
2772
- `Use this as the prompt for a \`subagent\` call${modelSuffix} (agent: \`gsd-executor\` or the default agent):`,
2806
+ `Use this as the prompt for a \`subagent\` call${modelSuffix} (agent: \`scout\`):`,
2773
2807
  "",
2774
2808
  "```",
2775
2809
  slicePrompt,
@@ -2838,7 +2872,7 @@ export async function buildGateEvaluatePrompt(mid, midTitle, sid, sTitle, base,
2838
2872
  subagentSections.push([
2839
2873
  `### ${def.id}: ${def.question}`,
2840
2874
  "",
2841
- `Use this as the prompt for a \`subagent\` call${modelSuffix}:`,
2875
+ `Use this as the prompt for a \`subagent\` call${modelSuffix} (agent: \`tester\`):`,
2842
2876
  "",
2843
2877
  "```",
2844
2878
  subPrompt,
@@ -14,7 +14,8 @@ import { clearParseCache } from "./files.js";
14
14
  import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
15
15
  import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk, getCompletedMilestoneTaskFileHints, getMilestoneCommitAttributionShas, recordMilestoneCommitAttribution } from "./gsd-db.js";
16
16
  import { isValidationTerminal } from "./state.js";
17
- import { logWarning } from "./workflow-logger.js";
17
+ import { getErrorMessage } from "./error-utils.js";
18
+ import { logWarning, logError } from "./workflow-logger.js";
18
19
  import { readIntegrationBranch } from "./git-service.js";
19
20
  import { isClosedStatus } from "./status-guards.js";
20
21
  import { resolveSlicePath, resolveSliceFile, resolveTasksDir, resolveTaskFiles, relMilestoneFile, relSliceFile, buildSliceFileName, resolveMilestoneFile, clearPathCache, resolveGsdRootFile, } from "./paths.js";
@@ -23,11 +24,36 @@ import { execFileSync } from "node:child_process";
23
24
  import { dirname, join } from "node:path";
24
25
  import { resolveExpectedArtifactPath, diagnoseExpectedArtifact, } from "./auto-artifact-paths.js";
25
26
  import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
27
+ import { hasVerdict } from "./verdict-parser.js";
26
28
  import { validateArtifact } from "./schemas/validate.js";
27
29
  import { getProjectResearchStatus } from "./project-research-policy.js";
30
+ import { isGsdWorktreePath } from "./worktree-root.js";
28
31
  // Re-export so existing consumers of auto-recovery.ts keep working.
29
32
  export { resolveExpectedArtifactPath, diagnoseExpectedArtifact };
30
33
  export { classifyMilestoneSummaryContent, } from "./milestone-summary-classifier.js";
34
+ // ─── Artifact Resolution & Verification ───────────────────────────────────────
35
+ export function diagnoseWorktreeIntegrityFailure(basePath) {
36
+ if (!isGsdWorktreePath(basePath))
37
+ return null;
38
+ if (!existsSync(basePath)) {
39
+ return `Worktree integrity failure: ${basePath} does not exist. Repair or recreate the worktree before retrying.`;
40
+ }
41
+ const gitPath = join(basePath, ".git");
42
+ if (!existsSync(gitPath)) {
43
+ return `Worktree integrity failure: ${basePath} is not a valid git worktree (.git missing). Repair or recreate the worktree before retrying.`;
44
+ }
45
+ try {
46
+ execFileSync("git", ["rev-parse", "--git-dir"], {
47
+ cwd: basePath,
48
+ stdio: ["ignore", "pipe", "pipe"],
49
+ encoding: "utf-8",
50
+ });
51
+ return null;
52
+ }
53
+ catch (err) {
54
+ return `Worktree integrity failure: ${basePath} is not a valid git worktree (git rev-parse failed: ${getErrorMessage(err).split("\n")[0]}). Repair or recreate the worktree before retrying.`;
55
+ }
56
+ }
31
57
  export function refreshRecoveryDbForArtifact(unitType, unitId) {
32
58
  if (unitType !== "plan-slice" && unitType !== "execute-task")
33
59
  return { ok: true };
@@ -137,9 +163,16 @@ export function hasImplementationArtifacts(basePath, milestoneId) {
137
163
  // Strategy: check `git diff --name-only` against the merge-base with the
138
164
  // main branch. This captures ALL files changed during the milestone's
139
165
  // lifetime while running on a milestone branch.
140
- const integrationBranch = milestoneId
141
- ? readIntegrationBranch(basePath, milestoneId) ?? detectMainBranch(basePath)
142
- : detectMainBranch(basePath);
166
+ const recordedIntegrationBranch = milestoneId
167
+ ? readIntegrationBranch(basePath, milestoneId)
168
+ : null;
169
+ let integrationBranch;
170
+ if (recordedIntegrationBranch?.startsWith("milestone/")) {
171
+ integrationBranch = detectMainBranch(basePath);
172
+ }
173
+ else {
174
+ integrationBranch = recordedIntegrationBranch ?? detectMainBranch(basePath);
175
+ }
143
176
  const currentBranch = getCurrentBranch(basePath);
144
177
  const branchDiff = getChangedFilesSinceBranch(basePath, integrationBranch);
145
178
  if (!branchDiff.ok)
@@ -471,29 +504,49 @@ function commitMatchesMilestone(basePath, message, milestoneId, files) {
471
504
  // rather than Mxx/Sxx/Tyy. Bind those commits back to the milestone when
472
505
  // either the commit touched this milestone's artifacts, or — for projects
473
506
  // where .gsd/ is gitignored/external (#5033) — the message explicitly
474
- // names the milestone or local GSD state proves the task belongs here.
507
+ // names the milestone, local GSD state proves the task belongs here, or the
508
+ // commit is implementation-bearing evidence itself (#5100).
475
509
  if (/^GSD-Task:\s*S[^/\s]+\/T\S+/m.test(message)) {
476
510
  if (files.some((file) => isMilestoneArtifactPath(file, milestoneId)))
477
511
  return true;
478
512
  if (commitMessageMentionsMilestone(message, milestoneId))
479
513
  return true;
480
- if (commitTaskTrailerBelongsToMilestone(basePath, message, milestoneId))
514
+ const taskTrailerOwnership = getTaskOwnershipStatus(basePath, message, milestoneId);
515
+ if (taskTrailerOwnership === true)
516
+ return true;
517
+ if (taskTrailerOwnership === false)
518
+ return false;
519
+ // taskTrailerOwnership === null: unknown ownership. Apply fallback only
520
+ // in this case to avoid cross-milestone attribution.
521
+ if (MILESTONE_ID_RE.test(milestoneId) && classifyImplementationFiles(files) === "present")
481
522
  return true;
482
523
  }
483
524
  return false;
484
525
  }
485
- function commitTaskTrailerBelongsToMilestone(basePath, message, milestoneId) {
526
+ /**
527
+ * Tri-state task ownership probe.
528
+ * true => DB or local files confirm this milestone owns the task.
529
+ * false => DB is available and this milestone is registered, but task is absent.
530
+ * null => ownership unknown (milestone not in DB yet, or no DB + no local files).
531
+ */
532
+ function getTaskOwnershipStatus(basePath, message, milestoneId) {
486
533
  const match = message.match(/^GSD-Task:\s*(S[^/\s]+)\/(T[^\s]+)/m);
487
534
  if (!match)
488
- return false;
535
+ return null;
489
536
  const [, sliceId, taskId] = match;
490
- if (getTask(milestoneId, sliceId, taskId))
491
- return true;
537
+ if (isDbAvailable()) {
538
+ if (!getMilestone(milestoneId))
539
+ return null;
540
+ return getTask(milestoneId, sliceId, taskId) ? true : false;
541
+ }
542
+ // DB unavailable: fallback to local task-file presence.
492
543
  const tasksDir = resolveTasksDir(basePath, milestoneId, sliceId);
493
- if (!tasksDir)
494
- return false;
495
- return existsSync(join(tasksDir, `${taskId}-PLAN.md`))
496
- || existsSync(join(tasksDir, `${taskId}-SUMMARY.md`));
544
+ if (tasksDir
545
+ && (existsSync(join(tasksDir, `${taskId}-PLAN.md`))
546
+ || existsSync(join(tasksDir, `${taskId}-SUMMARY.md`)))) {
547
+ return true;
548
+ }
549
+ return null;
497
550
  }
498
551
  function commitMessageMentionsMilestone(message, milestoneId) {
499
552
  if (!MILESTONE_ID_RE.test(milestoneId))
@@ -673,6 +726,11 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
673
726
  return false;
674
727
  }
675
728
  if (!existsSync(absPath)) {
729
+ const worktreeFailure = diagnoseWorktreeIntegrityFailure(base);
730
+ if (worktreeFailure) {
731
+ logError("recovery", `${worktreeFailure} Unit: ${unitType} ${unitId}.`);
732
+ return false;
733
+ }
676
734
  logWarning("recovery", `verify-fail ${unitType} ${unitId}: existsSync false for ${absPath}`);
677
735
  return false;
678
736
  }
@@ -683,6 +741,13 @@ export function verifyExpectedArtifact(unitType, unitId, base) {
683
741
  return false;
684
742
  }
685
743
  }
744
+ if (unitType === "run-uat") {
745
+ const assessmentContent = readFileSync(absPath, "utf-8");
746
+ if (!hasVerdict(assessmentContent)) {
747
+ logWarning("recovery", `verify-fail ${unitType} ${unitId}: assessment missing verdict at ${absPath}`);
748
+ return false;
749
+ }
750
+ }
686
751
  if (unitType === "plan-milestone") {
687
752
  try {
688
753
  const roadmap = parseLegacyRoadmap(readFileSync(absPath, "utf-8"));
@@ -21,10 +21,10 @@ import { invalidateAllCaches } from "./cache.js";
21
21
  import { writeLock, clearLock } from "./crash-recovery.js";
22
22
  import { acquireSessionLock, releaseSessionLock, updateSessionLock, } from "./session-lock.js";
23
23
  import { ensureGitignore, untrackRuntimeFiles } from "./gitignore.js";
24
- import { nativeIsRepo, nativeInit, nativeAddAll, nativeCommit, nativeGetCurrentBranch, nativeDetectMainBranch, nativeCheckoutBranch, nativeBranchList, nativeBranchListMerged, nativeBranchDelete, nativeWorktreeRemove, nativeCommitCountBetween, } from "./native-git-bridge.js";
24
+ import { nativeIsRepo, nativeInit, nativeAddAll, nativeCommit, nativeGetCurrentBranch, nativeDetectMainBranch, nativeBranchList, nativeBranchExists, nativeBranchListMerged, nativeBranchDelete, nativeWorktreeRemove, nativeCommitCountBetween, } from "./native-git-bridge.js";
25
25
  import { GitServiceImpl } from "./git-service.js";
26
26
  import { captureIntegrationBranch, detectWorktreeName, setActiveMilestoneId, } from "./worktree.js";
27
- import { getAutoWorktreePath } from "./auto-worktree.js";
27
+ import { getAutoWorktreePath, checkoutBranchWithStashGuard } from "./auto-worktree.js";
28
28
  import { readResourceVersion, cleanStaleRuntimeUnits } from "./auto-worktree.js";
29
29
  import { worktreePath as getWorktreeDir, isInsideWorktreesDir } from "./worktree-manager.js";
30
30
  import { emitWorktreeOrphaned } from "./worktree-telemetry.js";
@@ -33,7 +33,7 @@ import { initRoutingHistory } from "./routing-history.js";
33
33
  import { restoreHookState, resetHookState } from "./post-unit-hooks.js";
34
34
  import { resetProactiveHealing, setLevelChangeCallback } from "./doctor-proactive.js";
35
35
  import { snapshotSkills } from "./skill-discovery.js";
36
- import { isDbAvailable, getMilestone, openDatabase, getDbStatus } from "./gsd-db.js";
36
+ import { isDbAvailable, getMilestone, getAllMilestones, openDatabase, getDbStatus } from "./gsd-db.js";
37
37
  import { isClosedStatus } from "./status-guards.js";
38
38
  import { classifyMilestoneSummaryContent } from "./milestone-summary-classifier.js";
39
39
  import { auditOrphanedPreflightStashes } from "./orphan-stash-audit.js";
@@ -88,9 +88,11 @@ export function decideSurvivorAction(hasSurvivorBranch, phase) {
88
88
  return "finalize";
89
89
  return "none";
90
90
  }
91
- export function auditOrphanedMilestoneBranches(basePath, isolationMode) {
91
+ export function auditOrphanedMilestoneBranches(basePath, isolationMode, gitDeps = {}) {
92
92
  const recovered = [];
93
93
  const warnings = [];
94
+ const branchList = gitDeps.branchList ?? nativeBranchList;
95
+ const branchExists = gitDeps.branchExists ?? nativeBranchExists;
94
96
  // Skip in none mode — no milestone branches are created
95
97
  if (isolationMode === "none")
96
98
  return { recovered, warnings };
@@ -98,15 +100,16 @@ export function auditOrphanedMilestoneBranches(basePath, isolationMode) {
98
100
  if (!isDbAvailable())
99
101
  return { recovered, warnings };
100
102
  let milestoneBranches;
103
+ let milestoneBranchListAvailable = true;
101
104
  try {
102
- milestoneBranches = nativeBranchList(basePath, "milestone/*");
105
+ milestoneBranches = branchList(basePath, "milestone/*");
103
106
  }
104
107
  catch {
105
- // git branch list failed — skip audit
106
- return { recovered, warnings };
108
+ milestoneBranchListAvailable = false;
109
+ // git branch list failed — fall through with an empty branch set so the
110
+ // branch-less orphan pass can still run after per-milestone verification.
111
+ milestoneBranches = [];
107
112
  }
108
- if (milestoneBranches.length === 0)
109
- return { recovered, warnings };
110
113
  // Detect main branch for merge-check
111
114
  let mainBranch;
112
115
  try {
@@ -236,6 +239,71 @@ export function auditOrphanedMilestoneBranches(basePath, isolationMode) {
236
239
  }
237
240
  }
238
241
  }
242
+ // Second pass (#5879): catch worktree directories stranded by a previous
243
+ // audit that deleted the milestone/* branch but failed to remove the
244
+ // directory (or the dir was orphaned by a separate path entirely, e.g.
245
+ // postflight-stash-restore-failed during closeout). The branch-keyed loop
246
+ // above is invisible to these cases — `nativeBranchList` returns nothing
247
+ // for the milestone, so the dir-cleanup block at line ~310 is never
248
+ // reached.
249
+ //
250
+ // Keyed on milestones whose DB status is `complete`. We do not iterate
251
+ // over arbitrary directories under .gsd/worktrees/ to avoid touching
252
+ // dirs that belong to an in-progress milestone whose branch was deleted
253
+ // separately — those are handled by the in-progress orphan path above
254
+ // when the branch is present, and by `/gsd doctor` when it is not.
255
+ const seenMilestoneIds = new Set(milestoneBranches.map((branch) => branch.replace(/^milestone\//, "")));
256
+ let completedMilestones = [];
257
+ try {
258
+ completedMilestones = getAllMilestones();
259
+ }
260
+ catch {
261
+ // DB read failure — skip the second pass; the first pass is still useful.
262
+ completedMilestones = [];
263
+ }
264
+ for (const m of completedMilestones) {
265
+ if (m.status !== "complete")
266
+ continue;
267
+ if (seenMilestoneIds.has(m.id))
268
+ continue; // already processed in the branch loop
269
+ if (!milestoneBranchListAvailable) {
270
+ try {
271
+ if (branchExists(basePath, `milestone/${m.id}`))
272
+ continue;
273
+ }
274
+ catch (err) {
275
+ warnings.push(`Could not verify whether milestone/${m.id} still exists; skipping branch-less worktree cleanup for safety: ${err instanceof Error ? err.message : String(err)}`);
276
+ continue;
277
+ }
278
+ }
279
+ const wtDir = getWorktreeDir(basePath, m.id);
280
+ if (!existsSync(wtDir))
281
+ continue;
282
+ if (!isInsideWorktreesDir(basePath, wtDir)) {
283
+ warnings.push(`Orphaned worktree directory for ${m.id} is outside .gsd/worktrees/ — skipping removal for safety.`);
284
+ continue;
285
+ }
286
+ // Try `git worktree remove` first in case the dir is still registered
287
+ // (defensive — usually it is not when we reach this branch-less pass).
288
+ try {
289
+ nativeWorktreeRemove(basePath, wtDir, true);
290
+ }
291
+ catch (e) {
292
+ logWarning("engine", `worktree remove failed (expected for branch-less orphans): ${e instanceof Error ? e.message : String(e)}`);
293
+ }
294
+ if (existsSync(wtDir)) {
295
+ try {
296
+ rmSync(wtDir, { recursive: true, force: true });
297
+ recovered.push(`Removed orphaned worktree directory for ${m.id} (branch already deleted).`);
298
+ }
299
+ catch (err) {
300
+ warnings.push(`Failed to remove orphaned worktree directory for ${m.id}: ${err instanceof Error ? err.message : String(err)}`);
301
+ }
302
+ }
303
+ else {
304
+ recovered.push(`Removed orphaned worktree directory for ${m.id} (branch already deleted).`);
305
+ }
306
+ }
239
307
  return { recovered, warnings };
240
308
  }
241
309
  /**
@@ -368,7 +436,7 @@ export function _mergeOrphanCompletedMilestone(lifecycle, orphanId, ui) {
368
436
  return { merged: false, error: err };
369
437
  }
370
438
  export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, requestedStepMode, deps, interrupted) {
371
- const { shouldUseWorktreeIsolation, registerSigtermHandler, lockBase, buildLifecycle, } = deps;
439
+ const { shouldUseWorktreeIsolation, registerSigtermHandler, registerAutoWorkerForSession, lockBase, buildLifecycle, } = deps;
372
440
  const dirCheck = validateDirectory(base);
373
441
  if (dirCheck.severity === "blocked") {
374
442
  ctx.ui.notify(dirCheck.reason, "error");
@@ -523,6 +591,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
523
591
  // consult DB status and avoid clearing runtime units for milestones that
524
592
  // only have a failure-path SUMMARY on disk (#4663).
525
593
  await openProjectDbIfPresent(base);
594
+ registerAutoWorkerForSession(base);
526
595
  // Clean stale runtime unit files for completed milestones (#887).
527
596
  // DB-authoritative: when DB is available, require DB status to be closed
528
597
  // before clearing runtime units. A SUMMARY file alone is no longer
@@ -606,12 +675,16 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
606
675
  // worktree cleanup) was never run — the survivor branch must be merged.
607
676
  // Applies to both worktree and branch isolation modes.
608
677
  let hasSurvivorBranch = false;
609
- if (state.activeMilestone &&
678
+ let survivorMilestoneId = state.activeMilestone?.id ?? null;
679
+ if (!survivorMilestoneId && state.phase === "complete") {
680
+ survivorMilestoneId = findUnmergedCompletedMilestone(base, getIsolationMode(base));
681
+ }
682
+ if (survivorMilestoneId &&
610
683
  (state.phase === "pre-planning" || state.phase === "complete") &&
611
684
  getIsolationMode(base) !== "none" &&
612
685
  !detectWorktreeName(base) &&
613
686
  !base.includes(`${pathSep}.gsd${pathSep}worktrees${pathSep}`)) {
614
- const milestoneBranch = `milestone/${state.activeMilestone.id}`;
687
+ const milestoneBranch = `milestone/${survivorMilestoneId}`;
615
688
  const { nativeBranchExists } = await import("./native-git-bridge.js");
616
689
  hasSurvivorBranch = nativeBranchExists(base, milestoneBranch);
617
690
  if (hasSurvivorBranch) {
@@ -645,7 +718,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
645
718
  // Re-evaluate via the helper — the discuss branch above may have cleared
646
719
  // hasSurvivorBranch after a successful promotion.
647
720
  if (decideSurvivorAction(hasSurvivorBranch, state.phase) === "finalize") {
648
- const mid = state.activeMilestone.id;
721
+ const mid = survivorMilestoneId;
649
722
  // Commit 68ef58a3c made `_mergeBranchMode` throw on wrong-branch
650
723
  // instead of returning false silently. Wrap the call so the throw is
651
724
  // converted into an error notify + clean bootstrap abort, not an
@@ -828,7 +901,7 @@ export async function bootstrapAutoSession(s, ctx, pi, base, verboseMode, reques
828
901
  const integrationBranch = nativeDetectMainBranch(base);
829
902
  const branchToCheckout = resolveIsolationNoneBranchCheckout(currentBranch, integrationBranch, isolationMode, isRepo);
830
903
  if (branchToCheckout) {
831
- nativeCheckoutBranch(base, branchToCheckout);
904
+ checkoutBranchWithStashGuard(base, branchToCheckout, "isolation-none-recovery");
832
905
  logWarning("bootstrap", `Returned to "${branchToCheckout}" — HEAD was on stale milestone branch "${currentBranch}" (isolation: none does not use milestone branches).`);
833
906
  }
834
907
  }
@@ -262,13 +262,21 @@ export function startUnitSupervision(sctx) {
262
262
  if (runtime?.continueHereFired)
263
263
  return;
264
264
  const contextUsage = s.cmdCtx.getContextUsage();
265
- if (!contextUsage || contextUsage.percent == null || contextUsage.percent < continueHereThreshold)
265
+ if (!contextUsage || contextUsage.percent == null)
266
+ return;
267
+ const rawPercent = contextUsage.percent;
268
+ if (rawPercent > 150) {
269
+ logWarning("timer", `[continue-here] ignoring implausible context percent: ${rawPercent}`);
270
+ return;
271
+ }
272
+ const contextPercent = Math.max(0, Math.min(100, rawPercent));
273
+ if (contextPercent < continueHereThreshold)
266
274
  return;
267
275
  writeUnitRuntimeRecord(s.basePath, unitType, unitId, s.currentUnit.startedAt, {
268
276
  continueHereFired: true,
269
277
  });
270
278
  if (s.verbose) {
271
- ctx.ui.notify(`Context at ${contextUsage.percent}% (threshold: ${continueHereThreshold}%) — sending wrap-up signal.`, "info");
279
+ ctx.ui.notify(`Context at ${contextPercent}% (threshold: ${continueHereThreshold}%) — sending wrap-up signal.`, "info");
272
280
  }
273
281
  // Only trigger a new turn if no tools are currently in flight (#3512).
274
282
  const contextTrigger = getInFlightToolCount() === 0;
@@ -277,7 +285,7 @@ export function startUnitSupervision(sctx) {
277
285
  display: s.verbose,
278
286
  content: [
279
287
  "**CONTEXT BUDGET WARNING — wrap up this unit now.**",
280
- `Context window is at ${contextUsage.percent}% (threshold: ${continueHereThreshold}%).`,
288
+ `Context window is at ${contextPercent}% (threshold: ${continueHereThreshold}%).`,
281
289
  "The next unit needs a fresh context to work effectively. Wrap up now:",
282
290
  "1. Finish any in-progress file writes",
283
291
  "2. Write or update the required durable artifacts (summary, checkboxes)",