trellis-he 0.6.0-beta.17

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 (657) hide show
  1. package/LICENSE +235 -0
  2. package/README.md +149 -0
  3. package/bin/trellis.js +3 -0
  4. package/dist/cli/index.d.ts +3 -0
  5. package/dist/cli/index.d.ts.map +1 -0
  6. package/dist/cli/index.js +207 -0
  7. package/dist/cli/index.js.map +1 -0
  8. package/dist/commands/channel/adapters/claude.d.ts +38 -0
  9. package/dist/commands/channel/adapters/claude.d.ts.map +1 -0
  10. package/dist/commands/channel/adapters/claude.js +209 -0
  11. package/dist/commands/channel/adapters/claude.js.map +1 -0
  12. package/dist/commands/channel/adapters/codex.d.ts +81 -0
  13. package/dist/commands/channel/adapters/codex.d.ts.map +1 -0
  14. package/dist/commands/channel/adapters/codex.js +512 -0
  15. package/dist/commands/channel/adapters/codex.js.map +1 -0
  16. package/dist/commands/channel/adapters/index.d.ts +79 -0
  17. package/dist/commands/channel/adapters/index.d.ts.map +1 -0
  18. package/dist/commands/channel/adapters/index.js +109 -0
  19. package/dist/commands/channel/adapters/index.js.map +1 -0
  20. package/dist/commands/channel/adapters/types.d.ts +33 -0
  21. package/dist/commands/channel/adapters/types.d.ts.map +1 -0
  22. package/dist/commands/channel/adapters/types.js +2 -0
  23. package/dist/commands/channel/adapters/types.js.map +1 -0
  24. package/dist/commands/channel/agent-loader.d.ts +32 -0
  25. package/dist/commands/channel/agent-loader.d.ts.map +1 -0
  26. package/dist/commands/channel/agent-loader.js +154 -0
  27. package/dist/commands/channel/agent-loader.js.map +1 -0
  28. package/dist/commands/channel/context-loader.d.ts +26 -0
  29. package/dist/commands/channel/context-loader.d.ts.map +1 -0
  30. package/dist/commands/channel/context-loader.js +290 -0
  31. package/dist/commands/channel/context-loader.js.map +1 -0
  32. package/dist/commands/channel/context.d.ts +16 -0
  33. package/dist/commands/channel/context.d.ts.map +1 -0
  34. package/dist/commands/channel/context.js +83 -0
  35. package/dist/commands/channel/context.js.map +1 -0
  36. package/dist/commands/channel/create.d.ts +27 -0
  37. package/dist/commands/channel/create.d.ts.map +1 -0
  38. package/dist/commands/channel/create.js +39 -0
  39. package/dist/commands/channel/create.js.map +1 -0
  40. package/dist/commands/channel/dev-parse-trace.d.ts +14 -0
  41. package/dist/commands/channel/dev-parse-trace.d.ts.map +1 -0
  42. package/dist/commands/channel/dev-parse-trace.js +70 -0
  43. package/dist/commands/channel/dev-parse-trace.js.map +1 -0
  44. package/dist/commands/channel/index.d.ts +3 -0
  45. package/dist/commands/channel/index.d.ts.map +1 -0
  46. package/dist/commands/channel/index.js +503 -0
  47. package/dist/commands/channel/index.js.map +1 -0
  48. package/dist/commands/channel/kill.d.ts +7 -0
  49. package/dist/commands/channel/kill.d.ts.map +1 -0
  50. package/dist/commands/channel/kill.js +121 -0
  51. package/dist/commands/channel/kill.js.map +1 -0
  52. package/dist/commands/channel/list.d.ts +17 -0
  53. package/dist/commands/channel/list.d.ts.map +1 -0
  54. package/dist/commands/channel/list.js +233 -0
  55. package/dist/commands/channel/list.js.map +1 -0
  56. package/dist/commands/channel/messages.d.ts +16 -0
  57. package/dist/commands/channel/messages.d.ts.map +1 -0
  58. package/dist/commands/channel/messages.js +249 -0
  59. package/dist/commands/channel/messages.js.map +1 -0
  60. package/dist/commands/channel/rm.d.ts +27 -0
  61. package/dist/commands/channel/rm.d.ts.map +1 -0
  62. package/dist/commands/channel/rm.js +216 -0
  63. package/dist/commands/channel/rm.js.map +1 -0
  64. package/dist/commands/channel/run.d.ts +31 -0
  65. package/dist/commands/channel/run.d.ts.map +1 -0
  66. package/dist/commands/channel/run.js +137 -0
  67. package/dist/commands/channel/run.js.map +1 -0
  68. package/dist/commands/channel/send.d.ts +13 -0
  69. package/dist/commands/channel/send.d.ts.map +1 -0
  70. package/dist/commands/channel/send.js +26 -0
  71. package/dist/commands/channel/send.js.map +1 -0
  72. package/dist/commands/channel/spawn.d.ts +30 -0
  73. package/dist/commands/channel/spawn.d.ts.map +1 -0
  74. package/dist/commands/channel/spawn.js +194 -0
  75. package/dist/commands/channel/spawn.js.map +1 -0
  76. package/dist/commands/channel/store/events.d.ts +39 -0
  77. package/dist/commands/channel/store/events.d.ts.map +1 -0
  78. package/dist/commands/channel/store/events.js +87 -0
  79. package/dist/commands/channel/store/events.js.map +1 -0
  80. package/dist/commands/channel/store/filter.d.ts +3 -0
  81. package/dist/commands/channel/store/filter.d.ts.map +1 -0
  82. package/dist/commands/channel/store/filter.js +2 -0
  83. package/dist/commands/channel/store/filter.js.map +1 -0
  84. package/dist/commands/channel/store/lock.d.ts +23 -0
  85. package/dist/commands/channel/store/lock.d.ts.map +1 -0
  86. package/dist/commands/channel/store/lock.js +99 -0
  87. package/dist/commands/channel/store/lock.js.map +1 -0
  88. package/dist/commands/channel/store/paths.d.ts +63 -0
  89. package/dist/commands/channel/store/paths.d.ts.map +1 -0
  90. package/dist/commands/channel/store/paths.js +246 -0
  91. package/dist/commands/channel/store/paths.js.map +1 -0
  92. package/dist/commands/channel/store/schema.d.ts +27 -0
  93. package/dist/commands/channel/store/schema.d.ts.map +1 -0
  94. package/dist/commands/channel/store/schema.js +34 -0
  95. package/dist/commands/channel/store/schema.js.map +1 -0
  96. package/dist/commands/channel/store/thread-state.d.ts +5 -0
  97. package/dist/commands/channel/store/thread-state.d.ts.map +1 -0
  98. package/dist/commands/channel/store/thread-state.js +16 -0
  99. package/dist/commands/channel/store/thread-state.js.map +1 -0
  100. package/dist/commands/channel/store/watch.d.ts +19 -0
  101. package/dist/commands/channel/store/watch.d.ts.map +1 -0
  102. package/dist/commands/channel/store/watch.js +146 -0
  103. package/dist/commands/channel/store/watch.js.map +1 -0
  104. package/dist/commands/channel/supervisor/inbox.d.ts +30 -0
  105. package/dist/commands/channel/supervisor/inbox.d.ts.map +1 -0
  106. package/dist/commands/channel/supervisor/inbox.js +160 -0
  107. package/dist/commands/channel/supervisor/inbox.js.map +1 -0
  108. package/dist/commands/channel/supervisor/shutdown.d.ts +66 -0
  109. package/dist/commands/channel/supervisor/shutdown.d.ts.map +1 -0
  110. package/dist/commands/channel/supervisor/shutdown.js +143 -0
  111. package/dist/commands/channel/supervisor/shutdown.js.map +1 -0
  112. package/dist/commands/channel/supervisor/stdout.d.ts +51 -0
  113. package/dist/commands/channel/supervisor/stdout.d.ts.map +1 -0
  114. package/dist/commands/channel/supervisor/stdout.js +121 -0
  115. package/dist/commands/channel/supervisor/stdout.js.map +1 -0
  116. package/dist/commands/channel/supervisor/turns.d.ts +20 -0
  117. package/dist/commands/channel/supervisor/turns.d.ts.map +1 -0
  118. package/dist/commands/channel/supervisor/turns.js +28 -0
  119. package/dist/commands/channel/supervisor/turns.js.map +1 -0
  120. package/dist/commands/channel/supervisor/warning.d.ts +48 -0
  121. package/dist/commands/channel/supervisor/warning.d.ts.map +1 -0
  122. package/dist/commands/channel/supervisor/warning.js +77 -0
  123. package/dist/commands/channel/supervisor/warning.js.map +1 -0
  124. package/dist/commands/channel/supervisor.d.ts +53 -0
  125. package/dist/commands/channel/supervisor.d.ts.map +1 -0
  126. package/dist/commands/channel/supervisor.js +304 -0
  127. package/dist/commands/channel/supervisor.js.map +1 -0
  128. package/dist/commands/channel/text-body.d.ts +13 -0
  129. package/dist/commands/channel/text-body.d.ts.map +1 -0
  130. package/dist/commands/channel/text-body.js +47 -0
  131. package/dist/commands/channel/text-body.js.map +1 -0
  132. package/dist/commands/channel/threads.d.ts +39 -0
  133. package/dist/commands/channel/threads.d.ts.map +1 -0
  134. package/dist/commands/channel/threads.js +106 -0
  135. package/dist/commands/channel/threads.js.map +1 -0
  136. package/dist/commands/channel/title.d.ts +12 -0
  137. package/dist/commands/channel/title.d.ts.map +1 -0
  138. package/dist/commands/channel/title.js +24 -0
  139. package/dist/commands/channel/title.js.map +1 -0
  140. package/dist/commands/channel/wait.d.ts +18 -0
  141. package/dist/commands/channel/wait.d.ts.map +1 -0
  142. package/dist/commands/channel/wait.js +76 -0
  143. package/dist/commands/channel/wait.js.map +1 -0
  144. package/dist/commands/init.d.ts +59 -0
  145. package/dist/commands/init.d.ts.map +1 -0
  146. package/dist/commands/init.js +1459 -0
  147. package/dist/commands/init.js.map +1 -0
  148. package/dist/commands/mem.d.ts +30 -0
  149. package/dist/commands/mem.d.ts.map +1 -0
  150. package/dist/commands/mem.js +424 -0
  151. package/dist/commands/mem.js.map +1 -0
  152. package/dist/commands/uninstall.d.ts +27 -0
  153. package/dist/commands/uninstall.d.ts.map +1 -0
  154. package/dist/commands/uninstall.js +339 -0
  155. package/dist/commands/uninstall.js.map +1 -0
  156. package/dist/commands/update.d.ts +72 -0
  157. package/dist/commands/update.d.ts.map +1 -0
  158. package/dist/commands/update.js +1926 -0
  159. package/dist/commands/update.js.map +1 -0
  160. package/dist/commands/upgrade.d.ts +28 -0
  161. package/dist/commands/upgrade.d.ts.map +1 -0
  162. package/dist/commands/upgrade.js +84 -0
  163. package/dist/commands/upgrade.js.map +1 -0
  164. package/dist/commands/workflow.d.ts +35 -0
  165. package/dist/commands/workflow.d.ts.map +1 -0
  166. package/dist/commands/workflow.js +219 -0
  167. package/dist/commands/workflow.js.map +1 -0
  168. package/dist/configurators/antigravity.d.ts +7 -0
  169. package/dist/configurators/antigravity.d.ts.map +1 -0
  170. package/dist/configurators/antigravity.js +19 -0
  171. package/dist/configurators/antigravity.js.map +1 -0
  172. package/dist/configurators/claude.d.ts +9 -0
  173. package/dist/configurators/claude.d.ts.map +1 -0
  174. package/dist/configurators/claude.js +72 -0
  175. package/dist/configurators/claude.js.map +1 -0
  176. package/dist/configurators/codebuddy.d.ts +10 -0
  177. package/dist/configurators/codebuddy.d.ts.map +1 -0
  178. package/dist/configurators/codebuddy.js +30 -0
  179. package/dist/configurators/codebuddy.js.map +1 -0
  180. package/dist/configurators/codex.d.ts +8 -0
  181. package/dist/configurators/codex.d.ts.map +1 -0
  182. package/dist/configurators/codex.js +87 -0
  183. package/dist/configurators/codex.js.map +1 -0
  184. package/dist/configurators/copilot.d.ts +10 -0
  185. package/dist/configurators/copilot.d.ts.map +1 -0
  186. package/dist/configurators/copilot.js +51 -0
  187. package/dist/configurators/copilot.js.map +1 -0
  188. package/dist/configurators/cursor.d.ts +10 -0
  189. package/dist/configurators/cursor.d.ts.map +1 -0
  190. package/dist/configurators/cursor.js +29 -0
  191. package/dist/configurators/cursor.js.map +1 -0
  192. package/dist/configurators/droid.d.ts +10 -0
  193. package/dist/configurators/droid.d.ts.map +1 -0
  194. package/dist/configurators/droid.js +30 -0
  195. package/dist/configurators/droid.js.map +1 -0
  196. package/dist/configurators/gemini.d.ts +16 -0
  197. package/dist/configurators/gemini.d.ts.map +1 -0
  198. package/dist/configurators/gemini.js +38 -0
  199. package/dist/configurators/gemini.js.map +1 -0
  200. package/dist/configurators/index.d.ts +65 -0
  201. package/dist/configurators/index.d.ts.map +1 -0
  202. package/dist/configurators/index.js +367 -0
  203. package/dist/configurators/index.js.map +1 -0
  204. package/dist/configurators/kilo.d.ts +7 -0
  205. package/dist/configurators/kilo.d.ts.map +1 -0
  206. package/dist/configurators/kilo.js +19 -0
  207. package/dist/configurators/kilo.js.map +1 -0
  208. package/dist/configurators/kiro.d.ts +8 -0
  209. package/dist/configurators/kiro.d.ts.map +1 -0
  210. package/dist/configurators/kiro.js +24 -0
  211. package/dist/configurators/kiro.js.map +1 -0
  212. package/dist/configurators/opencode.d.ts +14 -0
  213. package/dist/configurators/opencode.d.ts.map +1 -0
  214. package/dist/configurators/opencode.js +96 -0
  215. package/dist/configurators/opencode.js.map +1 -0
  216. package/dist/configurators/pi.d.ts +3 -0
  217. package/dist/configurators/pi.d.ts.map +1 -0
  218. package/dist/configurators/pi.js +45 -0
  219. package/dist/configurators/pi.js.map +1 -0
  220. package/dist/configurators/qoder.d.ts +11 -0
  221. package/dist/configurators/qoder.d.ts.map +1 -0
  222. package/dist/configurators/qoder.js +31 -0
  223. package/dist/configurators/qoder.js.map +1 -0
  224. package/dist/configurators/shared.d.ts +178 -0
  225. package/dist/configurators/shared.d.ts.map +1 -0
  226. package/dist/configurators/shared.js +541 -0
  227. package/dist/configurators/shared.js.map +1 -0
  228. package/dist/configurators/windsurf.d.ts +7 -0
  229. package/dist/configurators/windsurf.d.ts.map +1 -0
  230. package/dist/configurators/windsurf.js +19 -0
  231. package/dist/configurators/windsurf.js.map +1 -0
  232. package/dist/configurators/workflow.d.ts +37 -0
  233. package/dist/configurators/workflow.d.ts.map +1 -0
  234. package/dist/configurators/workflow.js +164 -0
  235. package/dist/configurators/workflow.js.map +1 -0
  236. package/dist/constants/paths.d.ts +70 -0
  237. package/dist/constants/paths.d.ts.map +1 -0
  238. package/dist/constants/paths.js +79 -0
  239. package/dist/constants/paths.js.map +1 -0
  240. package/dist/constants/version.d.ts +9 -0
  241. package/dist/constants/version.d.ts.map +1 -0
  242. package/dist/constants/version.js +15 -0
  243. package/dist/constants/version.js.map +1 -0
  244. package/dist/index.d.ts +9 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +9 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/migrations/index.d.ts +62 -0
  249. package/dist/migrations/index.d.ts.map +1 -0
  250. package/dist/migrations/index.js +187 -0
  251. package/dist/migrations/index.js.map +1 -0
  252. package/dist/migrations/manifests/0.1.9.json +30 -0
  253. package/dist/migrations/manifests/0.2.0.json +49 -0
  254. package/dist/migrations/manifests/0.2.12.json +9 -0
  255. package/dist/migrations/manifests/0.2.13.json +9 -0
  256. package/dist/migrations/manifests/0.2.14.json +175 -0
  257. package/dist/migrations/manifests/0.2.15.json +33 -0
  258. package/dist/migrations/manifests/0.3.0-beta.0.json +297 -0
  259. package/dist/migrations/manifests/0.3.0-beta.1.json +9 -0
  260. package/dist/migrations/manifests/0.3.0-beta.10.json +9 -0
  261. package/dist/migrations/manifests/0.3.0-beta.11.json +9 -0
  262. package/dist/migrations/manifests/0.3.0-beta.12.json +9 -0
  263. package/dist/migrations/manifests/0.3.0-beta.13.json +9 -0
  264. package/dist/migrations/manifests/0.3.0-beta.14.json +9 -0
  265. package/dist/migrations/manifests/0.3.0-beta.15.json +9 -0
  266. package/dist/migrations/manifests/0.3.0-beta.16.json +9 -0
  267. package/dist/migrations/manifests/0.3.0-beta.2.json +9 -0
  268. package/dist/migrations/manifests/0.3.0-beta.3.json +9 -0
  269. package/dist/migrations/manifests/0.3.0-beta.4.json +9 -0
  270. package/dist/migrations/manifests/0.3.0-beta.5.json +9 -0
  271. package/dist/migrations/manifests/0.3.0-beta.6.json +9 -0
  272. package/dist/migrations/manifests/0.3.0-beta.7.json +11 -0
  273. package/dist/migrations/manifests/0.3.0-beta.8.json +9 -0
  274. package/dist/migrations/manifests/0.3.0-beta.9.json +9 -0
  275. package/dist/migrations/manifests/0.3.0-rc.0.json +9 -0
  276. package/dist/migrations/manifests/0.3.0-rc.1.json +9 -0
  277. package/dist/migrations/manifests/0.3.0-rc.2.json +9 -0
  278. package/dist/migrations/manifests/0.3.0-rc.3.json +9 -0
  279. package/dist/migrations/manifests/0.3.0-rc.4.json +9 -0
  280. package/dist/migrations/manifests/0.3.0-rc.5.json +9 -0
  281. package/dist/migrations/manifests/0.3.0-rc.6.json +9 -0
  282. package/dist/migrations/manifests/0.3.0.json +11 -0
  283. package/dist/migrations/manifests/0.3.1.json +9 -0
  284. package/dist/migrations/manifests/0.3.10.json +9 -0
  285. package/dist/migrations/manifests/0.3.2.json +9 -0
  286. package/dist/migrations/manifests/0.3.3.json +9 -0
  287. package/dist/migrations/manifests/0.3.4.json +21 -0
  288. package/dist/migrations/manifests/0.3.5.json +9 -0
  289. package/dist/migrations/manifests/0.3.6.json +9 -0
  290. package/dist/migrations/manifests/0.3.7.json +9 -0
  291. package/dist/migrations/manifests/0.3.8.json +9 -0
  292. package/dist/migrations/manifests/0.3.9.json +9 -0
  293. package/dist/migrations/manifests/0.4.0-beta.1.json +228 -0
  294. package/dist/migrations/manifests/0.4.0-beta.10.json +9 -0
  295. package/dist/migrations/manifests/0.4.0-beta.2.json +9 -0
  296. package/dist/migrations/manifests/0.4.0-beta.3.json +9 -0
  297. package/dist/migrations/manifests/0.4.0-beta.4.json +9 -0
  298. package/dist/migrations/manifests/0.4.0-beta.5.json +9 -0
  299. package/dist/migrations/manifests/0.4.0-beta.6.json +9 -0
  300. package/dist/migrations/manifests/0.4.0-beta.7.json +9 -0
  301. package/dist/migrations/manifests/0.4.0-beta.8.json +34 -0
  302. package/dist/migrations/manifests/0.4.0-beta.9.json +9 -0
  303. package/dist/migrations/manifests/0.4.0-rc.0.json +9 -0
  304. package/dist/migrations/manifests/0.4.0-rc.1.json +9 -0
  305. package/dist/migrations/manifests/0.4.0.json +9 -0
  306. package/dist/migrations/manifests/0.5.0-beta.0.json +1646 -0
  307. package/dist/migrations/manifests/0.5.0-beta.1.json +9 -0
  308. package/dist/migrations/manifests/0.5.0-beta.10.json +9 -0
  309. package/dist/migrations/manifests/0.5.0-beta.11.json +9 -0
  310. package/dist/migrations/manifests/0.5.0-beta.12.json +9 -0
  311. package/dist/migrations/manifests/0.5.0-beta.13.json +9 -0
  312. package/dist/migrations/manifests/0.5.0-beta.14.json +9 -0
  313. package/dist/migrations/manifests/0.5.0-beta.15.json +116 -0
  314. package/dist/migrations/manifests/0.5.0-beta.16.json +9 -0
  315. package/dist/migrations/manifests/0.5.0-beta.17.json +9 -0
  316. package/dist/migrations/manifests/0.5.0-beta.18.json +9 -0
  317. package/dist/migrations/manifests/0.5.0-beta.19.json +9 -0
  318. package/dist/migrations/manifests/0.5.0-beta.2.json +9 -0
  319. package/dist/migrations/manifests/0.5.0-beta.3.json +9 -0
  320. package/dist/migrations/manifests/0.5.0-beta.4.json +9 -0
  321. package/dist/migrations/manifests/0.5.0-beta.5.json +222 -0
  322. package/dist/migrations/manifests/0.5.0-beta.6.json +9 -0
  323. package/dist/migrations/manifests/0.5.0-beta.7.json +9 -0
  324. package/dist/migrations/manifests/0.5.0-beta.8.json +9 -0
  325. package/dist/migrations/manifests/0.5.0-beta.9.json +48 -0
  326. package/dist/migrations/manifests/0.5.0-rc.0.json +9 -0
  327. package/dist/migrations/manifests/0.5.0-rc.1.json +9 -0
  328. package/dist/migrations/manifests/0.5.0-rc.2.json +9 -0
  329. package/dist/migrations/manifests/0.5.0-rc.3.json +9 -0
  330. package/dist/migrations/manifests/0.5.0-rc.4.json +9 -0
  331. package/dist/migrations/manifests/0.5.0-rc.5.json +9 -0
  332. package/dist/migrations/manifests/0.5.0-rc.6.json +9 -0
  333. package/dist/migrations/manifests/0.5.0-rc.7.json +9 -0
  334. package/dist/migrations/manifests/0.5.0.json +9 -0
  335. package/dist/migrations/manifests/0.5.1.json +9 -0
  336. package/dist/migrations/manifests/0.5.10.json +9 -0
  337. package/dist/migrations/manifests/0.5.11.json +16 -0
  338. package/dist/migrations/manifests/0.5.12.json +9 -0
  339. package/dist/migrations/manifests/0.5.13.json +9 -0
  340. package/dist/migrations/manifests/0.5.14.json +9 -0
  341. package/dist/migrations/manifests/0.5.15.json +9 -0
  342. package/dist/migrations/manifests/0.5.2.json +9 -0
  343. package/dist/migrations/manifests/0.5.3.json +9 -0
  344. package/dist/migrations/manifests/0.5.4.json +9 -0
  345. package/dist/migrations/manifests/0.5.5.json +9 -0
  346. package/dist/migrations/manifests/0.5.6.json +9 -0
  347. package/dist/migrations/manifests/0.5.7.json +16 -0
  348. package/dist/migrations/manifests/0.5.8.json +9 -0
  349. package/dist/migrations/manifests/0.5.9.json +9 -0
  350. package/dist/migrations/manifests/0.6.0-beta.0.json +16 -0
  351. package/dist/migrations/manifests/0.6.0-beta.1.json +9 -0
  352. package/dist/migrations/manifests/0.6.0-beta.10.json +9 -0
  353. package/dist/migrations/manifests/0.6.0-beta.11.json +9 -0
  354. package/dist/migrations/manifests/0.6.0-beta.12.json +9 -0
  355. package/dist/migrations/manifests/0.6.0-beta.13.json +9 -0
  356. package/dist/migrations/manifests/0.6.0-beta.14.json +9 -0
  357. package/dist/migrations/manifests/0.6.0-beta.15.json +9 -0
  358. package/dist/migrations/manifests/0.6.0-beta.16.json +9 -0
  359. package/dist/migrations/manifests/0.6.0-beta.17.json +9 -0
  360. package/dist/migrations/manifests/0.6.0-beta.2.json +9 -0
  361. package/dist/migrations/manifests/0.6.0-beta.3.json +9 -0
  362. package/dist/migrations/manifests/0.6.0-beta.4.json +9 -0
  363. package/dist/migrations/manifests/0.6.0-beta.5.json +9 -0
  364. package/dist/migrations/manifests/0.6.0-beta.6.json +16 -0
  365. package/dist/migrations/manifests/0.6.0-beta.7.json +9 -0
  366. package/dist/migrations/manifests/0.6.0-beta.8.json +9 -0
  367. package/dist/migrations/manifests/0.6.0-beta.9.json +9 -0
  368. package/dist/templates/claude/agents/trellis-check.md +123 -0
  369. package/dist/templates/claude/agents/trellis-code-architecture-review.md +71 -0
  370. package/dist/templates/claude/agents/trellis-code-review.md +71 -0
  371. package/dist/templates/claude/agents/trellis-implement.md +118 -0
  372. package/dist/templates/claude/agents/trellis-merge-review.md +72 -0
  373. package/dist/templates/claude/agents/trellis-research.md +137 -0
  374. package/dist/templates/claude/agents/trellis-spec-review.md +71 -0
  375. package/dist/templates/claude/index.d.ts +22 -0
  376. package/dist/templates/claude/index.d.ts.map +1 -0
  377. package/dist/templates/claude/index.js +46 -0
  378. package/dist/templates/claude/index.js.map +1 -0
  379. package/dist/templates/claude/settings.json +73 -0
  380. package/dist/templates/codebuddy/agents/trellis-check.md +115 -0
  381. package/dist/templates/codebuddy/agents/trellis-implement.md +110 -0
  382. package/dist/templates/codebuddy/agents/trellis-research.md +137 -0
  383. package/dist/templates/codebuddy/index.d.ts +15 -0
  384. package/dist/templates/codebuddy/index.d.ts.map +1 -0
  385. package/dist/templates/codebuddy/index.js +15 -0
  386. package/dist/templates/codebuddy/index.js.map +1 -0
  387. package/dist/templates/codebuddy/settings.json +59 -0
  388. package/dist/templates/codex/agents/trellis-check.toml +84 -0
  389. package/dist/templates/codex/agents/trellis-implement.toml +65 -0
  390. package/dist/templates/codex/agents/trellis-research.toml +73 -0
  391. package/dist/templates/codex/config.toml +35 -0
  392. package/dist/templates/codex/hooks/session-start.py +545 -0
  393. package/dist/templates/codex/hooks.json +15 -0
  394. package/dist/templates/codex/index.d.ts +39 -0
  395. package/dist/templates/codex/index.d.ts.map +1 -0
  396. package/dist/templates/codex/index.js +85 -0
  397. package/dist/templates/codex/index.js.map +1 -0
  398. package/dist/templates/codex/skills/before-dev/SKILL.md +40 -0
  399. package/dist/templates/codex/skills/brainstorm/SKILL.md +112 -0
  400. package/dist/templates/codex/skills/break-loop/SKILL.md +130 -0
  401. package/dist/templates/codex/skills/check/SKILL.md +98 -0
  402. package/dist/templates/codex/skills/check-cross-layer/SKILL.md +158 -0
  403. package/dist/templates/codex/skills/create-command/SKILL.md +101 -0
  404. package/dist/templates/codex/skills/finish-work/SKILL.md +90 -0
  405. package/dist/templates/codex/skills/improve-ut/SKILL.md +69 -0
  406. package/dist/templates/codex/skills/integrate-skill/SKILL.md +221 -0
  407. package/dist/templates/codex/skills/onboard/SKILL.md +363 -0
  408. package/dist/templates/codex/skills/record-session/SKILL.md +67 -0
  409. package/dist/templates/codex/skills/start/SKILL.md +64 -0
  410. package/dist/templates/codex/skills/update-spec/SKILL.md +335 -0
  411. package/dist/templates/common/bundled-skills/trellis-meta/SKILL.md +73 -0
  412. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/add-project-local-conventions.md +83 -0
  413. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-agents.md +54 -0
  414. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-context-loading.md +84 -0
  415. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-hooks.md +57 -0
  416. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-skills-or-commands.md +78 -0
  417. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-spec-structure.md +83 -0
  418. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-task-lifecycle.md +90 -0
  419. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/change-workflow.md +65 -0
  420. package/dist/templates/common/bundled-skills/trellis-meta/references/customize-local/overview.md +55 -0
  421. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/context-injection.md +68 -0
  422. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/generated-files.md +80 -0
  423. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/overview.md +51 -0
  424. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/spec-system.md +102 -0
  425. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/task-system.md +130 -0
  426. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workflow.md +75 -0
  427. package/dist/templates/common/bundled-skills/trellis-meta/references/local-architecture/workspace-memory.md +71 -0
  428. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/agents.md +80 -0
  429. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/hooks-and-settings.md +69 -0
  430. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/overview.md +59 -0
  431. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/platform-map.md +74 -0
  432. package/dist/templates/common/bundled-skills/trellis-meta/references/platform-files/skills-and-commands.md +83 -0
  433. package/dist/templates/common/commands/continue.md +56 -0
  434. package/dist/templates/common/commands/finish-work.md +66 -0
  435. package/dist/templates/common/commands/start.md +59 -0
  436. package/dist/templates/common/index.d.ts +48 -0
  437. package/dist/templates/common/index.d.ts.map +1 -0
  438. package/dist/templates/common/index.js +104 -0
  439. package/dist/templates/common/index.js.map +1 -0
  440. package/dist/templates/common/skills/before-dev.md +41 -0
  441. package/dist/templates/common/skills/brainstorm.md +112 -0
  442. package/dist/templates/common/skills/break-loop.md +125 -0
  443. package/dist/templates/common/skills/check.md +93 -0
  444. package/dist/templates/common/skills/grill-me.md +49 -0
  445. package/dist/templates/common/skills/improve-codebase-architecture.md +38 -0
  446. package/dist/templates/common/skills/tdd.md +34 -0
  447. package/dist/templates/common/skills/update-spec.md +351 -0
  448. package/dist/templates/copilot/hooks/session-start.py +547 -0
  449. package/dist/templates/copilot/hooks.json +19 -0
  450. package/dist/templates/copilot/index.d.ts +23 -0
  451. package/dist/templates/copilot/index.d.ts.map +1 -0
  452. package/dist/templates/copilot/index.js +54 -0
  453. package/dist/templates/copilot/index.js.map +1 -0
  454. package/dist/templates/copilot/prompts/before-dev.prompt.md +39 -0
  455. package/dist/templates/copilot/prompts/brainstorm.prompt.md +111 -0
  456. package/dist/templates/copilot/prompts/break-loop.prompt.md +129 -0
  457. package/dist/templates/copilot/prompts/check-cross-layer.prompt.md +157 -0
  458. package/dist/templates/copilot/prompts/check.prompt.md +97 -0
  459. package/dist/templates/copilot/prompts/create-command.prompt.md +116 -0
  460. package/dist/templates/copilot/prompts/finish-work.prompt.md +99 -0
  461. package/dist/templates/copilot/prompts/integrate-skill.prompt.md +223 -0
  462. package/dist/templates/copilot/prompts/onboard.prompt.md +362 -0
  463. package/dist/templates/copilot/prompts/parallel.prompt.md +204 -0
  464. package/dist/templates/copilot/prompts/record-session.prompt.md +66 -0
  465. package/dist/templates/copilot/prompts/start.prompt.md +63 -0
  466. package/dist/templates/copilot/prompts/update-spec.prompt.md +358 -0
  467. package/dist/templates/cursor/agents/trellis-check.md +114 -0
  468. package/dist/templates/cursor/agents/trellis-implement.md +109 -0
  469. package/dist/templates/cursor/agents/trellis-research.md +136 -0
  470. package/dist/templates/cursor/hooks.json +24 -0
  471. package/dist/templates/cursor/index.d.ts +13 -0
  472. package/dist/templates/cursor/index.d.ts.map +1 -0
  473. package/dist/templates/cursor/index.js +13 -0
  474. package/dist/templates/cursor/index.js.map +1 -0
  475. package/dist/templates/droid/droids/trellis-check.md +107 -0
  476. package/dist/templates/droid/droids/trellis-implement.md +102 -0
  477. package/dist/templates/droid/droids/trellis-research.md +137 -0
  478. package/dist/templates/droid/index.d.ts +15 -0
  479. package/dist/templates/droid/index.d.ts.map +1 -0
  480. package/dist/templates/droid/index.js +15 -0
  481. package/dist/templates/droid/index.js.map +1 -0
  482. package/dist/templates/droid/settings.json +59 -0
  483. package/dist/templates/extract.d.ts +40 -0
  484. package/dist/templates/extract.d.ts.map +1 -0
  485. package/dist/templates/extract.js +106 -0
  486. package/dist/templates/extract.js.map +1 -0
  487. package/dist/templates/gemini/agents/trellis-check.md +107 -0
  488. package/dist/templates/gemini/agents/trellis-implement.md +102 -0
  489. package/dist/templates/gemini/agents/trellis-research.md +136 -0
  490. package/dist/templates/gemini/index.d.ts +13 -0
  491. package/dist/templates/gemini/index.d.ts.map +1 -0
  492. package/dist/templates/gemini/index.js +13 -0
  493. package/dist/templates/gemini/index.js.map +1 -0
  494. package/dist/templates/gemini/settings.json +28 -0
  495. package/dist/templates/kiro/agents/trellis-check.json +26 -0
  496. package/dist/templates/kiro/agents/trellis-implement.json +26 -0
  497. package/dist/templates/kiro/agents/trellis-research.json +30 -0
  498. package/dist/templates/kiro/index.d.ts +18 -0
  499. package/dist/templates/kiro/index.d.ts.map +1 -0
  500. package/dist/templates/kiro/index.js +18 -0
  501. package/dist/templates/kiro/index.js.map +1 -0
  502. package/dist/templates/markdown/agents.md +21 -0
  503. package/dist/templates/markdown/gitignore.txt +15 -0
  504. package/dist/templates/markdown/index.d.ts +27 -0
  505. package/dist/templates/markdown/index.d.ts.map +1 -0
  506. package/dist/templates/markdown/index.js +52 -0
  507. package/dist/templates/markdown/index.js.map +1 -0
  508. package/dist/templates/markdown/spec/backend/database-guidelines.md.txt +51 -0
  509. package/dist/templates/markdown/spec/backend/directory-structure.md.txt +54 -0
  510. package/dist/templates/markdown/spec/backend/error-handling.md.txt +51 -0
  511. package/dist/templates/markdown/spec/backend/index.md.txt +38 -0
  512. package/dist/templates/markdown/spec/backend/logging-guidelines.md.txt +51 -0
  513. package/dist/templates/markdown/spec/backend/quality-guidelines.md.txt +51 -0
  514. package/dist/templates/markdown/spec/frontend/component-guidelines.md.txt +59 -0
  515. package/dist/templates/markdown/spec/frontend/directory-structure.md.txt +54 -0
  516. package/dist/templates/markdown/spec/frontend/hook-guidelines.md.txt +51 -0
  517. package/dist/templates/markdown/spec/frontend/index.md.txt +39 -0
  518. package/dist/templates/markdown/spec/frontend/quality-guidelines.md.txt +51 -0
  519. package/dist/templates/markdown/spec/frontend/state-management.md.txt +51 -0
  520. package/dist/templates/markdown/spec/frontend/type-safety.md.txt +51 -0
  521. package/dist/templates/markdown/spec/guides/code-reuse-thinking-guide.md.txt +223 -0
  522. package/dist/templates/markdown/spec/guides/cross-layer-thinking-guide.md.txt +259 -0
  523. package/dist/templates/markdown/spec/guides/cross-platform-thinking-guide.md.txt +595 -0
  524. package/dist/templates/markdown/spec/guides/index.md.txt +97 -0
  525. package/dist/templates/markdown/workspace-index.md +125 -0
  526. package/dist/templates/markdown/worktree.yaml.txt +58 -0
  527. package/dist/templates/opencode/agents/trellis-check.md +122 -0
  528. package/dist/templates/opencode/agents/trellis-implement.md +118 -0
  529. package/dist/templates/opencode/agents/trellis-research.md +145 -0
  530. package/dist/templates/opencode/lib/session-utils.js +521 -0
  531. package/dist/templates/opencode/lib/trellis-context.js +381 -0
  532. package/dist/templates/opencode/package.json +5 -0
  533. package/dist/templates/opencode/plugins/inject-subagent-context.js +513 -0
  534. package/dist/templates/opencode/plugins/inject-workflow-state.js +159 -0
  535. package/dist/templates/opencode/plugins/session-start.js +101 -0
  536. package/dist/templates/pi/agents/trellis-check.md +37 -0
  537. package/dist/templates/pi/agents/trellis-implement.md +42 -0
  538. package/dist/templates/pi/agents/trellis-research.md +25 -0
  539. package/dist/templates/pi/extensions/trellis/index.ts.txt +1174 -0
  540. package/dist/templates/pi/index.d.ts +5 -0
  541. package/dist/templates/pi/index.d.ts.map +1 -0
  542. package/dist/templates/pi/index.js +12 -0
  543. package/dist/templates/pi/index.js.map +1 -0
  544. package/dist/templates/pi/settings.json +21 -0
  545. package/dist/templates/qoder/agents/trellis-check.md +108 -0
  546. package/dist/templates/qoder/agents/trellis-implement.md +103 -0
  547. package/dist/templates/qoder/agents/trellis-research.md +137 -0
  548. package/dist/templates/qoder/index.d.ts +15 -0
  549. package/dist/templates/qoder/index.d.ts.map +1 -0
  550. package/dist/templates/qoder/index.js +15 -0
  551. package/dist/templates/qoder/index.js.map +1 -0
  552. package/dist/templates/qoder/settings.json +47 -0
  553. package/dist/templates/shared-hooks/index.d.ts +50 -0
  554. package/dist/templates/shared-hooks/index.d.ts.map +1 -0
  555. package/dist/templates/shared-hooks/index.js +88 -0
  556. package/dist/templates/shared-hooks/index.js.map +1 -0
  557. package/dist/templates/shared-hooks/inject-shell-session-context.py +183 -0
  558. package/dist/templates/shared-hooks/inject-subagent-context.py +771 -0
  559. package/dist/templates/shared-hooks/inject-workflow-state.py +363 -0
  560. package/dist/templates/shared-hooks/session-start.py +832 -0
  561. package/dist/templates/template-utils.d.ts +26 -0
  562. package/dist/templates/template-utils.d.ts.map +1 -0
  563. package/dist/templates/template-utils.js +60 -0
  564. package/dist/templates/template-utils.js.map +1 -0
  565. package/dist/templates/trellis/config.yaml +90 -0
  566. package/dist/templates/trellis/gitignore.txt +32 -0
  567. package/dist/templates/trellis/index.d.ts +52 -0
  568. package/dist/templates/trellis/index.d.ts.map +1 -0
  569. package/dist/templates/trellis/index.js +97 -0
  570. package/dist/templates/trellis/index.js.map +1 -0
  571. package/dist/templates/trellis/scripts/__init__.py +5 -0
  572. package/dist/templates/trellis/scripts/add_session.py +547 -0
  573. package/dist/templates/trellis/scripts/common/__init__.py +92 -0
  574. package/dist/templates/trellis/scripts/common/active_task.py +626 -0
  575. package/dist/templates/trellis/scripts/common/cli_adapter.py +811 -0
  576. package/dist/templates/trellis/scripts/common/config.py +445 -0
  577. package/dist/templates/trellis/scripts/common/developer.py +190 -0
  578. package/dist/templates/trellis/scripts/common/git.py +31 -0
  579. package/dist/templates/trellis/scripts/common/git_context.py +106 -0
  580. package/dist/templates/trellis/scripts/common/io.py +37 -0
  581. package/dist/templates/trellis/scripts/common/log.py +45 -0
  582. package/dist/templates/trellis/scripts/common/packages_context.py +238 -0
  583. package/dist/templates/trellis/scripts/common/paths.py +447 -0
  584. package/dist/templates/trellis/scripts/common/safe_commit.py +285 -0
  585. package/dist/templates/trellis/scripts/common/session_context.py +821 -0
  586. package/dist/templates/trellis/scripts/common/task_context.py +223 -0
  587. package/dist/templates/trellis/scripts/common/task_queue.py +188 -0
  588. package/dist/templates/trellis/scripts/common/task_store.py +698 -0
  589. package/dist/templates/trellis/scripts/common/task_utils.py +274 -0
  590. package/dist/templates/trellis/scripts/common/tasks.py +112 -0
  591. package/dist/templates/trellis/scripts/common/trellis_config.py +131 -0
  592. package/dist/templates/trellis/scripts/common/types.py +110 -0
  593. package/dist/templates/trellis/scripts/common/workflow_phase.py +212 -0
  594. package/dist/templates/trellis/scripts/get_context.py +16 -0
  595. package/dist/templates/trellis/scripts/get_developer.py +26 -0
  596. package/dist/templates/trellis/scripts/hooks/linear_sync.py +243 -0
  597. package/dist/templates/trellis/scripts/init_developer.py +51 -0
  598. package/dist/templates/trellis/scripts/task.py +500 -0
  599. package/dist/templates/trellis/tasks/.gitkeep +0 -0
  600. package/dist/templates/trellis/workflow.md +750 -0
  601. package/dist/types/ai-tools.d.ts +95 -0
  602. package/dist/types/ai-tools.d.ts.map +1 -0
  603. package/dist/types/ai-tools.js +280 -0
  604. package/dist/types/ai-tools.js.map +1 -0
  605. package/dist/types/migration.d.ts +125 -0
  606. package/dist/types/migration.d.ts.map +1 -0
  607. package/dist/types/migration.js +8 -0
  608. package/dist/types/migration.js.map +1 -0
  609. package/dist/utils/compare-versions.d.ts +12 -0
  610. package/dist/utils/compare-versions.d.ts.map +1 -0
  611. package/dist/utils/compare-versions.js +86 -0
  612. package/dist/utils/compare-versions.js.map +1 -0
  613. package/dist/utils/cwd-guard.d.ts +38 -0
  614. package/dist/utils/cwd-guard.d.ts.map +1 -0
  615. package/dist/utils/cwd-guard.js +62 -0
  616. package/dist/utils/cwd-guard.js.map +1 -0
  617. package/dist/utils/file-writer.d.ts +36 -0
  618. package/dist/utils/file-writer.d.ts.map +1 -0
  619. package/dist/utils/file-writer.js +203 -0
  620. package/dist/utils/file-writer.js.map +1 -0
  621. package/dist/utils/manifest-prune.d.ts +61 -0
  622. package/dist/utils/manifest-prune.d.ts.map +1 -0
  623. package/dist/utils/manifest-prune.js +136 -0
  624. package/dist/utils/manifest-prune.js.map +1 -0
  625. package/dist/utils/posix.d.ts +13 -0
  626. package/dist/utils/posix.d.ts.map +1 -0
  627. package/dist/utils/posix.js +15 -0
  628. package/dist/utils/posix.js.map +1 -0
  629. package/dist/utils/project-detector.d.ts +46 -0
  630. package/dist/utils/project-detector.d.ts.map +1 -0
  631. package/dist/utils/project-detector.js +666 -0
  632. package/dist/utils/project-detector.js.map +1 -0
  633. package/dist/utils/proxy.d.ts +25 -0
  634. package/dist/utils/proxy.d.ts.map +1 -0
  635. package/dist/utils/proxy.js +60 -0
  636. package/dist/utils/proxy.js.map +1 -0
  637. package/dist/utils/task-json.d.ts +13 -0
  638. package/dist/utils/task-json.d.ts.map +1 -0
  639. package/dist/utils/task-json.js +12 -0
  640. package/dist/utils/task-json.js.map +1 -0
  641. package/dist/utils/template-fetcher.d.ts +150 -0
  642. package/dist/utils/template-fetcher.d.ts.map +1 -0
  643. package/dist/utils/template-fetcher.js +907 -0
  644. package/dist/utils/template-fetcher.js.map +1 -0
  645. package/dist/utils/template-hash.d.ts +123 -0
  646. package/dist/utils/template-hash.d.ts.map +1 -0
  647. package/dist/utils/template-hash.js +334 -0
  648. package/dist/utils/template-hash.js.map +1 -0
  649. package/dist/utils/uninstall-scrubbers.d.ts +66 -0
  650. package/dist/utils/uninstall-scrubbers.d.ts.map +1 -0
  651. package/dist/utils/uninstall-scrubbers.js +342 -0
  652. package/dist/utils/uninstall-scrubbers.js.map +1 -0
  653. package/dist/utils/workflow-resolver.d.ts +86 -0
  654. package/dist/utils/workflow-resolver.d.ts.map +1 -0
  655. package/dist/utils/workflow-resolver.js +265 -0
  656. package/dist/utils/workflow-resolver.js.map +1 -0
  657. package/package.json +90 -0
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Inbox watcher: tails events.jsonl for `kind:message` events addressed
3
+ * to this worker and forwards them into the worker's stdin via the
4
+ * adapter's `encodeUserMessage`. A persisted cursor file keeps respawns
5
+ * from replaying messages the previous supervisor already delivered.
6
+ *
7
+ * Step 3 of the supervisor refactor: pulled out of supervisor.ts so the
8
+ * orchestrator only needs to call `runInboxWatcher(...)`. Cursor
9
+ * read/write helpers stay private to this module.
10
+ */
11
+ import fs from "node:fs";
12
+ import { DEFAULT_INBOX_POLICY, matchesInboxPolicy, } from "trellis-he-core/channel";
13
+ import { appendEvent } from "../store/events.js";
14
+ import { workerFile } from "../store/paths.js";
15
+ import { watchEvents } from "../store/watch.js";
16
+ export async function runInboxWatcher(args) {
17
+ const { channelName, workerName, adapter, ctx, child, signal } = args;
18
+ const inboxPolicy = args.inboxPolicy ?? DEFAULT_INBOX_POLICY;
19
+ // Resume from persisted cursor: first-time spawn → 0 (read full backlog);
20
+ // respawn after kill → last forwarded seq (no replay).
21
+ let cursor = readInboxCursor(channelName, workerName);
22
+ for await (const ev of watchEvents(channelName, {
23
+ self: workerName, // ignore our own events
24
+ to: workerName, // explicit-to-other is filtered here; broadcasts pass
25
+ kind: "message",
26
+ },
27
+ // First run with cursor=0 reads backlog from start; subsequent runs
28
+ // use sinceSeq to skip already-processed events. Both cases tail
29
+ // future events normally.
30
+ { signal, sinceSeq: cursor, fromStart: cursor === 0 ? true : undefined })) {
31
+ if (signal.aborted)
32
+ return;
33
+ // Core decides delivery from the worker's inbox policy: explicitOnly
34
+ // (default) consumes only targeted messages; broadcastAndExplicit
35
+ // also consumes broadcasts.
36
+ if (!matchesInboxPolicy(ev, workerName, inboxPolicy))
37
+ continue;
38
+ const text = (ev.text ?? "").trim();
39
+ if (!text)
40
+ continue;
41
+ const tag = ev.tag;
42
+ // Block until the adapter says it can accept input (e.g. codex
43
+ // thread/start has produced a threadId). Drop the message if we
44
+ // never get ready before being aborted.
45
+ if (!adapter.isReady(ctx)) {
46
+ const deadline = Date.now() + 60_000;
47
+ while (!adapter.isReady(ctx) &&
48
+ Date.now() < deadline &&
49
+ !signal.aborted) {
50
+ await sleep(25);
51
+ }
52
+ if (!adapter.isReady(ctx)) {
53
+ // never became ready; advance the cursor anyway so we don't
54
+ // re-attempt this exact event on next start.
55
+ cursor = ev.seq;
56
+ writeInboxCursor(channelName, workerName, cursor);
57
+ continue;
58
+ }
59
+ }
60
+ if (tag !== "interrupt") {
61
+ await waitForActiveTurnToFinish(args.turnTracker, signal);
62
+ if (signal.aborted)
63
+ return;
64
+ }
65
+ if (tag === "interrupt") {
66
+ await appendEvent(channelName, {
67
+ kind: "interrupt_requested",
68
+ by: ev.by,
69
+ worker: workerName,
70
+ reason: "user",
71
+ message: text,
72
+ });
73
+ const aborted = args.turnTracker?.abortCurrent();
74
+ if (aborted) {
75
+ await appendEvent(channelName, {
76
+ kind: "turn_finished",
77
+ by: workerName,
78
+ worker: workerName,
79
+ inputSeq: aborted.inputSeq,
80
+ turnId: aborted.turnId,
81
+ outcome: "aborted",
82
+ });
83
+ }
84
+ await appendEvent(channelName, {
85
+ kind: "interrupted",
86
+ by: workerName,
87
+ worker: workerName,
88
+ ...(aborted?.turnId ? { turnId: aborted.turnId } : {}),
89
+ reason: "user",
90
+ method: "stdin",
91
+ outcome: aborted ? "interrupted" : "no-active-turn",
92
+ });
93
+ }
94
+ let turn = args.turnTracker?.begin(ev.seq);
95
+ try {
96
+ if (turn) {
97
+ await appendEvent(channelName, {
98
+ kind: "turn_started",
99
+ by: workerName,
100
+ worker: workerName,
101
+ inputSeq: ev.seq,
102
+ turnId: turn.turnId,
103
+ });
104
+ }
105
+ child.stdin.write(adapter.encodeUserMessage(text, tag, ctx));
106
+ cursor = ev.seq;
107
+ writeInboxCursor(channelName, workerName, cursor);
108
+ }
109
+ catch {
110
+ if (turn) {
111
+ args.turnTracker?.finish();
112
+ await appendEvent(channelName, {
113
+ kind: "turn_finished",
114
+ by: workerName,
115
+ worker: workerName,
116
+ inputSeq: turn.inputSeq,
117
+ turnId: turn.turnId,
118
+ outcome: "aborted",
119
+ }).catch(() => undefined);
120
+ turn = undefined;
121
+ }
122
+ // stdin closed, worker exiting — bail out
123
+ return;
124
+ }
125
+ }
126
+ }
127
+ /**
128
+ * Per-worker inbox consumption cursor. Persisted to
129
+ * `<worker>.inbox-cursor` so a respawn (same worker name) doesn't replay
130
+ * messages that the previous supervisor already forwarded into the worker
131
+ * process. The cursor is the highest seq we've already turned into a
132
+ * worker stdin write.
133
+ */
134
+ function readInboxCursor(channelName, workerName) {
135
+ try {
136
+ const raw = fs.readFileSync(workerFile(channelName, workerName, "inbox-cursor"), "utf-8");
137
+ const n = Number(raw.trim());
138
+ return Number.isFinite(n) && n > 0 ? n : 0;
139
+ }
140
+ catch {
141
+ return 0;
142
+ }
143
+ }
144
+ function writeInboxCursor(channelName, workerName, seq) {
145
+ try {
146
+ fs.writeFileSync(workerFile(channelName, workerName, "inbox-cursor"), String(seq), "utf-8");
147
+ }
148
+ catch {
149
+ // ignore — cursor is best-effort; worst case we replay a message
150
+ }
151
+ }
152
+ function sleep(ms) {
153
+ return new Promise((r) => setTimeout(r, ms));
154
+ }
155
+ async function waitForActiveTurnToFinish(turnTracker, signal) {
156
+ while (turnTracker?.current() && !signal.aborted) {
157
+ await sleep(25);
158
+ }
159
+ }
160
+ //# sourceMappingURL=inbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/inbox.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * ShutdownController — the single funnel for every "this worker is going
3
+ * away" trigger (explicit kill, timeout, post-spawn crash, signal, child
4
+ * exit). It owns:
5
+ *
6
+ * - the `shutdownReason` flag (idempotent — first call wins)
7
+ * - the SIGTERM → grace → SIGKILL ladder
8
+ * - the trailing `killed` event append
9
+ * - a `terminalEmitted` flag tracking adapter-emitted done/error
10
+ * - `finalizeOnExit` — synthesises a fallback `done`/`error` when the
11
+ * worker exited without the adapter sending one (otherwise
12
+ * `wait --kind done` would hang forever)
13
+ * - `awaitFinalize` — lets `child.on("exit")` block process.exit until
14
+ * any in-progress killed-append from a concurrent shutdown completes
15
+ *
16
+ * Step 2 of the supervisor refactor: this absorbs the 5 reviewer issues
17
+ * (codex #1 crashed-without-done, #2 fire-and-forget shutdown, #3 spawn
18
+ * after shutdown requested, #4 handshake error detail; claude M2 post-
19
+ * spawn error ordering, L1 pre-spawn double-fire guard) into a single
20
+ * state machine. The supervisor.ts orchestrator stays mostly mechanical.
21
+ */
22
+ import type { ChildProcessByStdio } from "node:child_process";
23
+ import type { Readable, Writable } from "node:stream";
24
+ type Child = ChildProcessByStdio<Writable, Readable, Readable>;
25
+ export type ShutdownReason = "explicit-kill" | "timeout" | "crash";
26
+ export interface ShutdownController {
27
+ /** Idempotent: only the first call wins. Returns the killed-append
28
+ * promise so callers can await ordering if they need to. */
29
+ request(signal: NodeJS.Signals, reason: ShutdownReason): Promise<void>;
30
+ /** Synchronously mark shutdown intent without starting the kill
31
+ * ladder or appending `killed`. Use when other code must see
32
+ * `isShuttingDown=true` BEFORE the caller proceeds to any await
33
+ * (e.g. post-spawn error handler that needs to `await appendEvent`
34
+ * first, but doesn't want the main flow to keep writing `spawned`).
35
+ * Returns true if this call claimed the flag, false if already set. */
36
+ claim(reason: ShutdownReason): boolean;
37
+ isShuttingDown(): boolean;
38
+ reason(): ShutdownReason | null;
39
+ /** Mark that the adapter has produced a `done` or `error` event, so
40
+ * `finalizeOnExit` won't synthesise a fallback. */
41
+ markTerminalEmitted(): void;
42
+ hasTerminalEvent(): boolean;
43
+ /** Call from `child.on("exit")` — synthesises a fallback terminal
44
+ * event if the adapter never produced one, then awaits any pending
45
+ * `request()` so `killed` lands before the supervisor exits. */
46
+ finalizeOnExit(code: number | null, signal: NodeJS.Signals | null): Promise<void>;
47
+ /** Promise that resolves when the current (or last) `request()` has
48
+ * finished writing its `killed` event. No-op when never requested. */
49
+ awaitFinalize(): Promise<void>;
50
+ }
51
+ export interface CreateShutdownArgs {
52
+ channelName: string;
53
+ workerName: string;
54
+ log: {
55
+ write: (data: string) => void;
56
+ };
57
+ /** Lazy child getter — the controller is created before `spawn()`
58
+ * returns, so we read the child handle at shutdown time. */
59
+ getChild: () => Child;
60
+ graceMs: number;
61
+ /** Recorded on the `killed` event for the timeout reason. */
62
+ timeoutMs?: number;
63
+ }
64
+ export declare function createShutdown(args: CreateShutdownArgs): ShutdownController;
65
+ export {};
66
+ //# sourceMappingURL=shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAItD,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,MAAM,cAAc,GAAG,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,MAAM,WAAW,kBAAkB;IACjC;iEAC6D;IAC7D,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE;;;;;4EAKwE;IACxE,KAAK,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC;IACvC,cAAc,IAAI,OAAO,CAAC;IAC1B,MAAM,IAAI,cAAc,GAAG,IAAI,CAAC;IAEhC;wDACoD;IACpD,mBAAmB,IAAI,IAAI,CAAC;IAC5B,gBAAgB,IAAI,OAAO,CAAC;IAE5B;;qEAEiE;IACjE,cAAc,CACZ,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,GAC5B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;2EACuE;IACvE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACvC;iEAC6D;IAC7D,QAAQ,EAAE,MAAM,KAAK,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAuI3E"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * ShutdownController — the single funnel for every "this worker is going
3
+ * away" trigger (explicit kill, timeout, post-spawn crash, signal, child
4
+ * exit). It owns:
5
+ *
6
+ * - the `shutdownReason` flag (idempotent — first call wins)
7
+ * - the SIGTERM → grace → SIGKILL ladder
8
+ * - the trailing `killed` event append
9
+ * - a `terminalEmitted` flag tracking adapter-emitted done/error
10
+ * - `finalizeOnExit` — synthesises a fallback `done`/`error` when the
11
+ * worker exited without the adapter sending one (otherwise
12
+ * `wait --kind done` would hang forever)
13
+ * - `awaitFinalize` — lets `child.on("exit")` block process.exit until
14
+ * any in-progress killed-append from a concurrent shutdown completes
15
+ *
16
+ * Step 2 of the supervisor refactor: this absorbs the 5 reviewer issues
17
+ * (codex #1 crashed-without-done, #2 fire-and-forget shutdown, #3 spawn
18
+ * after shutdown requested, #4 handshake error detail; claude M2 post-
19
+ * spawn error ordering, L1 pre-spawn double-fire guard) into a single
20
+ * state machine. The supervisor.ts orchestrator stays mostly mechanical.
21
+ */
22
+ import { appendEvent } from "../store/events.js";
23
+ export function createShutdown(args) {
24
+ const { channelName, workerName, log, getChild, graceMs, timeoutMs } = args;
25
+ let shutdownReason = null;
26
+ let requestSignal = null;
27
+ let terminalEmitted = false;
28
+ let killedPromise = null;
29
+ const childStillRunning = (child) => child.exitCode === null && child.signalCode === null;
30
+ const startKillLadder = (child) => {
31
+ try {
32
+ child.stdin.end();
33
+ }
34
+ catch {
35
+ // already closed
36
+ }
37
+ setTimeout(() => {
38
+ if (childStillRunning(child)) {
39
+ log.write(`[supervisor] grace expired, SIGTERM worker\n`);
40
+ try {
41
+ child.kill("SIGTERM");
42
+ }
43
+ catch {
44
+ // already dead
45
+ }
46
+ setTimeout(() => {
47
+ if (childStillRunning(child)) {
48
+ log.write(`[supervisor] still alive, SIGKILL worker\n`);
49
+ try {
50
+ child.kill("SIGKILL");
51
+ }
52
+ catch {
53
+ // already dead
54
+ }
55
+ }
56
+ }, graceMs);
57
+ }
58
+ }, graceMs);
59
+ };
60
+ const writeKilled = async (reason, signal) => {
61
+ await appendEvent(channelName, {
62
+ kind: "killed",
63
+ by: `supervisor:${workerName}`,
64
+ reason,
65
+ signal,
66
+ ...(reason === "timeout" && timeoutMs ? { timeout_ms: timeoutMs } : {}),
67
+ });
68
+ };
69
+ const claim = (reason) => {
70
+ if (shutdownReason)
71
+ return false;
72
+ shutdownReason = reason;
73
+ return true;
74
+ };
75
+ const request = async (signal, reason) => {
76
+ // The kill ladder + killed-append are one-shot; whether we got here
77
+ // via `claim()` + `request()` (post-spawn error) or a single
78
+ // `request()` (signal / timeout), only run them once.
79
+ if (killedPromise) {
80
+ await killedPromise.catch(() => undefined);
81
+ return;
82
+ }
83
+ shutdownReason ??= reason;
84
+ requestSignal ??= signal;
85
+ log.write(`[supervisor] shutting down worker (reason=${shutdownReason}, signal=${requestSignal})\n`);
86
+ startKillLadder(getChild());
87
+ killedPromise = writeKilled(shutdownReason, requestSignal);
88
+ await killedPromise;
89
+ };
90
+ const finalizeOnExit = async (code, signal) => {
91
+ log.write(`[supervisor] worker exit code=${code ?? "null"} signal=${signal ?? "null"}\n`);
92
+ // #1 fix: synthesise a terminal event so consumers blocked on
93
+ // `wait --kind done` don't hang when the adapter never produced
94
+ // one. Only applies to COLD exits (no explicit shutdown requested);
95
+ // when shutdown was requested the `killed` event already serves as
96
+ // the terminal signal and a synthesised error would just duplicate.
97
+ //
98
+ // The flag is claimed SYNCHRONOUSLY before the await so two
99
+ // concurrent `finalizeOnExit` calls (or `applyParseResult` racing
100
+ // with `child.on("exit")`) can't both pass the guard and emit
101
+ // duplicate synthetic events. `by` is the worker name (not
102
+ // `supervisor:<name>`) so `wait --from <worker> --kind done` wakes
103
+ // for the synthesised event same as for an adapter-emitted one.
104
+ if (!terminalEmitted && shutdownReason === null) {
105
+ terminalEmitted = true;
106
+ if (code === 0) {
107
+ await appendEvent(channelName, {
108
+ kind: "done",
109
+ by: workerName,
110
+ synthesized: true,
111
+ exit_code: code,
112
+ });
113
+ }
114
+ else {
115
+ await appendEvent(channelName, {
116
+ kind: "error",
117
+ by: workerName,
118
+ message: `worker exited without terminal event (code=${code ?? "null"}, signal=${signal ?? "null"})`,
119
+ synthesized: true,
120
+ exit_code: code,
121
+ exit_signal: signal,
122
+ });
123
+ }
124
+ }
125
+ // #2 fix: wait for any in-progress `killed` append from a concurrent
126
+ // shutdown request so it lands before the supervisor exits.
127
+ if (killedPromise)
128
+ await killedPromise.catch(() => undefined);
129
+ };
130
+ return {
131
+ request,
132
+ claim,
133
+ isShuttingDown: () => shutdownReason !== null,
134
+ reason: () => shutdownReason,
135
+ markTerminalEmitted: () => {
136
+ terminalEmitted = true;
137
+ },
138
+ hasTerminalEvent: () => terminalEmitted,
139
+ finalizeOnExit,
140
+ awaitFinalize: () => killedPromise ?? Promise.resolve(),
141
+ };
142
+ }
143
+ //# sourceMappingURL=shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/shutdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * stdout pipeline: line-buffered reader → adapter.parseLine → append
3
+ * events into events.jsonl + persist session/thread IDs + write any
4
+ * adapter `reply` back to the worker's stdin.
5
+ *
6
+ * Step 3 of the supervisor refactor: pulled out of supervisor.ts so the
7
+ * orchestrator stays thin. The pump itself is pure (no fs / process), so
8
+ * unit testing the line-splitting logic is straightforward once we want
9
+ * to. `applyParseResult` still touches fs for session-id persistence —
10
+ * that's intentional, it's the only place that needs to.
11
+ */
12
+ import type { ChildProcessByStdio } from "node:child_process";
13
+ import type { Readable, Writable } from "node:stream";
14
+ import type { WorkerAdapter } from "../adapters/index.js";
15
+ import type { ParseResult } from "../adapters/types.js";
16
+ import type { ShutdownController } from "./shutdown.js";
17
+ import type { TurnTracker } from "./turns.js";
18
+ type Child = ChildProcessByStdio<Writable, Readable, Readable>;
19
+ /**
20
+ * Line-buffered stdout pump. Yields each non-empty line to `onLine` as
21
+ * soon as a newline arrives, wraps the handler in a `.catch` so a thrown
22
+ * await doesn't escape as `unhandledRejection`, and reports the failure
23
+ * through `onError` for observability.
24
+ */
25
+ export declare function pumpStdout(stream: Readable, onLine: (line: string) => Promise<void> | void, onError?: (err: Error) => void): void;
26
+ /**
27
+ * Translate an adapter `ParseResult` into channel events + adapter-level
28
+ * side-effects (session-id persistence, stdin writes). Also tells the
29
+ * shutdown controller when the adapter emits a `done`/`error` so the
30
+ * fallback synthesiser in `finalizeOnExit` doesn't duplicate.
31
+ */
32
+ export declare function applyParseResult(channelName: string, workerName: string, result: ParseResult, child: Child, shutdown: ShutdownController, turnTracker?: TurnTracker): Promise<void>;
33
+ /**
34
+ * Convenience wrapper: wire `pumpStdout` to `applyParseResult` with
35
+ * standard error-event-on-failure handling. The orchestrator just calls
36
+ * this and forgets about line buffering / parse plumbing.
37
+ */
38
+ export declare function startStdoutPump(args: {
39
+ channelName: string;
40
+ workerName: string;
41
+ child: Child;
42
+ adapter: WorkerAdapter;
43
+ adapterCtx: unknown;
44
+ log: {
45
+ write: (data: string) => void;
46
+ };
47
+ shutdown: ShutdownController;
48
+ turnTracker?: TurnTracker;
49
+ }): void;
50
+ export {};
51
+ //# sourceMappingURL=stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/stdout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,YAAY,CAAC;AAE3D,KAAK,KAAK,GAAG,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAE/D;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAC7B,IAAI,CAuBN;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,kBAAkB,EAC5B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACvC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,GAAG,IAAI,CAkCP"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * stdout pipeline: line-buffered reader → adapter.parseLine → append
3
+ * events into events.jsonl + persist session/thread IDs + write any
4
+ * adapter `reply` back to the worker's stdin.
5
+ *
6
+ * Step 3 of the supervisor refactor: pulled out of supervisor.ts so the
7
+ * orchestrator stays thin. The pump itself is pure (no fs / process), so
8
+ * unit testing the line-splitting logic is straightforward once we want
9
+ * to. `applyParseResult` still touches fs for session-id persistence —
10
+ * that's intentional, it's the only place that needs to.
11
+ */
12
+ import fs from "node:fs";
13
+ import { appendEvent } from "../store/events.js";
14
+ import { workerFile } from "../store/paths.js";
15
+ /**
16
+ * Line-buffered stdout pump. Yields each non-empty line to `onLine` as
17
+ * soon as a newline arrives, wraps the handler in a `.catch` so a thrown
18
+ * await doesn't escape as `unhandledRejection`, and reports the failure
19
+ * through `onError` for observability.
20
+ */
21
+ export function pumpStdout(stream, onLine, onError) {
22
+ let buf = "";
23
+ stream.on("data", (chunk) => {
24
+ buf += chunk.toString("utf-8");
25
+ let nl;
26
+ while ((nl = buf.indexOf("\n")) !== -1) {
27
+ const line = buf.slice(0, nl);
28
+ buf = buf.slice(nl + 1);
29
+ if (line.trim()) {
30
+ Promise.resolve()
31
+ .then(() => onLine(line))
32
+ .catch((err) => {
33
+ if (onError) {
34
+ try {
35
+ onError(err instanceof Error ? err : new Error(String(err)));
36
+ }
37
+ catch {
38
+ // swallow handler-of-handler errors
39
+ }
40
+ }
41
+ });
42
+ }
43
+ }
44
+ });
45
+ }
46
+ /**
47
+ * Translate an adapter `ParseResult` into channel events + adapter-level
48
+ * side-effects (session-id persistence, stdin writes). Also tells the
49
+ * shutdown controller when the adapter emits a `done`/`error` so the
50
+ * fallback synthesiser in `finalizeOnExit` doesn't duplicate.
51
+ */
52
+ export async function applyParseResult(channelName, workerName, result, child, shutdown, turnTracker) {
53
+ for (const ev of result.events) {
54
+ // Claim the terminal slot SYNCHRONOUSLY before the await so a
55
+ // racing `child.on("exit") → finalizeOnExit` can't see
56
+ // `terminalEmitted=false` and synthesise a duplicate fallback while
57
+ // we're in the middle of writing the real terminal event.
58
+ if (ev.kind === "done" || ev.kind === "error") {
59
+ shutdown.markTerminalEmitted();
60
+ }
61
+ await appendEvent(channelName, {
62
+ kind: ev.kind,
63
+ by: workerName,
64
+ ...(ev.payload ?? {}),
65
+ });
66
+ if (ev.kind === "done" || ev.kind === "error") {
67
+ const turn = turnTracker?.finish();
68
+ if (turn) {
69
+ const outcome = ev.kind === "done" ? "done" : "error";
70
+ await appendEvent(channelName, {
71
+ kind: "turn_finished",
72
+ by: workerName,
73
+ worker: workerName,
74
+ inputSeq: turn.inputSeq,
75
+ turnId: turn.turnId,
76
+ outcome,
77
+ });
78
+ }
79
+ }
80
+ }
81
+ if (result.side) {
82
+ const { reply, persistSessionId, persistThreadId } = result.side;
83
+ if (persistSessionId) {
84
+ fs.writeFileSync(workerFile(channelName, workerName, "session-id"), persistSessionId);
85
+ }
86
+ if (persistThreadId) {
87
+ fs.writeFileSync(workerFile(channelName, workerName, "thread-id"), persistThreadId);
88
+ }
89
+ if (reply) {
90
+ for (const r of reply) {
91
+ try {
92
+ child.stdin.write(r);
93
+ }
94
+ catch {
95
+ // worker stdin closed — supervisor will exit soon
96
+ }
97
+ }
98
+ }
99
+ }
100
+ }
101
+ /**
102
+ * Convenience wrapper: wire `pumpStdout` to `applyParseResult` with
103
+ * standard error-event-on-failure handling. The orchestrator just calls
104
+ * this and forgets about line buffering / parse plumbing.
105
+ */
106
+ export function startStdoutPump(args) {
107
+ const { channelName, workerName, child, adapter, adapterCtx, log, shutdown, turnTracker, } = args;
108
+ pumpStdout(child.stdout, async (line) => {
109
+ log.write(line + "\n");
110
+ const result = adapter.parseLine(line, adapterCtx);
111
+ await applyParseResult(channelName, workerName, result, child, shutdown, turnTracker);
112
+ }, (err) => {
113
+ log.write(`[supervisor] stdout line handler failed: ${err.message}\n`);
114
+ void appendEvent(channelName, {
115
+ kind: "error",
116
+ by: `supervisor:${workerName}`,
117
+ message: `stdout pipeline error: ${err.message}`,
118
+ }).catch(() => undefined);
119
+ });
120
+ }
121
+ //# sourceMappingURL=stdout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/stdout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface ActiveTurn {
2
+ inputSeq: number;
3
+ turnId: string;
4
+ }
5
+ export type TurnOutcome = "done" | "error" | "aborted";
6
+ /**
7
+ * Host-local turn tracker for one supervisor process.
8
+ *
9
+ * The durable SOT is events.jsonl. This object only remembers the input
10
+ * message seq long enough for the inbox watcher and stdout pump to emit
11
+ * matching `turn_started` / `turn_finished` events.
12
+ */
13
+ export declare class TurnTracker {
14
+ #private;
15
+ begin(inputSeq: number): ActiveTurn;
16
+ finish(): ActiveTurn | undefined;
17
+ abortCurrent(): ActiveTurn | undefined;
18
+ current(): ActiveTurn | undefined;
19
+ }
20
+ //# sourceMappingURL=turns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.d.ts","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD;;;;;;GAMG;AACH,qBAAa,WAAW;;IAGtB,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IASnC,MAAM,IAAI,UAAU,GAAG,SAAS;IAIhC,YAAY,IAAI,UAAU,GAAG,SAAS;IAItC,OAAO,IAAI,UAAU,GAAG,SAAS;CAGlC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Host-local turn tracker for one supervisor process.
3
+ *
4
+ * The durable SOT is events.jsonl. This object only remembers the input
5
+ * message seq long enough for the inbox watcher and stdout pump to emit
6
+ * matching `turn_started` / `turn_finished` events.
7
+ */
8
+ export class TurnTracker {
9
+ #turns = [];
10
+ begin(inputSeq) {
11
+ const turn = {
12
+ inputSeq,
13
+ turnId: `msg:${inputSeq}`,
14
+ };
15
+ this.#turns.push(turn);
16
+ return turn;
17
+ }
18
+ finish() {
19
+ return this.#turns.pop();
20
+ }
21
+ abortCurrent() {
22
+ return this.#turns.pop();
23
+ }
24
+ current() {
25
+ return this.#turns.at(-1);
26
+ }
27
+ }
28
+ //# sourceMappingURL=turns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"turns.js","sourceRoot":"","sources":["../../../../src/commands/channel/supervisor/turns.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,OAAO,WAAW;IACtB,MAAM,GAAiB,EAAE,CAAC;IAE1B,KAAK,CAAC,QAAgB;QACpB,MAAM,IAAI,GAAe;YACvB,QAAQ;YACR,MAAM,EAAE,OAAO,QAAQ,EAAE;SAC1B,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC;CACF"}