chorus-codes 0.7.0 → 0.7.2

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 (293) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +3 -3
  3. package/.next/cache/.previewinfo +1 -1
  4. package/.next/cache/.rscinfo +1 -1
  5. package/.next/cache/.tsbuildinfo +1 -1
  6. package/.next/fallback-build-manifest.json +3 -3
  7. package/.next/prerender-manifest.json +3 -3
  8. package/.next/server/app/_global-error.html +1 -1
  9. package/.next/server/app/_global-error.rsc +1 -1
  10. package/.next/server/app/_global-error.segments/__PAGE__.segment.rsc +1 -1
  11. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  12. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  13. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found.html +1 -1
  16. package/.next/server/app/_not-found.rsc +1 -1
  17. package/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  18. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  19. package/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  21. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  23. package/.next/server/app/new.html +1 -1
  24. package/.next/server/app/new.rsc +1 -1
  25. package/.next/server/app/new.segments/_full.segment.rsc +1 -1
  26. package/.next/server/app/new.segments/_head.segment.rsc +1 -1
  27. package/.next/server/app/new.segments/_index.segment.rsc +1 -1
  28. package/.next/server/app/new.segments/_tree.segment.rsc +1 -1
  29. package/.next/server/app/new.segments/new/__PAGE__.segment.rsc +1 -1
  30. package/.next/server/app/new.segments/new.segment.rsc +1 -1
  31. package/.next/server/app/onboarding.html +1 -1
  32. package/.next/server/app/onboarding.rsc +1 -1
  33. package/.next/server/app/onboarding.segments/_full.segment.rsc +1 -1
  34. package/.next/server/app/onboarding.segments/_head.segment.rsc +1 -1
  35. package/.next/server/app/onboarding.segments/_index.segment.rsc +1 -1
  36. package/.next/server/app/onboarding.segments/_tree.segment.rsc +1 -1
  37. package/.next/server/app/onboarding.segments/onboarding/__PAGE__.segment.rsc +1 -1
  38. package/.next/server/app/onboarding.segments/onboarding.segment.rsc +1 -1
  39. package/.next/server/app/personas.html +1 -1
  40. package/.next/server/app/personas.rsc +1 -1
  41. package/.next/server/app/personas.segments/_full.segment.rsc +1 -1
  42. package/.next/server/app/personas.segments/_head.segment.rsc +1 -1
  43. package/.next/server/app/personas.segments/_index.segment.rsc +1 -1
  44. package/.next/server/app/personas.segments/_tree.segment.rsc +1 -1
  45. package/.next/server/app/personas.segments/personas/__PAGE__.segment.rsc +1 -1
  46. package/.next/server/app/personas.segments/personas.segment.rsc +1 -1
  47. package/.next/server/app/settings.html +1 -1
  48. package/.next/server/app/settings.rsc +1 -1
  49. package/.next/server/app/settings.segments/_full.segment.rsc +1 -1
  50. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  51. package/.next/server/app/settings.segments/_index.segment.rsc +1 -1
  52. package/.next/server/app/settings.segments/_tree.segment.rsc +1 -1
  53. package/.next/server/app/settings.segments/settings/__PAGE__.segment.rsc +1 -1
  54. package/.next/server/app/settings.segments/settings.segment.rsc +1 -1
  55. package/.next/server/app/templates.html +1 -1
  56. package/.next/server/app/templates.rsc +1 -1
  57. package/.next/server/app/templates.segments/_full.segment.rsc +1 -1
  58. package/.next/server/app/templates.segments/_head.segment.rsc +1 -1
  59. package/.next/server/app/templates.segments/_index.segment.rsc +1 -1
  60. package/.next/server/app/templates.segments/_tree.segment.rsc +1 -1
  61. package/.next/server/app/templates.segments/templates/__PAGE__.segment.rsc +1 -1
  62. package/.next/server/app/templates.segments/templates.segment.rsc +1 -1
  63. package/.next/server/middleware-build-manifest.js +3 -3
  64. package/.next/server/pages/404.html +1 -1
  65. package/.next/server/pages/500.html +1 -1
  66. package/.next/server/server-reference-manifest.js +1 -1
  67. package/.next/server/server-reference-manifest.json +1 -1
  68. package/.next/trace +1 -1
  69. package/.next/trace-build +1 -1
  70. package/README.md +38 -15
  71. package/dist/cli/commands/doctor.js +116 -0
  72. package/dist/cli/commands/doctor.js.map +1 -0
  73. package/dist/cli/commands/init.js +211 -0
  74. package/dist/cli/commands/init.js.map +1 -0
  75. package/dist/cli/commands/start.js +298 -0
  76. package/dist/cli/commands/start.js.map +1 -0
  77. package/dist/cli/commands/status.js +54 -0
  78. package/dist/cli/commands/status.js.map +1 -0
  79. package/dist/cli/commands/stop.js +97 -0
  80. package/dist/cli/commands/stop.js.map +1 -0
  81. package/dist/cli/connect.js +108 -0
  82. package/dist/cli/connect.js.map +1 -0
  83. package/dist/cli/index.js +99 -0
  84. package/dist/cli/index.js.map +1 -0
  85. package/dist/cli/port-utils.js +260 -0
  86. package/dist/cli/port-utils.js.map +1 -0
  87. package/dist/cli/runtime-env.js +60 -0
  88. package/dist/cli/runtime-env.js.map +1 -0
  89. package/dist/cli/shared.js +54 -0
  90. package/dist/cli/shared.js.map +1 -0
  91. package/dist/cli/ui.js +60 -0
  92. package/dist/cli/ui.js.map +1 -0
  93. package/dist/daemon/agents/claude.js +98 -0
  94. package/dist/daemon/agents/claude.js.map +1 -0
  95. package/dist/daemon/agents/codex.js +160 -0
  96. package/dist/daemon/agents/codex.js.map +1 -0
  97. package/dist/daemon/agents/gemini.js +111 -0
  98. package/dist/daemon/agents/gemini.js.map +1 -0
  99. package/dist/daemon/agents/index.js +59 -0
  100. package/dist/daemon/agents/index.js.map +1 -0
  101. package/dist/daemon/agents/kimi.js +206 -0
  102. package/dist/daemon/agents/kimi.js.map +1 -0
  103. package/dist/daemon/agents/opencode.js +228 -0
  104. package/dist/daemon/agents/opencode.js.map +1 -0
  105. package/dist/daemon/agents/openrouter.js +274 -0
  106. package/dist/daemon/agents/openrouter.js.map +1 -0
  107. package/dist/daemon/agents/parsers/claude.js +63 -0
  108. package/dist/daemon/agents/parsers/claude.js.map +1 -0
  109. package/dist/daemon/agents/parsers/codex.js +51 -0
  110. package/dist/daemon/agents/parsers/codex.js.map +1 -0
  111. package/dist/daemon/agents/parsers/gemini.js +144 -0
  112. package/dist/daemon/agents/parsers/gemini.js.map +1 -0
  113. package/dist/daemon/agents/parsers/index.js +31 -0
  114. package/dist/daemon/agents/parsers/index.js.map +1 -0
  115. package/dist/daemon/agents/parsers/kimi.js +8 -0
  116. package/dist/daemon/agents/parsers/kimi.js.map +1 -0
  117. package/dist/daemon/agents/parsers/opencode.js +105 -0
  118. package/dist/daemon/agents/parsers/opencode.js.map +1 -0
  119. package/dist/daemon/agents/parsers/openrouter.js +69 -0
  120. package/dist/daemon/agents/parsers/openrouter.js.map +1 -0
  121. package/dist/daemon/agents/parsers/shared.js +17 -0
  122. package/dist/daemon/agents/parsers/shared.js.map +1 -0
  123. package/dist/daemon/agents/preflight.js +83 -0
  124. package/dist/daemon/agents/preflight.js.map +1 -0
  125. package/dist/daemon/agents/quote.js +45 -0
  126. package/dist/daemon/agents/quote.js.map +1 -0
  127. package/dist/daemon/agents/sandbox-guard.js +69 -0
  128. package/dist/daemon/agents/sandbox-guard.js.map +1 -0
  129. package/dist/daemon/agents/types.js +6 -0
  130. package/dist/daemon/agents/types.js.map +1 -0
  131. package/dist/daemon/api-response.js +65 -0
  132. package/dist/daemon/api-response.js.map +1 -0
  133. package/dist/daemon/error-detector.js +329 -0
  134. package/dist/daemon/error-detector.js.map +1 -0
  135. package/dist/daemon/headless.js +533 -0
  136. package/dist/daemon/headless.js.map +1 -0
  137. package/dist/daemon/index.js +333 -0
  138. package/dist/daemon/index.js.map +1 -0
  139. package/dist/daemon/openrouter.js +192 -0
  140. package/dist/daemon/openrouter.js.map +1 -0
  141. package/dist/daemon/orchestrators/claude.js +163 -0
  142. package/dist/daemon/orchestrators/claude.js.map +1 -0
  143. package/dist/daemon/orchestrators/codex.js +101 -0
  144. package/dist/daemon/orchestrators/codex.js.map +1 -0
  145. package/dist/daemon/orchestrators/cursor-windsurf.js +118 -0
  146. package/dist/daemon/orchestrators/cursor-windsurf.js.map +1 -0
  147. package/dist/daemon/orchestrators/gemini.js +108 -0
  148. package/dist/daemon/orchestrators/gemini.js.map +1 -0
  149. package/dist/daemon/orchestrators/index.js +90 -0
  150. package/dist/daemon/orchestrators/index.js.map +1 -0
  151. package/dist/daemon/orchestrators/kimi.js +108 -0
  152. package/dist/daemon/orchestrators/kimi.js.map +1 -0
  153. package/dist/daemon/orchestrators/opencode.js +152 -0
  154. package/dist/daemon/orchestrators/opencode.js.map +1 -0
  155. package/dist/daemon/orchestrators/shared.js +60 -0
  156. package/dist/daemon/orchestrators/shared.js.map +1 -0
  157. package/dist/daemon/output-watcher.js +131 -0
  158. package/dist/daemon/output-watcher.js.map +1 -0
  159. package/dist/daemon/participant-aborts.js +123 -0
  160. package/dist/daemon/participant-aborts.js.map +1 -0
  161. package/dist/daemon/reaper.js +46 -0
  162. package/dist/daemon/reaper.js.map +1 -0
  163. package/dist/daemon/routes/chats-events.js +62 -0
  164. package/dist/daemon/routes/chats-events.js.map +1 -0
  165. package/dist/daemon/routes/chats-stream.js +241 -0
  166. package/dist/daemon/routes/chats-stream.js.map +1 -0
  167. package/dist/daemon/routes/chats-validation.js +13 -0
  168. package/dist/daemon/routes/chats-validation.js.map +1 -0
  169. package/dist/daemon/routes/chats.js +545 -0
  170. package/dist/daemon/routes/chats.js.map +1 -0
  171. package/dist/daemon/routes/openrouter.js +103 -0
  172. package/dist/daemon/routes/openrouter.js.map +1 -0
  173. package/dist/daemon/routes/settings.js +199 -0
  174. package/dist/daemon/routes/settings.js.map +1 -0
  175. package/dist/daemon/routes/stats.js +155 -0
  176. package/dist/daemon/routes/stats.js.map +1 -0
  177. package/dist/daemon/routes/system.js +208 -0
  178. package/dist/daemon/routes/system.js.map +1 -0
  179. package/dist/daemon/routes/templates-personas.js +254 -0
  180. package/dist/daemon/routes/templates-personas.js.map +1 -0
  181. package/dist/daemon/routes/voices.js +139 -0
  182. package/dist/daemon/routes/voices.js.map +1 -0
  183. package/dist/daemon/runner/doer-driver.js +346 -0
  184. package/dist/daemon/runner/doer-driver.js.map +1 -0
  185. package/dist/daemon/runner/doer.js +336 -0
  186. package/dist/daemon/runner/doer.js.map +1 -0
  187. package/dist/daemon/runner/prior-round.js +140 -0
  188. package/dist/daemon/runner/prior-round.js.map +1 -0
  189. package/dist/daemon/runner/prompt-builder.js +292 -0
  190. package/dist/daemon/runner/prompt-builder.js.map +1 -0
  191. package/dist/daemon/runner/review-only-phase.js +103 -0
  192. package/dist/daemon/runner/review-only-phase.js.map +1 -0
  193. package/dist/daemon/runner/reviewer-driver.js +410 -0
  194. package/dist/daemon/runner/reviewer-driver.js.map +1 -0
  195. package/dist/daemon/runner/reviewer.js +384 -0
  196. package/dist/daemon/runner/reviewer.js.map +1 -0
  197. package/dist/daemon/runner/run-with-fallback.js +56 -0
  198. package/dist/daemon/runner/run-with-fallback.js.map +1 -0
  199. package/dist/daemon/runner/sanitize-name.js +8 -0
  200. package/dist/daemon/runner/sanitize-name.js.map +1 -0
  201. package/dist/daemon/runner/stream-file-writer.js +116 -0
  202. package/dist/daemon/runner/stream-file-writer.js.map +1 -0
  203. package/dist/daemon/runner/swap-sidecar.js +102 -0
  204. package/dist/daemon/runner/swap-sidecar.js.map +1 -0
  205. package/dist/daemon/runner/template-fallback.js +119 -0
  206. package/dist/daemon/runner/template-fallback.js.map +1 -0
  207. package/dist/daemon/runner/types.js +3 -0
  208. package/dist/daemon/runner/types.js.map +1 -0
  209. package/dist/daemon/runner/verdict.js +51 -0
  210. package/dist/daemon/runner/verdict.js.map +1 -0
  211. package/dist/daemon/runner-multiplex.js +364 -0
  212. package/dist/daemon/runner-multiplex.js.map +1 -0
  213. package/dist/daemon/runner.js +427 -0
  214. package/dist/daemon/runner.js.map +1 -0
  215. package/dist/daemon/ship.js +340 -0
  216. package/dist/daemon/ship.js.map +1 -0
  217. package/dist/daemon/template-cache.js +37 -0
  218. package/dist/daemon/template-cache.js.map +1 -0
  219. package/dist/daemon/tmux-types.js +9 -0
  220. package/dist/daemon/tmux-types.js.map +1 -0
  221. package/dist/daemon/tmux.js +341 -0
  222. package/dist/daemon/tmux.js.map +1 -0
  223. package/dist/lib/atomic-write.js +55 -0
  224. package/dist/lib/atomic-write.js.map +1 -0
  225. package/dist/lib/chat-events-bus.js +27 -0
  226. package/dist/lib/chat-events-bus.js.map +1 -0
  227. package/dist/lib/chat-slug.js +105 -0
  228. package/dist/lib/chat-slug.js.map +1 -0
  229. package/dist/lib/cli-detect.js +388 -0
  230. package/dist/lib/cli-detect.js.map +1 -0
  231. package/dist/lib/cli-health.js +156 -0
  232. package/dist/lib/cli-health.js.map +1 -0
  233. package/dist/lib/cli-paths.js +113 -0
  234. package/dist/lib/cli-paths.js.map +1 -0
  235. package/dist/lib/cli-precheck.js +141 -0
  236. package/dist/lib/cli-precheck.js.map +1 -0
  237. package/dist/lib/db/chats.js +244 -0
  238. package/dist/lib/db/chats.js.map +1 -0
  239. package/dist/lib/db/connection.js +254 -0
  240. package/dist/lib/db/connection.js.map +1 -0
  241. package/dist/lib/db/index.js +34 -0
  242. package/dist/lib/db/index.js.map +1 -0
  243. package/dist/lib/db/personas.js +65 -0
  244. package/dist/lib/db/personas.js.map +1 -0
  245. package/dist/lib/db/phase-events.js +172 -0
  246. package/dist/lib/db/phase-events.js.map +1 -0
  247. package/dist/lib/db/secrets.js +53 -0
  248. package/dist/lib/db/secrets.js.map +1 -0
  249. package/dist/lib/db/settings.js +47 -0
  250. package/dist/lib/db/settings.js.map +1 -0
  251. package/dist/lib/db/templates.js +75 -0
  252. package/dist/lib/db/templates.js.map +1 -0
  253. package/dist/lib/db/voices.js +184 -0
  254. package/dist/lib/db/voices.js.map +1 -0
  255. package/dist/lib/lineage-maps.js +200 -0
  256. package/dist/lib/lineage-maps.js.map +1 -0
  257. package/dist/lib/logger.js +186 -0
  258. package/dist/lib/logger.js.map +1 -0
  259. package/dist/lib/personas.js +117 -0
  260. package/dist/lib/personas.js.map +1 -0
  261. package/dist/lib/runtime-path.js +222 -0
  262. package/dist/lib/runtime-path.js.map +1 -0
  263. package/dist/lib/settings/billing.js +58 -0
  264. package/dist/lib/settings/billing.js.map +1 -0
  265. package/dist/lib/settings/permissions.js +81 -0
  266. package/dist/lib/settings/permissions.js.map +1 -0
  267. package/dist/lib/settings/transport.js +113 -0
  268. package/dist/lib/settings/transport.js.map +1 -0
  269. package/dist/lib/telemetry.js +290 -0
  270. package/dist/lib/telemetry.js.map +1 -0
  271. package/dist/lib/template-schema.js +319 -0
  272. package/dist/lib/template-schema.js.map +1 -0
  273. package/dist/lib/template-validation.js +82 -0
  274. package/dist/lib/template-validation.js.map +1 -0
  275. package/dist/lib/voices.js +533 -0
  276. package/dist/lib/voices.js.map +1 -0
  277. package/dist/mcp/client.js +138 -0
  278. package/dist/mcp/client.js.map +1 -0
  279. package/dist/mcp/index.js +178 -0
  280. package/dist/mcp/index.js.map +1 -0
  281. package/dist/mcp/tools.js +355 -0
  282. package/dist/mcp/tools.js.map +1 -0
  283. package/package.json +2 -1
  284. package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js +0 -6077
  285. package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0beh7rg._.js.map +0 -69
  286. package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js +0 -6318
  287. package/.next/dev/static/chunks/05w9_next_dist_shared_lib_0pjsj.j._.js.map +0 -71
  288. package/.next/dev/types/cache-life.d.ts +0 -145
  289. package/.next/dev/types/routes.d.ts +0 -84
  290. package/.next/dev/types/validator.ts +0 -178
  291. /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 9cD3yIOGe_Aqr17uJHTQS}/_buildManifest.js +0 -0
  292. /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 9cD3yIOGe_Aqr17uJHTQS}/_clientMiddlewareManifest.js +0 -0
  293. /package/.next/static/{dJlbRLlhISA0JGtHKVqgQ → 9cD3yIOGe_Aqr17uJHTQS}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-multiplex.js","sourceRoot":"","sources":["../../src/daemon/runner-multiplex.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BH,oCAEC;AAED,wCAKC;AAQD,0DA+BC;AA+CD,4CAqPC;AAOD,gDAEC;AAED,0CAEC;AAzXD,iDAAwD;AACxD,gDAA8C;AAG9C,2EAA6D;AAC7D,2CAAsC;AAiBtC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqB,CAAC;AAEhD,SAAgB,YAAY,CAAC,MAAc;IACzC,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CACrC,MAAc,EACd,EAAwD;IAExD,MAAM,QAAQ,GACZ,EAAE,CAAC,KAAK,KAAK,UAAU;QACrB,CAAC,CAAC,aAAa;QACf,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,WAAW;YACxB,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,SAAS;gBACtB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,IAAI,CAAC;IACf,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CACV,gDAAgD,EAAE,CAAC,KAAK,cAAc,MAAM,EAAE,CAC/E,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO;QACL,MAAM;QACN,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,QAAQ,EAAE,EAAE,CAAC,SAAS;YACtB,IAAI,EAAE,EAAE,CAAC,UAAU;YACnB,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,KAAK,EAAE,EAAE,CAAC,QAAQ,IAAI,SAAS;YAC/B,MAAM,EAAE,EAAE,CAAC,MAAM,IAAI,SAAS;YAC9B,MAAM,EAAE,IAAI;SACb;QACD,EAAE,EAAE,EAAE,CAAC,UAAU;KAClB,CAAC;AACJ,CAAC;AAUD,MAAM,iBAAiB,GAAG;IACxB,MAAM;IACN,MAAM;IACN,OAAO;IACP,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,YAAY;IACZ,aAAa;CACL,CAAC;AAGX,MAAM,mBAAmB,GAAG;IAC1B,UAAU;IACV,WAAW;IACX,UAAU;IACV,QAAQ;IACR,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;CACH,CAAC;AAGX,SAAS,kBAAkB,CAAC,GAA8B;IACxD,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;YACxE,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAA0B;IACzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAEhE,wEAAwE;IACxE,gEAAgE;IAChE,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC9C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAE1C,kEAAkE;IAClE,sEAAsE;IACtE,oEAAoE;IACpE,kEAAkE;IAClE,sCAAsC;IACtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAClD,MAAM,UAAU,GAAG,CAAK,CAAa,EAAc,EAAE;QACnD,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,OAAO,GAA6C,CAAC,KAAK,EAAE,EAAE;QAClE,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;QAClD,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;oBACf,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;wBAC5B,2DAA2D;wBAC3D,UAAU;wBACV,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnB,GAAG,CAAC,KAAK,EAAE,CAAC;oBACd,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,CAAC,WAAW,EAAE,CAAC;wBACjB,wDAAwD;wBACxD,8DAA8D;wBAC9D,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,qBAAqB;gBACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,IACE,KAAK,CAAC,IAAI,KAAK,aAAa;YAC5B,KAAK,CAAC,IAAI,KAAK,YAAY;YAC3B,KAAK,CAAC,IAAI,KAAK,cAAc,EAC7B,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkC,CAAC;YACzD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAc,CAAC;YACpC,MAAM,SAAS,GAAe,iBAAuC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAClF,CAAC,CAAE,IAAkB;gBACrB,CAAC,CAAC,MAAM,CAAC;YACX,iEAAiE;YACjE,+DAA+D;YAC/D,iEAAiE;YACjE,kEAAkE;YAClE,gDAAgD;YAChD,KAAK,UAAU,CACb,sBAAW;iBACR,MAAM,CAAC;gBACN,OAAO,EAAE,MAAM;gBACf,SAAS,EAAG,OAAO,CAAC,QAAmB,IAAI,CAAC;gBAC5C,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAG,OAAO,CAAC,IAA4B,IAAI,MAAM;gBACrD,QAAQ,EAAG,OAAO,CAAC,KAAgB,IAAI,IAAI;gBAC3C,KAAK,EACH,KAAK,CAAC,IAAI,KAAK,aAAa;oBAC1B,CAAC,CAAC,UAAU;oBACZ,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY;wBAC3B,CAAC,CAAC,WAAW;wBACb,CAAC,CAAC,SAAS;gBACjB,MAAM,EAAG,OAAO,CAAC,MAAiB,IAAI,IAAI;gBAC1C,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,KAAK,CAAC,EAAE;gBACpB,WAAW,EACT,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC1D,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBACZ,CAAC,CAAC,IAAI;aACX,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,2BAA2B,CAC5B,CAAC;YACJ,CAAC,CAAC,CACL,CAAC;QACJ,CAAC;QAED,kEAAkE;QAClE,kEAAkE;QAClE,oEAAoE;QACpE,sEAAsE;QACtE,oEAAoE;QACpE,iEAAiE;QACjE,2BAA2B;QAC3B,EAAE;QACF,kEAAkE;QAClE,qEAAqE;QACrE,uEAAuE;QACvE,iEAAiE;QACjE,kEAAkE;QAClE,SAAS;QACT,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAC/D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkC,CAAC;YACzD,MAAM,IAAI,GAAG,OAAO,CAAC,SAA+B,CAAC;YACrD,MAAM,SAAS,GACb,IAAI,IAAK,iBAAuC,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC7D,CAAC,CAAE,IAAkB;gBACrB,CAAC,CAAC,QAAQ,CAAC;YACf,MAAM,QAAQ,GAAI,OAAO,CAAC,KAA6C,IAAI,EAAE,CAAC;YAC9E,MAAM,OAAO,GACV,QAAQ,CAAC,OAA8B;gBACvC,OAAO,CAAC,OAA8B;gBACvC,eAAe,CAAC;YAClB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC;YAC/C,MAAM,cAAc,GAA0B,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;YAChF,MAAM,GAAG,GACN,QAAQ,CAAC,IAA2B;gBACrC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC5C,KAAK,UAAU,CACb,sBAAW;iBACR,MAAM,CAAC;gBACN,OAAO,EAAE,MAAM;gBACf,SAAS,EAAG,OAAO,CAAC,QAAmB,IAAI,CAAC;gBAC5C,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAG,OAAO,CAAC,IAA4B,IAAI,UAAU;gBACzD,QAAQ,EAAG,OAAO,CAAC,KAAgB,IAAI,IAAI;gBAC3C,KAAK,EAAE,cAAc;gBACrB,wDAAwD;gBACxD,uDAAuD;gBACvD,mCAAmC;gBACnC,MAAM,EAAE,IAAI,GAAG,KAAK,OAAO,EAAE;gBAC7B,QAAQ,EAAE,CAAC;gBACX,SAAS,EAAE,CAAC;gBACZ,UAAU,EAAE,CAAC;gBACb,UAAU,EAAE,KAAK,CAAC,EAAE;gBACpB,WAAW,EAAE,KAAK,CAAC,EAAE;aACtB,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,uBAAuB,cAAc,UAAU,CAChD,CAAC;YACJ,CAAC,CAAC,CACL,CAAC;QACJ,CAAC;QAED,yEAAyE;QACzE,mEAAmE;QACnE,mEAAmE;QACnE,qEAAqE;QACrE,0CAA0C;QAC1C,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkC,CAAC;YACzD,MAAM,MAAM,GAAI,OAAO,CAAC,MAAiB,IAAI,WAAW,CAAC;YACzD,oEAAoE;YACpE,iEAAiE;YACjE,oEAAoE;YACpE,mEAAmE;YACnE,8DAA8D;YAC9D,4BAA4B;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;YACnC,MAAM,OAAO,GACX,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,IAAI,EAAE;gBAChF,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,IAAI,CAAC;YACX,KAAK,UAAU,CACb,gBAAK;iBACF,MAAM,CAAC,MAAM,EAAE;gBACd,MAAM,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAe;gBACpE,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxC,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;oBAC/D,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,KAAK,EAAE;oBAC3B,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;oBACvE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE;oBACnC,CAAC,CAAC,EAAE,CAAC;gBACP,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;aACxB,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,IAAA,sBAAU,EAAC,MAAM,CAAC,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACzD,kCAAkC,CACnC,CAAC;YACJ,CAAC,CAAC,CACL,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,IAAA,mBAAO,EAAC;QACtB,MAAM;QACN,QAAQ;QACR,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;QACpC,QAAQ,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;QACrC,aAAa,EAAE,kBAAkB,CAAC,IAAI,CAAC,cAAc,CAAC;QACtD,WAAW,EAAE,eAAe,CAAC,MAAM;QACnC,OAAO;QACP,aAAa;QACb,OAAO;KACR,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;QACpB,mEAAmE;QACnE,2DAA2D;QAC3D,kEAAkE;QAClE,qEAAqE;QACrE,oEAAoE;QACpE,6DAA6D;QAC7D,IAAI,aAAa,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;QACtD,CAAC;QACD,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1B,4DAA4D;QAC5D,qEAAqE;QACrE,oEAAoE;QACpE,kEAAkE;QAClE,kEAAkE;QAClE,uCAAuC;QACvC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,GAAG,CAAC,KAAK,EAAE,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,gDAAgD;YAClD,CAAC;QACH,CAAC;QACD,WAAW,CAAC,KAAK,EAAE,CAAC;QACpB,oEAAoE;QACpE,oEAAoE;QACpE,oEAAoE;QACpE,iCAAiC;QACjC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAc,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;IACnE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,eAAe;IAC7B,OAAO,UAAU,CAAC,IAAI,CAAC;AACzB,CAAC"}
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ /**
3
+ * Phase runner — orchestrates template execution.
4
+ * Spawns CLI sessions per phase/round/role, writes prompts, watches for
5
+ * answers, handles reviewer consensus, and emits SSE events.
6
+ *
7
+ * Per-role drivers live in runner/{doer-driver,reviewer-driver,
8
+ * review-only-phase}.ts. Headless streaming hot paths live in
9
+ * runner/{doer,reviewer,stream-file-writer}.ts. Pure prompt-construction
10
+ * helpers live in runner/prompt-builder.ts.
11
+ */
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.verdictFromReviewerText = exports.StreamFileWriter = exports.runReviewerHeadless = exports.runDoerHeadless = exports.packAttachedFiles = exports.buildReviewerAsk = exports.buildAsk = void 0;
17
+ exports.runChat = runChat;
18
+ const fs_1 = __importDefault(require("fs"));
19
+ const os_1 = __importDefault(require("os"));
20
+ const path_1 = __importDefault(require("path"));
21
+ const atomic_write_js_1 = require("../lib/atomic-write.js");
22
+ const template_schema_js_1 = require("../lib/template-schema.js");
23
+ const doer_driver_js_1 = require("./runner/doer-driver.js");
24
+ const prior_round_js_1 = require("./runner/prior-round.js");
25
+ const reviewer_driver_js_1 = require("./runner/reviewer-driver.js");
26
+ const review_only_phase_js_1 = require("./runner/review-only-phase.js");
27
+ const ship_js_1 = require("./ship.js");
28
+ /**
29
+ * Main runner. Iterates phases, spawns doers, waits for answers, runs
30
+ * reviewers, checks consensus, and emits events.
31
+ */
32
+ async function runChat(opts) {
33
+ const { chatId, template, work, artifact, repoPath, attachedFiles, onEvent, abortSignal, tmuxMgr, errorDetector } = opts;
34
+ const chatDir = path_1.default.join(os_1.default.homedir(), '.chorus', 'chats', chatId);
35
+ // Pack attached files into a single block once per chat. Both doer +
36
+ // every reviewer get the same block — they're auditing the same artifacts.
37
+ const filesBlock = (0, prompt_builder_js_1.packAttachedFiles)(attachedFiles, repoPath);
38
+ if (!fs_1.default.existsSync(chatDir)) {
39
+ fs_1.default.mkdirSync(chatDir, { recursive: true });
40
+ }
41
+ // Atomic temp+rename so a partial write (daemon crash, FS ENOSPC
42
+ // mid-fsync) can't leave a corrupt JSON the cockpit chokes on.
43
+ const meta = {
44
+ chatId,
45
+ work,
46
+ templateId: template.id,
47
+ createdAt: Date.now(),
48
+ };
49
+ (0, atomic_write_js_1.atomicWriteJsonSync)(path_1.default.join(chatDir, 'meta.json'), meta);
50
+ // chat_done is a one-way latch. The abort listener and the normal
51
+ // terminal emission both try to fire it; whichever runs first wins.
52
+ // This closes a race where SSE-disconnect → abort → chat_done(cancelled),
53
+ // then the loop kept running and emitted chat_done(completed),
54
+ // overwriting 'cancelled' with 'approved' in the DB.
55
+ let chatDoneEmitted = false;
56
+ const emitChatDone = (payload) => {
57
+ if (chatDoneEmitted)
58
+ return;
59
+ chatDoneEmitted = true;
60
+ onEvent({ chatId, type: 'chat_done', payload, ts: Date.now() });
61
+ };
62
+ const abortListener = () => {
63
+ // TODO(H): send polite Escape to active session, flip status to cancelled
64
+ emitChatDone({ status: 'cancelled' });
65
+ };
66
+ abortSignal.addEventListener('abort', abortListener);
67
+ // Track whether any phase failed because every reviewer in it failed
68
+ // (timeout/quota/crash). If so, the chat ends in 'no_review' rather
69
+ // than 'approved' — there was no actual peer review to approve from.
70
+ let anyPhaseAllReviewersFailed = false;
71
+ // Track whether any doer failed all rounds (couldn't produce output).
72
+ // If so, the chat must NOT end approved — there was no real
73
+ // implementation to review.
74
+ let anyPhaseDoerFailed = false;
75
+ // Captures the consensus from the most recent review-only phase. Used
76
+ // to override the default 'approved' verdict in chat_done — review-only
77
+ // chats surface what the reviewers actually said rather than auto-
78
+ // approving. null when no review-only phase ran (standard templates).
79
+ let reviewOnlyConsensus = null;
80
+ try {
81
+ for (let phaseIdx = 0; phaseIdx < template.phases.length; phaseIdx++) {
82
+ if (abortSignal.aborted)
83
+ break;
84
+ const phase = template.phases[phaseIdx];
85
+ // Review-only phases skip the doer entirely. Single pass, no
86
+ // iterate loop, no ship — enforced here, not in the schema, so
87
+ // future hybrid templates can mix kinds without re-plumbing the
88
+ // validator.
89
+ if ((0, template_schema_js_1.isReviewOnlyPhase)(phase)) {
90
+ const outcome = await (0, review_only_phase_js_1.runReviewOnlyPhase)({
91
+ chatDir,
92
+ chatId,
93
+ phase,
94
+ phaseIdx,
95
+ artifact: artifact ?? '',
96
+ work,
97
+ filesBlock,
98
+ tmuxMgr,
99
+ errorDetector,
100
+ onEvent,
101
+ abortSignal,
102
+ templateFallbackReviewer: template.fallback?.reviewer,
103
+ });
104
+ if (outcome.allReviewersFailed) {
105
+ anyPhaseAllReviewersFailed = true;
106
+ }
107
+ if (!outcome.completed) {
108
+ // Aborted (Ctrl-C / cockpit cancel). DO NOT capture consensus
109
+ // here — emitChatDone is racing with the abort listener which
110
+ // fires status='cancelled', and surfacing 'request_changes'
111
+ // would collapse "user hit cancel" with "reviewers said no" if
112
+ // the abort listener loses the latch race.
113
+ break;
114
+ }
115
+ // Reviewers actually finished a pass. Capture so chat_done can
116
+ // surface the real verdict instead of always reporting 'approved'.
117
+ reviewOnlyConsensus = {
118
+ agreed: outcome.agreed,
119
+ summary: outcome.summary,
120
+ };
121
+ onEvent({
122
+ chatId,
123
+ type: 'phase_done',
124
+ payload: {
125
+ phaseId: phase.id,
126
+ phaseIdx,
127
+ kind: phase.kind,
128
+ },
129
+ ts: Date.now(),
130
+ });
131
+ continue;
132
+ }
133
+ // Standard phase from here on.
134
+ const stdPhase = phase;
135
+ let doerSucceeded = false;
136
+ for (let round = 1; round <= stdPhase.iterate.maxRounds; round++) {
137
+ if (abortSignal.aborted)
138
+ break;
139
+ onEvent({
140
+ chatId,
141
+ type: 'phase_start',
142
+ payload: {
143
+ phaseId: stdPhase.id,
144
+ phaseIdx,
145
+ kind: stdPhase.kind,
146
+ round,
147
+ role: 'doer',
148
+ agent: stdPhase.doer.lineage,
149
+ },
150
+ ts: Date.now(),
151
+ });
152
+ // Round 2+ feeds prior reviewer findings back into the doer prompt
153
+ // so disagreement → retry is a real revision loop, not "ask the same
154
+ // question again." Returns "" when round === 1.
155
+ const priorRoundFeedback = (0, prior_round_js_1.readPriorRoundFeedback)(chatDir, round);
156
+ const doerAnswer = await (0, doer_driver_js_1.runDoer)(chatDir, chatId, stdPhase, phaseIdx, round, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, repoPath, template.fallback?.doer, priorRoundFeedback);
157
+ // Treat null OR partial-stream as a doer failure — `!doerAnswer.full`
158
+ // means runDoerHeadless saw a mid-stream error and only captured a
159
+ // partial transcript. Passing that to reviewers leads to verdicts
160
+ // on a half-written answer (gemini caught this on the launch-eve
161
+ // runner review). The runner already retries via the round loop,
162
+ // so failing this round is the right move; reviewing garbage is not.
163
+ if (!doerAnswer || !doerAnswer.full) {
164
+ onEvent({
165
+ chatId,
166
+ type: 'phase_failed',
167
+ payload: {
168
+ phaseId: stdPhase.id,
169
+ phaseIdx,
170
+ kind: stdPhase.kind,
171
+ role: 'doer',
172
+ reason: doerAnswer ? 'doer_partial_stream' : 'doer_timeout',
173
+ },
174
+ ts: Date.now(),
175
+ });
176
+ break;
177
+ }
178
+ onEvent({
179
+ chatId,
180
+ type: 'phase_progress',
181
+ payload: {
182
+ phaseId: stdPhase.id,
183
+ round,
184
+ role: 'doer',
185
+ output: doerAnswer.content.slice(0, 500),
186
+ },
187
+ ts: Date.now(),
188
+ });
189
+ if (stdPhase.reviewer && stdPhase.reviewer.candidates.length > 0) {
190
+ const consensus = await (0, reviewer_driver_js_1.runReviewers)(chatDir, chatId, stdPhase, phaseIdx, round, doerAnswer.content, work, filesBlock, tmuxMgr, errorDetector, onEvent, abortSignal, template.fallback?.reviewer);
191
+ if (consensus.allFailed) {
192
+ anyPhaseAllReviewersFailed = true;
193
+ }
194
+ if (consensus.agreed) {
195
+ doerSucceeded = true;
196
+ // Phase succeeded in this round — clear any
197
+ // all-reviewers-failed latch from prior rounds of THIS
198
+ // phase. Without this, a chat that had a flaky round 1 (one
199
+ // reviewer's CLI quota briefly exhausted, or a subprocess
200
+ // crashed) but recovered to consensus in round 2 was being
201
+ // terminally classified as `no_review`. The latch is meant
202
+ // to surface "we never got a real review", not "we briefly
203
+ // couldn't but eventually did". Subsequent phases set the
204
+ // flag again from their own round-1 outcomes, so cross-phase
205
+ // failure semantics are preserved.
206
+ anyPhaseAllReviewersFailed = false;
207
+ break;
208
+ }
209
+ if (round < stdPhase.iterate.maxRounds) {
210
+ onEvent({
211
+ chatId,
212
+ type: 'phase_progress',
213
+ payload: {
214
+ phaseId: stdPhase.id,
215
+ round,
216
+ role: 'reviewer',
217
+ disagreement: consensus.summary,
218
+ },
219
+ ts: Date.now(),
220
+ });
221
+ }
222
+ }
223
+ else {
224
+ // No reviewers: doer succeeds immediately
225
+ doerSucceeded = true;
226
+ break;
227
+ }
228
+ }
229
+ if (!doerSucceeded) {
230
+ anyPhaseDoerFailed = true;
231
+ onEvent({
232
+ chatId,
233
+ type: 'phase_failed',
234
+ payload: {
235
+ phaseId: stdPhase.id,
236
+ phaseIdx,
237
+ kind: stdPhase.kind,
238
+ role: 'doer',
239
+ reason: 'max_rounds_exhausted',
240
+ },
241
+ ts: Date.now(),
242
+ });
243
+ // Don't continue to subsequent phases when a doer failed every
244
+ // round — there is no real implementation to feed forward, and
245
+ // the chat must not end 'approved'. The chat_done branch below
246
+ // handles the terminal status as 'failed' / 'no_review'.
247
+ break;
248
+ }
249
+ onEvent({
250
+ chatId,
251
+ type: 'phase_done',
252
+ payload: {
253
+ phaseId: stdPhase.id,
254
+ phaseIdx,
255
+ kind: stdPhase.kind,
256
+ },
257
+ ts: Date.now(),
258
+ });
259
+ }
260
+ // ─── Ship phase ────────────────────────────────────────────────
261
+ // Runs after all phases pass + reviewers agree, AND chat targets a
262
+ // real repo, AND template opted in. Failures are surfaced as
263
+ // status=blocked (chat ran fine, ship couldn't complete) rather
264
+ // than failed (chat broke).
265
+ let shipOutcome = { kind: 'skipped' };
266
+ // Forcibly skipped when any phase is review_only — there's no doer
267
+ // diff to commit and a template author who set ship.enabled=true on
268
+ // a review-only template would otherwise hit gh-cli with an empty
269
+ // stage. The schema docs claim the runner enforces this.
270
+ const templateHasReviewOnly = template.phases.some(template_schema_js_1.isReviewOnlyPhase);
271
+ if (!anyPhaseAllReviewersFailed &&
272
+ !anyPhaseDoerFailed &&
273
+ !templateHasReviewOnly &&
274
+ template.ship?.enabled &&
275
+ repoPath) {
276
+ const ctx = (0, ship_js_1.detectGitContext)(repoPath, template.ship.baseBranch);
277
+ if (!ctx.ok) {
278
+ // Surface as a skip with reason — chat still ends approved
279
+ // (we didn't ship, but the review was real).
280
+ shipOutcome = { kind: 'skipped', reason: `${ctx.reason}: ${ctx.detail}` };
281
+ onEvent({
282
+ chatId,
283
+ type: 'phase_progress',
284
+ payload: { phaseId: 'ship', skipped: true, reason: ctx.reason, detail: ctx.detail },
285
+ ts: Date.now(),
286
+ });
287
+ }
288
+ else {
289
+ // Read the most recent doer's output for the PR body. Fall back
290
+ // to the chat's `work` if we can't find it (shouldn't happen in
291
+ // practice — ship phase only runs after a successful doer).
292
+ const lastDoerOutput = readLastDoerAnswer(chatDir) ?? work;
293
+ onEvent({
294
+ chatId,
295
+ type: 'phase_start',
296
+ payload: { phaseId: 'ship', kind: 'ship' },
297
+ ts: Date.now(),
298
+ });
299
+ const result = (0, ship_js_1.runShipPhase)({
300
+ context: ctx.context,
301
+ chatId,
302
+ templateId: template.id,
303
+ branchPattern: template.ship.branchPattern ?? 'chorus/{chatId}',
304
+ titleTemplate: template.ship.titleTemplate ?? 'chorus: {template} via #{chatId}',
305
+ summary: work,
306
+ doerOutput: lastDoerOutput,
307
+ });
308
+ if (result.ok) {
309
+ shipOutcome = { kind: 'merged', prUrl: result.prUrl };
310
+ onEvent({
311
+ chatId,
312
+ type: 'phase_done',
313
+ payload: { phaseId: 'ship', prUrl: result.prUrl, branch: result.branch },
314
+ ts: Date.now(),
315
+ });
316
+ }
317
+ else {
318
+ shipOutcome = { kind: 'blocked', error: `${result.stage}: ${result.detail}` };
319
+ onEvent({
320
+ chatId,
321
+ type: 'phase_failed',
322
+ payload: { phaseId: 'ship', stage: result.stage, detail: result.detail },
323
+ ts: Date.now(),
324
+ });
325
+ }
326
+ }
327
+ }
328
+ // Final chat_done — encodes terminal status and ship-phase outcome.
329
+ // Routed through emitChatDone so an earlier abort (SSE close, user
330
+ // cancel) can't be overwritten by a later "completed" emission.
331
+ if (anyPhaseDoerFailed) {
332
+ // The doer never produced a real implementation. Don't pretend
333
+ // the chat was reviewed — surface as failed so the cockpit shows
334
+ // it red.
335
+ emitChatDone({ status: 'failed', verdict: 'failed', error: 'doer_failed_all_rounds' });
336
+ }
337
+ else if (anyPhaseAllReviewersFailed) {
338
+ emitChatDone({ status: 'no_review', verdict: 'no_review' });
339
+ }
340
+ else if (shipOutcome.kind === 'merged') {
341
+ emitChatDone({
342
+ status: 'merged',
343
+ verdict: 'approved',
344
+ prUrl: shipOutcome.prUrl,
345
+ });
346
+ }
347
+ else if (shipOutcome.kind === 'blocked') {
348
+ emitChatDone({ status: 'blocked', verdict: 'approved', shipError: shipOutcome.error });
349
+ }
350
+ else if (reviewOnlyConsensus !== null) {
351
+ // Review-only chats surface the actual reviewer consensus rather
352
+ // than auto-approving. The chat itself completed (artifact
353
+ // reviewed, findings written) regardless of agreement — verdict
354
+ // reflects what reviewers said so the cockpit/CLI can render a
355
+ // meaningful "agreed / requested changes" state.
356
+ emitChatDone({
357
+ status: 'completed',
358
+ verdict: reviewOnlyConsensus.agreed ? 'approved' : 'request_changes',
359
+ reviewerSummary: reviewOnlyConsensus.summary,
360
+ });
361
+ }
362
+ else {
363
+ // Either no ship phase or ship was skipped — chat ends approved.
364
+ emitChatDone({
365
+ status: 'completed',
366
+ verdict: 'approved',
367
+ ...(shipOutcome.kind === 'skipped' && shipOutcome.reason
368
+ ? { shipSkipped: shipOutcome.reason }
369
+ : {}),
370
+ });
371
+ }
372
+ }
373
+ catch (error) {
374
+ const message = error instanceof Error ? error.message : String(error);
375
+ emitChatDone({ status: 'failed', error: message });
376
+ }
377
+ finally {
378
+ abortSignal.removeEventListener('abort', abortListener);
379
+ }
380
+ }
381
+ /**
382
+ * Find and read the most recent doer's answer.md from the chat dir.
383
+ * Used by the ship phase to embed doer output in the PR body. Returns
384
+ * undefined if no doer output exists (shouldn't happen since ship runs
385
+ * after success).
386
+ */
387
+ function readLastDoerAnswer(chatDir) {
388
+ if (!fs_1.default.existsSync(chatDir))
389
+ return undefined;
390
+ // Walk rounds in reverse (highest first). Within each round pick the
391
+ // doer-* dir's answer.md. There's at most one doer per round.
392
+ const rounds = fs_1.default
393
+ .readdirSync(chatDir)
394
+ .filter((n) => /^round-\d+$/.test(n))
395
+ .map((n) => ({ name: n, num: parseInt(n.replace('round-', ''), 10) }))
396
+ .sort((a, b) => b.num - a.num);
397
+ for (const r of rounds) {
398
+ const roundDir = path_1.default.join(chatDir, r.name);
399
+ const doerSubdir = fs_1.default
400
+ .readdirSync(roundDir)
401
+ .find((n) => n.startsWith('doer-'));
402
+ if (!doerSubdir)
403
+ continue;
404
+ const answerFile = path_1.default.join(roundDir, doerSubdir, 'answer.md');
405
+ if (fs_1.default.existsSync(answerFile)) {
406
+ const content = fs_1.default.readFileSync(answerFile, 'utf-8');
407
+ if (content.trim().length > 0)
408
+ return content;
409
+ }
410
+ }
411
+ return undefined;
412
+ }
413
+ // Re-exports keep external import sites stable. Tests import some of
414
+ // these from `'../src/daemon/runner'`, the MCP layer imports verdict.
415
+ const prompt_builder_js_1 = require("./runner/prompt-builder.js");
416
+ Object.defineProperty(exports, "buildAsk", { enumerable: true, get: function () { return prompt_builder_js_1.buildAsk; } });
417
+ Object.defineProperty(exports, "buildReviewerAsk", { enumerable: true, get: function () { return prompt_builder_js_1.buildReviewerAsk; } });
418
+ Object.defineProperty(exports, "packAttachedFiles", { enumerable: true, get: function () { return prompt_builder_js_1.packAttachedFiles; } });
419
+ const doer_js_1 = require("./runner/doer.js");
420
+ Object.defineProperty(exports, "runDoerHeadless", { enumerable: true, get: function () { return doer_js_1.runDoerHeadless; } });
421
+ const reviewer_js_1 = require("./runner/reviewer.js");
422
+ Object.defineProperty(exports, "runReviewerHeadless", { enumerable: true, get: function () { return reviewer_js_1.runReviewerHeadless; } });
423
+ const stream_file_writer_js_1 = require("./runner/stream-file-writer.js");
424
+ Object.defineProperty(exports, "StreamFileWriter", { enumerable: true, get: function () { return stream_file_writer_js_1.StreamFileWriter; } });
425
+ const verdict_js_1 = require("./runner/verdict.js");
426
+ Object.defineProperty(exports, "verdictFromReviewerText", { enumerable: true, get: function () { return verdict_js_1.verdictFromReviewerText; } });
427
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/daemon/runner.ts"],"names":[],"mappings":"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"}