gsd-pi 2.79.0-dev.ece5fd8ba → 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 (644) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/github-sync/templates.js +90 -74
  3. package/dist/resources/extensions/gsd/auto/contracts.js +1 -0
  4. package/dist/resources/extensions/gsd/auto/custom-verify-retry-store.js +53 -0
  5. package/dist/resources/extensions/gsd/auto/loop.js +365 -522
  6. package/dist/resources/extensions/gsd/auto/orchestrator.js +146 -0
  7. package/dist/resources/extensions/gsd/auto/phases.js +55 -6
  8. package/dist/resources/extensions/gsd/auto/run-unit.js +19 -15
  9. package/dist/resources/extensions/gsd/auto/session.js +8 -0
  10. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.js +12 -0
  11. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-iteration.js +24 -0
  12. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.js +33 -0
  13. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.js +26 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-retry.js +49 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.js +25 -0
  16. package/dist/resources/extensions/gsd/auto/workflow-dispatch-claim.js +48 -0
  17. package/dist/resources/extensions/gsd/auto/workflow-dispatch-ledger.js +26 -0
  18. package/dist/resources/extensions/gsd/auto/workflow-iteration-completion.js +10 -0
  19. package/dist/resources/extensions/gsd/auto/workflow-journal-reporter.js +16 -0
  20. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +263 -0
  21. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +36 -0
  22. package/dist/resources/extensions/gsd/auto/workflow-phase-reporter.js +9 -0
  23. package/dist/resources/extensions/gsd/auto/workflow-session-lock.js +35 -0
  24. package/dist/resources/extensions/gsd/auto/workflow-sidecar-iteration.js +24 -0
  25. package/dist/resources/extensions/gsd/auto/workflow-sidecar-queue.js +26 -0
  26. package/dist/resources/extensions/gsd/auto/workflow-turn-reporter.js +36 -0
  27. package/dist/resources/extensions/gsd/auto/workflow-unit-dispatch.js +44 -0
  28. package/dist/resources/extensions/gsd/auto/workflow-worker-heartbeat.js +15 -0
  29. package/dist/resources/extensions/gsd/auto-dashboard.js +54 -15
  30. package/dist/resources/extensions/gsd/auto-prompts.js +168 -3
  31. package/dist/resources/extensions/gsd/auto-recovery.js +72 -55
  32. package/dist/resources/extensions/gsd/auto-runtime-state.js +4 -0
  33. package/dist/resources/extensions/gsd/auto-verification.js +2 -11
  34. package/dist/resources/extensions/gsd/auto-worktree.js +87 -38
  35. package/dist/resources/extensions/gsd/auto.js +159 -2
  36. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +24 -2
  37. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -0
  38. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +22 -6
  39. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +129 -1
  40. package/dist/resources/extensions/gsd/commands-ship.js +23 -46
  41. package/dist/resources/extensions/gsd/commands-workflow-templates.js +12 -7
  42. package/dist/resources/extensions/gsd/component-loader.js +5 -11
  43. package/dist/resources/extensions/gsd/custom-workflow-engine.js +25 -1
  44. package/dist/resources/extensions/gsd/db-adapter.js +47 -0
  45. package/dist/resources/extensions/gsd/db-base-schema.js +337 -0
  46. package/dist/resources/extensions/gsd/db-connection-cache.js +31 -0
  47. package/dist/resources/extensions/gsd/db-coordination-schema.js +104 -0
  48. package/dist/resources/extensions/gsd/db-decision-requirement-rows.js +71 -0
  49. package/dist/resources/extensions/gsd/db-gate-rows.js +16 -0
  50. package/dist/resources/extensions/gsd/db-lightweight-query-rows.js +29 -0
  51. package/dist/resources/extensions/gsd/db-memory-fts-schema.js +56 -0
  52. package/dist/resources/extensions/gsd/db-migration-backup.js +22 -0
  53. package/dist/resources/extensions/gsd/db-migration-steps.js +394 -0
  54. package/dist/resources/extensions/gsd/db-milestone-artifact-rows.js +35 -0
  55. package/dist/resources/extensions/gsd/db-open-state.js +32 -0
  56. package/dist/resources/extensions/gsd/db-provider.js +108 -0
  57. package/dist/resources/extensions/gsd/db-runtime-kv-schema.js +27 -0
  58. package/dist/resources/extensions/gsd/db-schema-metadata.js +23 -0
  59. package/dist/resources/extensions/gsd/db-task-slice-rows.js +86 -0
  60. package/dist/resources/extensions/gsd/db-transaction.js +63 -0
  61. package/dist/resources/extensions/gsd/db-verification-evidence-rows.js +3 -0
  62. package/dist/resources/extensions/gsd/db-verification-evidence-schema.js +19 -0
  63. package/dist/resources/extensions/gsd/escalation.js +2 -0
  64. package/dist/resources/extensions/gsd/graph.js +9 -3
  65. package/dist/resources/extensions/gsd/gsd-db.js +215 -1519
  66. package/dist/resources/extensions/gsd/legacy-telemetry.js +70 -0
  67. package/dist/resources/extensions/gsd/markdown-renderer.js +2 -0
  68. package/dist/resources/extensions/gsd/model-router.js +9 -6
  69. package/dist/resources/extensions/gsd/notification-widget.js +21 -3
  70. package/dist/resources/extensions/gsd/post-execution-checks.js +27 -6
  71. package/dist/resources/extensions/gsd/pr-evidence.js +117 -0
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +2 -0
  73. package/dist/resources/extensions/gsd/process-task-path.js +61 -0
  74. package/dist/resources/extensions/gsd/prompt-loader.js +9 -5
  75. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  76. package/dist/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  77. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  78. package/dist/resources/extensions/gsd/prompts/discuss.md +81 -181
  79. package/dist/resources/extensions/gsd/prompts/execute-task.md +40 -67
  80. package/dist/resources/extensions/gsd/prompts/forensics.md +41 -84
  81. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  82. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  83. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  84. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  85. package/dist/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  86. package/dist/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  87. package/dist/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  88. package/dist/resources/extensions/gsd/prompts/queue.md +46 -53
  89. package/dist/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  90. package/dist/resources/extensions/gsd/prompts/research-slice.md +23 -23
  91. package/dist/resources/extensions/gsd/prompts/rethink.md +10 -10
  92. package/dist/resources/extensions/gsd/prompts/system.md +65 -107
  93. package/dist/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  94. package/dist/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  95. package/dist/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  96. package/dist/resources/extensions/gsd/state.js +4 -0
  97. package/dist/resources/extensions/gsd/tools/complete-milestone.js +14 -9
  98. package/dist/resources/extensions/gsd/tools/complete-task.js +2 -0
  99. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +6 -1
  100. package/dist/resources/extensions/gsd/unit-context-composer.js +1 -1
  101. package/dist/resources/extensions/gsd/uok/kernel.js +8 -3
  102. package/dist/resources/extensions/gsd/uok/plan-v2.js +2 -0
  103. package/dist/resources/extensions/gsd/workflow-logger.js +13 -13
  104. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  105. package/dist/resources/extensions/gsd/workflow-projections.js +2 -0
  106. package/dist/resources/extensions/gsd/workflow-templates.js +9 -0
  107. package/dist/resources/extensions/gsd/working-output-messages.js +64 -0
  108. package/dist/resources/extensions/shared/interview-ui.js +15 -4
  109. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  110. package/dist/web/standalone/.next/BUILD_ID +1 -1
  111. package/dist/web/standalone/.next/app-path-routes-manifest.json +14 -14
  112. package/dist/web/standalone/.next/build-manifest.json +3 -3
  113. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  114. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  115. package/dist/web/standalone/.next/required-server-files.json +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  120. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  121. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  122. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  123. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  125. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  128. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  129. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  130. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  131. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  132. package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
  134. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
  136. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
  138. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
  140. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
  142. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
  144. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
  146. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
  148. package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
  150. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
  152. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
  154. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
  156. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
  158. package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
  160. package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
  162. package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
  164. package/dist/web/standalone/.next/server/app/api/notifications/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
  166. package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
  168. package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
  170. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
  172. package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
  174. package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
  176. package/dist/web/standalone/.next/server/app/api/session/events/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
  178. package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
  180. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
  182. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  183. package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
  184. package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
  185. package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
  186. package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
  187. package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
  188. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
  189. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
  190. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +1 -1
  191. package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  192. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  193. package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
  194. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  195. package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
  196. package/dist/web/standalone/.next/server/app/index.html +1 -1
  197. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  198. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  199. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  200. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  201. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  202. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  203. package/dist/web/standalone/.next/server/app-paths-manifest.json +14 -14
  204. package/dist/web/standalone/.next/server/chunks/167.js +2 -0
  205. package/dist/web/standalone/.next/server/chunks/6897.js +3 -3
  206. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  207. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  208. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  209. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  210. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  211. package/dist/web/standalone/.next/static/chunks/{8336.6f6f30e410419aff.js → 8336.631939fb583761fa.js} +1 -1
  212. package/dist/web/standalone/.next/static/chunks/{webpack-d82dbee6356c1733.js → webpack-0481f1221120a7c6.js} +1 -1
  213. package/dist/web/standalone/package.json +1 -0
  214. package/dist/web/standalone/server.js +1 -1
  215. package/package.json +15 -6
  216. package/packages/contracts/dist/index.d.ts +3 -0
  217. package/packages/contracts/dist/index.d.ts.map +1 -0
  218. package/packages/contracts/dist/index.js +5 -0
  219. package/packages/contracts/dist/index.js.map +1 -0
  220. package/packages/contracts/dist/rpc.d.ts +549 -0
  221. package/packages/contracts/dist/rpc.d.ts.map +1 -0
  222. package/packages/contracts/dist/rpc.js +53 -0
  223. package/packages/contracts/dist/rpc.js.map +1 -0
  224. package/packages/contracts/dist/rpc.test.d.ts +2 -0
  225. package/packages/contracts/dist/rpc.test.d.ts.map +1 -0
  226. package/packages/contracts/dist/rpc.test.js +47 -0
  227. package/packages/contracts/dist/rpc.test.js.map +1 -0
  228. package/packages/contracts/dist/workflow.d.ts +180 -0
  229. package/packages/contracts/dist/workflow.d.ts.map +1 -0
  230. package/packages/contracts/dist/workflow.js +201 -0
  231. package/packages/contracts/dist/workflow.js.map +1 -0
  232. package/packages/contracts/package.json +39 -0
  233. package/packages/contracts/src/index.ts +5 -0
  234. package/packages/contracts/src/rpc.test.ts +72 -0
  235. package/packages/contracts/src/rpc.ts +286 -0
  236. package/packages/contracts/src/workflow.ts +213 -0
  237. package/packages/contracts/tsconfig.json +25 -0
  238. package/packages/daemon/package.json +3 -2
  239. package/packages/daemon/src/event-bridge.test.ts +2 -1
  240. package/packages/daemon/src/event-bridge.ts +1 -1
  241. package/packages/daemon/src/event-formatter.test.ts +1 -2
  242. package/packages/daemon/src/event-formatter.ts +1 -2
  243. package/packages/daemon/src/session-manager.ts +2 -2
  244. package/packages/daemon/src/types.ts +3 -18
  245. package/packages/mcp-server/dist/server.d.ts +13 -0
  246. package/packages/mcp-server/dist/server.d.ts.map +1 -1
  247. package/packages/mcp-server/dist/server.js +77 -0
  248. package/packages/mcp-server/dist/server.js.map +1 -1
  249. package/packages/mcp-server/dist/session-manager.js +1 -1
  250. package/packages/mcp-server/dist/session-manager.js.map +1 -1
  251. package/packages/mcp-server/dist/types.d.ts +3 -11
  252. package/packages/mcp-server/dist/types.d.ts.map +1 -1
  253. package/packages/mcp-server/dist/types.js.map +1 -1
  254. package/packages/mcp-server/dist/workflow-tools.d.ts +1 -1
  255. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  256. package/packages/mcp-server/dist/workflow-tools.js +2 -40
  257. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  258. package/packages/mcp-server/package.json +3 -2
  259. package/packages/mcp-server/src/mcp-server.test.ts +138 -0
  260. package/packages/mcp-server/src/server.ts +99 -1
  261. package/packages/mcp-server/src/session-manager.ts +2 -2
  262. package/packages/mcp-server/src/types.ts +7 -18
  263. package/packages/mcp-server/src/workflow-tools.ts +2 -40
  264. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  265. package/packages/native/package.json +1 -1
  266. package/packages/pi-agent-core/package.json +1 -1
  267. package/packages/pi-ai/dist/models/fake-model.d.ts +12 -0
  268. package/packages/pi-ai/dist/models/fake-model.d.ts.map +1 -0
  269. package/packages/pi-ai/dist/models/fake-model.js +27 -0
  270. package/packages/pi-ai/dist/models/fake-model.js.map +1 -0
  271. package/packages/pi-ai/dist/models/index.d.ts.map +1 -1
  272. package/packages/pi-ai/dist/models/index.js +8 -0
  273. package/packages/pi-ai/dist/models/index.js.map +1 -1
  274. package/packages/pi-ai/dist/providers/fake.d.ts +42 -0
  275. package/packages/pi-ai/dist/providers/fake.d.ts.map +1 -0
  276. package/packages/pi-ai/dist/providers/fake.js +319 -0
  277. package/packages/pi-ai/dist/providers/fake.js.map +1 -0
  278. package/packages/pi-ai/dist/providers/register-builtins.d.ts.map +1 -1
  279. package/packages/pi-ai/dist/providers/register-builtins.js +24 -0
  280. package/packages/pi-ai/dist/providers/register-builtins.js.map +1 -1
  281. package/packages/pi-ai/package.json +1 -1
  282. package/packages/pi-ai/src/models/fake-model.ts +30 -0
  283. package/packages/pi-ai/src/models/index.ts +9 -0
  284. package/packages/pi-ai/src/providers/fake.ts +376 -0
  285. package/packages/pi-ai/src/providers/register-builtins.ts +23 -0
  286. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  287. package/packages/pi-coding-agent/dist/core/model-registry.d.ts.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/model-registry.js +5 -0
  289. package/packages/pi-coding-agent/dist/core/model-registry.js.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts +4 -0
  291. package/packages/pi-coding-agent/dist/core/settings-manager.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/settings-manager.js +8 -0
  293. package/packages/pi-coding-agent/dist/core/settings-manager.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/slash-commands.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/slash-commands.js +1 -0
  296. package/packages/pi-coding-agent/dist/core/slash-commands.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +22 -0
  298. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -1
  299. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts +26 -0
  300. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.d.ts.map +1 -0
  301. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js +112 -0
  302. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.js.map +1 -0
  303. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts +2 -0
  304. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.d.ts.map +1 -0
  305. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js +51 -0
  306. package/packages/pi-coding-agent/dist/modes/interactive/components/adaptive-layout.test.js.map +1 -0
  307. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js +8 -8
  308. package/packages/pi-coding-agent/dist/modes/interactive/components/chat-frame.js.map +1 -1
  309. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts +3 -0
  310. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  311. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js +11 -0
  312. package/packages/pi-coding-agent/dist/modes/interactive/components/settings-selector.js.map +1 -1
  313. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js +20 -0
  314. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.js.map +1 -1
  315. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +4 -0
  316. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  317. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +48 -15
  318. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +1 -0
  321. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  322. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js +40 -1
  323. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.test.js.map +1 -1
  324. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +1 -0
  325. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  326. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts +1 -0
  327. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.d.ts.map +1 -1
  328. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-state.js.map +1 -1
  329. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +12 -1
  330. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  331. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +54 -10
  332. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  333. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.d.ts.map +1 -1
  334. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js +20 -0
  335. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.js.map +1 -1
  336. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts +2 -0
  337. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.d.ts.map +1 -0
  338. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js +79 -0
  339. package/packages/pi-coding-agent/dist/modes/interactive/slash-command-handlers.test.js.map +1 -0
  340. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  341. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  342. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js +13 -0
  343. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  344. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts +1 -1
  345. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  346. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js +18 -1
  347. package/packages/pi-coding-agent/dist/modes/interactive/theme/theme.js.map +1 -1
  348. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts +11 -0
  349. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.d.ts.map +1 -0
  350. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js +18 -0
  351. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.js.map +1 -0
  352. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts +2 -0
  353. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.d.ts.map +1 -0
  354. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js +27 -0
  355. package/packages/pi-coding-agent/dist/modes/interactive/tui-mode.test.js.map +1 -0
  356. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts +1 -512
  357. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  358. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js +3 -7
  359. package/packages/pi-coding-agent/dist/modes/rpc/rpc-types.js.map +1 -1
  360. package/packages/pi-coding-agent/package.json +2 -1
  361. package/packages/pi-coding-agent/src/core/model-registry.ts +4 -0
  362. package/packages/pi-coding-agent/src/core/settings-manager.ts +12 -0
  363. package/packages/pi-coding-agent/src/core/slash-commands.ts +1 -0
  364. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +37 -2
  365. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.test.ts +59 -0
  366. package/packages/pi-coding-agent/src/modes/interactive/components/adaptive-layout.ts +160 -0
  367. package/packages/pi-coding-agent/src/modes/interactive/components/chat-frame.ts +8 -8
  368. package/packages/pi-coding-agent/src/modes/interactive/components/settings-selector.ts +15 -0
  369. package/packages/pi-coding-agent/src/modes/interactive/components/tool-card-cleanup-and-success-runtime.test.ts +31 -0
  370. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +50 -15
  371. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.test.ts +43 -1
  372. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +1 -0
  373. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +1 -0
  374. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-state.ts +1 -1
  375. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +75 -9
  376. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.test.ts +95 -0
  377. package/packages/pi-coding-agent/src/modes/interactive/slash-command-handlers.ts +24 -1
  378. package/packages/pi-coding-agent/src/modes/interactive/theme/theme-schema.ts +13 -0
  379. package/packages/pi-coding-agent/src/modes/interactive/theme/theme.ts +32 -2
  380. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.test.ts +40 -0
  381. package/packages/pi-coding-agent/src/modes/interactive/tui-mode.ts +29 -0
  382. package/packages/pi-coding-agent/src/modes/rpc/rpc-types.ts +3 -336
  383. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  384. package/packages/pi-tui/dist/__tests__/style.test.d.ts +2 -0
  385. package/packages/pi-tui/dist/__tests__/style.test.d.ts.map +1 -0
  386. package/packages/pi-tui/dist/__tests__/style.test.js +63 -0
  387. package/packages/pi-tui/dist/__tests__/style.test.js.map +1 -0
  388. package/packages/pi-tui/dist/__tests__/tui.test.js +24 -3
  389. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  390. package/packages/pi-tui/dist/index.d.ts +1 -0
  391. package/packages/pi-tui/dist/index.d.ts.map +1 -1
  392. package/packages/pi-tui/dist/index.js +2 -0
  393. package/packages/pi-tui/dist/index.js.map +1 -1
  394. package/packages/pi-tui/dist/style.d.ts +41 -0
  395. package/packages/pi-tui/dist/style.d.ts.map +1 -0
  396. package/packages/pi-tui/dist/style.js +158 -0
  397. package/packages/pi-tui/dist/style.js.map +1 -0
  398. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  399. package/packages/pi-tui/dist/tui.js +1 -0
  400. package/packages/pi-tui/dist/tui.js.map +1 -1
  401. package/packages/pi-tui/package.json +1 -1
  402. package/packages/pi-tui/src/__tests__/style.test.ts +76 -0
  403. package/packages/pi-tui/src/__tests__/tui.test.ts +29 -3
  404. package/packages/pi-tui/src/index.ts +9 -0
  405. package/packages/pi-tui/src/style.ts +225 -0
  406. package/packages/pi-tui/src/tui.ts +1 -0
  407. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  408. package/packages/rpc-client/README.md +3 -3
  409. package/packages/rpc-client/dist/index.d.ts +1 -1
  410. package/packages/rpc-client/dist/index.d.ts.map +1 -1
  411. package/packages/rpc-client/dist/index.js.map +1 -1
  412. package/packages/rpc-client/dist/rpc-client.d.ts +2 -6
  413. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -1
  414. package/packages/rpc-client/dist/rpc-client.js.map +1 -1
  415. package/packages/rpc-client/dist/rpc-types.d.ts +1 -565
  416. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -1
  417. package/packages/rpc-client/dist/rpc-types.js +3 -11
  418. package/packages/rpc-client/dist/rpc-types.js.map +1 -1
  419. package/packages/rpc-client/package.json +4 -1
  420. package/packages/rpc-client/src/index.ts +1 -1
  421. package/packages/rpc-client/src/rpc-client.ts +3 -6
  422. package/packages/rpc-client/src/rpc-types.ts +3 -398
  423. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  424. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts +12 -0
  425. package/pkg/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  426. package/pkg/dist/modes/interactive/theme/theme-schema.js +13 -0
  427. package/pkg/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  428. package/pkg/dist/modes/interactive/theme/theme.d.ts +1 -1
  429. package/pkg/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  430. package/pkg/dist/modes/interactive/theme/theme.js +18 -1
  431. package/pkg/dist/modes/interactive/theme/theme.js.map +1 -1
  432. package/pkg/package.json +1 -1
  433. package/src/resources/extensions/github-sync/templates.ts +93 -88
  434. package/src/resources/extensions/github-sync/tests/inline-code.test.ts +66 -0
  435. package/src/resources/extensions/github-sync/tests/templates.test.ts +10 -2
  436. package/src/resources/extensions/gsd/auto/contracts.ts +87 -0
  437. package/src/resources/extensions/gsd/auto/custom-verify-retry-store.ts +72 -0
  438. package/src/resources/extensions/gsd/auto/loop-deps.ts +10 -3
  439. package/src/resources/extensions/gsd/auto/loop.ts +416 -596
  440. package/src/resources/extensions/gsd/auto/orchestrator.ts +161 -0
  441. package/src/resources/extensions/gsd/auto/phases.ts +82 -8
  442. package/src/resources/extensions/gsd/auto/run-unit.ts +24 -14
  443. package/src/resources/extensions/gsd/auto/session.ts +11 -0
  444. package/src/resources/extensions/gsd/auto/workflow-custom-engine-dispatch-outcome.ts +28 -0
  445. package/src/resources/extensions/gsd/auto/workflow-custom-engine-iteration.ts +52 -0
  446. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile-outcome.ts +58 -0
  447. package/src/resources/extensions/gsd/auto/workflow-custom-engine-reconcile.ts +71 -0
  448. package/src/resources/extensions/gsd/auto/workflow-custom-engine-retry.ts +90 -0
  449. package/src/resources/extensions/gsd/auto/workflow-custom-engine-verify-outcome.ts +50 -0
  450. package/src/resources/extensions/gsd/auto/workflow-dispatch-claim.ts +97 -0
  451. package/src/resources/extensions/gsd/auto/workflow-dispatch-ledger.ts +45 -0
  452. package/src/resources/extensions/gsd/auto/workflow-iteration-completion.ts +26 -0
  453. package/src/resources/extensions/gsd/auto/workflow-journal-reporter.ts +33 -0
  454. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +520 -0
  455. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +58 -0
  456. package/src/resources/extensions/gsd/auto/workflow-phase-reporter.ts +22 -0
  457. package/src/resources/extensions/gsd/auto/workflow-session-lock.ts +68 -0
  458. package/src/resources/extensions/gsd/auto/workflow-sidecar-iteration.ts +46 -0
  459. package/src/resources/extensions/gsd/auto/workflow-sidecar-queue.ts +46 -0
  460. package/src/resources/extensions/gsd/auto/workflow-turn-reporter.ts +68 -0
  461. package/src/resources/extensions/gsd/auto/workflow-unit-dispatch.ts +89 -0
  462. package/src/resources/extensions/gsd/auto/workflow-worker-heartbeat.ts +38 -0
  463. package/src/resources/extensions/gsd/auto-dashboard.ts +61 -8
  464. package/src/resources/extensions/gsd/auto-prompts.ts +170 -3
  465. package/src/resources/extensions/gsd/auto-recovery.ts +67 -53
  466. package/src/resources/extensions/gsd/auto-runtime-state.ts +7 -0
  467. package/src/resources/extensions/gsd/auto-verification.ts +5 -1
  468. package/src/resources/extensions/gsd/auto-worktree.ts +85 -36
  469. package/src/resources/extensions/gsd/auto.ts +167 -1
  470. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +30 -2
  471. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +11 -0
  472. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +30 -6
  473. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +135 -1
  474. package/src/resources/extensions/gsd/commands-ship.ts +24 -51
  475. package/src/resources/extensions/gsd/commands-workflow-templates.ts +13 -0
  476. package/src/resources/extensions/gsd/component-loader.ts +5 -11
  477. package/src/resources/extensions/gsd/custom-workflow-engine.ts +29 -0
  478. package/src/resources/extensions/gsd/db-adapter.ts +75 -0
  479. package/src/resources/extensions/gsd/db-base-schema.ts +368 -0
  480. package/src/resources/extensions/gsd/db-connection-cache.ts +45 -0
  481. package/src/resources/extensions/gsd/db-coordination-schema.ts +109 -0
  482. package/src/resources/extensions/gsd/db-decision-requirement-rows.ts +77 -0
  483. package/src/resources/extensions/gsd/db-gate-rows.ts +19 -0
  484. package/src/resources/extensions/gsd/db-lightweight-query-rows.ts +50 -0
  485. package/src/resources/extensions/gsd/db-memory-fts-schema.ts +66 -0
  486. package/src/resources/extensions/gsd/db-migration-backup.ts +34 -0
  487. package/src/resources/extensions/gsd/db-migration-steps.ts +434 -0
  488. package/src/resources/extensions/gsd/db-milestone-artifact-rows.ts +70 -0
  489. package/src/resources/extensions/gsd/db-open-state.ts +47 -0
  490. package/src/resources/extensions/gsd/db-provider.ts +148 -0
  491. package/src/resources/extensions/gsd/db-runtime-kv-schema.ts +30 -0
  492. package/src/resources/extensions/gsd/db-schema-metadata.ts +33 -0
  493. package/src/resources/extensions/gsd/db-task-slice-rows.ts +146 -0
  494. package/src/resources/extensions/gsd/db-transaction.ts +76 -0
  495. package/src/resources/extensions/gsd/db-verification-evidence-rows.ts +14 -0
  496. package/src/resources/extensions/gsd/db-verification-evidence-schema.ts +22 -0
  497. package/src/resources/extensions/gsd/escalation.ts +3 -1
  498. package/src/resources/extensions/gsd/graph.ts +12 -5
  499. package/src/resources/extensions/gsd/gsd-db.ts +260 -1659
  500. package/src/resources/extensions/gsd/interrupted-session.ts +1 -0
  501. package/src/resources/extensions/gsd/legacy-telemetry.ts +99 -0
  502. package/src/resources/extensions/gsd/markdown-renderer.ts +4 -1
  503. package/src/resources/extensions/gsd/model-router.ts +10 -6
  504. package/src/resources/extensions/gsd/notification-widget.ts +25 -4
  505. package/src/resources/extensions/gsd/post-execution-checks.ts +35 -7
  506. package/src/resources/extensions/gsd/pr-evidence.ts +182 -0
  507. package/src/resources/extensions/gsd/pre-execution-checks.ts +4 -1
  508. package/src/resources/extensions/gsd/process-task-path.ts +81 -0
  509. package/src/resources/extensions/gsd/prompt-loader.ts +9 -5
  510. package/src/resources/extensions/gsd/prompts/complete-milestone.md +32 -30
  511. package/src/resources/extensions/gsd/prompts/complete-slice.md +23 -34
  512. package/src/resources/extensions/gsd/prompts/discuss-headless.md +50 -96
  513. package/src/resources/extensions/gsd/prompts/discuss.md +81 -181
  514. package/src/resources/extensions/gsd/prompts/execute-task.md +40 -67
  515. package/src/resources/extensions/gsd/prompts/forensics.md +41 -84
  516. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +29 -39
  517. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +30 -65
  518. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +25 -52
  519. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +36 -36
  520. package/src/resources/extensions/gsd/prompts/guided-research-project.md +20 -38
  521. package/src/resources/extensions/gsd/prompts/plan-milestone.md +45 -59
  522. package/src/resources/extensions/gsd/prompts/plan-slice.md +25 -87
  523. package/src/resources/extensions/gsd/prompts/queue.md +46 -53
  524. package/src/resources/extensions/gsd/prompts/refine-slice.md +23 -23
  525. package/src/resources/extensions/gsd/prompts/research-slice.md +23 -23
  526. package/src/resources/extensions/gsd/prompts/rethink.md +10 -10
  527. package/src/resources/extensions/gsd/prompts/system.md +65 -107
  528. package/src/resources/extensions/gsd/prompts/triage-captures.md +15 -15
  529. package/src/resources/extensions/gsd/prompts/validate-milestone.md +24 -24
  530. package/src/resources/extensions/gsd/prompts/worktree-merge.md +35 -35
  531. package/src/resources/extensions/gsd/state.ts +6 -3
  532. package/src/resources/extensions/gsd/tests/auto-abort-pause-regression.test.ts +38 -0
  533. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +98 -0
  534. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +117 -0
  535. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +353 -0
  536. package/src/resources/extensions/gsd/tests/auto-pr-bugs.test.ts +19 -0
  537. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +45 -0
  538. package/src/resources/extensions/gsd/tests/auto-runtime-state.test.ts +39 -0
  539. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +3 -0
  540. package/src/resources/extensions/gsd/tests/commands-eval-review.test.ts +2 -2
  541. package/src/resources/extensions/gsd/tests/commands-ship-eval-warn.test.ts +3 -2
  542. package/src/resources/extensions/gsd/tests/complete-milestone-prompt-rendering.test.ts +47 -0
  543. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +19 -5
  544. package/src/resources/extensions/gsd/tests/component-loader.test.ts +2 -9
  545. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +144 -0
  546. package/src/resources/extensions/gsd/tests/custom-verify-retry-store.test.ts +139 -0
  547. package/src/resources/extensions/gsd/tests/custom-workflow-engine.test.ts +50 -0
  548. package/src/resources/extensions/gsd/tests/dashboard-custom-engine.test.ts +3 -3
  549. package/src/resources/extensions/gsd/tests/db-adapter.test.ts +82 -0
  550. package/src/resources/extensions/gsd/tests/db-base-schema.test.ts +62 -0
  551. package/src/resources/extensions/gsd/tests/db-connection-cache.test.ts +60 -0
  552. package/src/resources/extensions/gsd/tests/db-coordination-schema.test.ts +39 -0
  553. package/src/resources/extensions/gsd/tests/db-decision-requirement-rows.test.ts +135 -0
  554. package/src/resources/extensions/gsd/tests/db-gate-rows.test.ts +53 -0
  555. package/src/resources/extensions/gsd/tests/db-lightweight-query-rows.test.ts +45 -0
  556. package/src/resources/extensions/gsd/tests/db-memory-fts-schema.test.ts +86 -0
  557. package/src/resources/extensions/gsd/tests/db-migration-backup.test.ts +105 -0
  558. package/src/resources/extensions/gsd/tests/db-migration-steps.integration.test.ts +428 -0
  559. package/src/resources/extensions/gsd/tests/db-migration-steps.test.ts +159 -0
  560. package/src/resources/extensions/gsd/tests/db-milestone-artifact-rows.test.ts +53 -0
  561. package/src/resources/extensions/gsd/tests/db-open-state.test.ts +56 -0
  562. package/src/resources/extensions/gsd/tests/db-provider.test.ts +105 -0
  563. package/src/resources/extensions/gsd/tests/db-runtime-kv-schema.test.ts +37 -0
  564. package/src/resources/extensions/gsd/tests/db-schema-metadata.test.ts +115 -0
  565. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +128 -0
  566. package/src/resources/extensions/gsd/tests/db-transaction.test.ts +110 -0
  567. package/src/resources/extensions/gsd/tests/db-verification-evidence-schema.test.ts +76 -0
  568. package/src/resources/extensions/gsd/tests/discuss-headless-rendering.test.ts +37 -0
  569. package/src/resources/extensions/gsd/tests/execute-task-rendering.test.ts +59 -0
  570. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-basic.md +52 -0
  571. package/src/resources/extensions/gsd/tests/fixtures/pr-body/commands-ship-empty-optionals.md +42 -0
  572. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-no-blockers.md +55 -0
  573. package/src/resources/extensions/gsd/tests/fixtures/pr-body/swarm-lane-with-blockers.md +60 -0
  574. package/src/resources/extensions/gsd/tests/forensics-prompt-rendering.test.ts +36 -0
  575. package/src/resources/extensions/gsd/tests/graph-operations.test.ts +10 -0
  576. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +95 -0
  577. package/src/resources/extensions/gsd/tests/guided-discuss-milestone-prompt-rendering.test.ts +43 -0
  578. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +41 -0
  579. package/src/resources/extensions/gsd/tests/guided-discuss-requirements-prompt-rendering.test.ts +45 -0
  580. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +79 -0
  581. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +37 -0
  582. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +5 -3
  583. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +134 -0
  584. package/src/resources/extensions/gsd/tests/legacy-component-format-telemetry.test.ts +62 -0
  585. package/src/resources/extensions/gsd/tests/legacy-telemetry.test.ts +144 -0
  586. package/src/resources/extensions/gsd/tests/memory-pressure-stuck-state.test.ts +40 -16
  587. package/src/resources/extensions/gsd/tests/model-router.test.ts +33 -12
  588. package/src/resources/extensions/gsd/tests/notification-store.test.ts +8 -0
  589. package/src/resources/extensions/gsd/tests/notification-widget.test.ts +40 -1
  590. package/src/resources/extensions/gsd/tests/paused-session-via-db.test.ts +2 -0
  591. package/src/resources/extensions/gsd/tests/plan-milestone-rendering.test.ts +45 -0
  592. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +65 -16
  593. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +27 -0
  594. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +46 -0
  595. package/src/resources/extensions/gsd/tests/pr-evidence-equivalence.test.ts +102 -0
  596. package/src/resources/extensions/gsd/tests/pr-evidence-hardening.test.ts +165 -0
  597. package/src/resources/extensions/gsd/tests/pr-evidence.test.ts +79 -0
  598. package/src/resources/extensions/gsd/tests/process-task-path.test.ts +51 -0
  599. package/src/resources/extensions/gsd/tests/prompt-step-ordering.test.ts +16 -1
  600. package/src/resources/extensions/gsd/tests/queue-prompt-rendering.test.ts +37 -0
  601. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +32 -9
  602. package/src/resources/extensions/gsd/tests/unit-context-composer.test.ts +6 -6
  603. package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +12 -0
  604. package/src/resources/extensions/gsd/tests/workflow-custom-engine-dispatch-outcome.test.ts +55 -0
  605. package/src/resources/extensions/gsd/tests/workflow-custom-engine-iteration.test.ts +93 -0
  606. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile-outcome.test.ts +108 -0
  607. package/src/resources/extensions/gsd/tests/workflow-custom-engine-reconcile.test.ts +146 -0
  608. package/src/resources/extensions/gsd/tests/workflow-custom-engine-retry.test.ts +136 -0
  609. package/src/resources/extensions/gsd/tests/workflow-custom-engine-verify-outcome.test.ts +95 -0
  610. package/src/resources/extensions/gsd/tests/workflow-dispatch-claim.test.ts +158 -0
  611. package/src/resources/extensions/gsd/tests/workflow-dispatch-ledger.test.ts +82 -0
  612. package/src/resources/extensions/gsd/tests/workflow-iteration-completion.test.ts +44 -0
  613. package/src/resources/extensions/gsd/tests/workflow-journal-reporter.test.ts +49 -0
  614. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +607 -0
  615. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +20 -4
  616. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +71 -0
  617. package/src/resources/extensions/gsd/tests/workflow-phase-reporter.test.ts +40 -0
  618. package/src/resources/extensions/gsd/tests/workflow-session-lock.test.ts +135 -0
  619. package/src/resources/extensions/gsd/tests/workflow-sidecar-iteration.test.ts +110 -0
  620. package/src/resources/extensions/gsd/tests/workflow-sidecar-queue.test.ts +116 -0
  621. package/src/resources/extensions/gsd/tests/workflow-templates.test.ts +21 -0
  622. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +32 -0
  623. package/src/resources/extensions/gsd/tests/workflow-turn-reporter.test.ts +87 -0
  624. package/src/resources/extensions/gsd/tests/workflow-unit-dispatch.test.ts +160 -0
  625. package/src/resources/extensions/gsd/tests/workflow-worker-heartbeat.test.ts +123 -0
  626. package/src/resources/extensions/gsd/tests/working-output-messages.test.ts +93 -0
  627. package/src/resources/extensions/gsd/tests/worktree-submodule-safety.test.ts +17 -33
  628. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +179 -0
  629. package/src/resources/extensions/gsd/tools/complete-milestone.ts +15 -9
  630. package/src/resources/extensions/gsd/tools/complete-task.ts +4 -1
  631. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +6 -1
  632. package/src/resources/extensions/gsd/unit-context-composer.ts +1 -1
  633. package/src/resources/extensions/gsd/uok/kernel.ts +10 -3
  634. package/src/resources/extensions/gsd/uok/plan-v2.ts +5 -1
  635. package/src/resources/extensions/gsd/workflow-logger.ts +13 -13
  636. package/src/resources/extensions/gsd/workflow-manifest.ts +6 -15
  637. package/src/resources/extensions/gsd/workflow-projections.ts +5 -1
  638. package/src/resources/extensions/gsd/workflow-templates.ts +11 -0
  639. package/src/resources/extensions/gsd/working-output-messages.ts +120 -0
  640. package/src/resources/extensions/shared/interview-ui.ts +18 -5
  641. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +41 -0
  642. package/dist/web/standalone/.next/server/chunks/6336.js +0 -1
  643. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_buildManifest.js +0 -0
  644. /package/dist/web/standalone/.next/static/{TzEVJ1Lh8vbez4n4Q9TqQ → CaMwumvGbBPZrJicfsCzV}/_ssgManifest.js +0 -0
@@ -14,7 +14,7 @@ import { appendEvent } from "./workflow-events.js";
14
14
  import { atomicWriteSync } from "./atomic-write.js";
15
15
  import { clearParseCache } from "./files.js";
16
16
  import { parseRoadmap as parseLegacyRoadmap, parsePlan as parseLegacyPlan } from "./parsers-legacy.js";
17
- import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone } from "./gsd-db.js";
17
+ import { isDbAvailable, getTask, getSlice, getSliceTasks, getPendingGates, updateTaskStatus, updateSliceStatus, insertSlice, getMilestone, refreshOpenDatabaseFromDisk } from "./gsd-db.js";
18
18
  import { isValidationTerminal } from "./state.js";
19
19
  import { getErrorMessage } from "./error-utils.js";
20
20
  import { logWarning, logError } from "./workflow-logger.js";
@@ -155,7 +155,21 @@ export function hasImplementationArtifacts(basePath: string, milestoneId?: strin
155
155
  return "unknown";
156
156
  }
157
157
 
158
- return classifyImplementationFiles(changedFiles);
158
+ const branchClassification = classifyImplementationFiles(changedFiles);
159
+ if (branchClassification === "present") return "present";
160
+
161
+ // A completing milestone branch can have a non-empty diff containing only
162
+ // .gsd/ closeout files after implementation commits already landed on the
163
+ // recorded integration branch. In that topology, the branch diff alone is
164
+ // insufficient; use the same milestone-tagged evidence fallback as the
165
+ // self-diff retry path before declaring the milestone implementation-free.
166
+ if (milestoneId) {
167
+ const tagged = getChangedFilesFromMilestoneTaggedCommits(basePath, milestoneId);
168
+ if (!tagged.ok) return "unknown";
169
+ if (tagged.matched) return classifyImplementationFiles(tagged.files);
170
+ }
171
+
172
+ return "absent";
159
173
  } catch (e) {
160
174
  // Non-fatal — if git operations fail, return unknown so callers can decide
161
175
  logWarning("recovery", `implementation artifact check failed: ${(e as Error).message}`);
@@ -263,7 +277,7 @@ function getChangedFilesFromMilestoneTaggedCommits(
263
277
  "log", "--format=%H%x1f%B%x1e", "HEAD", "--", `.gsd/milestones/${milestoneId}`,
264
278
  ]);
265
279
  if (!scoped.ok) return scoped;
266
- if (scoped.matched) return scoped;
280
+ if (scoped.matched && classifyImplementationFiles(scoped.files) === "present") return scoped;
267
281
 
268
282
  // Fallback (#5033): when .gsd/ is gitignored / external / untracked, the
269
283
  // path-scoped scan matches no commits even though GSD-tagged commits
@@ -274,9 +288,17 @@ function getChangedFilesFromMilestoneTaggedCommits(
274
288
  // Intentionally unbounded — symmetric with the primary scan, and avoids
275
289
  // reintroducing the rolling-depth failure class removed in #4699 where
276
290
  // milestone evidence aged out behind unrelated activity.
277
- return scanGsdTaggedCommits(basePath, milestoneId, [
291
+ const unscoped = scanGsdTaggedCommits(basePath, milestoneId, [
278
292
  "log", "--format=%H%x1f%B%x1e", "HEAD",
279
293
  ]);
294
+ if (!unscoped.ok) return scoped.matched ? scoped : unscoped;
295
+ if (!unscoped.matched) return scoped;
296
+
297
+ return {
298
+ ok: true,
299
+ matched: true,
300
+ files: [...new Set([...scoped.files, ...unscoped.files])],
301
+ };
280
302
  }
281
303
 
282
304
  function scanGsdTaggedCommits(
@@ -588,65 +610,32 @@ export function verifyExpectedArtifact(
588
610
  }
589
611
  }
590
612
 
591
- // plan-slice must produce a plan with actual task entries, not just a scaffold.
592
- // The plan file may exist from a prior discussion/context step with only headings
593
- // but no tasks. Without this check the artifact is considered "complete" and the
594
- // unit gets skipped — but deriveState still returns phase:"planning" because the
595
- // plan has no tasks, creating an infinite skip loop (#699).
596
- if (unitType === "plan-slice") {
597
- const planContent = readFileSync(absPath, "utf-8");
598
- // Accept checkbox-style (- [x] **T01: ...) or heading-style (### T01 -- / ### T01: / ### T01 —)
599
- const hasCheckboxTask = /^- \[[xX ]\] \*\*T\d+:/m.test(planContent);
600
- const hasHeadingTask = /^#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
601
- if (!hasCheckboxTask && !hasHeadingTask) {
602
- logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
603
- return false;
604
- }
605
- }
606
-
607
- // execute-task: DB status is authoritative. Fall back to checked-checkbox
608
- // detection when the DB is unavailable (unmigrated projects), or when the
609
- // disk artifacts already reflect completion but the DB replay is one beat
610
- // behind the completion write.
611
- if (unitType === "execute-task") {
612
- const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
613
- if (mid && sid && tid) {
614
- const dbTask = getTask(mid, sid, tid);
615
- if (dbTask) {
616
- if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
617
- return false;
618
- }
619
- } else if (!isDbAvailable()) {
620
- // LEGACY: Pre-migration fallback for projects without DB.
621
- // Require a CHECKED checkbox — a bare heading or unchecked checkbox
622
- // does not prove gsd_complete_task ran. Summary file on disk alone
623
- // is not sufficient evidence (could be a rogue write) (#3607).
624
- if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
625
- } else {
626
- // DB available but task row not found — completion tool never ran (#3607)
627
- return false;
628
- }
629
- }
630
- }
631
-
632
- // plan-slice must also produce individual task plan files for every task listed
633
- // in the slice plan. Without this check, a plan-slice that wrote S{sid}-PLAN.md
634
- // but omitted T{tid}-PLAN.md files would be marked complete, causing execute-task
635
- // to dispatch with a missing task plan (see issue #739).
613
+ // plan-slice verification is DB-primary. The slice plan is a projection, so
614
+ // DB task rows prove the slice was planned even if the rendered markdown no
615
+ // longer uses legacy checkbox/heading syntax.
636
616
  if (unitType === "plan-slice") {
637
617
  const { milestone: mid, slice: sid } = parseUnitId(unitId);
638
618
  if (mid && sid) {
639
619
  try {
640
- // DB primary path — get task IDs to verify task plan files exist
641
620
  let taskIds: string[] | null = null;
642
621
  if (isDbAvailable()) {
643
- const tasks = getSliceTasks(mid, sid);
644
- if (tasks.length > 0) taskIds = tasks.map(t => t.id);
622
+ const refreshed = refreshOpenDatabaseFromDisk();
623
+ if (refreshed) {
624
+ const tasks = getSliceTasks(mid, sid);
625
+ if (tasks.length > 0) taskIds = tasks.map(t => t.id);
626
+ }
645
627
  }
646
628
 
647
629
  if (!taskIds) {
648
- // LEGACY: DB unavailable or no tasks in DB parse plan file for task IDs
630
+ // LEGACY: DB unavailable or no tasks in DB. Require actual task
631
+ // entries so an empty scaffold cannot advance the pipeline (#699).
649
632
  const planContent = readFileSync(absPath, "utf-8");
633
+ const hasCheckboxTask = /^\s*- \[[xX ]\] \*\*T\d+:/m.test(planContent);
634
+ const hasHeadingTask = /^\s*#{2,4}\s+T\d+\s*(?:--|—|:)/m.test(planContent);
635
+ if (!hasCheckboxTask && !hasHeadingTask) {
636
+ logWarning("recovery", `verify-fail ${unitType} ${unitId}: plan has no task checkbox/heading (len=${planContent.length}) at ${absPath}`);
637
+ return false;
638
+ }
650
639
  const plan = parseLegacyPlan(planContent);
651
640
  if (plan.tasks.length > 0) taskIds = plan.tasks.map((t: { id: string }) => t.id);
652
641
  }
@@ -672,6 +661,31 @@ export function verifyExpectedArtifact(
672
661
  }
673
662
  }
674
663
 
664
+ // execute-task: DB status is authoritative. Fall back to checked-checkbox
665
+ // detection when the DB is unavailable (unmigrated projects), or when the
666
+ // disk artifacts already reflect completion but the DB replay is one beat
667
+ // behind the completion write.
668
+ if (unitType === "execute-task") {
669
+ const { milestone: mid, slice: sid, task: tid } = parseUnitId(unitId);
670
+ if (mid && sid && tid) {
671
+ const dbTask = getTask(mid, sid, tid);
672
+ if (dbTask) {
673
+ if (dbTask.status !== "complete" && dbTask.status !== "done" && !hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) {
674
+ return false;
675
+ }
676
+ } else if (!isDbAvailable()) {
677
+ // LEGACY: Pre-migration fallback for projects without DB.
678
+ // Require a CHECKED checkbox — a bare heading or unchecked checkbox
679
+ // does not prove gsd_complete_task ran. Summary file on disk alone
680
+ // is not sufficient evidence (could be a rogue write) (#3607).
681
+ if (!hasCheckedTaskCompletionOnDisk(base, mid, sid, tid)) return false;
682
+ } else {
683
+ // DB available but task row not found — completion tool never ran (#3607)
684
+ return false;
685
+ }
686
+ }
687
+ }
688
+
675
689
  // complete-slice: DB status is authoritative for whether the slice is done.
676
690
  // Fall back to file-based check (roadmap [x]) when DB is unavailable.
677
691
  if (unitType === "complete-slice") {
@@ -16,14 +16,21 @@ export type AutoRuntimeSnapshot = {
16
16
  paused: boolean;
17
17
  currentUnit: CurrentUnit | null;
18
18
  basePath: string;
19
+ orchestrationPhase?: "idle" | "running" | "paused" | "stopped" | "error";
20
+ orchestrationTransitionCount?: number;
21
+ orchestrationLastTransitionAt?: number;
19
22
  };
20
23
 
21
24
  export function getAutoRuntimeSnapshot(): AutoRuntimeSnapshot {
25
+ const orchestrationStatus = autoSession.orchestration?.getStatus();
22
26
  return {
23
27
  active: autoSession.active,
24
28
  paused: autoSession.paused,
25
29
  currentUnit: autoSession.currentUnit ? { ...autoSession.currentUnit } : null,
26
30
  basePath: autoSession.basePath,
31
+ orchestrationPhase: orchestrationStatus?.phase,
32
+ orchestrationTransitionCount: orchestrationStatus?.transitionCount,
33
+ orchestrationLastTransitionAt: orchestrationStatus?.lastTransitionAt,
27
34
  };
28
35
  }
29
36
 
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Post-unit verification gate for GSD auto-mode units.
3
+
1
4
  /**
2
5
  * Post-unit verification gate for auto-mode.
3
6
  *
@@ -14,7 +17,8 @@ import type { ExtensionContext, ExtensionAPI } from "@gsd/pi-coding-agent";
14
17
  import { mkdirSync, writeFileSync } from "node:fs";
15
18
  import { resolveSliceFile, resolveSlicePath, resolveMilestoneFile } from "./paths.js";
16
19
  import { parseUnitId } from "./unit-id.js";
17
- import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices, type TaskRow } from "./gsd-db.js";
20
+ import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices } from "./gsd-db.js";
21
+ import type { TaskRow } from "./db-task-slice-rows.js";
18
22
  import { loadEffectiveGSDPreferences } from "./preferences.js";
19
23
  import { extractVerdict } from "./verdict-parser.js";
20
24
  import { isClosedStatus } from "./status-guards.js";
@@ -1,3 +1,6 @@
1
+ // Project/App: GSD-2
2
+ // File Purpose: Auto-mode worktree lifecycle, merge, and cleanup management.
3
+
1
4
  /**
2
5
  * GSD Auto-Worktree -- lifecycle management for auto-mode worktrees.
3
6
  *
@@ -18,7 +21,7 @@ import {
18
21
  statSync,
19
22
  lstatSync as lstatSyncFn,
20
23
  } from "node:fs";
21
- import { isAbsolute, join, sep as pathSep } from "node:path";
24
+ import { isAbsolute, join, relative, sep as pathSep } from "node:path";
22
25
  import { GSDError, GSD_IO_ERROR, GSD_GIT_ERROR } from "./errors.js";
23
26
  import {
24
27
  reconcileWorktreeDb,
@@ -50,7 +53,8 @@ import {
50
53
  normalizeWorktreePathForCompare,
51
54
  resolveWorktreeProjectRoot,
52
55
  } from "./worktree-root.js";
53
- import { MergeConflictError, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
56
+ import { MergeConflictError, createDraftPR, readIntegrationBranch, RUNTIME_EXCLUSION_PATHS } from "./git-service.js";
57
+ import { buildPrEvidence } from "./pr-evidence.js";
54
58
  import { debugLog } from "./debug-logger.js";
55
59
  import { logWarning, logError } from "./workflow-logger.js";
56
60
  import { loadEffectiveGSDPreferences } from "./preferences.js";
@@ -266,6 +270,40 @@ function getActiveWorkspace(): GsdWorkspace | null {
266
270
  return activeWorkspace;
267
271
  }
268
272
 
273
+ function gitPathspecForWorktreePath(basePath: string, targetPath: string): string | null {
274
+ let base = basePath;
275
+ let target = targetPath;
276
+ try {
277
+ base = realpathSync.native(basePath);
278
+ } catch {
279
+ /* keep original */
280
+ void base;
281
+ }
282
+ try {
283
+ target = realpathSync.native(targetPath);
284
+ } catch {
285
+ /* keep original */
286
+ void target;
287
+ }
288
+
289
+ const rel = relative(base, target);
290
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) return null;
291
+ return rel.replaceAll("\\", "/");
292
+ }
293
+
294
+ function gitRemoteExists(basePath: string, remote: string): boolean {
295
+ try {
296
+ execFileSync("git", ["remote", "get-url", remote], {
297
+ cwd: basePath,
298
+ stdio: ["ignore", "pipe", "pipe"],
299
+ encoding: "utf-8",
300
+ });
301
+ return true;
302
+ } catch {
303
+ return false;
304
+ }
305
+ }
306
+
269
307
  function clearProjectRootStateFiles(basePath: string, milestoneId: string): void {
270
308
  const gsdDir = gsdRoot(basePath);
271
309
  // Phase C pt 2: auto.lock removed from this list — the file is gone
@@ -301,11 +339,14 @@ function clearProjectRootStateFiles(basePath: string, milestoneId: string): void
301
339
  for (const dir of syncedDirs) {
302
340
  try {
303
341
  if (existsSync(dir)) {
342
+ const pathspec = gitPathspecForWorktreePath(basePath, dir);
343
+ if (!pathspec) continue;
344
+
304
345
  // Only remove files that are untracked by git — tracked files are
305
346
  // managed by the branch checkout and should not be deleted.
306
347
  const untrackedOutput = execFileSync(
307
348
  "git",
308
- ["ls-files", "--others", "--exclude-standard", dir],
349
+ ["ls-files", "--others", "--exclude-standard", pathspec],
309
350
  { cwd: basePath, stdio: ["ignore", "pipe", "pipe"], encoding: "utf-8" },
310
351
  ).trim();
311
352
  if (untrackedOutput) {
@@ -2187,16 +2228,18 @@ export function mergeMilestoneToMain(
2187
2228
  let pushed = false;
2188
2229
  if (prefs.auto_push === true && prefs.auto_pr !== true && !nothingToCommit) {
2189
2230
  const remote = prefs.remote ?? "origin";
2190
- try {
2191
- execFileSync("git", ["push", remote, mainBranch], {
2192
- cwd: originalBasePath_,
2193
- stdio: ["ignore", "pipe", "pipe"],
2194
- encoding: "utf-8",
2195
- });
2196
- pushed = true;
2197
- } catch (err) {
2198
- // Push failure is non-fatal
2199
- logWarning("worktree", `git push failed: ${err instanceof Error ? err.message : String(err)}`);
2231
+ if (gitRemoteExists(originalBasePath_, remote)) {
2232
+ try {
2233
+ execFileSync("git", ["push", remote, mainBranch], {
2234
+ cwd: originalBasePath_,
2235
+ stdio: ["ignore", "pipe", "pipe"],
2236
+ encoding: "utf-8",
2237
+ });
2238
+ pushed = true;
2239
+ } catch (err) {
2240
+ // Push failure is non-fatal
2241
+ logWarning("worktree", `git push failed: ${err instanceof Error ? err.message : String(err)}`);
2242
+ }
2200
2243
  }
2201
2244
  }
2202
2245
 
@@ -2205,29 +2248,35 @@ export function mergeMilestoneToMain(
2205
2248
  if (prefs.auto_pr === true && !nothingToCommit) {
2206
2249
  const remote = prefs.remote ?? "origin";
2207
2250
  const prTarget = prefs.pr_target_branch ?? mainBranch;
2208
- try {
2209
- // Push the milestone branch to remote first
2210
- execFileSync("git", ["push", remote, milestoneBranch], {
2211
- cwd: originalBasePath_,
2212
- stdio: ["ignore", "pipe", "pipe"],
2213
- encoding: "utf-8",
2214
- });
2215
- // Create PR via gh CLI with explicit --head and --base (#2302)
2216
- execFileSync("gh", [
2217
- "pr", "create", "--draft",
2218
- "--base", prTarget,
2219
- "--head", milestoneBranch,
2220
- "--title", `Milestone ${milestoneId} complete`,
2221
- "--body", "Auto-created by GSD on milestone completion.",
2222
- ], {
2223
- cwd: originalBasePath_,
2224
- stdio: ["ignore", "pipe", "pipe"],
2225
- encoding: "utf-8",
2226
- });
2227
- prCreated = true;
2228
- } catch (err) {
2229
- // PR creation failure is non-fatal — gh may not be installed or authenticated
2230
- logWarning("worktree", `PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
2251
+ if (gitRemoteExists(originalBasePath_, remote)) {
2252
+ try {
2253
+ // Push the milestone branch to remote first
2254
+ execFileSync("git", ["push", remote, milestoneBranch], {
2255
+ cwd: originalBasePath_,
2256
+ stdio: ["ignore", "pipe", "pipe"],
2257
+ encoding: "utf-8",
2258
+ });
2259
+ const prEvidence = buildPrEvidence({
2260
+ milestoneId,
2261
+ milestoneTitle,
2262
+ changeType: "feat",
2263
+ summaries: completedSlices.map((slice) => `### ${slice.id}\n${slice.title}`),
2264
+ testsRun: ["Auto-created after milestone merge. Run `npm run verify:pr` before marking this draft ready."],
2265
+ rollbackNotes: ["Close the draft PR or revert the merge commit if review finds a behavior regression."],
2266
+ how: "Generated by git.auto_pr after the milestone branch was pushed and merged locally.",
2267
+ });
2268
+ const prUrl = createDraftPR(originalBasePath_, milestoneId, prEvidence.title, prEvidence.body, {
2269
+ head: milestoneBranch,
2270
+ base: prTarget,
2271
+ });
2272
+ if (!prUrl) {
2273
+ throw new Error("gh pr create returned no URL");
2274
+ }
2275
+ prCreated = true;
2276
+ } catch (err) {
2277
+ // PR creation failure is non-fatal — gh may not be installed or authenticated
2278
+ logWarning("worktree", `PR creation failed: ${err instanceof Error ? err.message : String(err)}`);
2279
+ }
2231
2280
  }
2232
2281
  }
2233
2282
 
@@ -147,6 +147,7 @@ import {
147
147
  MergeConflictError,
148
148
  parseSliceBranch,
149
149
  setActiveMilestoneId,
150
+ resolveProjectRoot,
150
151
  } from "./worktree.js";
151
152
  import { GitServiceImpl } from "./git-service.js";
152
153
  import { getPriorSliceCompletionBlocker } from "./dispatch-guard.js";
@@ -231,6 +232,8 @@ import type { ErrorContext } from "./auto/types.js";
231
232
  import { runAutoLoopWithUok } from "./uok/kernel.js";
232
233
  import { resolveUokFlags } from "./uok/flags.js";
233
234
  import { validateDirectory } from "./validate-directory.js";
235
+ import { createAutoOrchestrator } from "./auto/orchestrator.js";
236
+ import type { AutoOrchestrationModule, AutoOrchestratorDeps } from "./auto/contracts.js";
234
237
  // Slice-level parallelism (#2340)
235
238
  import { getEligibleSlices } from "./slice-parallel-eligibility.js";
236
239
  import { startSliceParallel } from "./slice-parallel-orchestrator.js";
@@ -1208,6 +1211,12 @@ export async function stopAuto(
1208
1211
  // changes the user made between sessions (#4959 / CodeRabbit).
1209
1212
  if (pi) clearToolBaseline(pi);
1210
1213
 
1214
+ try {
1215
+ await s.orchestration?.stop(reason ?? "stop");
1216
+ } catch (err) {
1217
+ debugLog("stop-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
1218
+ }
1219
+
1211
1220
  // Reset all session state in one call
1212
1221
  s.reset();
1213
1222
  }
@@ -1264,6 +1273,7 @@ export async function pauseAuto(
1264
1273
  activeRunDir: s.activeRunDir,
1265
1274
  autoStartTime: s.autoStartTime,
1266
1275
  milestoneLock: s.sessionMilestoneLock ?? undefined,
1276
+ pauseReason: _errorContext?.message,
1267
1277
  };
1268
1278
  setRuntimeKv("global", "", PAUSED_SESSION_KV_KEY, pausedMeta);
1269
1279
  } catch (err) {
@@ -1306,6 +1316,12 @@ export async function pauseAuto(
1306
1316
  resolveAgentEnd({ messages: [] });
1307
1317
  _resetPendingResolve();
1308
1318
 
1319
+ try {
1320
+ await s.orchestration?.stop("pause");
1321
+ } catch (err) {
1322
+ debugLog("pause-orchestration-stop", { error: err instanceof Error ? err.message : String(err) });
1323
+ }
1324
+
1309
1325
  s.active = false;
1310
1326
  s.paused = true;
1311
1327
  deactivateGSD();
@@ -1363,6 +1379,141 @@ function buildResolver(): WorktreeResolver {
1363
1379
  return new WorktreeResolver(s, buildResolverDeps());
1364
1380
  }
1365
1381
 
1382
+ /**
1383
+ * Thin entry glue for the new Auto Orchestration module.
1384
+ *
1385
+ * This intentionally wires only dispatch + error notification today, with
1386
+ * no behavior changes to the existing auto loop. It provides a concrete seam
1387
+ * the next refactor steps can adopt incrementally.
1388
+ */
1389
+ export function createWiredAutoOrchestrationModule(
1390
+ ctx: ExtensionContext,
1391
+ _pi: ExtensionAPI,
1392
+ dispatchBasePath: string,
1393
+ runtimeBasePath = resolveProjectRoot(dispatchBasePath),
1394
+ ): AutoOrchestrationModule {
1395
+ const flowId = `auto-orchestrator-${Date.now()}`;
1396
+ let seq = 0;
1397
+
1398
+ const deps: AutoOrchestratorDeps = {
1399
+ dispatch: {
1400
+ async decideNextUnit() {
1401
+ const state = await deriveState(dispatchBasePath);
1402
+ const active = state.activeMilestone;
1403
+ if (!active) return null;
1404
+
1405
+ const prefs = loadEffectiveGSDPreferences(dispatchBasePath)?.preferences;
1406
+ const action = await resolveDispatch({
1407
+ basePath: dispatchBasePath,
1408
+ mid: active.id,
1409
+ midTitle: active.title,
1410
+ state,
1411
+ prefs,
1412
+ });
1413
+
1414
+ if (action.action !== "dispatch") return null;
1415
+ return {
1416
+ unitType: action.unitType,
1417
+ unitId: action.unitId,
1418
+ reason: action.matchedRule ?? "dispatch",
1419
+ preconditions: [],
1420
+ };
1421
+ },
1422
+ },
1423
+ recovery: {
1424
+ async classifyAndRecover(input) {
1425
+ const reason = input.error instanceof Error ? input.error.message : String(input.error ?? "unknown auto error");
1426
+ return { action: "escalate" as const, reason };
1427
+ },
1428
+ },
1429
+ worktree: {
1430
+ async prepareForUnit() {},
1431
+ async syncAfterUnit() {},
1432
+ async cleanupOnStop() {},
1433
+ },
1434
+ health: {
1435
+ async preAdvanceGate() {
1436
+ const gate = await preDispatchHealthGate(dispatchBasePath);
1437
+ return {
1438
+ allow: gate.proceed,
1439
+ reason: gate.reason,
1440
+ };
1441
+ },
1442
+ async postAdvanceRecord(result) {
1443
+ if (result.kind === "error") {
1444
+ recordHealthSnapshot(1, 0, 0, [{
1445
+ code: "orchestration-error",
1446
+ message: result.reason ?? "orchestration error",
1447
+ severity: "error",
1448
+ unitId: "orchestration",
1449
+ }], [], "orchestration");
1450
+ } else if (result.kind === "blocked") {
1451
+ recordHealthSnapshot(0, 1, 0, [{
1452
+ code: "orchestration-blocked",
1453
+ message: result.reason ?? "orchestration blocked",
1454
+ severity: "warning",
1455
+ unitId: "orchestration",
1456
+ }], [], "orchestration");
1457
+ }
1458
+ },
1459
+ },
1460
+ runtime: {
1461
+ async ensureLockOwnership() {
1462
+ const status = getSessionLockStatus(runtimeBasePath);
1463
+ if (!status.valid || status.failureReason === "pid-mismatch") {
1464
+ throw new Error("session lock held by another process");
1465
+ }
1466
+ },
1467
+ async journalTransition(event) {
1468
+ const eventType = event.name === "start"
1469
+ ? "iteration-start"
1470
+ : event.name === "resume"
1471
+ ? "iteration-start"
1472
+ : event.name === "advance"
1473
+ ? "dispatch-match"
1474
+ : event.name === "advance-blocked"
1475
+ ? "guard-block"
1476
+ : event.name === "advance-stopped"
1477
+ ? "dispatch-stop"
1478
+ : event.name === "advance-error"
1479
+ ? "iteration-end"
1480
+ : event.name === "advance-paused" || event.name === "advance-retry"
1481
+ ? "guard-block"
1482
+ : event.name === "stop"
1483
+ ? "terminal"
1484
+ : "iteration-end";
1485
+
1486
+ _emitJournalEvent(runtimeBasePath, {
1487
+ ts: new Date().toISOString(),
1488
+ flowId,
1489
+ seq: ++seq,
1490
+ eventType,
1491
+ data: {
1492
+ source: "auto-orchestrator",
1493
+ name: event.name,
1494
+ reason: event.reason,
1495
+ unitType: event.unitType,
1496
+ unitId: event.unitId,
1497
+ },
1498
+ });
1499
+ },
1500
+ },
1501
+ notifications: {
1502
+ async notifyLifecycle(event) {
1503
+ if (event.name === "error") {
1504
+ ctx.ui.notify(event.detail ?? "auto orchestration error", "error");
1505
+ }
1506
+ },
1507
+ },
1508
+ };
1509
+
1510
+ return createAutoOrchestrator(deps);
1511
+ }
1512
+
1513
+ function ensureOrchestrationModule(ctx: ExtensionContext, pi: ExtensionAPI, basePath: string): void {
1514
+ s.orchestration = createWiredAutoOrchestrationModule(ctx, pi, basePath, lockBase());
1515
+ }
1516
+
1366
1517
  /**
1367
1518
  * Build the LoopDeps object from auto.ts private scope.
1368
1519
  * This bundles all private functions that autoLoop needs without exporting them.
@@ -1785,6 +1936,7 @@ export async function startAuto(
1785
1936
  rebuildScope(s.basePath, s.currentMilestoneId);
1786
1937
  }
1787
1938
 
1939
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1788
1940
  registerSigtermHandler(lockBase());
1789
1941
 
1790
1942
  ctx.ui.setStatus("gsd-auto", s.stepMode ? "next" : "auto");
@@ -1868,6 +2020,11 @@ export async function startAuto(
1868
2020
  }
1869
2021
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: s.stepMode ? "Step-mode resumed." : "Auto-mode resumed.", level: "progress" });
1870
2022
 
2023
+ try {
2024
+ await s.orchestration?.resume();
2025
+ } catch (err) {
2026
+ debugLog("resume-orchestration-resume", { error: err instanceof Error ? err.message : String(err) });
2027
+ }
1871
2028
  startAutoCommandPolling(s.basePath);
1872
2029
  await runAutoLoopWithUok({
1873
2030
  ctx,
@@ -1904,7 +2061,7 @@ export async function startAuto(
1904
2061
  // Build scope after bootstrap has populated s.basePath / s.originalBasePath /
1905
2062
  // s.currentMilestoneId (including worktree setup inside bootstrapAutoSession).
1906
2063
  rebuildScope(s.basePath, s.currentMilestoneId);
1907
-
2064
+ ensureOrchestrationModule(ctx, pi, s.basePath || base);
1908
2065
  captureProjectRootEnv(s.originalBasePath || s.basePath);
1909
2066
  registerAutoWorkerForSession(s);
1910
2067
  try {
@@ -1915,6 +2072,12 @@ export async function startAuto(
1915
2072
  }
1916
2073
  pi.events.emit(CMUX_CHANNELS.LOG, { preferences: loadEffectiveGSDPreferences(s.basePath || undefined)?.preferences, message: requestedStepMode ? "Step-mode started." : "Auto-mode started.", level: "progress" });
1917
2074
 
2075
+ try {
2076
+ await s.orchestration?.start({ basePath: s.basePath, trigger: "auto-loop" });
2077
+ } catch (err) {
2078
+ debugLog("start-orchestration-start", { error: err instanceof Error ? err.message : String(err) });
2079
+ }
2080
+
1918
2081
  startAutoCommandPolling(s.basePath);
1919
2082
 
1920
2083
  // Dispatch the first unit
@@ -2037,6 +2200,9 @@ export async function dispatchHookUnit(
2037
2200
  }
2038
2201
 
2039
2202
  s.basePath = targetBasePath;
2203
+ if (!s.orchestration) {
2204
+ ensureOrchestrationModule(ctx, pi, s.basePath);
2205
+ }
2040
2206
 
2041
2207
  const hookUnitType = `hook/${hookName}`;
2042
2208
  const hookStartedAt = Date.now();