gsd-pi 2.79.0 → 2.80.0-dev.710c06e97

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 (774) hide show
  1. package/README.md +94 -47
  2. package/dist/loader.js +0 -0
  3. package/dist/resources/.managed-resources-content-hash +1 -1
  4. package/dist/resources/extensions/github-sync/templates.js +90 -74
  5. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  6. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  7. package/dist/resources/extensions/gsd/auto/loop.js +365 -522
  8. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  9. package/dist/resources/extensions/gsd/auto/phases.js +61 -7
  10. package/dist/resources/extensions/gsd/auto/run-unit.js +19 -15
  11. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  12. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  29. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  30. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  31. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  32. package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
  33. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -0
  34. package/dist/resources/extensions/gsd/auto-prompts.js +220 -32
  35. package/dist/resources/extensions/gsd/auto-recovery.js +90 -58
  36. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  37. package/dist/resources/extensions/gsd/auto-start.js +3 -2
  38. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  39. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  40. package/dist/resources/extensions/gsd/auto.js +159 -2
  41. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
  42. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  43. package/dist/resources/extensions/gsd/bootstrap/exec-tools.js +2 -2
  44. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +63 -51
  45. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +137 -9
  46. package/dist/resources/extensions/gsd/commands/context.js +1 -1
  47. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  48. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  49. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  50. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  51. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  52. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  53. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  54. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  55. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  56. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  57. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  58. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  59. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  60. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  61. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  62. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  63. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  64. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  65. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  66. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  67. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  68. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  69. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  70. package/dist/resources/extensions/gsd/escalation.js +2 -0
  71. package/dist/resources/extensions/gsd/graph.js +9 -3
  72. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  73. package/dist/resources/extensions/gsd/guided-flow.js +40 -0
  74. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  75. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  76. package/dist/resources/extensions/gsd/model-router.js +9 -6
  77. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  78. package/dist/resources/extensions/gsd/paths.js +5 -1
  79. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  80. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  81. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  82. package/dist/resources/extensions/gsd/preferences-types.js +20 -2
  83. package/dist/resources/extensions/gsd/preferences-validation.js +3 -3
  84. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  85. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  86. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  87. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  88. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  89. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  90. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  91. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  92. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  93. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  94. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  95. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  96. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  97. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  98. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  99. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  100. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  101. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  102. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  103. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  104. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  105. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  106. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  107. package/dist/resources/extensions/gsd/state.js +4 -0
  108. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  109. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  110. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +88 -3
  111. package/dist/resources/extensions/gsd/unit-context-composer.js +32 -0
  112. package/dist/resources/extensions/gsd/unit-context-manifest.js +21 -0
  113. package/dist/resources/extensions/gsd/uok/audit.js +23 -9
  114. package/dist/resources/extensions/gsd/uok/contracts.js +69 -1
  115. package/dist/resources/extensions/gsd/uok/dispatch-envelope.js +3 -0
  116. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  117. package/dist/resources/extensions/gsd/uok/loop-adapter.js +48 -33
  118. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  119. package/dist/resources/extensions/gsd/uok/timeline.js +125 -0
  120. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  121. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  122. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  123. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  124. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  125. package/dist/resources/extensions/shared/gsd-phase-state.js +45 -3
  126. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  127. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  128. package/dist/web/standalone/.next/BUILD_ID +1 -1
  129. package/dist/web/standalone/.next/app-path-routes-manifest.json +7 -7
  130. package/dist/web/standalone/.next/build-manifest.json +4 -4
  131. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  132. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  133. package/dist/web/standalone/.next/required-server-files.json +4 -4
  134. package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
  135. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  136. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  145. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  147. package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
  148. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  149. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  150. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
  151. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  153. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  159. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
  164. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  165. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  173. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
  180. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  182. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  183. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  184. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  188. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  189. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  194. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  195. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  196. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  197. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  198. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  199. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  200. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  201. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  202. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  203. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  204. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  205. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  206. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  207. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
  209. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  210. package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
  211. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  212. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  213. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  214. package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
  215. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  216. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  217. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  218. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  219. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  220. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  221. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  222. package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
  223. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  224. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  225. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  226. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  227. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  228. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  229. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  230. package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
  231. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  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.js.nft.json +1 -1
  235. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  236. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  237. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  238. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  239. package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
  240. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  241. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  242. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  243. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  244. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  245. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  246. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  247. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  248. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  249. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  250. package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
  251. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  252. package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
  253. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  254. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  255. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  256. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  257. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +2 -2
  258. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  259. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  260. package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
  261. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  262. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  263. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  264. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  265. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  266. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  267. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  268. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  269. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  270. package/dist/web/standalone/.next/server/app/index.html +1 -1
  271. package/dist/web/standalone/.next/server/app/index.rsc +4 -4
  272. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  273. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
  274. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  275. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
  276. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  277. package/dist/web/standalone/.next/server/app/page.js +2 -2
  278. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  279. package/dist/web/standalone/.next/server/app-paths-manifest.json +7 -7
  280. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  281. package/dist/web/standalone/.next/server/chunks/63.js +3 -3
  282. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  283. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  284. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  285. package/dist/web/standalone/.next/server/middleware.js +2 -2
  286. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  287. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  288. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  289. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  290. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  291. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  292. package/dist/web/standalone/.next/static/chunks/app/_not-found/{page-2f24283c162b6ab3.js → page-f2a7482d42a5614b.js} +1 -1
  293. package/dist/web/standalone/.next/static/chunks/app/{layout-9ecfd95f343793f0.js → layout-a16c7a7ecdf0c2cf.js} +1 -1
  294. package/dist/web/standalone/.next/static/chunks/app/page-fab3ebb85b006001.js +1 -0
  295. package/dist/web/standalone/.next/static/chunks/main-app-fdab67f7802d7832.js +1 -0
  296. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-459824ffb8c323dd.js +1 -0
  297. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  298. package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
  299. package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
  300. package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
  301. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api.target.mk +14 -14
  302. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_except.target.mk +14 -14
  303. package/dist/web/standalone/node_modules/node-pty/node-addon-api/node_addon_api_maybe.target.mk +14 -14
  304. package/dist/web/standalone/package.json +1 -0
  305. package/dist/web/standalone/server.js +1 -1
  306. package/package.json +15 -6
  307. package/packages/contracts/dist/index.d.ts +3 -0
  308. package/packages/contracts/dist/index.d.ts.map +1 -0
  309. package/packages/contracts/dist/index.js +5 -0
  310. package/packages/contracts/dist/index.js.map +1 -0
  311. package/packages/contracts/dist/rpc.d.ts +549 -0
  312. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  313. package/packages/contracts/dist/rpc.js +53 -0
  314. package/packages/contracts/dist/rpc.js.map +1 -0
  315. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  316. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  317. package/packages/contracts/dist/rpc.test.js +47 -0
  318. package/packages/contracts/dist/rpc.test.js.map +1 -0
  319. package/packages/contracts/dist/workflow.d.ts +180 -0
  320. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  321. package/packages/contracts/dist/workflow.js +201 -0
  322. package/packages/contracts/dist/workflow.js.map +1 -0
  323. package/packages/contracts/package.json +39 -0
  324. package/packages/contracts/src/index.ts +5 -0
  325. package/packages/contracts/src/rpc.test.ts +72 -0
  326. package/packages/contracts/src/rpc.ts +286 -0
  327. package/packages/contracts/src/workflow.ts +213 -0
  328. package/packages/contracts/tsconfig.json +25 -0
  329. package/packages/daemon/package.json +3 -2
  330. package/packages/daemon/src/event-bridge.test.ts +2 -1
  331. package/packages/daemon/src/event-bridge.ts +1 -1
  332. package/packages/daemon/src/event-formatter.test.ts +1 -2
  333. package/packages/daemon/src/event-formatter.ts +1 -2
  334. package/packages/daemon/src/session-manager.ts +2 -2
  335. package/packages/daemon/src/types.ts +3 -18
  336. package/packages/mcp-server/dist/server.d.ts +13 -0
  337. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  338. package/packages/mcp-server/dist/server.js +77 -0
  339. package/packages/mcp-server/dist/server.js.map +1 -1
  340. package/packages/mcp-server/dist/session-manager.js +1 -1
  341. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  342. package/packages/mcp-server/dist/types.d.ts +3 -11
  343. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  344. package/packages/mcp-server/dist/types.js.map +1 -1
  345. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  346. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  347. package/packages/mcp-server/dist/workflow-tools.js +52 -37
  348. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  349. package/packages/mcp-server/package.json +3 -2
  350. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  351. package/packages/mcp-server/src/server.ts +99 -1
  352. package/packages/mcp-server/src/session-manager.ts +2 -2
  353. package/packages/mcp-server/src/types.ts +7 -18
  354. package/packages/mcp-server/src/workflow-tools.test.ts +129 -2
  355. package/packages/mcp-server/src/workflow-tools.ts +80 -37
  356. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  357. package/packages/native/package.json +1 -1
  358. package/packages/pi-agent-core/package.json +1 -1
  359. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  360. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  361. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  362. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  363. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  364. package/packages/pi-ai/dist/models/index.js +8 -0
  365. package/packages/pi-ai/dist/models/index.js.map +1 -1
  366. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  367. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  368. package/packages/pi-ai/dist/providers/fake.js +319 -0
  369. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  370. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  371. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  372. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  373. package/packages/pi-ai/package.json +1 -1
  374. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  375. package/packages/pi-ai/src/models/index.ts +9 -0
  376. package/packages/pi-ai/src/providers/fake.ts +376 -0
  377. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  378. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  379. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  380. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  381. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  382. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  383. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  384. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  385. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  386. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  387. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  388. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  389. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
  390. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  391. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  392. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  393. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  394. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  395. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  396. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  397. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  398. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  399. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
  400. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  401. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  402. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  403. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  404. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  405. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  406. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  407. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  408. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  409. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +48 -15
  410. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  411. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  412. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
  413. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  414. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  415. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  416. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  417. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  418. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  419. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  420. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  421. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  422. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  423. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  424. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  425. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  426. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  427. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  428. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  429. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  430. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  431. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  432. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  433. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  434. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  435. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  436. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  437. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  438. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  439. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  440. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  441. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  442. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  443. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  444. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  445. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  446. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
  447. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  448. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  449. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  450. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  451. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  452. package/packages/pi-coding-agent/package.json +2 -1
  453. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  454. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  455. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  456. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
  457. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  458. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  459. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
  460. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  461. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  462. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
  463. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  464. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
  465. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  466. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  467. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  468. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  469. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  470. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  471. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  472. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
  473. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  474. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  475. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  476. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  477. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  478. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  479. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  480. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  481. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  482. package/packages/pi-tui/dist/index.d.ts +1 -0
  483. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  484. package/packages/pi-tui/dist/index.js +2 -0
  485. package/packages/pi-tui/dist/index.js.map +1 -1
  486. package/packages/pi-tui/dist/style.d.ts +41 -0
  487. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  488. package/packages/pi-tui/dist/style.js +158 -0
  489. package/packages/pi-tui/dist/style.js.map +1 -0
  490. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  491. package/packages/pi-tui/dist/tui.js +1 -0
  492. package/packages/pi-tui/dist/tui.js.map +1 -1
  493. package/packages/pi-tui/package.json +1 -1
  494. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  495. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  496. package/packages/pi-tui/src/index.ts +9 -0
  497. package/packages/pi-tui/src/style.ts +225 -0
  498. package/packages/pi-tui/src/tui.ts +1 -0
  499. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  500. package/packages/rpc-client/README.md +3 -3
  501. package/packages/rpc-client/dist/index.d.ts +1 -1
  502. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  503. package/packages/rpc-client/dist/index.js.map +1 -1
  504. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  505. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  506. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  507. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  508. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  509. package/packages/rpc-client/dist/rpc-types.js +3 -11
  510. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  511. package/packages/rpc-client/package.json +4 -1
  512. package/packages/rpc-client/src/index.ts +1 -1
  513. package/packages/rpc-client/src/rpc-client.ts +3 -6
  514. package/packages/rpc-client/src/rpc-types.ts +3 -398
  515. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  516. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  517. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  518. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  519. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  520. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  521. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  522. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  523. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  524. package/pkg/package.json +1 -1
  525. package/src/resources/extensions/github-sync/templates.ts +93 -88
  526. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  527. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  528. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  529. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  530. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  531. package/src/resources/extensions/gsd/auto/loop.ts +416 -596
  532. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  533. package/src/resources/extensions/gsd/auto/phases.ts +88 -9
  534. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  535. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  536. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  537. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  538. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  539. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  540. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  541. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  542. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  543. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  544. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  545. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  546. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  547. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  548. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  549. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  550. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  551. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  552. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  553. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  554. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  555. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  556. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  557. package/src/resources/extensions/gsd/auto-dispatch.ts +1 -0
  558. package/src/resources/extensions/gsd/auto-prompts.ts +276 -31
  559. package/src/resources/extensions/gsd/auto-recovery.ts +84 -56
  560. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  561. package/src/resources/extensions/gsd/auto-start.ts +3 -2
  562. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  563. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  564. package/src/resources/extensions/gsd/auto.ts +167 -1
  565. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  566. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  567. package/src/resources/extensions/gsd/bootstrap/exec-tools.ts +2 -2
  568. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +79 -52
  569. package/src/resources/extensions/gsd/bootstrap/tests/write-gate-shouldblock-basepath.test.ts +97 -0
  570. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +143 -5
  571. package/src/resources/extensions/gsd/commands/context.ts +1 -1
  572. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  573. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  574. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  575. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  576. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  577. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  578. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  579. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  580. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  581. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  582. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  583. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  584. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  585. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  586. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  587. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  588. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  589. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  590. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  591. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  592. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  593. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  594. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  595. package/src/resources/extensions/gsd/escalation.ts +3 -1
  596. package/src/resources/extensions/gsd/graph.ts +12 -5
  597. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  598. package/src/resources/extensions/gsd/guided-flow.ts +47 -0
  599. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  600. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  601. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  602. package/src/resources/extensions/gsd/model-router.ts +10 -6
  603. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  604. package/src/resources/extensions/gsd/paths.ts +6 -1
  605. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  606. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  607. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  608. package/src/resources/extensions/gsd/preferences-types.ts +23 -4
  609. package/src/resources/extensions/gsd/preferences-validation.ts +3 -3
  610. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  611. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  612. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  613. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  614. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  615. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  616. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  617. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  618. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  619. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  620. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  621. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  622. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  623. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  624. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  625. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  626. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  627. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  628. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  629. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  630. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  631. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  632. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  633. package/src/resources/extensions/gsd/state.ts +6 -3
  634. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  635. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  636. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
  637. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  638. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  639. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +153 -1
  640. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  641. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  642. package/src/resources/extensions/gsd/tests/bootstrap-derive-state-db-open.test.ts +2 -2
  643. package/src/resources/extensions/gsd/tests/check-auto-start-pending-gate.test.ts +203 -0
  644. package/src/resources/extensions/gsd/tests/check-auto-start-ready-guard.test.ts +148 -0
  645. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  646. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  647. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  648. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  649. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  650. package/src/resources/extensions/gsd/tests/current-directory-root-homedir-fallback.test.ts +63 -0
  651. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  652. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  653. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  654. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  655. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  656. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  657. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  658. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  659. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  660. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  661. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  662. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  663. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  664. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  665. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  666. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  667. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  668. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  669. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  670. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  671. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  672. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  673. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  674. package/src/resources/extensions/gsd/tests/deep-planning-mode-dispatch.test.ts +42 -0
  675. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +63 -2
  676. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  677. package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +109 -0
  678. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  679. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  680. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  681. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  682. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  683. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  684. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  685. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  686. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  687. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  688. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  689. package/src/resources/extensions/gsd/tests/guided-flow-prompt-consolidation.test.ts +14 -0
  690. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  691. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  692. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  693. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  694. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  695. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  696. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  697. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  698. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  699. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  700. package/src/resources/extensions/gsd/tests/parallel-skill-prompt-integration.test.ts +8 -0
  701. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  702. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  703. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  704. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  705. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  706. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  707. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  708. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  709. package/src/resources/extensions/gsd/tests/pre-exec-gate-loop.test.ts +3 -0
  710. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  711. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  712. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  713. package/src/resources/extensions/gsd/tests/register-hooks-compaction-checkpoint.test.ts +85 -0
  714. package/src/resources/extensions/gsd/tests/run-uat-composer.test.ts +2 -0
  715. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +59 -0
  716. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  717. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +42 -4
  718. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +32 -0
  719. package/src/resources/extensions/gsd/tests/uok-contracts.test.ts +109 -1
  720. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  721. package/src/resources/extensions/gsd/tests/uok-loop-adapter-writer.test.ts +98 -0
  722. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  723. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  724. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  725. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  726. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  727. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  728. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  729. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  730. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  731. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  732. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  733. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  734. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  735. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  736. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  737. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  738. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  739. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  740. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +164 -3
  741. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  742. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  743. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  744. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  745. package/src/resources/extensions/gsd/tests/worktree-path-injection.test.ts +3 -0
  746. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  747. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  748. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  749. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  750. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +90 -2
  751. package/src/resources/extensions/gsd/unit-context-composer.ts +49 -0
  752. package/src/resources/extensions/gsd/unit-context-manifest.ts +34 -0
  753. package/src/resources/extensions/gsd/uok/audit.ts +25 -9
  754. package/src/resources/extensions/gsd/uok/contracts.ts +105 -0
  755. package/src/resources/extensions/gsd/uok/dispatch-envelope.ts +4 -0
  756. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  757. package/src/resources/extensions/gsd/uok/loop-adapter.ts +60 -45
  758. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  759. package/src/resources/extensions/gsd/uok/timeline.ts +158 -0
  760. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  761. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  762. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  763. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  764. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  765. package/src/resources/extensions/shared/gsd-phase-state.ts +56 -3
  766. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  767. package/src/resources/extensions/shared/tests/gsd-phase-state.test.ts +43 -1
  768. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  769. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  770. package/dist/web/standalone/.next/static/chunks/app/page-ff639266d978f2a0.js +0 -1
  771. package/dist/web/standalone/.next/static/chunks/main-app-d3d4c336195465f9.js +0 -1
  772. package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ab5a8926e07ec673.js +0 -1
  773. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → CaMwumvGbBPZrJicfsCzV}/_buildManifest.js +0 -0
  774. /package/dist/web/standalone/.next/static/{J-CU-p_sp45CJHT3R9TJS → CaMwumvGbBPZrJicfsCzV}/_ssgManifest.js +0 -0
@@ -31,7 +31,7 @@ import { selectAndApplyModel, resolveModelId, clearToolBaseline } from "./auto-m
31
31
  import { resetRoutingHistory, recordOutcome } from "./routing-history.js";
32
32
  import { resetHookState, runPreDispatchHooks, restoreHookState, clearPersistedHookState, } from "./post-unit-hooks.js";
33
33
  import { runGSDDoctor, rebuildState } from "./doctor.js";
34
- import { preDispatchHealthGate, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
34
+ import { preDispatchHealthGate, recordHealthSnapshot, resetProactiveHealing, setLevelChangeCallback, } from "./doctor-proactive.js";
35
35
  import { clearSkillSnapshot } from "./skill-discovery.js";
36
36
  import { captureAvailableSkills, resetSkillTelemetry, } from "./skill-telemetry.js";
37
37
  import { getRtkSessionSavings } from "../shared/rtk-session-stats.js";
@@ -43,7 +43,7 @@ import { isAbsolute, join } from "node:path";
43
43
  import { pathToFileURL } from "node:url";
44
44
  import { readFileSync, existsSync, mkdirSync } from "node:fs";
45
45
  import { atomicWriteSync } from "./atomic-write.js";
46
- import { autoCommitCurrentBranch, captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, } from "./worktree.js";
46
+ import { autoCommitCurrentBranch, captureIntegrationBranch, detectWorktreeName, getCurrentBranch, getMainBranch, setActiveMilestoneId, resolveProjectRoot, } from "./worktree.js";
47
47
  import { GitServiceImpl } from "./git-service.js";
48
48
  import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
49
49
  import { createAutoWorktree, enterAutoWorktree, enterBranchModeForMilestone, teardownAutoWorktree, isInAutoWorktree, getAutoWorktreePath, mergeMilestoneToMain, autoWorktreeBranch, syncWorktreeStateBack, syncProjectRootToWorktree, checkResourcesStale, escapeStaleWorktree, } from "./auto-worktree.js";
@@ -82,6 +82,7 @@ import { resolveAgentEnd, resolveAgentEndCancelled, _resetPendingResolve, isSess
82
82
  import { runAutoLoopWithUok } from "./uok/kernel.js";
83
83
  import { resolveUokFlags } from "./uok/flags.js";
84
84
  import { validateDirectory } from "./validate-directory.js";
85
+ import { createAutoOrchestrator } from "./auto/orchestrator.js";
85
86
  import { WorktreeResolver, } from "./worktree-resolver.js";
86
87
  import { reorderForCaching } from "./prompt-ordering.js";
87
88
  export { STUB_RECOVERY_THRESHOLD, NEW_SESSION_TIMEOUT_MS, } from "./auto/session.js";
@@ -904,6 +905,12 @@ export async function stopAuto(ctx, pi, reason) {
904
905
  // changes the user made between sessions (#4959 / CodeRabbit).
905
906
  if (pi)
906
907
  clearToolBaseline(pi);
908
+ try {
909
+ await s.orchestration?.stop(reason ?? "stop");
910
+ }
911
+ catch (err) {
912
+ debugLog("stop-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
913
+ }
907
914
  // Reset all session state in one call
908
915
  s.reset();
909
916
  }
@@ -953,6 +960,7 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
953
960
  activeRunDir: s.activeRunDir,
954
961
  autoStartTime: s.autoStartTime,
955
962
  milestoneLock: s.sessionMilestoneLock ?? undefined,
963
+ pauseReason: _errorContext?.message,
956
964
  };
957
965
  setRuntimeKv("global", "", PAUSED_SESSION_KV_KEY, pausedMeta);
958
966
  }
@@ -992,6 +1000,12 @@ export async function pauseAuto(ctx, _pi, _errorContext) {
992
1000
  // Unblock pending unitPromise so autoLoop exits cleanly (#1799)
993
1001
  resolveAgentEnd({ messages: [] });
994
1002
  _resetPendingResolve();
1003
+ try {
1004
+ await s.orchestration?.stop("pause");
1005
+ }
1006
+ catch (err) {
1007
+ debugLog("pause-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
1008
+ }
995
1009
  s.active = false;
996
1010
  s.paused = true;
997
1011
  deactivateGSD();
@@ -1041,6 +1055,132 @@ function buildResolverDeps() {
1041
1055
  function buildResolver() {
1042
1056
  return new WorktreeResolver(s, buildResolverDeps());
1043
1057
  }
1058
+ /**
1059
+ * Thin entry glue for the new Auto Orchestration module.
1060
+ *
1061
+ * This intentionally wires only dispatch + error notification today, with
1062
+ * no behavior changes to the existing auto loop. It provides a concrete seam
1063
+ * the next refactor steps can adopt incrementally.
1064
+ */
1065
+ export function createWiredAutoOrchestrationModule(ctx, _pi, dispatchBasePath, runtimeBasePath = resolveProjectRoot(dispatchBasePath)) {
1066
+ const flowId = `auto-orchestrator-${Date.now()}`;
1067
+ let seq = 0;
1068
+ const deps = {
1069
+ dispatch: {
1070
+ async decideNextUnit() {
1071
+ const state = await deriveState(dispatchBasePath);
1072
+ const active = state.activeMilestone;
1073
+ if (!active)
1074
+ return null;
1075
+ const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
1076
+ const action = await resolveDispatch({
1077
+ basePath: dispatchBasePath,
1078
+ mid: active.id,
1079
+ midTitle: active.title,
1080
+ state,
1081
+ prefs,
1082
+ });
1083
+ if (action.action !== "dispatch")
1084
+ return null;
1085
+ return {
1086
+ unitType: action.unitType,
1087
+ unitId: action.unitId,
1088
+ reason: action.matchedRule ?? "dispatch",
1089
+ preconditions: [],
1090
+ };
1091
+ },
1092
+ },
1093
+ recovery: {
1094
+ async classifyAndRecover(input) {
1095
+ const reason = input.error instanceof Error ? input.error.message : String(input.error ?? "unknown auto error");
1096
+ return { action: "escalate", reason };
1097
+ },
1098
+ },
1099
+ worktree: {
1100
+ async prepareForUnit() { },
1101
+ async syncAfterUnit() { },
1102
+ async cleanupOnStop() { },
1103
+ },
1104
+ health: {
1105
+ async preAdvanceGate() {
1106
+ const gate = await preDispatchHealthGate(dispatchBasePath);
1107
+ return {
1108
+ allow: gate.proceed,
1109
+ reason: gate.reason,
1110
+ };
1111
+ },
1112
+ async postAdvanceRecord(result) {
1113
+ if (result.kind === "error") {
1114
+ recordHealthSnapshot(1, 0, 0, [{
1115
+ code: "orchestration-error",
1116
+ message: result.reason ?? "orchestration error",
1117
+ severity: "error",
1118
+ unitId: "orchestration",
1119
+ }], [], "orchestration");
1120
+ }
1121
+ else if (result.kind === "blocked") {
1122
+ recordHealthSnapshot(0, 1, 0, [{
1123
+ code: "orchestration-blocked",
1124
+ message: result.reason ?? "orchestration blocked",
1125
+ severity: "warning",
1126
+ unitId: "orchestration",
1127
+ }], [], "orchestration");
1128
+ }
1129
+ },
1130
+ },
1131
+ runtime: {
1132
+ async ensureLockOwnership() {
1133
+ const status = getSessionLockStatus(runtimeBasePath);
1134
+ if (!status.valid || status.failureReason === "pid-mismatch") {
1135
+ throw new Error("session lock held by another process");
1136
+ }
1137
+ },
1138
+ async journalTransition(event) {
1139
+ const eventType = event.name === "start"
1140
+ ? "iteration-start"
1141
+ : event.name === "resume"
1142
+ ? "iteration-start"
1143
+ : event.name === "advance"
1144
+ ? "dispatch-match"
1145
+ : event.name === "advance-blocked"
1146
+ ? "guard-block"
1147
+ : event.name === "advance-stopped"
1148
+ ? "dispatch-stop"
1149
+ : event.name === "advance-error"
1150
+ ? "iteration-end"
1151
+ : event.name === "advance-paused" || event.name === "advance-retry"
1152
+ ? "guard-block"
1153
+ : event.name === "stop"
1154
+ ? "terminal"
1155
+ : "iteration-end";
1156
+ _emitJournalEvent(runtimeBasePath, {
1157
+ ts: new Date().toISOString(),
1158
+ flowId,
1159
+ seq: ++seq,
1160
+ eventType,
1161
+ data: {
1162
+ source: "auto-orchestrator",
1163
+ name: event.name,
1164
+ reason: event.reason,
1165
+ unitType: event.unitType,
1166
+ unitId: event.unitId,
1167
+ },
1168
+ });
1169
+ },
1170
+ },
1171
+ notifications: {
1172
+ async notifyLifecycle(event) {
1173
+ if (event.name === "error") {
1174
+ ctx.ui.notify(event.detail ?? "auto orchestration error", "error");
1175
+ }
1176
+ },
1177
+ },
1178
+ };
1179
+ return createAutoOrchestrator(deps);
1180
+ }
1181
+ function ensureOrchestrationModule(ctx, pi, basePath) {
1182
+ s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
1183
+ }
1044
1184
  /**
1045
1185
  * Build the LoopDeps object from auto.ts private scope.
1046
1186
  * This bundles all private functions that autoLoop needs without exporting them.
@@ -1398,6 +1538,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1398
1538
  // s.basePath may have been updated to a worktree path by enterMilestone.
1399
1539
  rebuildScope(s.basePath, s.currentMilestoneId);
1400
1540
  }
1541
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1401
1542
  registerSigtermHandler(lockBase());
1402
1543
  ctx.ui.setStatus("gsd-auto", s.stepMode ? "next" : "auto");
1403
1544
  ctx.ui.setWidget("gsd-health", undefined);
@@ -1457,6 +1598,12 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1457
1598
  clearPausedSession("paused-session DB cleanup failed (resume activation)");
1458
1599
  }
1459
1600
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
1601
+ try {
1602
+ await s.orchestration?.resume();
1603
+ }
1604
+ catch (err) {
1605
+ debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
1606
+ }
1460
1607
  startAutoCommandPolling(s.basePath);
1461
1608
  await runAutoLoopWithUok({
1462
1609
  ctx,
@@ -1482,6 +1629,7 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1482
1629
  // Build scope after bootstrap has populated s.basePath / s.originalBasePath /
1483
1630
  // s.currentMilestoneId (including worktree setup inside bootstrapAutoSession).
1484
1631
  rebuildScope(s.basePath, s.currentMilestoneId);
1632
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1485
1633
  captureProjectRootEnv(s.originalBasePath || s.basePath);
1486
1634
  registerAutoWorkerForSession(s);
1487
1635
  try {
@@ -1492,6 +1640,12 @@ export async function startAuto(ctx, pi, base, verboseMode, options) {
1492
1640
  logWarning("engine", `cmux sync failed: ${err instanceof Error ? err.message : String(err)}`, { file: "auto.ts" });
1493
1641
  }
1494
1642
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: requestedStepMode ? "Step-mode started." : "Auto-mode started.", level: "progress" });
1643
+ try {
1644
+ await s.orchestration?.start({ basePath: s.basePath, trigger: "auto-loop" });
1645
+ }
1646
+ catch (err) {
1647
+ debugLog("start-orchestration-start", { error: err instanceof Error ? err.message : String(err) });
1648
+ }
1495
1649
  startAutoCommandPolling(s.basePath);
1496
1650
  // Dispatch the first unit
1497
1651
  await runAutoLoopWithUok({
@@ -1576,6 +1730,9 @@ export async function dispatchHookUnit(ctx, pi, hookName, triggerUnitType, trigg
1576
1730
  s.pendingQuickTasks = [];
1577
1731
  }
1578
1732
  s.basePath = targetBasePath;
1733
+ if (!s.orchestration) {
1734
+ ensureOrchestrationModule(ctx, pi, s.basePath);
1735
+ }
1579
1736
  const hookUnitType = `hook/${hookName}`;
1580
1737
  const hookStartedAt = Date.now();
1581
1738
  s.currentUnit = {
@@ -1,10 +1,11 @@
1
+ // GSD-2 + src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts - Handles provider and agent-end recovery for GSD auto-mode.
1
2
  import { logWarning } from "../workflow-logger.js";
2
3
  import { checkDeepProjectSetupAfterTurn, checkAutoStartAfterDiscuss, maybeHandleReadyPhraseWithoutFiles, maybeHandleEmptyIntentTurn, resetEmptyTurnCounter, } from "../guided-flow.js";
3
4
  import { clearPathCache } from "../paths.js";
4
5
  import { getAutoDashboardData, getAutoModeStartModel, isAutoActive, pauseAuto, setCurrentDispatchedModelId } from "../auto.js";
5
6
  import { getNextFallbackModel, resolveModelWithFallbacksForUnit } from "../preferences.js";
6
7
  import { pauseAutoForProviderError } from "../provider-error-pause.js";
7
- import { isSessionSwitchInFlight, resolveAgentEnd } from "../auto/resolve.js";
8
+ import { isSessionSwitchInFlight, resolveAgentEnd, resolveAgentEndCancelled } from "../auto/resolve.js";
8
9
  import { resolveModelId } from "../auto-model-selection.js";
9
10
  import { resolveProjectRoot } from "../worktree.js";
10
11
  import { clearDiscussionFlowState } from "./write-gate.js";
@@ -39,6 +40,19 @@ function resolveAgentEndBasePath() {
39
40
  return undefined;
40
41
  }
41
42
  }
43
+ export function _buildAbortedPauseContext(lastMsg) {
44
+ const hasErrorMessage = Object.prototype.hasOwnProperty.call(lastMsg, "errorMessage") && !!lastMsg.errorMessage;
45
+ return {
46
+ message: hasErrorMessage ? String(lastMsg.errorMessage) : "Operation aborted",
47
+ category: "aborted",
48
+ isTransient: true,
49
+ };
50
+ }
51
+ export function isUserInitiatedAbortMessage(message) {
52
+ if (!message)
53
+ return false;
54
+ return /\b(?:claude code process aborted by user|request aborted by user|process aborted by user)\b/i.test(message);
55
+ }
42
56
  async function pauseTransientWithBackoff(cls, pi, ctx, errorDetail, isRateLimit) {
43
57
  retryState.consecutiveTransientCount += 1;
44
58
  const baseRetryAfterMs = "retryAfterMs" in cls ? cls.retryAfterMs : 15_000;
@@ -134,7 +148,7 @@ export async function handleAgentEnd(pi, event, ctx) {
134
148
  }
135
149
  return;
136
150
  }
137
- await pauseAuto(ctx, pi);
151
+ await pauseAuto(ctx, pi, _buildAbortedPauseContext(lastMsg));
138
152
  return;
139
153
  }
140
154
  if (lastMsg && "stopReason" in lastMsg && lastMsg.stopReason === "error") {
@@ -142,6 +156,14 @@ export async function handleAgentEnd(pi, event, ctx) {
142
156
  // is in the assistant message text content. Fall back to content when
143
157
  // errorMessage looks uninformative.
144
158
  const rawErrorMsg = ("errorMessage" in lastMsg && lastMsg.errorMessage) ? String(lastMsg.errorMessage) : "";
159
+ if (isUserInitiatedAbortMessage(rawErrorMsg)) {
160
+ resolveAgentEndCancelled({
161
+ message: rawErrorMsg,
162
+ category: "aborted",
163
+ isTransient: false,
164
+ });
165
+ return;
166
+ }
145
167
  const isUseless = !rawErrorMsg || /^(success|ok|true|error|unknown)$/i.test(rawErrorMsg.trim());
146
168
  // #3588: When errorMessage is uninformative, extract the real error from
147
169
  // the assistant message text content for display purposes only.
@@ -1,3 +1,5 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Registers DB-backed GSD workflow tools and compatibility aliases.
1
3
  import { Type } from "@sinclair/typebox";
2
4
  import { Text } from "@gsd/pi-tui";
3
5
  import { loadEffectiveGSDPreferences } from "../preferences.js";
@@ -5,6 +7,7 @@ import { ensureDbOpen } from "./dynamic-tools.js";
5
7
  import { loadWriteGateSnapshot, shouldBlockRootArtifactSaveInSnapshot } from "./write-gate.js";
6
8
  import { StringEnum } from "@gsd/pi-ai";
7
9
  import { logError } from "../workflow-logger.js";
10
+ import { incrementLegacyTelemetry } from "../legacy-telemetry.js";
8
11
  async function loadWorkflowExecutors() {
9
12
  return import("../tools/workflow-tool-executors.js");
10
13
  }
@@ -14,11 +17,18 @@ async function loadWorkflowExecutors() {
14
17
  */
15
18
  // eslint-disable-next-line @typescript-eslint/no-explicit-any -- toolDef shape matches ToolDefinition but typing it fully requires generics
16
19
  function registerAlias(pi, toolDef, aliasName, canonicalName) {
20
+ const execute = typeof toolDef.execute === "function"
21
+ ? async (...args) => {
22
+ incrementLegacyTelemetry("legacy.mcpAliasUsed");
23
+ return toolDef.execute(...args);
24
+ }
25
+ : toolDef.execute;
17
26
  pi.registerTool({
18
27
  ...toolDef,
19
28
  name: aliasName,
20
29
  description: toolDef.description + ` (alias for ${canonicalName} — prefer the canonical name)`,
21
30
  promptGuidelines: [`Alias for ${canonicalName} — prefer the canonical name.`],
31
+ execute,
22
32
  });
23
33
  }
24
34
  function requirementRootWriteGuard(operation) {
@@ -1,7 +1,7 @@
1
1
  // GSD2 — Exec (context-mode) tool registration.
2
2
  //
3
- // Exposes the `gsd_exec` tool over MCP. Opt-in: disabled unless
4
- // `context_mode.enabled: true` is set in preferences.
3
+ // Exposes the Context Mode runtime tools in-process. Default-on; opt out with
4
+ // `context_mode.enabled: false` in preferences.
5
5
  import { Type } from "@sinclair/typebox";
6
6
  export function registerExecTools(pi) {
7
7
  pi.registerTool({
@@ -2,7 +2,7 @@ import { join } from "node:path";
2
2
  import { isToolCallEventType } from "@gsd/pi-coding-agent";
3
3
  import { updateSnapshot } from "../ecosystem/gsd-extension-api.js";
4
4
  import { buildMilestoneFileName, resolveMilestonePath, resolveSliceFile, resolveSlicePath } from "../paths.js";
5
- import { canonicalToolName, clearDiscussionFlowState, isDepthConfirmationAnswer, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
5
+ import { canonicalToolName, clearDiscussionFlowState, isDepthConfirmationAnswer, isQueuePhaseActive, markApprovalGateVerified, markDepthVerified, resetWriteGateState, shouldBlockContextWrite, shouldBlockPlanningUnit, shouldBlockQueueExecution, shouldBlockWorktreeWrite, isGateQuestionId, setPendingGate, clearPendingGate, getPendingGate, shouldBlockPendingGate, shouldBlockPendingGateBash, extractDepthVerificationMilestoneId } from "./write-gate.js";
6
6
  import { resolveManifest } from "../unit-context-manifest.js";
7
7
  import { isBlockedStateFile, isBashWriteToStateFile, BLOCKED_WRITE_ERROR } from "../write-intercept.js";
8
8
  import { loadFile, saveFile, formatContinue } from "../files.js";
@@ -16,6 +16,7 @@ import { logWarning as safetyLogWarning } from "../workflow-logger.js";
16
16
  import { installNotifyInterceptor } from "./notify-interceptor.js";
17
17
  import { initNotificationStore } from "../notification-store.js";
18
18
  import { initNotificationWidget } from "../notification-widget.js";
19
+ import { resolveWorktreeProjectRoot } from "../worktree-root.js";
19
20
  import { extractSubagentAgentClasses } from "./subagent-input.js";
20
21
  import { approvalGateIdForUnit, isExplicitApprovalResponse, shouldPauseForUserApprovalQuestion } from "../user-input-boundary.js";
21
22
  // Skip the welcome screen on the very first session_start — cli.ts already
@@ -51,11 +52,45 @@ async function applyDisabledModelProviderPolicy(ctx) {
51
52
  // Non-fatal: keep default provider visibility if preferences cannot be loaded.
52
53
  }
53
54
  }
55
+ export function resolveNotificationStoreBasePath(cwd = process.cwd()) {
56
+ return resolveWorktreeProjectRoot(cwd);
57
+ }
58
+ function initSessionNotifications(ctx) {
59
+ initNotificationStore(resolveNotificationStoreBasePath());
60
+ installNotifyInterceptor(ctx);
61
+ initNotificationWidget(ctx);
62
+ }
63
+ async function writeContextModeCompactionSnapshot(basePath) {
64
+ try {
65
+ const { loadEffectiveGSDPreferences } = await import("../preferences.js");
66
+ const { isContextModeEnabled } = await import("../preferences-types.js");
67
+ const prefs = loadEffectiveGSDPreferences(basePath);
68
+ if (!isContextModeEnabled(prefs?.preferences))
69
+ return;
70
+ const { writeCompactionSnapshot } = await import("../compaction-snapshot.js");
71
+ const { ensureDbOpen } = await import("./dynamic-tools.js");
72
+ await ensureDbOpen(basePath);
73
+ let activeContext = null;
74
+ try {
75
+ const state = await deriveGsdState(basePath);
76
+ if (state.activeMilestone && state.activeSlice && state.activeTask) {
77
+ activeContext =
78
+ `Active: ${state.activeMilestone.id} / ${state.activeSlice.id} / ${state.activeTask.id}` +
79
+ (state.activeTask.title ? ` - ${state.activeTask.title}` : "");
80
+ }
81
+ }
82
+ catch {
83
+ /* non-fatal */
84
+ }
85
+ writeCompactionSnapshot(basePath, { activeContext });
86
+ }
87
+ catch (err) {
88
+ safetyLogWarning("context-mode", `failed to write compaction snapshot: ${err instanceof Error ? err.message : String(err)}`);
89
+ }
90
+ }
54
91
  export function registerHooks(pi, ecosystemHandlers) {
55
92
  pi.on("session_start", async (_event, ctx) => {
56
- initNotificationStore(process.cwd());
57
- installNotifyInterceptor(ctx);
58
- initNotificationWidget(ctx);
93
+ initSessionNotifications(ctx);
59
94
  if (!isAutoActive()) {
60
95
  const { initHealthWidget } = await import("../health-widget.js");
61
96
  initHealthWidget(ctx);
@@ -107,8 +142,7 @@ export function registerHooks(pi, ecosystemHandlers) {
107
142
  }
108
143
  });
109
144
  pi.on("session_switch", async (_event, ctx) => {
110
- initNotificationStore(process.cwd());
111
- installNotifyInterceptor(ctx);
145
+ initSessionNotifications(ctx);
112
146
  resetWriteGateState(process.cwd());
113
147
  resetToolCallLoopGuard();
114
148
  await resetAskUserQuestionsTurnCache();
@@ -138,7 +172,7 @@ export function registerHooks(pi, ecosystemHandlers) {
138
172
  const { getEcosystemReadyPromise } = await import("../ecosystem/loader.js");
139
173
  await getEcosystemReadyPromise();
140
174
  const beforeAgentBasePath = process.cwd();
141
- const pendingApprovalGate = getPendingGate();
175
+ const pendingApprovalGate = getPendingGate(beforeAgentBasePath);
142
176
  if (pendingApprovalGate && isExplicitApprovalResponse(event.prompt, pendingApprovalGate)) {
143
177
  markApprovalGateVerified(pendingApprovalGate, beforeAgentBasePath);
144
178
  const milestoneId = extractDepthVerificationMilestoneId(pendingApprovalGate);
@@ -204,15 +238,18 @@ export function registerHooks(pi, ecosystemHandlers) {
204
238
  }
205
239
  });
206
240
  pi.on("session_before_compact", async () => {
241
+ const basePath = process.cwd();
242
+ // Context Mode is default-on. Write the resumable snapshot before any
243
+ // active-auto cancel return so auto sessions still leave re-entry context.
244
+ await writeContextModeCompactionSnapshot(basePath);
207
245
  // Only cancel compaction while auto-mode is actively running.
208
246
  // Paused auto-mode should allow compaction — the user may be doing
209
247
  // interactive work (#3165).
210
248
  if (isAutoActive()) {
211
249
  return { cancel: true };
212
250
  }
213
- const basePath = process.cwd();
214
251
  const { ensureDbOpen } = await import("./dynamic-tools.js");
215
- await ensureDbOpen();
252
+ await ensureDbOpen(basePath);
216
253
  const state = await deriveGsdState(basePath);
217
254
  if (!state.activeMilestone || !state.activeSlice)
218
255
  return;
@@ -256,41 +293,6 @@ export function registerHooks(pi, ecosystemHandlers) {
256
293
  : `Resume ${phaseLabel} work for slice ${state.activeSlice.id}.`,
257
294
  }));
258
295
  });
259
- // Context-mode snapshot: write .gsd/last-snapshot.md before compaction so
260
- // agents can call gsd_resume (or Read the file) to re-orient. Opt-in via
261
- // preferences.context_mode.enabled. Runs after the auto-cancel handler
262
- // above — if that one returned cancel:true, pi still fires us but the
263
- // compaction won't actually happen; the snapshot is still useful then,
264
- // since auto may pause and resume later.
265
- pi.on("session_before_compact", async () => {
266
- try {
267
- const { loadEffectiveGSDPreferences } = await import("../preferences.js");
268
- const { isContextModeEnabled } = await import("../preferences-types.js");
269
- const prefs = loadEffectiveGSDPreferences();
270
- if (!isContextModeEnabled(prefs?.preferences))
271
- return;
272
- const { writeCompactionSnapshot } = await import("../compaction-snapshot.js");
273
- const { ensureDbOpen } = await import("./dynamic-tools.js");
274
- await ensureDbOpen();
275
- const basePath = process.cwd();
276
- let activeContext = null;
277
- try {
278
- const state = await deriveGsdState(basePath);
279
- if (state.activeMilestone && state.activeSlice && state.activeTask) {
280
- activeContext =
281
- `Active: ${state.activeMilestone.id} / ${state.activeSlice.id} / ${state.activeTask.id}` +
282
- (state.activeTask.title ? ` — ${state.activeTask.title}` : "");
283
- }
284
- }
285
- catch {
286
- /* non-fatal */
287
- }
288
- writeCompactionSnapshot(basePath, { activeContext });
289
- }
290
- catch (err) {
291
- safetyLogWarning("context-mode", `failed to write compaction snapshot: ${err instanceof Error ? err.message : String(err)}`);
292
- }
293
- });
294
296
  pi.on("message_update", async (event, ctx) => {
295
297
  if (approvalQuestionAbortInFlight)
296
298
  return;
@@ -367,15 +369,15 @@ export function registerHooks(pi, ecosystemHandlers) {
367
369
  // ── Discussion gate enforcement: block tool calls while gate is pending ──
368
370
  // If ask_user_questions was called with a gate ID but hasn't been confirmed,
369
371
  // block all non-read-only tool calls to prevent the model from skipping gates.
370
- if (getPendingGate()) {
372
+ if (getPendingGate(discussionBasePath)) {
371
373
  const milestoneId = await getDiscussionMilestoneIdFor(discussionBasePath);
372
374
  if (isToolCallEventType("bash", event)) {
373
- const bashGuard = shouldBlockPendingGateBash(event.input.command, milestoneId, isQueuePhaseActive());
375
+ const bashGuard = shouldBlockPendingGateBash(event.input.command, milestoneId, isQueuePhaseActive(discussionBasePath), discussionBasePath);
374
376
  if (bashGuard.block)
375
377
  return bashGuard;
376
378
  }
377
379
  else {
378
- const gateGuard = shouldBlockPendingGate(toolName, milestoneId, isQueuePhaseActive());
380
+ const gateGuard = shouldBlockPendingGate(toolName, milestoneId, isQueuePhaseActive(discussionBasePath), discussionBasePath);
379
381
  if (gateGuard.block)
380
382
  return gateGuard;
381
383
  }
@@ -384,7 +386,7 @@ export function registerHooks(pi, ecosystemHandlers) {
384
386
  // When /gsd queue is active, the agent should only create milestones,
385
387
  // not execute work. Block write/edit to non-.gsd/ paths and bash commands
386
388
  // that would modify files.
387
- if (isQueuePhaseActive()) {
389
+ if (isQueuePhaseActive(discussionBasePath)) {
388
390
  let queueInput = "";
389
391
  if (isToolCallEventType("write", event)) {
390
392
  queueInput = event.input.path;
@@ -430,6 +432,16 @@ export function registerHooks(pi, ecosystemHandlers) {
430
432
  return planningGuard;
431
433
  }
432
434
  }
435
+ // ── Worktree-isolation write gate (#5199) ────────────────────────────
436
+ // Block planning-write tools from landing code at the project root when
437
+ // git.isolation=worktree but auto-mode hasn't created the milestone
438
+ // worktree yet. Without this, writes silently orphan outside git history.
439
+ if (isToolCallEventType("write", event) || isToolCallEventType("edit", event)) {
440
+ const wtBasePath = resolveWorktreeProjectRoot(dash.basePath ?? discussionBasePath);
441
+ const wtGuard = shouldBlockWorktreeWrite(event.toolName, event.input.path, wtBasePath, isAutoActive(), dash.currentUnit?.type);
442
+ if (wtGuard.block)
443
+ return wtGuard;
444
+ }
433
445
  // ── Single-writer engine: block direct writes to STATE.md ──────────
434
446
  // Covers write, edit, and bash tools to prevent bypass vectors.
435
447
  if (isToolCallEventType("write", event)) {
@@ -449,7 +461,7 @@ export function registerHooks(pi, ecosystemHandlers) {
449
461
  }
450
462
  if (!isToolCallEventType("write", event))
451
463
  return;
452
- const result = shouldBlockContextWrite(event.toolName, event.input.path, await getDiscussionMilestoneIdFor(discussionBasePath), isQueuePhaseActive());
464
+ const result = shouldBlockContextWrite(event.toolName, event.input.path, await getDiscussionMilestoneIdFor(discussionBasePath), isQueuePhaseActive(discussionBasePath), discussionBasePath);
453
465
  if (result.block)
454
466
  return result;
455
467
  });
@@ -504,7 +516,7 @@ export function registerHooks(pi, ecosystemHandlers) {
504
516
  return;
505
517
  const basePath = process.cwd();
506
518
  const milestoneId = await getDiscussionMilestoneIdFor(basePath);
507
- const queueActive = isQueuePhaseActive();
519
+ const queueActive = isQueuePhaseActive(basePath);
508
520
  const details = event.details;
509
521
  // ── Discussion gate enforcement: handle gate question responses ──
510
522
  // If the result is cancelled or has no response, the pending gate stays active
@@ -512,7 +524,7 @@ export function registerHooks(pi, ecosystemHandlers) {
512
524
  // If the user responded at all (even "needs adjustment"), clear the pending gate
513
525
  // because the user engaged — the prompt handles the re-ask-after-adjustment flow.
514
526
  const questions = event.input?.questions ?? [];
515
- const currentPendingGate = getPendingGate();
527
+ const currentPendingGate = getPendingGate(basePath);
516
528
  if (currentPendingGate) {
517
529
  if (details?.cancelled || !details?.response) {
518
530
  // Gate stays pending. Direct the agent to the most reliable recovery