@agimon-ai/doompi-runner 0.0.1-alpha.22 → 0.0.1-alpha.24

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 (692) hide show
  1. package/README.md +8 -14
  2. package/dist/bin/cli.cjs +3 -3
  3. package/dist/bin/cli.cjs.map +1 -1
  4. package/dist/bin/cli.d.cts.map +1 -1
  5. package/dist/bin/cli.d.mts.map +1 -1
  6. package/dist/bin/cli.mjs +3 -3
  7. package/dist/bin/cli.mjs.map +1 -1
  8. package/dist/bin/logSink.cjs +1 -1
  9. package/dist/bin/logSink.cjs.map +1 -1
  10. package/dist/bin/logSink.mjs +1 -1
  11. package/dist/bin/logSink.mjs.map +1 -1
  12. package/dist/bin/runnerHost.cjs +1 -1
  13. package/dist/bin/runnerHost.cjs.map +1 -1
  14. package/dist/bin/runnerHost.mjs +1 -1
  15. package/dist/bin/runnerHost.mjs.map +1 -1
  16. package/dist/cli/cliApp.cjs +1 -1
  17. package/dist/cli/cliApp.d.cts +1 -1
  18. package/dist/cli/cliApp.d.mts +1 -1
  19. package/dist/cli/cliApp.mjs +1 -1
  20. package/dist/compaction.cjs +1 -1
  21. package/dist/compaction.d.cts +1 -1
  22. package/dist/compaction.d.mts +1 -1
  23. package/dist/compaction.mjs +1 -1
  24. package/dist/config.cjs +1 -1
  25. package/dist/config.d.cts +1 -1
  26. package/dist/config.d.mts +1 -1
  27. package/dist/config.mjs +1 -1
  28. package/dist/container/index.cjs +1 -2
  29. package/dist/container/index.d.cts +2 -14
  30. package/dist/container/index.d.mts +2 -14
  31. package/dist/container/index.mjs +1 -2
  32. package/dist/extensions/pi.cjs +1 -2
  33. package/dist/extensions/pi.d.cts +2 -2
  34. package/dist/extensions/pi.d.mts +2 -2
  35. package/dist/extensions/pi.mjs +1 -2
  36. package/dist/index.cjs +1 -1
  37. package/dist/index.d.cts +5 -7
  38. package/dist/index.d.mts +5 -7
  39. package/dist/index.mjs +1 -1
  40. package/dist/ptyProvider.cjs +1 -1
  41. package/dist/ptyProvider.d.cts +1 -1
  42. package/dist/ptyProvider.d.mts +1 -1
  43. package/dist/ptyProvider.mjs +1 -1
  44. package/dist/reconcile.cjs +1 -1
  45. package/dist/reconcile.d.cts +1 -1
  46. package/dist/reconcile.d.mts +1 -1
  47. package/dist/reconcile.mjs +1 -1
  48. package/dist/services/AnsiScrub/ansiScrub.cjs +1 -5
  49. package/dist/services/AnsiScrub/ansiScrub.d.cts +2 -34
  50. package/dist/services/AnsiScrub/ansiScrub.d.mts +2 -34
  51. package/dist/services/AnsiScrub/ansiScrub.mjs +1 -5
  52. package/dist/services/AnsiScrub/index.cjs +1 -1
  53. package/dist/services/AnsiScrub/index.d.cts +1 -1
  54. package/dist/services/AnsiScrub/index.d.mts +1 -1
  55. package/dist/services/AnsiScrub/index.mjs +1 -1
  56. package/dist/services/BashRunService/BashRunService.cjs +1 -2
  57. package/dist/services/BashRunService/BashRunService.d.cts +2 -38
  58. package/dist/services/BashRunService/BashRunService.d.mts +2 -38
  59. package/dist/services/BashRunService/BashRunService.mjs +1 -2
  60. package/dist/services/BashRunService/index.cjs +1 -1
  61. package/dist/services/BashRunService/index.d.cts +2 -2
  62. package/dist/services/BashRunService/index.d.mts +2 -2
  63. package/dist/services/BashRunService/index.mjs +1 -1
  64. package/dist/services/Clock/SystemClock.cjs +1 -2
  65. package/dist/services/Clock/SystemClock.d.cts +2 -11
  66. package/dist/services/Clock/SystemClock.d.mts +2 -11
  67. package/dist/services/Clock/SystemClock.mjs +1 -2
  68. package/dist/services/Clock/index.cjs +1 -1
  69. package/dist/services/Clock/index.d.cts +2 -2
  70. package/dist/services/Clock/index.d.mts +2 -2
  71. package/dist/services/Clock/index.mjs +1 -1
  72. package/dist/services/Launcher/Launcher.cjs +1 -2
  73. package/dist/services/Launcher/Launcher.d.cts +2 -27
  74. package/dist/services/Launcher/Launcher.d.mts +2 -27
  75. package/dist/services/Launcher/Launcher.mjs +1 -2
  76. package/dist/services/Launcher/index.cjs +1 -1
  77. package/dist/services/Launcher/index.d.cts +2 -2
  78. package/dist/services/Launcher/index.d.mts +2 -2
  79. package/dist/services/Launcher/index.mjs +1 -1
  80. package/dist/services/Lifeline/NodeLifeline.cjs +1 -2
  81. package/dist/services/Lifeline/NodeLifeline.d.cts +2 -21
  82. package/dist/services/Lifeline/NodeLifeline.d.mts +2 -21
  83. package/dist/services/Lifeline/NodeLifeline.mjs +1 -2
  84. package/dist/services/Lifeline/client.cjs +1 -2
  85. package/dist/services/Lifeline/client.d.cts +2 -23
  86. package/dist/services/Lifeline/client.d.mts +2 -23
  87. package/dist/services/Lifeline/client.mjs +1 -2
  88. package/dist/services/Lifeline/index.cjs +1 -1
  89. package/dist/services/Lifeline/index.d.cts +3 -3
  90. package/dist/services/Lifeline/index.d.mts +3 -3
  91. package/dist/services/Lifeline/index.mjs +1 -1
  92. package/dist/services/LogFile/LogFile.cjs +1 -2
  93. package/dist/services/LogFile/LogFile.d.cts +2 -13
  94. package/dist/services/LogFile/LogFile.d.mts +2 -13
  95. package/dist/services/LogFile/LogFile.mjs +1 -2
  96. package/dist/services/LogFile/index.cjs +1 -1
  97. package/dist/services/LogFile/index.d.cts +2 -2
  98. package/dist/services/LogFile/index.d.mts +2 -2
  99. package/dist/services/LogFile/index.mjs +1 -1
  100. package/dist/services/LogReader/LogReader.cjs +1 -10
  101. package/dist/services/LogReader/LogReader.d.cts +2 -14
  102. package/dist/services/LogReader/LogReader.d.mts +2 -14
  103. package/dist/services/LogReader/LogReader.mjs +1 -10
  104. package/dist/services/LogReader/index.cjs +1 -1
  105. package/dist/services/LogReader/index.d.cts +2 -2
  106. package/dist/services/LogReader/index.d.mts +2 -2
  107. package/dist/services/LogReader/index.mjs +1 -1
  108. package/dist/services/ProcessControl/NodeProcessControl.cjs +1 -2
  109. package/dist/services/ProcessControl/NodeProcessControl.d.cts +2 -11
  110. package/dist/services/ProcessControl/NodeProcessControl.d.mts +2 -11
  111. package/dist/services/ProcessControl/NodeProcessControl.mjs +1 -2
  112. package/dist/services/ProcessControl/index.cjs +1 -1
  113. package/dist/services/ProcessControl/index.d.cts +2 -2
  114. package/dist/services/ProcessControl/index.d.mts +2 -2
  115. package/dist/services/ProcessControl/index.mjs +1 -1
  116. package/dist/services/PtyHost/PtyHost.cjs +1 -5
  117. package/dist/services/PtyHost/PtyHost.d.cts +2 -28
  118. package/dist/services/PtyHost/PtyHost.d.mts +2 -28
  119. package/dist/services/PtyHost/PtyHost.mjs +1 -5
  120. package/dist/services/PtyHost/index.cjs +1 -1
  121. package/dist/services/PtyHost/index.d.cts +2 -2
  122. package/dist/services/PtyHost/index.d.mts +2 -2
  123. package/dist/services/PtyHost/index.mjs +1 -1
  124. package/dist/services/PtySpawner/NodePtySpawner.cjs +1 -2
  125. package/dist/services/PtySpawner/NodePtySpawner.d.cts +2 -18
  126. package/dist/services/PtySpawner/NodePtySpawner.d.mts +2 -18
  127. package/dist/services/PtySpawner/NodePtySpawner.mjs +1 -2
  128. package/dist/services/PtySpawner/index.cjs +1 -1
  129. package/dist/services/PtySpawner/index.d.cts +2 -2
  130. package/dist/services/PtySpawner/index.d.mts +2 -2
  131. package/dist/services/PtySpawner/index.mjs +1 -1
  132. package/dist/services/RmuxBackend/RmuxBackend.cjs +1 -2
  133. package/dist/services/RmuxBackend/RmuxBackend.d.cts +2 -36
  134. package/dist/services/RmuxBackend/RmuxBackend.d.mts +2 -36
  135. package/dist/services/RmuxBackend/RmuxBackend.mjs +1 -2
  136. package/dist/services/RmuxBackend/index.cjs +1 -1
  137. package/dist/services/RmuxBackend/index.d.cts +2 -2
  138. package/dist/services/RmuxBackend/index.d.mts +2 -2
  139. package/dist/services/RmuxBackend/index.mjs +1 -1
  140. package/dist/services/RunnerNamer/RunnerNamer.cjs +1 -2
  141. package/dist/services/RunnerNamer/RunnerNamer.d.cts +2 -13
  142. package/dist/services/RunnerNamer/RunnerNamer.d.mts +2 -13
  143. package/dist/services/RunnerNamer/RunnerNamer.mjs +1 -2
  144. package/dist/services/RunnerNamer/index.cjs +1 -1
  145. package/dist/services/RunnerNamer/index.d.cts +2 -2
  146. package/dist/services/RunnerNamer/index.d.mts +2 -2
  147. package/dist/services/RunnerNamer/index.mjs +1 -1
  148. package/dist/services/RunnerPaths/RunnerPaths.cjs +1 -1
  149. package/dist/services/RunnerPaths/RunnerPaths.d.cts +1 -1
  150. package/dist/services/RunnerPaths/RunnerPaths.d.mts +1 -1
  151. package/dist/services/RunnerPaths/RunnerPaths.mjs +1 -1
  152. package/dist/services/RunnerPaths/index.cjs +1 -1
  153. package/dist/services/RunnerPaths/index.d.cts +2 -3
  154. package/dist/services/RunnerPaths/index.d.mts +2 -3
  155. package/dist/services/RunnerPaths/index.mjs +1 -1
  156. package/dist/services/RunnerRegistry/RunnerRegistry.cjs +1 -2
  157. package/dist/services/RunnerRegistry/RunnerRegistry.d.cts +2 -40
  158. package/dist/services/RunnerRegistry/RunnerRegistry.d.mts +2 -40
  159. package/dist/services/RunnerRegistry/RunnerRegistry.mjs +1 -2
  160. package/dist/services/RunnerRegistry/index.cjs +1 -1
  161. package/dist/services/RunnerRegistry/index.d.cts +2 -2
  162. package/dist/services/RunnerRegistry/index.d.mts +2 -2
  163. package/dist/services/RunnerRegistry/index.mjs +1 -1
  164. package/dist/services/Spawner/NodeSpawner.cjs +1 -2
  165. package/dist/services/Spawner/NodeSpawner.d.cts +2 -10
  166. package/dist/services/Spawner/NodeSpawner.d.mts +2 -10
  167. package/dist/services/Spawner/NodeSpawner.mjs +1 -2
  168. package/dist/services/Spawner/index.cjs +1 -1
  169. package/dist/services/Spawner/index.d.cts +2 -2
  170. package/dist/services/Spawner/index.d.mts +2 -2
  171. package/dist/services/Spawner/index.mjs +1 -1
  172. package/dist/session.cjs +1 -1
  173. package/dist/session.d.cts +1 -1
  174. package/dist/session.d.mts +1 -1
  175. package/dist/session.mjs +1 -1
  176. package/dist/src/adapters/BashRunService/BashRunService.cjs +2 -0
  177. package/dist/src/adapters/BashRunService/BashRunService.cjs.map +1 -0
  178. package/dist/src/adapters/BashRunService/BashRunService.d.cts +31 -0
  179. package/dist/src/adapters/BashRunService/BashRunService.d.cts.map +1 -0
  180. package/dist/src/adapters/BashRunService/BashRunService.d.mts +31 -0
  181. package/dist/src/adapters/BashRunService/BashRunService.d.mts.map +1 -0
  182. package/dist/src/adapters/BashRunService/BashRunService.mjs +2 -0
  183. package/dist/src/adapters/BashRunService/BashRunService.mjs.map +1 -0
  184. package/dist/src/adapters/Clock/SystemClock.cjs +2 -0
  185. package/dist/src/adapters/Clock/SystemClock.cjs.map +1 -0
  186. package/dist/src/adapters/Clock/SystemClock.d.cts +10 -0
  187. package/dist/src/adapters/Clock/SystemClock.d.cts.map +1 -0
  188. package/dist/src/adapters/Clock/SystemClock.d.mts +10 -0
  189. package/dist/src/adapters/Clock/SystemClock.d.mts.map +1 -0
  190. package/dist/src/adapters/Clock/SystemClock.mjs +2 -0
  191. package/dist/src/adapters/Clock/SystemClock.mjs.map +1 -0
  192. package/dist/src/adapters/Launcher/Launcher.cjs +2 -0
  193. package/dist/src/adapters/Launcher/Launcher.cjs.map +1 -0
  194. package/dist/src/adapters/Launcher/Launcher.d.cts +21 -0
  195. package/dist/src/adapters/Launcher/Launcher.d.cts.map +1 -0
  196. package/dist/src/adapters/Launcher/Launcher.d.mts +21 -0
  197. package/dist/src/adapters/Launcher/Launcher.d.mts.map +1 -0
  198. package/dist/src/adapters/Launcher/Launcher.mjs +2 -0
  199. package/dist/src/adapters/Launcher/Launcher.mjs.map +1 -0
  200. package/dist/src/adapters/Lifeline/NodeLifeline.cjs +2 -0
  201. package/dist/src/adapters/Lifeline/NodeLifeline.cjs.map +1 -0
  202. package/dist/src/adapters/Lifeline/NodeLifeline.d.cts +19 -0
  203. package/dist/src/adapters/Lifeline/NodeLifeline.d.cts.map +1 -0
  204. package/dist/src/adapters/Lifeline/NodeLifeline.d.mts +19 -0
  205. package/dist/src/adapters/Lifeline/NodeLifeline.d.mts.map +1 -0
  206. package/dist/src/adapters/Lifeline/NodeLifeline.mjs +2 -0
  207. package/dist/src/adapters/Lifeline/NodeLifeline.mjs.map +1 -0
  208. package/dist/src/adapters/Lifeline/client.cjs +2 -0
  209. package/dist/src/adapters/Lifeline/client.cjs.map +1 -0
  210. package/dist/src/adapters/Lifeline/client.d.cts +23 -0
  211. package/dist/src/adapters/Lifeline/client.d.cts.map +1 -0
  212. package/dist/src/adapters/Lifeline/client.d.mts +23 -0
  213. package/dist/src/adapters/Lifeline/client.d.mts.map +1 -0
  214. package/dist/src/adapters/Lifeline/client.mjs +2 -0
  215. package/dist/src/adapters/Lifeline/client.mjs.map +1 -0
  216. package/dist/src/adapters/LogFile/LogFile.cjs +2 -0
  217. package/dist/src/adapters/LogFile/LogFile.cjs.map +1 -0
  218. package/dist/src/adapters/LogFile/LogFile.d.cts +11 -0
  219. package/dist/src/adapters/LogFile/LogFile.d.cts.map +1 -0
  220. package/dist/src/adapters/LogFile/LogFile.d.mts +11 -0
  221. package/dist/src/adapters/LogFile/LogFile.d.mts.map +1 -0
  222. package/dist/src/adapters/LogFile/LogFile.mjs +2 -0
  223. package/dist/src/adapters/LogFile/LogFile.mjs.map +1 -0
  224. package/dist/src/adapters/LogReader/LogReader.cjs +10 -0
  225. package/dist/src/adapters/LogReader/LogReader.cjs.map +1 -0
  226. package/dist/src/adapters/LogReader/LogReader.d.cts +13 -0
  227. package/dist/src/adapters/LogReader/LogReader.d.cts.map +1 -0
  228. package/dist/src/adapters/LogReader/LogReader.d.mts +13 -0
  229. package/dist/src/adapters/LogReader/LogReader.d.mts.map +1 -0
  230. package/dist/src/adapters/LogReader/LogReader.mjs +10 -0
  231. package/dist/src/adapters/LogReader/LogReader.mjs.map +1 -0
  232. package/dist/src/adapters/ProcessControl/NodeProcessControl.cjs +2 -0
  233. package/dist/src/adapters/ProcessControl/NodeProcessControl.cjs.map +1 -0
  234. package/dist/src/adapters/ProcessControl/NodeProcessControl.d.cts +10 -0
  235. package/dist/src/adapters/ProcessControl/NodeProcessControl.d.cts.map +1 -0
  236. package/dist/src/adapters/ProcessControl/NodeProcessControl.d.mts +10 -0
  237. package/dist/src/adapters/ProcessControl/NodeProcessControl.d.mts.map +1 -0
  238. package/dist/src/adapters/ProcessControl/NodeProcessControl.mjs +2 -0
  239. package/dist/src/adapters/ProcessControl/NodeProcessControl.mjs.map +1 -0
  240. package/dist/src/adapters/PtyHost/PtyHost.cjs +5 -0
  241. package/dist/src/adapters/PtyHost/PtyHost.cjs.map +1 -0
  242. package/dist/src/adapters/PtyHost/PtyHost.d.cts +23 -0
  243. package/dist/src/adapters/PtyHost/PtyHost.d.cts.map +1 -0
  244. package/dist/src/adapters/PtyHost/PtyHost.d.mts +23 -0
  245. package/dist/src/adapters/PtyHost/PtyHost.d.mts.map +1 -0
  246. package/dist/src/adapters/PtyHost/PtyHost.mjs +5 -0
  247. package/dist/src/adapters/PtyHost/PtyHost.mjs.map +1 -0
  248. package/dist/src/adapters/PtySpawner/NodePtySpawner.cjs +2 -0
  249. package/dist/src/adapters/PtySpawner/NodePtySpawner.cjs.map +1 -0
  250. package/dist/src/adapters/PtySpawner/NodePtySpawner.d.cts +17 -0
  251. package/dist/src/adapters/PtySpawner/NodePtySpawner.d.cts.map +1 -0
  252. package/dist/src/adapters/PtySpawner/NodePtySpawner.d.mts +17 -0
  253. package/dist/src/adapters/PtySpawner/NodePtySpawner.d.mts.map +1 -0
  254. package/dist/src/adapters/PtySpawner/NodePtySpawner.mjs +2 -0
  255. package/dist/src/adapters/PtySpawner/NodePtySpawner.mjs.map +1 -0
  256. package/dist/src/adapters/RmuxBackend/RmuxBackend.cjs +2 -0
  257. package/dist/src/adapters/RmuxBackend/RmuxBackend.cjs.map +1 -0
  258. package/dist/src/adapters/RmuxBackend/RmuxBackend.d.cts +31 -0
  259. package/dist/src/adapters/RmuxBackend/RmuxBackend.d.cts.map +1 -0
  260. package/dist/src/adapters/RmuxBackend/RmuxBackend.d.mts +31 -0
  261. package/dist/src/adapters/RmuxBackend/RmuxBackend.d.mts.map +1 -0
  262. package/dist/src/adapters/RmuxBackend/RmuxBackend.mjs +2 -0
  263. package/dist/src/adapters/RmuxBackend/RmuxBackend.mjs.map +1 -0
  264. package/dist/src/adapters/RunnerPaths.cjs +2 -0
  265. package/dist/src/adapters/RunnerPaths.cjs.map +1 -0
  266. package/dist/{adapters → src/adapters}/RunnerPaths.d.cts +0 -1
  267. package/dist/src/adapters/RunnerPaths.d.cts.map +1 -0
  268. package/dist/{adapters → src/adapters}/RunnerPaths.d.mts +0 -1
  269. package/dist/src/adapters/RunnerPaths.d.mts.map +1 -0
  270. package/dist/src/adapters/RunnerPaths.mjs +2 -0
  271. package/dist/src/adapters/RunnerPaths.mjs.map +1 -0
  272. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.cjs +2 -0
  273. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.cjs.map +1 -0
  274. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.cts +37 -0
  275. package/dist/{services → src/adapters}/RunnerRegistry/RunnerRegistry.d.cts.map +1 -1
  276. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.d.mts +37 -0
  277. package/dist/{services → src/adapters}/RunnerRegistry/RunnerRegistry.d.mts.map +1 -1
  278. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.mjs +2 -0
  279. package/dist/src/adapters/RunnerRegistry/RunnerRegistry.mjs.map +1 -0
  280. package/dist/src/adapters/Spawner/NodeSpawner.cjs +2 -0
  281. package/dist/src/adapters/Spawner/NodeSpawner.cjs.map +1 -0
  282. package/dist/src/adapters/Spawner/NodeSpawner.d.cts +9 -0
  283. package/dist/src/adapters/Spawner/NodeSpawner.d.cts.map +1 -0
  284. package/dist/src/adapters/Spawner/NodeSpawner.d.mts +9 -0
  285. package/dist/src/adapters/Spawner/NodeSpawner.d.mts.map +1 -0
  286. package/dist/src/adapters/Spawner/NodeSpawner.mjs +2 -0
  287. package/dist/src/adapters/Spawner/NodeSpawner.mjs.map +1 -0
  288. package/dist/src/adapters/pi/extension.cjs +3 -0
  289. package/dist/src/adapters/pi/extension.cjs.map +1 -0
  290. package/dist/src/adapters/pi/extension.d.cts +8 -0
  291. package/dist/src/adapters/pi/extension.d.cts.map +1 -0
  292. package/dist/src/adapters/pi/extension.d.mts +8 -0
  293. package/dist/src/adapters/pi/extension.d.mts.map +1 -0
  294. package/dist/src/adapters/pi/extension.mjs +3 -0
  295. package/dist/src/adapters/pi/extension.mjs.map +1 -0
  296. package/dist/src/adapters/pty/ptyProvider.cjs +2 -0
  297. package/dist/src/adapters/pty/ptyProvider.cjs.map +1 -0
  298. package/dist/{adapters → src/adapters}/pty/ptyProvider.d.cts +1 -2
  299. package/dist/src/adapters/pty/ptyProvider.d.cts.map +1 -0
  300. package/dist/{adapters → src/adapters}/pty/ptyProvider.d.mts +1 -2
  301. package/dist/src/adapters/pty/ptyProvider.d.mts.map +1 -0
  302. package/dist/src/adapters/pty/ptyProvider.mjs +2 -0
  303. package/dist/src/adapters/pty/ptyProvider.mjs.map +1 -0
  304. package/dist/src/commands/bash/bashTool.cjs +7 -0
  305. package/dist/src/commands/bash/bashTool.cjs.map +1 -0
  306. package/dist/{commands → src/commands}/bash/bashTool.d.cts +1 -2
  307. package/dist/src/commands/bash/bashTool.d.cts.map +1 -0
  308. package/dist/{commands → src/commands}/bash/bashTool.d.mts +1 -2
  309. package/dist/src/commands/bash/bashTool.d.mts.map +1 -0
  310. package/dist/src/commands/bash/bashTool.mjs +7 -0
  311. package/dist/src/commands/bash/bashTool.mjs.map +1 -0
  312. package/dist/{commands → src/commands}/bash/responseEnvelope.cjs +1 -1
  313. package/dist/src/commands/bash/responseEnvelope.cjs.map +1 -0
  314. package/dist/{commands → src/commands}/bash/responseEnvelope.d.cts +1 -2
  315. package/dist/src/commands/bash/responseEnvelope.d.cts.map +1 -0
  316. package/dist/{commands → src/commands}/bash/responseEnvelope.d.mts +1 -2
  317. package/dist/src/commands/bash/responseEnvelope.d.mts.map +1 -0
  318. package/dist/src/commands/bash/responseEnvelope.mjs.map +1 -0
  319. package/dist/{commands → src/commands}/cli/cliApp.cjs +1 -1
  320. package/dist/src/commands/cli/cliApp.cjs.map +1 -0
  321. package/dist/src/commands/cli/cliApp.d.cts +19 -0
  322. package/dist/src/commands/cli/cliApp.d.cts.map +1 -0
  323. package/dist/src/commands/cli/cliApp.d.mts +19 -0
  324. package/dist/src/commands/cli/cliApp.d.mts.map +1 -0
  325. package/dist/src/commands/cli/cliApp.mjs.map +1 -0
  326. package/dist/src/container/index.cjs +2 -0
  327. package/dist/src/container/index.cjs.map +1 -0
  328. package/dist/src/container/index.d.cts +17 -0
  329. package/dist/src/container/index.d.cts.map +1 -0
  330. package/dist/src/container/index.d.mts +17 -0
  331. package/dist/src/container/index.d.mts.map +1 -0
  332. package/dist/src/container/index.mjs +2 -0
  333. package/dist/src/container/index.mjs.map +1 -0
  334. package/dist/src/container/types.d.cts +38 -0
  335. package/dist/src/container/types.d.cts.map +1 -0
  336. package/dist/src/container/types.d.mts +38 -0
  337. package/dist/src/container/types.d.mts.map +1 -0
  338. package/dist/src/schemas/bashTool.cjs.map +1 -0
  339. package/dist/src/schemas/bashTool.d.cts.map +1 -0
  340. package/dist/src/schemas/bashTool.d.mts.map +1 -0
  341. package/dist/src/schemas/bashTool.mjs.map +1 -0
  342. package/dist/src/schemas/runnerSpec.cjs +2 -0
  343. package/dist/src/schemas/runnerSpec.cjs.map +1 -0
  344. package/dist/src/schemas/runnerSpec.mjs.map +1 -0
  345. package/dist/src/services/AnsiScrub/ansiScrub.cjs +5 -0
  346. package/dist/src/services/AnsiScrub/ansiScrub.cjs.map +1 -0
  347. package/dist/src/services/AnsiScrub/ansiScrub.d.cts +34 -0
  348. package/dist/src/services/AnsiScrub/ansiScrub.d.cts.map +1 -0
  349. package/dist/src/services/AnsiScrub/ansiScrub.d.mts +34 -0
  350. package/dist/src/services/AnsiScrub/ansiScrub.d.mts.map +1 -0
  351. package/dist/src/services/AnsiScrub/ansiScrub.mjs +5 -0
  352. package/dist/src/services/AnsiScrub/ansiScrub.mjs.map +1 -0
  353. package/dist/src/services/RunnerNamer/RunnerNamer.cjs +2 -0
  354. package/dist/src/services/RunnerNamer/RunnerNamer.cjs.map +1 -0
  355. package/dist/src/services/RunnerNamer/RunnerNamer.d.cts +11 -0
  356. package/dist/src/services/RunnerNamer/RunnerNamer.d.cts.map +1 -0
  357. package/dist/src/services/RunnerNamer/RunnerNamer.d.mts +11 -0
  358. package/dist/src/services/RunnerNamer/RunnerNamer.d.mts.map +1 -0
  359. package/dist/src/services/RunnerNamer/RunnerNamer.mjs +2 -0
  360. package/dist/src/services/RunnerNamer/RunnerNamer.mjs.map +1 -0
  361. package/dist/src/services/RunnerNamer/types.d.cts.map +1 -0
  362. package/dist/src/services/RunnerNamer/types.d.mts.map +1 -0
  363. package/dist/src/services/RunnerPaths/types.d.cts.map +1 -0
  364. package/dist/src/services/RunnerPaths/types.d.mts.map +1 -0
  365. package/dist/src/services/runs/compaction.cjs.map +1 -0
  366. package/dist/{services → src/services}/runs/compaction.d.cts +1 -2
  367. package/dist/src/services/runs/compaction.d.cts.map +1 -0
  368. package/dist/{services → src/services}/runs/compaction.d.mts +1 -2
  369. package/dist/src/services/runs/compaction.d.mts.map +1 -0
  370. package/dist/src/services/runs/compaction.mjs.map +1 -0
  371. package/dist/src/services/runs/reconcile.cjs +2 -0
  372. package/dist/{services → src/services}/runs/reconcile.cjs.map +1 -1
  373. package/dist/{services → src/services}/runs/reconcile.d.cts +4 -9
  374. package/dist/src/services/runs/reconcile.d.cts.map +1 -0
  375. package/dist/{services → src/services}/runs/reconcile.d.mts +4 -9
  376. package/dist/src/services/runs/reconcile.d.mts.map +1 -0
  377. package/dist/{services → src/services}/runs/reconcile.mjs.map +1 -1
  378. package/dist/src/services/runs/session.cjs.map +1 -0
  379. package/dist/src/services/runs/session.d.cts.map +1 -0
  380. package/dist/src/services/runs/session.d.mts.map +1 -0
  381. package/dist/src/services/runs/session.mjs.map +1 -0
  382. package/dist/src/tui/bashRender.cjs +5 -0
  383. package/dist/src/tui/bashRender.cjs.map +1 -0
  384. package/dist/src/tui/bashRender.d.cts +51 -0
  385. package/dist/src/tui/bashRender.d.cts.map +1 -0
  386. package/dist/src/tui/bashRender.d.mts +51 -0
  387. package/dist/src/tui/bashRender.d.mts.map +1 -0
  388. package/dist/src/tui/bashRender.mjs +5 -0
  389. package/dist/src/tui/bashRender.mjs.map +1 -0
  390. package/dist/src/tui/format.cjs +2 -0
  391. package/dist/src/tui/format.cjs.map +1 -0
  392. package/dist/src/tui/format.d.cts +24 -0
  393. package/dist/src/tui/format.d.cts.map +1 -0
  394. package/dist/src/tui/format.d.mts +24 -0
  395. package/dist/src/tui/format.d.mts.map +1 -0
  396. package/dist/src/tui/format.mjs +2 -0
  397. package/dist/src/tui/format.mjs.map +1 -0
  398. package/dist/src/tui/runnerSpace.cjs +6 -0
  399. package/dist/src/tui/runnerSpace.cjs.map +1 -0
  400. package/dist/src/tui/runnerSpace.d.cts +50 -0
  401. package/dist/src/tui/runnerSpace.d.cts.map +1 -0
  402. package/dist/src/tui/runnerSpace.d.mts +50 -0
  403. package/dist/src/tui/runnerSpace.d.mts.map +1 -0
  404. package/dist/src/tui/runnerSpace.mjs +6 -0
  405. package/dist/src/tui/runnerSpace.mjs.map +1 -0
  406. package/dist/{services/BashRunService/types.d.cts → src/types/bashRunService.d.cts} +2 -2
  407. package/dist/{services/BashRunService/types.d.cts.map → src/types/bashRunService.d.cts.map} +1 -1
  408. package/dist/{services/BashRunService/types.d.mts → src/types/bashRunService.d.mts} +2 -2
  409. package/dist/{services/BashRunService/types.d.mts.map → src/types/bashRunService.d.mts.map} +1 -1
  410. package/dist/{services/Clock/types.d.cts → src/types/clock.d.cts} +2 -2
  411. package/dist/src/types/clock.d.cts.map +1 -0
  412. package/dist/{services/Clock/types.d.mts → src/types/clock.d.mts} +2 -2
  413. package/dist/src/types/clock.d.mts.map +1 -0
  414. package/dist/src/types/config.cjs.map +1 -0
  415. package/dist/src/types/config.d.cts.map +1 -0
  416. package/dist/src/types/config.d.mts.map +1 -0
  417. package/dist/src/types/config.mjs.map +1 -0
  418. package/dist/{services/Launcher/types.d.cts → src/types/launcher.d.cts} +3 -4
  419. package/dist/src/types/launcher.d.cts.map +1 -0
  420. package/dist/{services/Launcher/types.d.mts → src/types/launcher.d.mts} +3 -4
  421. package/dist/src/types/launcher.d.mts.map +1 -0
  422. package/dist/{services/Lifeline/types.d.cts → src/types/lifeline.d.cts} +2 -2
  423. package/dist/src/types/lifeline.d.cts.map +1 -0
  424. package/dist/{services/Lifeline/types.d.mts → src/types/lifeline.d.mts} +2 -2
  425. package/dist/src/types/lifeline.d.mts.map +1 -0
  426. package/dist/{services/LogFile/types.d.cts → src/types/logFile.d.cts} +2 -2
  427. package/dist/src/types/logFile.d.cts.map +1 -0
  428. package/dist/{services/LogFile/types.d.mts → src/types/logFile.d.mts} +2 -2
  429. package/dist/src/types/logFile.d.mts.map +1 -0
  430. package/dist/{services/LogReader/types.d.cts → src/types/logReader.d.cts} +2 -2
  431. package/dist/src/types/logReader.d.cts.map +1 -0
  432. package/dist/{services/LogReader/types.d.mts → src/types/logReader.d.mts} +2 -2
  433. package/dist/src/types/logReader.d.mts.map +1 -0
  434. package/dist/{services/ProcessControl/types.d.cts → src/types/processControl.d.cts} +2 -2
  435. package/dist/src/types/processControl.d.cts.map +1 -0
  436. package/dist/{services/ProcessControl/types.d.mts → src/types/processControl.d.mts} +2 -2
  437. package/dist/src/types/processControl.d.mts.map +1 -0
  438. package/dist/{services/PtyHost/types.d.cts → src/types/ptyHost.d.cts} +3 -4
  439. package/dist/src/types/ptyHost.d.cts.map +1 -0
  440. package/dist/{services/PtyHost/types.d.mts → src/types/ptyHost.d.mts} +3 -4
  441. package/dist/src/types/ptyHost.d.mts.map +1 -0
  442. package/dist/{services/PtySpawner/types.d.cts → src/types/ptySpawner.d.cts} +2 -2
  443. package/dist/src/types/ptySpawner.d.cts.map +1 -0
  444. package/dist/{services/PtySpawner/types.d.mts → src/types/ptySpawner.d.mts} +2 -2
  445. package/dist/src/types/ptySpawner.d.mts.map +1 -0
  446. package/dist/{services/RmuxBackend/types.d.cts → src/types/rmuxBackend.d.cts} +5 -8
  447. package/dist/src/types/rmuxBackend.d.cts.map +1 -0
  448. package/dist/{services/RmuxBackend/types.d.mts → src/types/rmuxBackend.d.mts} +5 -8
  449. package/dist/src/types/rmuxBackend.d.mts.map +1 -0
  450. package/dist/{services/RunnerRegistry/types.d.cts → src/types/runnerRegistry.d.cts} +2 -2
  451. package/dist/{services/RunnerRegistry/types.d.cts.map → src/types/runnerRegistry.d.cts.map} +1 -1
  452. package/dist/{services/RunnerRegistry/types.d.mts → src/types/runnerRegistry.d.mts} +2 -2
  453. package/dist/{services/RunnerRegistry/types.d.mts.map → src/types/runnerRegistry.d.mts.map} +1 -1
  454. package/dist/{services/Spawner/types.d.cts → src/types/spawner.d.cts} +2 -2
  455. package/dist/src/types/spawner.d.cts.map +1 -0
  456. package/dist/{services/Spawner/types.d.mts → src/types/spawner.d.mts} +2 -2
  457. package/dist/src/types/spawner.d.mts.map +1 -0
  458. package/dist/tool/bashTool.cjs +1 -1
  459. package/dist/tool/bashTool.d.cts +1 -1
  460. package/dist/tool/bashTool.d.mts +1 -1
  461. package/dist/tool/bashTool.mjs +1 -1
  462. package/dist/tool/responseEnvelope.cjs +1 -1
  463. package/dist/tool/responseEnvelope.d.cts +1 -1
  464. package/dist/tool/responseEnvelope.d.mts +1 -1
  465. package/dist/tool/responseEnvelope.mjs +1 -1
  466. package/dist/tool/schema.cjs +1 -1
  467. package/dist/tool/schema.d.cts +1 -1
  468. package/dist/tool/schema.d.mts +1 -1
  469. package/dist/tool/schema.mjs +1 -1
  470. package/dist/tui/bashRender.cjs +1 -5
  471. package/dist/tui/bashRender.d.cts +2 -51
  472. package/dist/tui/bashRender.d.mts +2 -51
  473. package/dist/tui/bashRender.mjs +1 -5
  474. package/dist/tui/format.cjs +1 -2
  475. package/dist/tui/format.d.cts +2 -25
  476. package/dist/tui/format.d.mts +2 -25
  477. package/dist/tui/format.mjs +1 -2
  478. package/dist/tui/runnerSpace.cjs +1 -6
  479. package/dist/tui/runnerSpace.d.cts +2 -52
  480. package/dist/tui/runnerSpace.d.mts +2 -52
  481. package/dist/tui/runnerSpace.mjs +1 -6
  482. package/dist/types.cjs +0 -1
  483. package/dist/types.d.cts +2 -2
  484. package/dist/types.d.mts +2 -2
  485. package/dist/types.mjs +1 -1
  486. package/package.json +17 -18
  487. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.cjs +0 -1
  488. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorate.mjs +0 -1
  489. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.cjs +0 -1
  490. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateMetadata.mjs +0 -1
  491. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.cjs +0 -1
  492. package/dist/_virtual/_@oxc-project_runtime@0.143.0/helpers/esm/decorateParam.mjs +0 -1
  493. package/dist/adapters/RunnerPaths.cjs +0 -2
  494. package/dist/adapters/RunnerPaths.cjs.map +0 -1
  495. package/dist/adapters/RunnerPaths.d.cts.map +0 -1
  496. package/dist/adapters/RunnerPaths.d.mts.map +0 -1
  497. package/dist/adapters/RunnerPaths.mjs +0 -2
  498. package/dist/adapters/RunnerPaths.mjs.map +0 -1
  499. package/dist/adapters/pi/extension.cjs +0 -3
  500. package/dist/adapters/pi/extension.cjs.map +0 -1
  501. package/dist/adapters/pi/extension.d.cts +0 -10
  502. package/dist/adapters/pi/extension.d.cts.map +0 -1
  503. package/dist/adapters/pi/extension.d.mts +0 -10
  504. package/dist/adapters/pi/extension.d.mts.map +0 -1
  505. package/dist/adapters/pi/extension.mjs +0 -3
  506. package/dist/adapters/pi/extension.mjs.map +0 -1
  507. package/dist/adapters/pty/ptyProvider.cjs +0 -2
  508. package/dist/adapters/pty/ptyProvider.cjs.map +0 -1
  509. package/dist/adapters/pty/ptyProvider.d.cts.map +0 -1
  510. package/dist/adapters/pty/ptyProvider.d.mts.map +0 -1
  511. package/dist/adapters/pty/ptyProvider.mjs +0 -2
  512. package/dist/adapters/pty/ptyProvider.mjs.map +0 -1
  513. package/dist/commands/bash/bashTool.cjs +0 -7
  514. package/dist/commands/bash/bashTool.cjs.map +0 -1
  515. package/dist/commands/bash/bashTool.d.cts.map +0 -1
  516. package/dist/commands/bash/bashTool.d.mts.map +0 -1
  517. package/dist/commands/bash/bashTool.mjs +0 -7
  518. package/dist/commands/bash/bashTool.mjs.map +0 -1
  519. package/dist/commands/bash/responseEnvelope.cjs.map +0 -1
  520. package/dist/commands/bash/responseEnvelope.d.cts.map +0 -1
  521. package/dist/commands/bash/responseEnvelope.d.mts.map +0 -1
  522. package/dist/commands/bash/responseEnvelope.mjs.map +0 -1
  523. package/dist/commands/cli/cliApp.cjs.map +0 -1
  524. package/dist/commands/cli/cliApp.d.cts +0 -23
  525. package/dist/commands/cli/cliApp.d.cts.map +0 -1
  526. package/dist/commands/cli/cliApp.d.mts +0 -23
  527. package/dist/commands/cli/cliApp.d.mts.map +0 -1
  528. package/dist/commands/cli/cliApp.mjs.map +0 -1
  529. package/dist/container/index.cjs.map +0 -1
  530. package/dist/container/index.d.cts.map +0 -1
  531. package/dist/container/index.d.mts.map +0 -1
  532. package/dist/container/index.mjs.map +0 -1
  533. package/dist/extension.cjs +0 -1
  534. package/dist/extension.d.cts +0 -2
  535. package/dist/extension.d.mts +0 -2
  536. package/dist/extension.mjs +0 -1
  537. package/dist/extensions/pi.cjs.map +0 -1
  538. package/dist/extensions/pi.mjs.map +0 -1
  539. package/dist/runnerSpec.cjs +0 -1
  540. package/dist/runnerSpec.d.cts +0 -2
  541. package/dist/runnerSpec.d.mts +0 -2
  542. package/dist/runnerSpec.mjs +0 -1
  543. package/dist/schemas/bashTool.cjs.map +0 -1
  544. package/dist/schemas/bashTool.d.cts.map +0 -1
  545. package/dist/schemas/bashTool.d.mts.map +0 -1
  546. package/dist/schemas/bashTool.mjs.map +0 -1
  547. package/dist/schemas/runnerSpec.cjs +0 -2
  548. package/dist/schemas/runnerSpec.cjs.map +0 -1
  549. package/dist/schemas/runnerSpec.d.cts +0 -50
  550. package/dist/schemas/runnerSpec.d.cts.map +0 -1
  551. package/dist/schemas/runnerSpec.d.mts +0 -50
  552. package/dist/schemas/runnerSpec.d.mts.map +0 -1
  553. package/dist/schemas/runnerSpec.mjs.map +0 -1
  554. package/dist/services/AnsiScrub/ansiScrub.cjs.map +0 -1
  555. package/dist/services/AnsiScrub/ansiScrub.d.cts.map +0 -1
  556. package/dist/services/AnsiScrub/ansiScrub.d.mts.map +0 -1
  557. package/dist/services/AnsiScrub/ansiScrub.mjs.map +0 -1
  558. package/dist/services/BashRunService/BashRunService.cjs.map +0 -1
  559. package/dist/services/BashRunService/BashRunService.d.cts.map +0 -1
  560. package/dist/services/BashRunService/BashRunService.d.mts.map +0 -1
  561. package/dist/services/BashRunService/BashRunService.mjs.map +0 -1
  562. package/dist/services/Clock/SystemClock.cjs.map +0 -1
  563. package/dist/services/Clock/SystemClock.d.cts.map +0 -1
  564. package/dist/services/Clock/SystemClock.d.mts.map +0 -1
  565. package/dist/services/Clock/SystemClock.mjs.map +0 -1
  566. package/dist/services/Clock/types.d.cts.map +0 -1
  567. package/dist/services/Clock/types.d.mts.map +0 -1
  568. package/dist/services/Launcher/Launcher.cjs.map +0 -1
  569. package/dist/services/Launcher/Launcher.d.cts.map +0 -1
  570. package/dist/services/Launcher/Launcher.d.mts.map +0 -1
  571. package/dist/services/Launcher/Launcher.mjs.map +0 -1
  572. package/dist/services/Launcher/types.d.cts.map +0 -1
  573. package/dist/services/Launcher/types.d.mts.map +0 -1
  574. package/dist/services/Lifeline/NodeLifeline.cjs.map +0 -1
  575. package/dist/services/Lifeline/NodeLifeline.d.cts.map +0 -1
  576. package/dist/services/Lifeline/NodeLifeline.d.mts.map +0 -1
  577. package/dist/services/Lifeline/NodeLifeline.mjs.map +0 -1
  578. package/dist/services/Lifeline/client.cjs.map +0 -1
  579. package/dist/services/Lifeline/client.d.cts.map +0 -1
  580. package/dist/services/Lifeline/client.d.mts.map +0 -1
  581. package/dist/services/Lifeline/client.mjs.map +0 -1
  582. package/dist/services/Lifeline/types.d.cts.map +0 -1
  583. package/dist/services/Lifeline/types.d.mts.map +0 -1
  584. package/dist/services/LogFile/LogFile.cjs.map +0 -1
  585. package/dist/services/LogFile/LogFile.d.cts.map +0 -1
  586. package/dist/services/LogFile/LogFile.d.mts.map +0 -1
  587. package/dist/services/LogFile/LogFile.mjs.map +0 -1
  588. package/dist/services/LogFile/types.d.cts.map +0 -1
  589. package/dist/services/LogFile/types.d.mts.map +0 -1
  590. package/dist/services/LogReader/LogReader.cjs.map +0 -1
  591. package/dist/services/LogReader/LogReader.d.cts.map +0 -1
  592. package/dist/services/LogReader/LogReader.d.mts.map +0 -1
  593. package/dist/services/LogReader/LogReader.mjs.map +0 -1
  594. package/dist/services/LogReader/types.d.cts.map +0 -1
  595. package/dist/services/LogReader/types.d.mts.map +0 -1
  596. package/dist/services/ProcessControl/NodeProcessControl.cjs.map +0 -1
  597. package/dist/services/ProcessControl/NodeProcessControl.d.cts.map +0 -1
  598. package/dist/services/ProcessControl/NodeProcessControl.d.mts.map +0 -1
  599. package/dist/services/ProcessControl/NodeProcessControl.mjs.map +0 -1
  600. package/dist/services/ProcessControl/types.d.cts.map +0 -1
  601. package/dist/services/ProcessControl/types.d.mts.map +0 -1
  602. package/dist/services/PtyHost/PtyHost.cjs.map +0 -1
  603. package/dist/services/PtyHost/PtyHost.d.cts.map +0 -1
  604. package/dist/services/PtyHost/PtyHost.d.mts.map +0 -1
  605. package/dist/services/PtyHost/PtyHost.mjs.map +0 -1
  606. package/dist/services/PtyHost/types.d.cts.map +0 -1
  607. package/dist/services/PtyHost/types.d.mts.map +0 -1
  608. package/dist/services/PtySpawner/NodePtySpawner.cjs.map +0 -1
  609. package/dist/services/PtySpawner/NodePtySpawner.d.cts.map +0 -1
  610. package/dist/services/PtySpawner/NodePtySpawner.d.mts.map +0 -1
  611. package/dist/services/PtySpawner/NodePtySpawner.mjs.map +0 -1
  612. package/dist/services/PtySpawner/types.d.cts.map +0 -1
  613. package/dist/services/PtySpawner/types.d.mts.map +0 -1
  614. package/dist/services/RmuxBackend/RmuxBackend.cjs.map +0 -1
  615. package/dist/services/RmuxBackend/RmuxBackend.d.cts.map +0 -1
  616. package/dist/services/RmuxBackend/RmuxBackend.d.mts.map +0 -1
  617. package/dist/services/RmuxBackend/RmuxBackend.mjs.map +0 -1
  618. package/dist/services/RmuxBackend/types.d.cts.map +0 -1
  619. package/dist/services/RmuxBackend/types.d.mts.map +0 -1
  620. package/dist/services/RunnerNamer/RunnerNamer.cjs.map +0 -1
  621. package/dist/services/RunnerNamer/RunnerNamer.d.cts.map +0 -1
  622. package/dist/services/RunnerNamer/RunnerNamer.d.mts.map +0 -1
  623. package/dist/services/RunnerNamer/RunnerNamer.mjs.map +0 -1
  624. package/dist/services/RunnerNamer/types.d.cts.map +0 -1
  625. package/dist/services/RunnerNamer/types.d.mts.map +0 -1
  626. package/dist/services/RunnerPaths/types.d.cts.map +0 -1
  627. package/dist/services/RunnerPaths/types.d.mts.map +0 -1
  628. package/dist/services/RunnerRegistry/RunnerRegistry.cjs.map +0 -1
  629. package/dist/services/RunnerRegistry/RunnerRegistry.mjs.map +0 -1
  630. package/dist/services/Spawner/NodeSpawner.cjs.map +0 -1
  631. package/dist/services/Spawner/NodeSpawner.d.cts.map +0 -1
  632. package/dist/services/Spawner/NodeSpawner.d.mts.map +0 -1
  633. package/dist/services/Spawner/NodeSpawner.mjs.map +0 -1
  634. package/dist/services/Spawner/types.d.cts.map +0 -1
  635. package/dist/services/Spawner/types.d.mts.map +0 -1
  636. package/dist/services/runs/compaction.cjs.map +0 -1
  637. package/dist/services/runs/compaction.d.cts.map +0 -1
  638. package/dist/services/runs/compaction.d.mts.map +0 -1
  639. package/dist/services/runs/compaction.mjs.map +0 -1
  640. package/dist/services/runs/reconcile.cjs +0 -2
  641. package/dist/services/runs/reconcile.d.cts.map +0 -1
  642. package/dist/services/runs/reconcile.d.mts.map +0 -1
  643. package/dist/services/runs/session.cjs.map +0 -1
  644. package/dist/services/runs/session.d.cts.map +0 -1
  645. package/dist/services/runs/session.d.mts.map +0 -1
  646. package/dist/services/runs/session.mjs.map +0 -1
  647. package/dist/tui/bashRender.cjs.map +0 -1
  648. package/dist/tui/bashRender.d.cts.map +0 -1
  649. package/dist/tui/bashRender.d.mts.map +0 -1
  650. package/dist/tui/bashRender.mjs.map +0 -1
  651. package/dist/tui/format.cjs.map +0 -1
  652. package/dist/tui/format.d.cts.map +0 -1
  653. package/dist/tui/format.d.mts.map +0 -1
  654. package/dist/tui/format.mjs.map +0 -1
  655. package/dist/tui/runnerSpace.cjs.map +0 -1
  656. package/dist/tui/runnerSpace.d.cts.map +0 -1
  657. package/dist/tui/runnerSpace.d.mts.map +0 -1
  658. package/dist/tui/runnerSpace.mjs.map +0 -1
  659. package/dist/types/config.cjs.map +0 -1
  660. package/dist/types/config.d.cts.map +0 -1
  661. package/dist/types/config.d.mts.map +0 -1
  662. package/dist/types/config.mjs.map +0 -1
  663. package/dist/types/index.cjs +0 -2
  664. package/dist/types/index.cjs.map +0 -1
  665. package/dist/types/index.d.cts +0 -28
  666. package/dist/types/index.d.cts.map +0 -1
  667. package/dist/types/index.d.mts +0 -28
  668. package/dist/types/index.d.mts.map +0 -1
  669. package/dist/types/index.mjs +0 -2
  670. package/dist/types/index.mjs.map +0 -1
  671. /package/dist/{commands → src/commands}/bash/responseEnvelope.mjs +0 -0
  672. /package/dist/{commands → src/commands}/cli/cliApp.mjs +0 -0
  673. /package/dist/{schemas → src/schemas}/bashTool.cjs +0 -0
  674. /package/dist/{schemas → src/schemas}/bashTool.d.cts +0 -0
  675. /package/dist/{schemas → src/schemas}/bashTool.d.mts +0 -0
  676. /package/dist/{schemas → src/schemas}/bashTool.mjs +0 -0
  677. /package/dist/{schemas → src/schemas}/runnerSpec.mjs +0 -0
  678. /package/dist/{services → src/services}/RunnerNamer/types.d.cts +0 -0
  679. /package/dist/{services → src/services}/RunnerNamer/types.d.mts +0 -0
  680. /package/dist/{services → src/services}/RunnerPaths/types.d.cts +0 -0
  681. /package/dist/{services → src/services}/RunnerPaths/types.d.mts +0 -0
  682. /package/dist/{services → src/services}/runs/compaction.cjs +0 -0
  683. /package/dist/{services → src/services}/runs/compaction.mjs +0 -0
  684. /package/dist/{services → src/services}/runs/reconcile.mjs +0 -0
  685. /package/dist/{services → src/services}/runs/session.cjs +0 -0
  686. /package/dist/{services → src/services}/runs/session.d.cts +0 -0
  687. /package/dist/{services → src/services}/runs/session.d.mts +0 -0
  688. /package/dist/{services → src/services}/runs/session.mjs +0 -0
  689. /package/dist/{types → src/types}/config.cjs +0 -0
  690. /package/dist/{types → src/types}/config.d.cts +0 -0
  691. /package/dist/{types → src/types}/config.d.mts +0 -0
  692. /package/dist/{types → src/types}/config.mjs +0 -0
package/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Supervised shell execution, background process control, durable logs, and Runner Space for Pi.
4
4
 
5
+ Part of the [DoomPi distribution](https://www.npmjs.com/package/@agimon-ai/doompi).
6
+
5
7
  Runner replaces Pi's built-in `bash` tool only in sessions that load it. Short commands return inline; long commands can be promoted to a background runner instead of blocking the agent.
6
8
 
7
9
  > **Alpha:** tool and process contracts may change between releases.
@@ -17,25 +19,15 @@ Linux native loading also depends on a compatible system loader/libc. Runner use
17
19
 
18
20
  ## Install
19
21
 
20
- DoomPi users add Runner to a layer:
21
-
22
- ```yaml
23
- layers:
24
- runner:
25
- packages: ['@agimon-ai/doompi-runner']
26
-
27
- majorMode:
28
- development:
29
- description: Development with supervised commands.
30
- layers: [runner]
31
- ```
32
-
33
- For direct Pi installation:
22
+ DoomPi includes Runner in every composition, so no layer declaration is required. For direct Pi
23
+ installation:
34
24
 
35
25
  ```bash
36
26
  pi install npm:@agimon-ai/doompi-runner
37
27
  ```
38
28
 
29
+ Pi discovers Runner's sole extension factory from `package.json.pi.extensions`. The factory owns one fresh package-local Cordis root and disposes its resources when the Pi session shuts down.
30
+
39
31
  ## Use the `bash` tool
40
32
 
41
33
  ```json
@@ -112,6 +104,8 @@ pnpm test
112
104
  pnpm lint
113
105
  ```
114
106
 
107
+ Maintained by [Agimon](https://agimon.ai/about).
108
+
115
109
  ## License
116
110
 
117
111
  MIT
package/dist/bin/cli.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../types/index.cjs"),t=require("../container/index.cjs"),n=require("../commands/cli/cliApp.cjs");let r=require("node:url"),i=require("@agimon-ai/doompi-telemetry");async function a(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function o(r=process.argv.slice(2)){let o=Date.now(),s=(0,i.createDoomTelemetry)({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),c=t.createRunnerContainer(),l=c.get(e.TYPES.RunnerRegistry),u=0,d=0;try{let t=await n.runCli(r,{registry:l,launcher:c.get(e.TYPES.Launcher),rmuxBackend:c.get(e.TYPES.RmuxBackend),logReader:c.get(e.TYPES.LogReader),env:process.env,stdout:e=>{let t=e.endsWith(`
3
- `)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
4
- `)?e:`${e}\n`;d+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:a});return await s.recordEvent(`doom_runner.cli_finished`,{outcome:t===0?`completed`:`failed`,"runner.exit_code":t,duration_ms:Date.now()-o,"runner.argument_count":r.length,"runner.stdout_bytes":u,"runner.stderr_bytes":d}),t}catch(e){throw await s.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-o,"runner.argument_count":r.length,"runner.stdout_bytes":u,"runner.stderr_bytes":d}),e}finally{l.close(),await s.shutdown()}}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&o().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=o;
2
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/container/index.cjs"),t=require("../src/commands/cli/cliApp.cjs");let n=require("node:url"),r=require("@agimon-ai/doompi-telemetry");async function i(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function a(n=process.argv.slice(2)){let a=Date.now(),o=(0,r.createDoomTelemetry)({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),s=e.createRunnerContainer(),c=s.runnerRegistry,l=0,u=0;try{let e=await t.runCli(n,{registry:c,launcher:s.launcher,rmuxBackend:s.rmuxBackend,logReader:s.logReader,env:process.env,stdout:e=>{let t=e.endsWith(`
3
+ `)?e:`${e}\n`;l+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
4
+ `)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:i});return await o.recordEvent(`doom_runner.cli_finished`,{outcome:e===0?`completed`:`failed`,"runner.exit_code":e,duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}catch(e){throw await o.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}finally{c.close(),await o.shutdown()}}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,n.pathToFileURL)(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=a;
5
5
  //# sourceMappingURL=cli.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerContainer","TYPES","runCli","pathToFileURL"],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\nimport type { ILauncher } from '../services/Launcher/index.ts';\nimport type { ILogReader } from '../services/LogReader/index.ts';\nimport type { IRmuxBackend } from '../services/RmuxBackend/index.ts';\nimport type { IRunnerRegistry } from '../services/RunnerRegistry/index.ts';\nimport { TYPES } from '../types/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.get<IRunnerRegistry>(TYPES.RunnerRegistry);\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.get<ILauncher>(TYPES.Launcher),\n rmuxBackend: container.get<IRmuxBackend>(TYPES.RmuxBackend),\n logReader: container.get<ILogReader>(TYPES.LogReader),\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";wPAYA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAYC,EAAAA,sBAAsB,EAClC,EAAW,EAAU,IAAqBC,EAAAA,MAAM,cAAc,EAChE,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,OAAO,EAAM,CAClC,WACA,SAAU,EAAU,IAAeD,EAAAA,MAAM,QAAQ,EACjD,YAAa,EAAU,IAAkBA,EAAAA,MAAM,WAAW,EAC1D,UAAW,EAAU,IAAgBA,EAAAA,MAAM,SAAS,EACpD,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BE,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
1
+ {"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerContainer","runCli","pathToFileURL"],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";gOAOA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAYC,EAAAA,sBAAsB,EAClC,EAAW,EAAU,eACvB,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAMC,EAAAA,OAAO,EAAM,CAClC,WACA,SAAU,EAAU,SACpB,YAAa,EAAU,YACvB,UAAW,EAAU,UACrB,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BC,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAkBsB,KAAK,2BAAkD"}
1
+ {"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAkBsB,KAAK,2BAAkD"}
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";iBAasB,KAAK,2BAAkD"}
package/dist/bin/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import{TYPES as e}from"../types/index.mjs";import{createRunnerContainer as t}from"../container/index.mjs";import{runCli as n}from"../commands/cli/cliApp.mjs";import{pathToFileURL as r}from"node:url";import{createDoomTelemetry as i}from"@agimon-ai/doompi-telemetry";async function a(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function o(r=process.argv.slice(2)){let o=Date.now(),s=i({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),c=t(),l=c.get(e.RunnerRegistry),u=0,d=0;try{let t=await n(r,{registry:l,launcher:c.get(e.Launcher),rmuxBackend:c.get(e.RmuxBackend),logReader:c.get(e.LogReader),env:process.env,stdout:e=>{let t=e.endsWith(`
3
- `)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
4
- `)?e:`${e}\n`;d+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:a});return await s.recordEvent(`doom_runner.cli_finished`,{outcome:t===0?`completed`:`failed`,"runner.exit_code":t,duration_ms:Date.now()-o,"runner.argument_count":r.length,"runner.stdout_bytes":u,"runner.stderr_bytes":d}),t}catch(e){throw await s.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-o,"runner.argument_count":r.length,"runner.stdout_bytes":u,"runner.stderr_bytes":d}),e}finally{l.close(),await s.shutdown()}}process.argv[1]&&import.meta.url===r(process.argv[1]).href&&o().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{o as main};
2
+ import{createRunnerContainer as e}from"../src/container/index.mjs";import{runCli as t}from"../src/commands/cli/cliApp.mjs";import{pathToFileURL as n}from"node:url";import{createDoomTelemetry as r}from"@agimon-ai/doompi-telemetry";async function i(){let e=[];for await(let t of process.stdin)e.push(Buffer.isBuffer(t)?t:Buffer.from(t));return Buffer.concat(e).toString(`utf8`)}async function a(n=process.argv.slice(2)){let a=Date.now(),o=r({serviceName:`doom-runner-cli`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),s=e(),c=s.runnerRegistry,l=0,u=0;try{let e=await t(n,{registry:c,launcher:s.launcher,rmuxBackend:s.rmuxBackend,logReader:s.logReader,env:process.env,stdout:e=>{let t=e.endsWith(`
3
+ `)?e:`${e}\n`;l+=Buffer.byteLength(t,`utf8`),process.stdout.write(t)},stderr:e=>{let t=e.endsWith(`
4
+ `)?e:`${e}\n`;u+=Buffer.byteLength(t,`utf8`),process.stderr.write(t)},readStdin:i});return await o.recordEvent(`doom_runner.cli_finished`,{outcome:e===0?`completed`:`failed`,"runner.exit_code":e,duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}catch(e){throw await o.recordError(`doom_runner.cli_failed`,e,{duration_ms:Date.now()-a,"runner.argument_count":n.length,"runner.stdout_bytes":l,"runner.stderr_bytes":u}),e}finally{c.close(),await o.shutdown()}}process.argv[1]&&import.meta.url===n(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{a as main};
5
5
  //# sourceMappingURL=cli.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\nimport type { ILauncher } from '../services/Launcher/index.ts';\nimport type { ILogReader } from '../services/LogReader/index.ts';\nimport type { IRmuxBackend } from '../services/RmuxBackend/index.ts';\nimport type { IRunnerRegistry } from '../services/RunnerRegistry/index.ts';\nimport { TYPES } from '../types/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.get<IRunnerRegistry>(TYPES.RunnerRegistry);\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.get<ILauncher>(TYPES.Launcher),\n rmuxBackend: container.get<IRmuxBackend>(TYPES.RmuxBackend),\n logReader: container.get<ILogReader>(TYPES.LogReader),\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";yQAYA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAY,EAAsB,EAClC,EAAW,EAAU,IAAqB,EAAM,cAAc,EAChE,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAM,EAAO,EAAM,CAClC,WACA,SAAU,EAAU,IAAe,EAAM,QAAQ,EACjD,YAAa,EAAU,IAAkB,EAAM,WAAW,EAC1D,UAAW,EAAU,IAAgB,EAAM,SAAS,EACpD,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { runCli } from '../commands/cli/cliApp.ts';\nimport { createRunnerContainer } from '../container/index.ts';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerContainer();\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: process.env,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";sOAOA,eAAe,GAA6B,CAC1C,IAAM,EAAmB,CAAC,EAC1B,UAAW,IAAM,KAAS,QAAQ,MAAO,EAAO,KAAK,OAAO,SAAS,CAAK,EAAI,EAAQ,OAAO,KAAK,CAAK,CAAC,EACxG,OAAO,OAAO,OAAO,CAAM,CAAC,CAAC,SAAS,MAAM,CAC9C,CAEA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,kBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,EAAY,EAAsB,EAClC,EAAW,EAAU,eACvB,EAAc,EACd,EAAc,EAClB,GAAI,CACF,IAAM,EAAW,MAAM,EAAO,EAAM,CAClC,WACA,SAAU,EAAU,SACpB,YAAa,EAAU,YACvB,UAAW,EAAU,UACrB,IAAK,QAAQ,IACb,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,OAAS,GAAS,CAChB,IAAM,EAAS,EAAK,SAAS;CAAI,EAAI,EAAO,GAAG,EAAK,IACpD,GAAe,OAAO,WAAW,EAAQ,MAAM,EAC/C,QAAQ,OAAO,MAAM,CAAM,CAC7B,EACA,WACF,CAAC,EASD,OARA,MAAM,EAAU,YAAY,2BAA4B,CACtD,QAAS,IAAa,EAAI,YAAc,SACxC,mBAAoB,EACpB,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACM,CACT,OAAS,EAAO,CAOd,MANA,MAAM,EAAU,YAAY,yBAA0B,EAAO,CAC3D,YAAa,KAAK,IAAI,EAAI,EAC1B,wBAAyB,EAAK,OAC9B,sBAAuB,EACvB,sBAAuB,CACzB,CAAC,EACK,CACR,QAAU,CACR,EAAS,MAAM,EACf,MAAM,EAAU,SAAS,CAC3B,CACF,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../services/AnsiScrub/ansiScrub.cjs");require("../services/AnsiScrub/index.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("@agimon-ai/doompi-telemetry");async function a(e=process.argv.slice(2)){let r=Date.now(),a=(0,i.createDoomTelemetry)({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=e,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let f,p;try{f=n.default.openSync(s,`a`),p=n.default.statSync(s).size}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let m=0,h=0;try{process.stdin.setEncoding(`utf8`);for await(let e of process.stdin){let r=t.scrubTerminalOutput(String(e));if(!r)continue;let i=Buffer.from(r,`utf8`);p+i.byteLength>d&&(n.default.closeSync(f),n.default.renameSync(s,c),f=n.default.openSync(s,`w`),p=0,h+=1),n.default.writeSync(f,i),p+=i.byteLength,m+=1}return n.default.closeSync(f),o(u),await a.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,duration_ms:Date.now()-r}),0}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),e}finally{await a.shutdown()}}function o(e){let t=`${e}.${process.pid}.tmp`;n.default.writeFileSync(t,``,{mode:384}),n.default.renameSync(t,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=a;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../src/services/AnsiScrub/ansiScrub.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("@agimon-ai/doompi-telemetry");async function a(e=process.argv.slice(2)){let r=Date.now(),a=(0,i.createDoomTelemetry)({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=e,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let f,p;try{f=n.default.openSync(s,`a`),p=n.default.statSync(s).size}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),await a.shutdown(),e}let m=0,h=0;try{process.stdin.setEncoding(`utf8`);for await(let e of process.stdin){let r=t.scrubTerminalOutput(String(e));if(!r)continue;let i=Buffer.from(r,`utf8`);p+i.byteLength>d&&(n.default.closeSync(f),n.default.renameSync(s,c),f=n.default.openSync(s,`w`),p=0,h+=1),n.default.writeSync(f,i),p+=i.byteLength,m+=1}return n.default.closeSync(f),o(u),await a.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,duration_ms:Date.now()-r}),0}catch(e){throw await a.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-r}),e}finally{await a.shutdown()}}function o(e){let t=`${e}.${process.pid}.tmp`;n.default.writeFileSync(t,``,{mode:384}),n.default.renameSync(t,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&a().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=a;
2
2
  //# sourceMappingURL=logSink.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logSink.cjs","names":["createDoomTelemetry","fs","scrubTerminalOutput","pathToFileURL"],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/index.ts';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n let rotations = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n 'runner.rotation_count': rotations,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"iUAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAASC,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAUA,EAAAA,QAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACT,EAAY,EAChB,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAOC,EAAAA,oBAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAA,QAAG,UAAU,CAAM,EACnB,EAAA,QAAG,WAAW,EAAS,CAAW,EAClC,EAASD,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAA,QAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAA,QAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAA,QAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAA,QAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BE,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
1
+ {"version":3,"file":"logSink.cjs","names":["createDoomTelemetry","fs","scrubTerminalOutput","pathToFileURL"],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/ansiScrub';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n let rotations = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n 'runner.rotation_count': rotations,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"0RAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,GAAA,EAAYA,EAAAA,oBAAAA,CAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAASC,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAUA,EAAAA,QAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACT,EAAY,EAChB,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAOC,EAAAA,oBAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAA,QAAG,UAAU,CAAM,EACnB,EAAA,QAAG,WAAW,EAAS,CAAW,EAClC,EAASD,EAAAA,QAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAA,QAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAA,QAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAA,QAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAA,QAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,QAAA,EAA0BE,EAAAA,cAAAA,CAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
@@ -1,2 +1,2 @@
1
- import{scrubTerminalOutput as e}from"../services/AnsiScrub/ansiScrub.mjs";import"../services/AnsiScrub/index.mjs";import t from"node:fs";import{pathToFileURL as n}from"node:url";import{createDoomTelemetry as r}from"@agimon-ai/doompi-telemetry";async function i(n=process.argv.slice(2)){let i=Date.now(),o=r({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=n,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let f,p;try{f=t.openSync(s,`a`),p=t.statSync(s).size}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let m=0,h=0;try{process.stdin.setEncoding(`utf8`);for await(let n of process.stdin){let r=e(String(n));if(!r)continue;let i=Buffer.from(r,`utf8`);p+i.byteLength>d&&(t.closeSync(f),t.renameSync(s,c),f=t.openSync(s,`w`),p=0,h+=1),t.writeSync(f,i),p+=i.byteLength,m+=1}return t.closeSync(f),a(u),await o.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,duration_ms:Date.now()-i}),0}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),e}finally{await o.shutdown()}}function a(e){let n=`${e}.${process.pid}.tmp`;t.writeFileSync(n,``,{mode:384}),t.renameSync(n,e)}process.argv[1]&&import.meta.url===n(process.argv[1]).href&&i().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{i as main};
1
+ import{scrubTerminalOutput as e}from"../src/services/AnsiScrub/ansiScrub.mjs";import t from"node:fs";import{pathToFileURL as n}from"node:url";import{createDoomTelemetry as r}from"@agimon-ai/doompi-telemetry";async function i(n=process.argv.slice(2)){let i=Date.now(),o=r({serviceName:`doom-runner-log-sink`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[s,c,l,u]=n,d;try{if(!s||!c||!l||!u)throw Error(`logSink requires log, rotated log, max bytes, and completion paths`);if(d=Number(l),!Number.isFinite(d)||d<=0)throw Error(`logSink max bytes must be positive`)}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let f,p;try{f=t.openSync(s,`a`),p=t.statSync(s).size}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),await o.shutdown(),e}let m=0,h=0;try{process.stdin.setEncoding(`utf8`);for await(let n of process.stdin){let r=e(String(n));if(!r)continue;let i=Buffer.from(r,`utf8`);p+i.byteLength>d&&(t.closeSync(f),t.renameSync(s,c),f=t.openSync(s,`w`),p=0,h+=1),t.writeSync(f,i),p+=i.byteLength,m+=1}return t.closeSync(f),a(u),await o.recordEvent(`doom_runner.file_sink_finished`,{outcome:`completed`,"runner.chunk_count":m,"runner.bytes_written":p,"runner.rotation_count":h,duration_ms:Date.now()-i}),0}catch(e){throw await o.recordError(`doom_runner.file_sink_failed`,e,{duration_ms:Date.now()-i}),e}finally{await o.shutdown()}}function a(e){let n=`${e}.${process.pid}.tmp`;t.writeFileSync(n,``,{mode:384}),t.renameSync(n,e)}process.argv[1]&&import.meta.url===n(process.argv[1]).href&&i().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{i as main};
2
2
  //# sourceMappingURL=logSink.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logSink.mjs","names":[],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/index.ts';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n let rotations = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n 'runner.rotation_count': rotations,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"oPAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACT,EAAY,EAChB,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAO,EAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAG,UAAU,CAAM,EACnB,EAAG,WAAW,EAAS,CAAW,EAClC,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
1
+ {"version":3,"file":"logSink.mjs","names":[],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { scrubTerminalOutput } from '../services/AnsiScrub/ansiScrub';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-log-sink',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath] = argv;\n let maxBytes: number;\n try {\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\n maxBytes = Number(maxBytesRaw);\n if (!Number.isFinite(maxBytes) || maxBytes <= 0) throw new Error('logSink max bytes must be positive');\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n\n let handle: number;\n let written: number;\n try {\n handle = fs.openSync(logPath, 'a');\n written = fs.statSync(logPath).size;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let chunks = 0;\n let rotations = 0;\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const text = scrubTerminalOutput(String(chunk));\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n if (written + bytes.byteLength > maxBytes) {\n fs.closeSync(handle);\n fs.renameSync(logPath, rotatedPath);\n handle = fs.openSync(logPath, 'w');\n written = 0;\n rotations += 1;\n }\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n writeDone(donePath);\n await telemetry.recordEvent('doom_runner.file_sink_finished', {\n outcome: 'completed',\n 'runner.chunk_count': chunks,\n 'runner.bytes_written': written,\n 'runner.rotation_count': rotations,\n duration_ms: Date.now() - startedAt,\n });\n return 0;\n } catch (error) {\n await telemetry.recordError('doom_runner.file_sink_failed', error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n await telemetry.shutdown();\n }\n}\n\nfunction writeDone(target: string): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, '', { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"gNAKA,eAAsB,EAAK,EAA0B,QAAQ,KAAK,MAAM,CAAC,EAAoB,CAC3F,IAAM,EAAY,KAAK,IAAI,EACrB,EAAY,EAAoB,CACpC,YAAa,uBACb,YAAa,2BACb,IAAK,QAAQ,IACb,WAAY,GACZ,aAAc,EAChB,CAAC,EACK,CAAC,EAAS,EAAa,EAAa,GAAY,EAClD,EACJ,GAAI,CACF,GAAI,CAAC,GAAW,CAAC,GAAe,CAAC,GAAe,CAAC,EAC/C,MAAU,MAAM,oEAAoE,EAGtF,GADA,EAAW,OAAO,CAAW,EACzB,CAAC,OAAO,SAAS,CAAQ,GAAK,GAAY,EAAG,MAAU,MAAM,oCAAoC,CACvG,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CAEA,IAAI,EACA,EACJ,GAAI,CACF,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EAAG,SAAS,CAAO,CAAC,CAAC,IACjC,OAAS,EAAO,CAGd,MAFA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EAC1G,MAAM,EAAU,SAAS,EACnB,CACR,CACA,IAAI,EAAS,EACT,EAAY,EAChB,GAAI,CACF,QAAQ,MAAM,YAAY,MAAM,EAChC,UAAW,IAAM,KAAS,QAAQ,MAAO,CACvC,IAAM,EAAO,EAAoB,OAAO,CAAK,CAAC,EAC9C,GAAI,CAAC,EAAM,SACX,IAAM,EAAQ,OAAO,KAAK,EAAM,MAAM,EAClC,EAAU,EAAM,WAAa,IAC/B,EAAG,UAAU,CAAM,EACnB,EAAG,WAAW,EAAS,CAAW,EAClC,EAAS,EAAG,SAAS,EAAS,GAAG,EACjC,EAAU,EACV,GAAa,GAEf,EAAG,UAAU,EAAQ,CAAK,EAC1B,GAAW,EAAM,WACjB,GAAU,CACZ,CAUA,OATA,EAAG,UAAU,CAAM,EACnB,EAAU,CAAQ,EAClB,MAAM,EAAU,YAAY,iCAAkC,CAC5D,QAAS,YACT,qBAAsB,EACtB,uBAAwB,EACxB,wBAAyB,EACzB,YAAa,KAAK,IAAI,EAAI,CAC5B,CAAC,EACM,CACT,OAAS,EAAO,CAEd,MADA,MAAM,EAAU,YAAY,+BAAgC,EAAO,CAAE,YAAa,KAAK,IAAI,EAAI,CAAU,CAAC,EACpG,CACR,QAAU,CACR,MAAM,EAAU,SAAS,CAC3B,CACF,CAEA,SAAS,EAAU,EAAsB,CACvC,IAAM,EAAY,GAAG,EAAO,GAAG,QAAQ,IAAI,MAC3C,EAAG,cAAc,EAAW,GAAI,CAAE,KAAM,GAAM,CAAC,EAC/C,EAAG,WAAW,EAAW,CAAM,CACjC,CAEI,QAAQ,KAAK,IAAM,YAAY,MAAQ,EAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,EAAK,CAAC,CAAC,KACJ,GAAS,CACR,QAAQ,SAAW,CACrB,EACC,GAAmB,CAClB,QAAQ,OAAO,MAAM,GAAG,aAAiB,MAAQ,EAAM,QAAU,OAAO,CAAK,EAAE,GAAG,EAClF,QAAQ,SAAW,CACrB,CACF"}
@@ -1,2 +1,2 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../services/Lifeline/client.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("node:os");i=e.__toESM(i,1);let a=require("node:child_process"),o=require("@agimon-ai/doompi-telemetry");const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(e=process.argv.slice(2)){let n=Date.now(),r=(0,o.createDoomTelemetry)({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[c,l,p]=e,m;try{if(!c||!l||!p)throw Error(`runnerHost requires spec, gate, and exit paths`);m=u(c),await d(l)}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),await r.shutdown(),e}let h,g=null,_,v=e=>{if(h?.pid)try{process.kill(-h.pid,e)}catch{h.kill(e)}},y=e=>{g=e,v(e),_??=setTimeout(()=>v(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>y(e));h=(0,a.spawn)(m.command,{cwd:m.cwd,env:m.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),g&&y(g);let b=t.watchOwner(()=>y(`SIGTERM`),m.env[t.LIFELINE_ENV]);try{let e=await new Promise((e,t)=>{h?.once(`error`,t),h?.once(`exit`,(t,n)=>e({code:t,signal:n??g}))});f(p,e);let t=e.code===null?e.signal?128+i.default.constants.signals[e.signal]:1:e.code;return await r.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||g?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||g?{"runner.signal":e.signal??g??``}:{},duration_ms:Date.now()-n}),t}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),e}finally{b(),_&&clearTimeout(_),await r.shutdown()}}function u(e){let t=JSON.parse(n.default.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.default.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.default.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.default.renameSync(r,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=l;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../src/adapters/Lifeline/client.cjs");let n=require("node:fs");n=e.__toESM(n,1);let r=require("node:url"),i=require("node:os");i=e.__toESM(i,1);let a=require("node:child_process"),o=require("@agimon-ai/doompi-telemetry");const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(e=process.argv.slice(2)){let n=Date.now(),r=(0,o.createDoomTelemetry)({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[c,l,p]=e,m;try{if(!c||!l||!p)throw Error(`runnerHost requires spec, gate, and exit paths`);m=u(c),await d(l)}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),await r.shutdown(),e}let h,g=null,_,v=e=>{if(h?.pid)try{process.kill(-h.pid,e)}catch{h.kill(e)}},y=e=>{g=e,v(e),_??=setTimeout(()=>v(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>y(e));h=(0,a.spawn)(m.command,{cwd:m.cwd,env:m.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),g&&y(g);let b=t.watchOwner(()=>y(`SIGTERM`),m.env[t.LIFELINE_ENV]);try{let e=await new Promise((e,t)=>{h?.once(`error`,t),h?.once(`exit`,(t,n)=>e({code:t,signal:n??g}))});f(p,e);let t=e.code===null?e.signal?128+i.default.constants.signals[e.signal]:1:e.code;return await r.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||g?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||g?{"runner.signal":e.signal??g??``}:{},duration_ms:Date.now()-n}),t}catch(e){throw await r.recordError(s,e,{duration_ms:Date.now()-n}),e}finally{b(),_&&clearTimeout(_),await r.shutdown()}}function u(e){let t=JSON.parse(n.default.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.default.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.default.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.default.renameSync(r,e)}process.argv[1]&&require("url").pathToFileURL(__filename).href===(0,r.pathToFileURL)(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1}),exports.main=l;
2
2
  //# sourceMappingURL=runnerHost.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runnerHost.cjs","names":["createDoomTelemetry","spawn","watchOwner","LIFELINE_ENV","os","fs","pathToFileURL"],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../services/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"runnerHost.cjs","names":["createDoomTelemetry","spawn","watchOwner","LIFELINE_ENV","os","fs","pathToFileURL"],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../adapters/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{LIFELINE_ENV as e,watchOwner as t}from"../services/Lifeline/client.mjs";import n from"node:fs";import{pathToFileURL as r}from"node:url";import i from"node:os";import{spawn as a}from"node:child_process";import{createDoomTelemetry as o}from"@agimon-ai/doompi-telemetry";const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(n=process.argv.slice(2)){let r=Date.now(),c=o({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[l,p,m]=n,h;try{if(!l||!p||!m)throw Error(`runnerHost requires spec, gate, and exit paths`);h=u(l),await d(p)}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),await c.shutdown(),e}let g,_=null,v,y=e=>{if(g?.pid)try{process.kill(-g.pid,e)}catch{g.kill(e)}},b=e=>{_=e,y(e),v??=setTimeout(()=>y(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>b(e));g=a(h.command,{cwd:h.cwd,env:h.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),_&&b(_);let x=t(()=>b(`SIGTERM`),h.env[e]);try{let e=await new Promise((e,t)=>{g?.once(`error`,t),g?.once(`exit`,(t,n)=>e({code:t,signal:n??_}))});f(m,e);let t=e.code===null?e.signal?128+i.constants.signals[e.signal]:1:e.code;return await c.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||_?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||_?{"runner.signal":e.signal??_??``}:{},duration_ms:Date.now()-r}),t}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),e}finally{x(),v&&clearTimeout(v),await c.shutdown()}}function u(e){let t=JSON.parse(n.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.renameSync(r,e)}process.argv[1]&&import.meta.url===r(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{l as main};
1
+ import{LIFELINE_ENV as e,watchOwner as t}from"../src/adapters/Lifeline/client.mjs";import n from"node:fs";import{pathToFileURL as r}from"node:url";import i from"node:os";import{spawn as a}from"node:child_process";import{createDoomTelemetry as o}from"@agimon-ai/doompi-telemetry";const s=`doom_runner.host_failed`,c=`invalid runner command spec`;async function l(n=process.argv.slice(2)){let r=Date.now(),c=o({serviceName:`doom-runner-host`,packageName:`@agimon-ai/doompi-runner`,env:process.env,enableLogs:!0,enableTraces:!0}),[l,p,m]=n,h;try{if(!l||!p||!m)throw Error(`runnerHost requires spec, gate, and exit paths`);h=u(l),await d(p)}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),await c.shutdown(),e}let g,_=null,v,y=e=>{if(g?.pid)try{process.kill(-g.pid,e)}catch{g.kill(e)}},b=e=>{_=e,y(e),v??=setTimeout(()=>y(`SIGKILL`),2e3)};for(let e of[`SIGTERM`,`SIGINT`,`SIGHUP`])process.once(e,()=>b(e));g=a(h.command,{cwd:h.cwd,env:h.env,shell:`/bin/bash`,stdio:`inherit`,detached:!0}),_&&b(_);let x=t(()=>b(`SIGTERM`),h.env[e]);try{let e=await new Promise((e,t)=>{g?.once(`error`,t),g?.once(`exit`,(t,n)=>e({code:t,signal:n??_}))});f(m,e);let t=e.code===null?e.signal?128+i.constants.signals[e.signal]:1:e.code;return await c.recordEvent(`doom_runner.host_finished`,{outcome:e.signal||_?`signaled`:t===0?`completed`:`failed`,"runner.exit_code":t,...e.signal||_?{"runner.signal":e.signal??_??``}:{},duration_ms:Date.now()-r}),t}catch(e){throw await c.recordError(s,e,{duration_ms:Date.now()-r}),e}finally{x(),v&&clearTimeout(v),await c.shutdown()}}function u(e){let t=JSON.parse(n.readFileSync(e,`utf8`));if(typeof t!=`object`||!t)throw Error(c);let r=t;if(typeof r.command!=`string`||typeof r.cwd!=`string`||!r.env)throw Error(c);return{command:r.command,cwd:r.cwd,env:r.env}}async function d(e){for(;!n.existsSync(e);)await new Promise(e=>setTimeout(e,10))}function f(e,t){let r=`${e}.${process.pid}.tmp`;n.writeFileSync(r,`${JSON.stringify(t)}\n`,{mode:384}),n.renameSync(r,e)}process.argv[1]&&import.meta.url===r(process.argv[1]).href&&l().then(e=>{process.exitCode=e},e=>{process.stderr.write(`${e instanceof Error?e.message:String(e)}\n`),process.exitCode=1});export{l as main};
2
2
  //# sourceMappingURL=runnerHost.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"runnerHost.mjs","names":[],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../services/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"runnerHost.mjs","names":[],"sources":["../../src/bin/runnerHost.ts"],"sourcesContent":["import { type ChildProcess, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { pathToFileURL } from 'node:url';\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\nimport { LIFELINE_ENV, watchOwner } from '../adapters/Lifeline/client.ts';\n\ninterface CommandSpec {\n command: string;\n cwd: string;\n env: Record<string, string>;\n}\n\nconst POLL_MS = 10;\nconst FORWARDED_SIGNAL_GRACE_MS = 2_000;\nconst HOST_FAILED_EVENT = 'doom_runner.host_failed';\nconst INVALID_COMMAND_SPEC_ERROR = 'invalid runner command spec';\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-host',\n packageName: '@agimon-ai/doompi-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [specPath, gatePath, exitPath] = argv;\n let spec: CommandSpec;\n try {\n if (!specPath || !gatePath || !exitPath) throw new Error('runnerHost requires spec, gate, and exit paths');\n spec = readSpec(specPath);\n await waitForGate(gatePath);\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n await telemetry.shutdown();\n throw error;\n }\n let child: ChildProcess | undefined;\n let forwardedSignal: NodeJS.Signals | null = null;\n let escalationTimer: NodeJS.Timeout | undefined;\n const signalChild = (signal: NodeJS.Signals): void => {\n if (!child?.pid) return;\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n };\n const forward = (signal: NodeJS.Signals): void => {\n forwardedSignal = signal;\n signalChild(signal);\n escalationTimer ??= setTimeout(() => signalChild('SIGKILL'), FORWARDED_SIGNAL_GRACE_MS);\n };\n const signals: NodeJS.Signals[] = ['SIGTERM', 'SIGINT', 'SIGHUP'];\n for (const signal of signals) process.once(signal, () => forward(signal));\n\n child = spawn(spec.command, {\n cwd: spec.cwd,\n env: spec.env,\n shell: '/bin/bash',\n stdio: 'inherit',\n detached: true,\n });\n if (forwardedSignal) forward(forwardedSignal);\n\n // This process supervises the command for its whole life, so it is also the\n // right place to notice an owner that died without stopping it.\n //\n // The lifeline comes from the spec rather than this process's environment: an\n // rmux server outlives the session that started it, so its own environment can\n // still name a previous session's socket.\n const detachLifeline = watchOwner(() => forward('SIGTERM'), spec.env[LIFELINE_ENV]);\n\n try {\n const result = await new Promise<{ code: number | null; signal: NodeJS.Signals | null }>((resolve, reject) => {\n child?.once('error', reject);\n child?.once('exit', (code, signal) => resolve({ code, signal: signal ?? forwardedSignal }));\n });\n writeAtomic(exitPath, result);\n const exitCode = result.code !== null ? result.code : result.signal ? 128 + os.constants.signals[result.signal] : 1;\n await telemetry.recordEvent('doom_runner.host_finished', {\n outcome: result.signal || forwardedSignal ? 'signaled' : exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n ...(result.signal || forwardedSignal ? { 'runner.signal': result.signal ?? forwardedSignal ?? '' } : {}),\n duration_ms: Date.now() - startedAt,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError(HOST_FAILED_EVENT, error, { duration_ms: Date.now() - startedAt });\n throw error;\n } finally {\n detachLifeline();\n if (escalationTimer) clearTimeout(escalationTimer);\n await telemetry.shutdown();\n }\n}\n\nfunction readSpec(target: string): CommandSpec {\n const value: unknown = JSON.parse(fs.readFileSync(target, 'utf8'));\n if (typeof value !== 'object' || value === null) throw new Error(INVALID_COMMAND_SPEC_ERROR);\n const spec = value as Partial<CommandSpec>;\n if (typeof spec.command !== 'string' || typeof spec.cwd !== 'string' || !spec.env) {\n throw new Error(INVALID_COMMAND_SPEC_ERROR);\n }\n return { command: spec.command, cwd: spec.cwd, env: spec.env };\n}\n\nasync function waitForGate(target: string): Promise<void> {\n while (!fs.existsSync(target)) await new Promise((resolve) => setTimeout(resolve, POLL_MS));\n}\n\nfunction writeAtomic(target: string, value: unknown): void {\n const temporary = `${target}.${process.pid}.tmp`;\n fs.writeFileSync(temporary, `${JSON.stringify(value)}\\n`, { mode: 0o600 });\n fs.renameSync(temporary, target);\n}\n\nif (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../commands/cli/cliApp.cjs");exports.runCli=e.runCli;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/commands/cli/cliApp.cjs");exports.runCli=e.runCli;
@@ -1,2 +1,2 @@
1
- import { CliDependencies, runCli } from "../commands/cli/cliApp.cjs";
1
+ import { CliDependencies, runCli } from "../src/commands/cli/cliApp.cjs";
2
2
  export { CliDependencies, runCli };
@@ -1,2 +1,2 @@
1
- import { CliDependencies, runCli } from "../commands/cli/cliApp.mjs";
1
+ import { CliDependencies, runCli } from "../src/commands/cli/cliApp.mjs";
2
2
  export { CliDependencies, runCli };
@@ -1 +1 @@
1
- import{runCli as e}from"../commands/cli/cliApp.mjs";export{e as runCli};
1
+ import{runCli as e}from"../src/commands/cli/cliApp.mjs";export{e as runCli};
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/runs/compaction.cjs");exports.activeRunnerRecovery=e.activeRunnerRecovery,exports.appendActiveRunnersToSummary=e.appendActiveRunnersToSummary,exports.registerRunnerCompactionRecovery=e.registerRunnerCompactionRecovery;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/services/runs/compaction.cjs");exports.activeRunnerRecovery=e.activeRunnerRecovery,exports.appendActiveRunnersToSummary=e.appendActiveRunnersToSummary,exports.registerRunnerCompactionRecovery=e.registerRunnerCompactionRecovery;
@@ -1,2 +1,2 @@
1
- import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./services/runs/compaction.cjs";
1
+ import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.cjs";
2
2
  export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
@@ -1,2 +1,2 @@
1
- import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./services/runs/compaction.mjs";
1
+ import { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery } from "./src/services/runs/compaction.mjs";
2
2
  export { RunnerCompactionDependencies, activeRunnerRecovery, appendActiveRunnersToSummary, registerRunnerCompactionRecovery };
@@ -1 +1 @@
1
- import{activeRunnerRecovery as e,appendActiveRunnersToSummary as t,registerRunnerCompactionRecovery as n}from"./services/runs/compaction.mjs";export{e as activeRunnerRecovery,t as appendActiveRunnersToSummary,n as registerRunnerCompactionRecovery};
1
+ import{activeRunnerRecovery as e,appendActiveRunnersToSummary as t,registerRunnerCompactionRecovery as n}from"./src/services/runs/compaction.mjs";export{e as activeRunnerRecovery,t as appendActiveRunnersToSummary,n as registerRunnerCompactionRecovery};
package/dist/config.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/config.cjs");exports.BG_THRESHOLD_MS_ENV=e.BG_THRESHOLD_MS_ENV,exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,exports.LOG_DIR_ENV=e.LOG_DIR_ENV,exports.LOG_MAX_BYTES_ENV=e.LOG_MAX_BYTES_ENV,exports.LOG_TTL_MS_ENV=e.LOG_TTL_MS_ENV,exports.RESULT_MAX_BYTES_ENV=e.RESULT_MAX_BYTES_ENV,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/types/config.cjs");exports.BG_THRESHOLD_MS_ENV=e.BG_THRESHOLD_MS_ENV,exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,exports.LOG_DIR_ENV=e.LOG_DIR_ENV,exports.LOG_MAX_BYTES_ENV=e.LOG_MAX_BYTES_ENV,exports.LOG_TTL_MS_ENV=e.LOG_TTL_MS_ENV,exports.RESULT_MAX_BYTES_ENV=e.RESULT_MAX_BYTES_ENV,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
package/dist/config.d.cts CHANGED
@@ -1,2 +1,2 @@
1
- import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./types/config.cjs";
1
+ import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.cjs";
2
2
  export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
package/dist/config.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./types/config.mjs";
1
+ import { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.mjs";
2
2
  export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, RESULT_MAX_BYTES_ENV, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
package/dist/config.mjs CHANGED
@@ -1 +1 @@
1
- import{BG_THRESHOLD_MS_ENV as e,DEFAULT_BG_THRESHOLD_MS as t,DEFAULT_LOG_MAX_BYTES as n,DEFAULT_LOG_TTL_MS as r,DEFAULT_RESULT_MAX_BYTES as i,LOG_DIR_ENV as a,LOG_MAX_BYTES_ENV as o,LOG_TTL_MS_ENV as s,RESULT_MAX_BYTES_ENV as c,getBackgroundThresholdMs as l,getLogMaxBytes as u,getLogTtlMs as d,getResultMaxBytes as f}from"./types/config.mjs";export{e as BG_THRESHOLD_MS_ENV,t as DEFAULT_BG_THRESHOLD_MS,n as DEFAULT_LOG_MAX_BYTES,r as DEFAULT_LOG_TTL_MS,i as DEFAULT_RESULT_MAX_BYTES,a as LOG_DIR_ENV,o as LOG_MAX_BYTES_ENV,s as LOG_TTL_MS_ENV,c as RESULT_MAX_BYTES_ENV,l as getBackgroundThresholdMs,u as getLogMaxBytes,d as getLogTtlMs,f as getResultMaxBytes};
1
+ import{BG_THRESHOLD_MS_ENV as e,DEFAULT_BG_THRESHOLD_MS as t,DEFAULT_LOG_MAX_BYTES as n,DEFAULT_LOG_TTL_MS as r,DEFAULT_RESULT_MAX_BYTES as i,LOG_DIR_ENV as a,LOG_MAX_BYTES_ENV as o,LOG_TTL_MS_ENV as s,RESULT_MAX_BYTES_ENV as c,getBackgroundThresholdMs as l,getLogMaxBytes as u,getLogTtlMs as d,getResultMaxBytes as f}from"./src/types/config.mjs";export{e as BG_THRESHOLD_MS_ENV,t as DEFAULT_BG_THRESHOLD_MS,n as DEFAULT_LOG_MAX_BYTES,r as DEFAULT_LOG_TTL_MS,i as DEFAULT_RESULT_MAX_BYTES,a as LOG_DIR_ENV,o as LOG_MAX_BYTES_ENV,s as LOG_TTL_MS_ENV,c as RESULT_MAX_BYTES_ENV,l as getBackgroundThresholdMs,u as getLogMaxBytes,d as getLogTtlMs,f as getResultMaxBytes};
@@ -1,2 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../types/index.cjs"),t=require("../services/BashRunService/BashRunService.cjs");require("../services/BashRunService/index.cjs");const n=require("../services/Clock/SystemClock.cjs");require("../services/Clock/index.cjs");const r=require("../services/Launcher/Launcher.cjs");require("../services/Launcher/index.cjs");const i=require("../services/Lifeline/NodeLifeline.cjs");require("../services/Lifeline/index.cjs");const a=require("../services/LogFile/LogFile.cjs");require("../services/LogFile/index.cjs");const o=require("../services/LogReader/LogReader.cjs");require("../services/LogReader/index.cjs");const s=require("../services/ProcessControl/NodeProcessControl.cjs");require("../services/ProcessControl/index.cjs");const c=require("../services/PtyHost/PtyHost.cjs");require("../services/PtyHost/index.cjs");const l=require("../services/PtySpawner/NodePtySpawner.cjs");require("../services/PtySpawner/index.cjs");const u=require("../services/RmuxBackend/RmuxBackend.cjs");require("../services/RmuxBackend/index.cjs");const d=require("../services/RunnerNamer/RunnerNamer.cjs");require("../services/RunnerNamer/index.cjs");const f=require("../adapters/RunnerPaths.cjs");require("../services/RunnerPaths/index.cjs");const p=require("../services/RunnerRegistry/RunnerRegistry.cjs");require("../services/RunnerRegistry/index.cjs");const m=require("../services/Spawner/NodeSpawner.cjs");require("../services/Spawner/index.cjs");let h=require("inversify");require("reflect-metadata/lite");function g(){let g=new h.Container;return g.bind(e.TYPES.Clock).to(n.SystemClock).inSingletonScope(),g.bind(e.TYPES.Spawner).to(m.NodeSpawner).inSingletonScope(),g.bind(e.TYPES.ProcessControl).to(s.NodeProcessControl).inSingletonScope(),g.bind(e.TYPES.PtySpawner).to(l.NodePtySpawner).inSingletonScope(),g.bind(e.TYPES.RunnerPaths).to(f.RunnerPaths).inSingletonScope(),g.bind(e.TYPES.Lifeline).to(i.NodeLifeline).inSingletonScope(),g.bind(e.TYPES.ProcessRegistry).toDynamicValue(()=>p.createDefaultProcessRegistry()).inSingletonScope(),g.bind(e.TYPES.RunnerRegistry).to(p.RunnerRegistry).inSingletonScope(),g.bind(e.TYPES.RunnerNamer).to(d.RunnerNamer).inSingletonScope(),g.bind(e.TYPES.LogFile).to(a.LogFile).inSingletonScope(),g.bind(e.TYPES.LogReader).to(o.LogReader).inSingletonScope(),g.bind(e.TYPES.Launcher).to(r.Launcher).inSingletonScope(),g.bind(e.TYPES.RmuxBackend).to(u.RmuxBackend).inSingletonScope(),g.bind(e.TYPES.PtyHost).to(c.PtyHost).inSingletonScope(),g.bind(e.TYPES.BashRunService).to(t.BashRunService).inSingletonScope(),g}exports.createRunnerContainer=g;
2
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../src/container/index.cjs");exports.createRunnerContainer=e.createRunnerContainer;
@@ -1,14 +1,2 @@
1
- import "reflect-metadata/lite";
2
- import { Container } from "inversify";
3
- //#region src/container/index.d.ts
4
- /**
5
- * Builds the extension's service graph.
6
- *
7
- * A factory rather than a module-level singleton: the extension owns one
8
- * container per session, and tests get a fresh graph they can rebind ports on
9
- * without leaking state between cases.
10
- */
11
- declare function createRunnerContainer(): Container;
12
- //#endregion
13
- export { createRunnerContainer };
14
- //# sourceMappingURL=index.d.cts.map
1
+ import { createRunnerContainer } from "../src/container/index.cjs";
2
+ export { createRunnerContainer };
@@ -1,14 +1,2 @@
1
- import { Container } from "inversify";
2
- import "reflect-metadata/lite";
3
- //#region src/container/index.d.ts
4
- /**
5
- * Builds the extension's service graph.
6
- *
7
- * A factory rather than a module-level singleton: the extension owns one
8
- * container per session, and tests get a fresh graph they can rebind ports on
9
- * without leaking state between cases.
10
- */
11
- declare function createRunnerContainer(): Container;
12
- //#endregion
13
- export { createRunnerContainer };
14
- //# sourceMappingURL=index.d.mts.map
1
+ import { createRunnerContainer } from "../src/container/index.mjs";
2
+ export { createRunnerContainer };
@@ -1,2 +1 @@
1
- import{TYPES as e}from"../types/index.mjs";import{BashRunService as t}from"../services/BashRunService/BashRunService.mjs";import"../services/BashRunService/index.mjs";import{SystemClock as n}from"../services/Clock/SystemClock.mjs";import"../services/Clock/index.mjs";import{Launcher as r}from"../services/Launcher/Launcher.mjs";import"../services/Launcher/index.mjs";import{NodeLifeline as i}from"../services/Lifeline/NodeLifeline.mjs";import"../services/Lifeline/index.mjs";import{LogFile as a}from"../services/LogFile/LogFile.mjs";import"../services/LogFile/index.mjs";import{LogReader as o}from"../services/LogReader/LogReader.mjs";import"../services/LogReader/index.mjs";import{NodeProcessControl as s}from"../services/ProcessControl/NodeProcessControl.mjs";import"../services/ProcessControl/index.mjs";import{PtyHost as c}from"../services/PtyHost/PtyHost.mjs";import"../services/PtyHost/index.mjs";import{NodePtySpawner as l}from"../services/PtySpawner/NodePtySpawner.mjs";import"../services/PtySpawner/index.mjs";import{RmuxBackend as u}from"../services/RmuxBackend/RmuxBackend.mjs";import"../services/RmuxBackend/index.mjs";import{RunnerNamer as d}from"../services/RunnerNamer/RunnerNamer.mjs";import"../services/RunnerNamer/index.mjs";import{RunnerPaths as f}from"../adapters/RunnerPaths.mjs";import"../services/RunnerPaths/index.mjs";import{RunnerRegistry as p,createDefaultProcessRegistry as m}from"../services/RunnerRegistry/RunnerRegistry.mjs";import"../services/RunnerRegistry/index.mjs";import{NodeSpawner as h}from"../services/Spawner/NodeSpawner.mjs";import"../services/Spawner/index.mjs";import{Container as g}from"inversify";import"reflect-metadata/lite";function _(){let _=new g;return _.bind(e.Clock).to(n).inSingletonScope(),_.bind(e.Spawner).to(h).inSingletonScope(),_.bind(e.ProcessControl).to(s).inSingletonScope(),_.bind(e.PtySpawner).to(l).inSingletonScope(),_.bind(e.RunnerPaths).to(f).inSingletonScope(),_.bind(e.Lifeline).to(i).inSingletonScope(),_.bind(e.ProcessRegistry).toDynamicValue(()=>m()).inSingletonScope(),_.bind(e.RunnerRegistry).to(p).inSingletonScope(),_.bind(e.RunnerNamer).to(d).inSingletonScope(),_.bind(e.LogFile).to(a).inSingletonScope(),_.bind(e.LogReader).to(o).inSingletonScope(),_.bind(e.Launcher).to(r).inSingletonScope(),_.bind(e.RmuxBackend).to(u).inSingletonScope(),_.bind(e.PtyHost).to(c).inSingletonScope(),_.bind(e.BashRunService).to(t).inSingletonScope(),_}export{_ as createRunnerContainer};
2
- //# sourceMappingURL=index.mjs.map
1
+ import{createRunnerContainer as e}from"../src/container/index.mjs";export{e as createRunnerContainer};
@@ -1,2 +1 @@
1
- var e=require("../adapters/pi/extension.cjs").runnerExtension;module.exports=e;
2
- //# sourceMappingURL=pi.cjs.map
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require("../src/adapters/pi/extension.cjs");exports.default=e.default,exports.runnerExtension=e.default;
@@ -1,2 +1,2 @@
1
- import { runnerExtension } from "../adapters/pi/extension.cjs";
2
- export = runnerExtension;
1
+ import runnerExtension from "../src/adapters/pi/extension.cjs";
2
+ export { runnerExtension as default, runnerExtension };
@@ -1,2 +1,2 @@
1
- import { runnerExtension } from "../adapters/pi/extension.mjs";
2
- export { runnerExtension as default };
1
+ import runnerExtension from "../src/adapters/pi/extension.mjs";
2
+ export { runnerExtension as default, runnerExtension };
@@ -1,2 +1 @@
1
- import{runnerExtension as e}from"../adapters/pi/extension.mjs";var t=e;export{t as default};
2
- //# sourceMappingURL=pi.mjs.map
1
+ import e from"../src/adapters/pi/extension.mjs";export{e as default,e as runnerExtension};
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./types/config.cjs"),t=require("./types/index.cjs"),n=require("./services/RmuxBackend/RmuxBackend.cjs");require("./services/RmuxBackend/index.cjs");const r=require("./container/index.cjs");exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,Object.defineProperty(exports,"RmuxBackend",{enumerable:!0,get:function(){return n.RmuxBackend}}),exports.TYPES=t.TYPES,exports.createRunnerContainer=r.createRunnerContainer,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/types/config.cjs"),t=require("./src/adapters/RmuxBackend/RmuxBackend.cjs"),n=require("./src/container/index.cjs");exports.DEFAULT_BG_THRESHOLD_MS=e.DEFAULT_BG_THRESHOLD_MS,exports.DEFAULT_LOG_MAX_BYTES=e.DEFAULT_LOG_MAX_BYTES,exports.DEFAULT_LOG_TTL_MS=e.DEFAULT_LOG_TTL_MS,exports.DEFAULT_RESULT_MAX_BYTES=e.DEFAULT_RESULT_MAX_BYTES,exports.RmuxBackend=t.RmuxBackend,exports.createRunnerContainer=n.createRunnerContainer,exports.getBackgroundThresholdMs=e.getBackgroundThresholdMs,exports.getLogMaxBytes=e.getLogMaxBytes,exports.getLogTtlMs=e.getLogTtlMs,exports.getResultMaxBytes=e.getResultMaxBytes;
package/dist/index.d.cts CHANGED
@@ -1,7 +1,5 @@
1
- import { IRmuxBackend, RmuxLaunchRequest } from "./services/RmuxBackend/types.cjs";
2
- import { RmuxBackend } from "./services/RmuxBackend/RmuxBackend.cjs";
3
- import "./services/RmuxBackend/index.cjs";
4
- import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./types/config.cjs";
5
- import { createRunnerContainer } from "./container/index.cjs";
6
- import { TYPES } from "./types/index.cjs";
7
- export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, TYPES, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
1
+ import { IRmuxBackend, RmuxLaunchRequest } from "./src/types/rmuxBackend.cjs";
2
+ import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.cjs";
3
+ import { createRunnerContainer } from "./src/container/index.cjs";
4
+ import { RmuxBackend } from "./src/adapters/RmuxBackend/RmuxBackend.cjs";
5
+ export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
package/dist/index.d.mts CHANGED
@@ -1,7 +1,5 @@
1
- import { IRmuxBackend, RmuxLaunchRequest } from "./services/RmuxBackend/types.mjs";
2
- import { RmuxBackend } from "./services/RmuxBackend/RmuxBackend.mjs";
3
- import "./services/RmuxBackend/index.mjs";
4
- import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./types/config.mjs";
5
- import { createRunnerContainer } from "./container/index.mjs";
6
- import { TYPES } from "./types/index.mjs";
7
- export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, TYPES, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
1
+ import { IRmuxBackend, RmuxLaunchRequest } from "./src/types/rmuxBackend.mjs";
2
+ import { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes } from "./src/types/config.mjs";
3
+ import { createRunnerContainer } from "./src/container/index.mjs";
4
+ import { RmuxBackend } from "./src/adapters/RmuxBackend/RmuxBackend.mjs";
5
+ export { DEFAULT_BG_THRESHOLD_MS, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_RESULT_MAX_BYTES, type IRmuxBackend, RmuxBackend, type RmuxLaunchRequest, createRunnerContainer, getBackgroundThresholdMs, getLogMaxBytes, getLogTtlMs, getResultMaxBytes };
package/dist/index.mjs CHANGED
@@ -1 +1 @@
1
- import{DEFAULT_BG_THRESHOLD_MS as e,DEFAULT_LOG_MAX_BYTES as t,DEFAULT_LOG_TTL_MS as n,DEFAULT_RESULT_MAX_BYTES as r,getBackgroundThresholdMs as i,getLogMaxBytes as a,getLogTtlMs as o,getResultMaxBytes as s}from"./types/config.mjs";import{TYPES as c}from"./types/index.mjs";import{RmuxBackend as l}from"./services/RmuxBackend/RmuxBackend.mjs";import"./services/RmuxBackend/index.mjs";import{createRunnerContainer as u}from"./container/index.mjs";export{e as DEFAULT_BG_THRESHOLD_MS,t as DEFAULT_LOG_MAX_BYTES,n as DEFAULT_LOG_TTL_MS,r as DEFAULT_RESULT_MAX_BYTES,l as RmuxBackend,c as TYPES,u as createRunnerContainer,i as getBackgroundThresholdMs,a as getLogMaxBytes,o as getLogTtlMs,s as getResultMaxBytes};
1
+ import{DEFAULT_BG_THRESHOLD_MS as e,DEFAULT_LOG_MAX_BYTES as t,DEFAULT_LOG_TTL_MS as n,DEFAULT_RESULT_MAX_BYTES as r,getBackgroundThresholdMs as i,getLogMaxBytes as a,getLogTtlMs as o,getResultMaxBytes as s}from"./src/types/config.mjs";import{RmuxBackend as c}from"./src/adapters/RmuxBackend/RmuxBackend.mjs";import{createRunnerContainer as l}from"./src/container/index.mjs";export{e as DEFAULT_BG_THRESHOLD_MS,t as DEFAULT_LOG_MAX_BYTES,n as DEFAULT_LOG_TTL_MS,r as DEFAULT_RESULT_MAX_BYTES,c as RmuxBackend,l as createRunnerContainer,i as getBackgroundThresholdMs,a as getLogMaxBytes,o as getLogTtlMs,s as getResultMaxBytes};
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./adapters/pty/ptyProvider.cjs");exports.provideRunnerPty=e.provideRunnerPty;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/adapters/pty/ptyProvider.cjs");exports.provideRunnerPty=e.provideRunnerPty;
@@ -1,2 +1,2 @@
1
- import { PtyProviderOptions, provideRunnerPty } from "./adapters/pty/ptyProvider.cjs";
1
+ import { PtyProviderOptions, provideRunnerPty } from "./src/adapters/pty/ptyProvider.cjs";
2
2
  export { PtyProviderOptions, provideRunnerPty };
@@ -1,2 +1,2 @@
1
- import { PtyProviderOptions, provideRunnerPty } from "./adapters/pty/ptyProvider.mjs";
1
+ import { PtyProviderOptions, provideRunnerPty } from "./src/adapters/pty/ptyProvider.mjs";
2
2
  export { PtyProviderOptions, provideRunnerPty };
@@ -1 +1 @@
1
- import{provideRunnerPty as e}from"./adapters/pty/ptyProvider.mjs";export{e as provideRunnerPty};
1
+ import{provideRunnerPty as e}from"./src/adapters/pty/ptyProvider.mjs";export{e as provideRunnerPty};
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./services/runs/reconcile.cjs");exports.cleanupLegacyRunnerStore=e.cleanupLegacyRunnerStore,exports.reconcileActiveRunners=e.reconcileActiveRunners,exports.stopRunnerProcess=e.stopRunnerProcess;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src/services/runs/reconcile.cjs");exports.cleanupLegacyRunnerStore=e.cleanupLegacyRunnerStore,exports.reconcileActiveRunners=e.reconcileActiveRunners,exports.stopRunnerProcess=e.stopRunnerProcess;
@@ -1,2 +1,2 @@
1
- import { RunnerReconcileResult, cleanupLegacyRunnerStore, reconcileActiveRunners, stopRunnerProcess } from "./services/runs/reconcile.cjs";
1
+ import { RunnerReconcileResult, cleanupLegacyRunnerStore, reconcileActiveRunners, stopRunnerProcess } from "./src/services/runs/reconcile.cjs";
2
2
  export { RunnerReconcileResult, cleanupLegacyRunnerStore, reconcileActiveRunners, stopRunnerProcess };