@agimon-ai/po-runner 0.0.0-alpha.0

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 (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/dist/ansiScrub-CsqTSaVT.mjs +71 -0
  4. package/dist/ansiScrub-CsqTSaVT.mjs.map +1 -0
  5. package/dist/ansiScrub-D5gpHDch.cjs +100 -0
  6. package/dist/ansiScrub-D5gpHDch.cjs.map +1 -0
  7. package/dist/ansiScrub.cjs +7 -0
  8. package/dist/ansiScrub.d.mts +26 -0
  9. package/dist/ansiScrub.d.mts.map +1 -0
  10. package/dist/ansiScrub.mjs +2 -0
  11. package/dist/apiContracts.cjs +162 -0
  12. package/dist/apiContracts.cjs.map +1 -0
  13. package/dist/apiContracts.d.mts +53 -0
  14. package/dist/apiContracts.d.mts.map +1 -0
  15. package/dist/apiContracts.mjs +157 -0
  16. package/dist/apiContracts.mjs.map +1 -0
  17. package/dist/bashResult-DNgtahGR.cjs +629 -0
  18. package/dist/bashResult-DNgtahGR.cjs.map +1 -0
  19. package/dist/bashResult-DcrRaBLv.d.mts +49 -0
  20. package/dist/bashResult-DcrRaBLv.d.mts.map +1 -0
  21. package/dist/bashResult-bIVSzoj-.mjs +546 -0
  22. package/dist/bashResult-bIVSzoj-.mjs.map +1 -0
  23. package/dist/bashRunService-CJ02XaAq.mjs +440 -0
  24. package/dist/bashRunService-CJ02XaAq.mjs.map +1 -0
  25. package/dist/bashRunService-Ci0cGdYO.d.mts +71 -0
  26. package/dist/bashRunService-Ci0cGdYO.d.mts.map +1 -0
  27. package/dist/bashRunService-DyqxOSlx.cjs +445 -0
  28. package/dist/bashRunService-DyqxOSlx.cjs.map +1 -0
  29. package/dist/bashRunService.cjs +3 -0
  30. package/dist/bashRunService.d.mts +36 -0
  31. package/dist/bashRunService.d.mts.map +1 -0
  32. package/dist/bashRunService.mjs +2 -0
  33. package/dist/bashSchema.cjs +5 -0
  34. package/dist/bashSchema.d.mts +7 -0
  35. package/dist/bashSchema.d.mts.map +1 -0
  36. package/dist/bashSchema.mjs +2 -0
  37. package/dist/bashTool-B1EwZLo_.d.mts +20 -0
  38. package/dist/bashTool-B1EwZLo_.d.mts.map +1 -0
  39. package/dist/bashTool-C-k7fmyh.mjs +24 -0
  40. package/dist/bashTool-C-k7fmyh.mjs.map +1 -0
  41. package/dist/bashTool-CdgtqVFD.cjs +41 -0
  42. package/dist/bashTool-CdgtqVFD.cjs.map +1 -0
  43. package/dist/bashTool.cjs +13 -0
  44. package/dist/bashTool.cjs.map +1 -0
  45. package/dist/bashTool.d.mts +8 -0
  46. package/dist/bashTool.d.mts.map +1 -0
  47. package/dist/bashTool.mjs +11 -0
  48. package/dist/bashTool.mjs.map +1 -0
  49. package/dist/bin/cli.cjs +78 -0
  50. package/dist/bin/cli.cjs.map +1 -0
  51. package/dist/bin/cli.d.mts +4 -0
  52. package/dist/bin/cli.d.mts.map +1 -0
  53. package/dist/bin/cli.mjs +77 -0
  54. package/dist/bin/cli.mjs.map +1 -0
  55. package/dist/bin/logSink.cjs +102 -0
  56. package/dist/bin/logSink.cjs.map +1 -0
  57. package/dist/bin/logSink.d.mts +4 -0
  58. package/dist/bin/logSink.d.mts.map +1 -0
  59. package/dist/bin/logSink.mjs +99 -0
  60. package/dist/bin/logSink.mjs.map +1 -0
  61. package/dist/bin/runnerHost.cjs +131 -0
  62. package/dist/bin/runnerHost.cjs.map +1 -0
  63. package/dist/bin/runnerHost.d.mts +4 -0
  64. package/dist/bin/runnerHost.d.mts.map +1 -0
  65. package/dist/bin/runnerHost.mjs +127 -0
  66. package/dist/bin/runnerHost.mjs.map +1 -0
  67. package/dist/cliApp-Dj9nwaOv.cjs +244 -0
  68. package/dist/cliApp-Dj9nwaOv.cjs.map +1 -0
  69. package/dist/cliApp-v8Z3rMCi.mjs +237 -0
  70. package/dist/cliApp-v8Z3rMCi.mjs.map +1 -0
  71. package/dist/cliApp.cjs +3 -0
  72. package/dist/cliApp.d.mts +18 -0
  73. package/dist/cliApp.d.mts.map +1 -0
  74. package/dist/cliApp.mjs +2 -0
  75. package/dist/clock-Cv2pddgo.mjs +16 -0
  76. package/dist/clock-Cv2pddgo.mjs.map +1 -0
  77. package/dist/clock-euJkweLq.d.mts +11 -0
  78. package/dist/clock-euJkweLq.d.mts.map +1 -0
  79. package/dist/clock-jqnLWziT.cjs +21 -0
  80. package/dist/clock-jqnLWziT.cjs.map +1 -0
  81. package/dist/clock.cjs +3 -0
  82. package/dist/clock.d.mts +10 -0
  83. package/dist/clock.d.mts.map +1 -0
  84. package/dist/clock.mjs +2 -0
  85. package/dist/compaction-4QSUsBxq.cjs +40 -0
  86. package/dist/compaction-4QSUsBxq.cjs.map +1 -0
  87. package/dist/compaction-DCw80VZj.mjs +29 -0
  88. package/dist/compaction-DCw80VZj.mjs.map +1 -0
  89. package/dist/compaction.cjs +4 -0
  90. package/dist/compaction.d.mts +10 -0
  91. package/dist/compaction.d.mts.map +1 -0
  92. package/dist/compaction.mjs +2 -0
  93. package/dist/config.cjs +41 -0
  94. package/dist/config.d.mts +2 -0
  95. package/dist/config.mjs +2 -0
  96. package/dist/extensions/mcp-ui.mjs +23 -0
  97. package/dist/extensions/mcp-ui.mjs.map +1 -0
  98. package/dist/extensions/mcp.cjs +142 -0
  99. package/dist/extensions/mcp.cjs.map +1 -0
  100. package/dist/extensions/mcp.d.mts +5 -0
  101. package/dist/extensions/mcp.d.mts.map +1 -0
  102. package/dist/extensions/mcp.mjs +114 -0
  103. package/dist/extensions/mcp.mjs.map +1 -0
  104. package/dist/extensions/server.cjs +1156 -0
  105. package/dist/extensions/server.cjs.map +1 -0
  106. package/dist/extensions/server.d.mts +5 -0
  107. package/dist/extensions/server.d.mts.map +1 -0
  108. package/dist/extensions/server.mjs +1146 -0
  109. package/dist/extensions/server.mjs.map +1 -0
  110. package/dist/extensions/web.mjs +1785 -0
  111. package/dist/extensions/web.mjs.map +1 -0
  112. package/dist/headless-BGYfIlNk.mjs +169 -0
  113. package/dist/headless-BGYfIlNk.mjs.map +1 -0
  114. package/dist/headless-CHUsBGhg.cjs +180 -0
  115. package/dist/headless-CHUsBGhg.cjs.map +1 -0
  116. package/dist/index-BZL7keVW.d.mts +31 -0
  117. package/dist/index-BZL7keVW.d.mts.map +1 -0
  118. package/dist/index-BwB_jTI9.d.mts +12 -0
  119. package/dist/index-BwB_jTI9.d.mts.map +1 -0
  120. package/dist/index-D9-IXax4.d.mts +43 -0
  121. package/dist/index-D9-IXax4.d.mts.map +1 -0
  122. package/dist/index-DBz0DxnL.d.mts +39 -0
  123. package/dist/index-DBz0DxnL.d.mts.map +1 -0
  124. package/dist/index-DM7yJpMs.d.mts +25 -0
  125. package/dist/index-DM7yJpMs.d.mts.map +1 -0
  126. package/dist/index-Dhi8asLH.d.mts +22 -0
  127. package/dist/index-Dhi8asLH.d.mts.map +1 -0
  128. package/dist/index.cjs +19 -0
  129. package/dist/index.d.mts +7 -0
  130. package/dist/index.mjs +6 -0
  131. package/dist/launcher-BDm6-DiQ.mjs +150 -0
  132. package/dist/launcher-BDm6-DiQ.mjs.map +1 -0
  133. package/dist/launcher-BG5t9nvG.d.mts +39 -0
  134. package/dist/launcher-BG5t9nvG.d.mts.map +1 -0
  135. package/dist/launcher-SlyE8R3b.cjs +157 -0
  136. package/dist/launcher-SlyE8R3b.cjs.map +1 -0
  137. package/dist/launcher.cjs +3 -0
  138. package/dist/launcher.d.mts +33 -0
  139. package/dist/launcher.d.mts.map +1 -0
  140. package/dist/launcher.mjs +2 -0
  141. package/dist/lifeline-BZaQA0rm.mjs +88 -0
  142. package/dist/lifeline-BZaQA0rm.mjs.map +1 -0
  143. package/dist/lifeline-BuV_erib.cjs +98 -0
  144. package/dist/lifeline-BuV_erib.cjs.map +1 -0
  145. package/dist/lifeline-eJdZV0nN.d.mts +19 -0
  146. package/dist/lifeline-eJdZV0nN.d.mts.map +1 -0
  147. package/dist/lifeline.cjs +6 -0
  148. package/dist/lifeline.d.mts +21 -0
  149. package/dist/lifeline.d.mts.map +1 -0
  150. package/dist/lifeline.mjs +3 -0
  151. package/dist/logFile-C7oQ_v-g.d.mts +16 -0
  152. package/dist/logFile-C7oQ_v-g.d.mts.map +1 -0
  153. package/dist/logFile-CNvepZh0.cjs +67 -0
  154. package/dist/logFile-CNvepZh0.cjs.map +1 -0
  155. package/dist/logFile-KKPbkC-a.mjs +60 -0
  156. package/dist/logFile-KKPbkC-a.mjs.map +1 -0
  157. package/dist/logFile.cjs +3 -0
  158. package/dist/logFile.d.mts +11 -0
  159. package/dist/logFile.d.mts.map +1 -0
  160. package/dist/logFile.mjs +2 -0
  161. package/dist/logReader-B6J7L7Ua.cjs +282 -0
  162. package/dist/logReader-B6J7L7Ua.cjs.map +1 -0
  163. package/dist/logReader-MdW9ffvV.d.mts +43 -0
  164. package/dist/logReader-MdW9ffvV.d.mts.map +1 -0
  165. package/dist/logReader-UfbDbwQl.mjs +257 -0
  166. package/dist/logReader-UfbDbwQl.mjs.map +1 -0
  167. package/dist/logReader.cjs +4 -0
  168. package/dist/logReader.d.mts +3 -0
  169. package/dist/logReader.mjs +2 -0
  170. package/dist/processControl-BAOa3oo_.d.mts +14 -0
  171. package/dist/processControl-BAOa3oo_.d.mts.map +1 -0
  172. package/dist/processControl-DApTpV16.mjs +26 -0
  173. package/dist/processControl-DApTpV16.mjs.map +1 -0
  174. package/dist/processControl-DNJ1WZ9N.cjs +31 -0
  175. package/dist/processControl-DNJ1WZ9N.cjs.map +1 -0
  176. package/dist/processControl.cjs +3 -0
  177. package/dist/processControl.d.mts +10 -0
  178. package/dist/processControl.d.mts.map +1 -0
  179. package/dist/processControl.mjs +2 -0
  180. package/dist/ptyHost-DWWtRrGn.d.mts +38 -0
  181. package/dist/ptyHost-DWWtRrGn.d.mts.map +1 -0
  182. package/dist/ptyHost-DlQtTB8F.mjs +150 -0
  183. package/dist/ptyHost-DlQtTB8F.mjs.map +1 -0
  184. package/dist/ptyHost-MI2Z6WTG.cjs +157 -0
  185. package/dist/ptyHost-MI2Z6WTG.cjs.map +1 -0
  186. package/dist/ptyHost.cjs +3 -0
  187. package/dist/ptyHost.d.mts +26 -0
  188. package/dist/ptyHost.d.mts.map +1 -0
  189. package/dist/ptyHost.mjs +2 -0
  190. package/dist/ptySpawner-B6GsueZd.d.mts +28 -0
  191. package/dist/ptySpawner-B6GsueZd.d.mts.map +1 -0
  192. package/dist/ptySpawner-DEi1KOnd.mjs +17 -0
  193. package/dist/ptySpawner-DEi1KOnd.mjs.map +1 -0
  194. package/dist/ptySpawner-ijw0g5_T.cjs +22 -0
  195. package/dist/ptySpawner-ijw0g5_T.cjs.map +1 -0
  196. package/dist/ptySpawner.cjs +3 -0
  197. package/dist/ptySpawner.d.mts +14 -0
  198. package/dist/ptySpawner.d.mts.map +1 -0
  199. package/dist/ptySpawner.mjs +2 -0
  200. package/dist/reconcile-BugwYFbV.cjs +133 -0
  201. package/dist/reconcile-BugwYFbV.cjs.map +1 -0
  202. package/dist/reconcile-DMeNSxwn.mjs +114 -0
  203. package/dist/reconcile-DMeNSxwn.mjs.map +1 -0
  204. package/dist/reconcile.cjs +5 -0
  205. package/dist/reconcile.d.mts +36 -0
  206. package/dist/reconcile.d.mts.map +1 -0
  207. package/dist/reconcile.mjs +2 -0
  208. package/dist/responseEnvelope.cjs +19 -0
  209. package/dist/responseEnvelope.d.mts +50 -0
  210. package/dist/responseEnvelope.d.mts.map +1 -0
  211. package/dist/responseEnvelope.mjs +3 -0
  212. package/dist/rmuxBackend-CaEWooWn.d.mts +36 -0
  213. package/dist/rmuxBackend-CaEWooWn.d.mts.map +1 -0
  214. package/dist/rmuxBackend-DfyQwJrc.mjs +509 -0
  215. package/dist/rmuxBackend-DfyQwJrc.mjs.map +1 -0
  216. package/dist/rmuxBackend-DlxgqRZ1.cjs +523 -0
  217. package/dist/rmuxBackend-DlxgqRZ1.cjs.map +1 -0
  218. package/dist/rmuxBackend.cjs +4 -0
  219. package/dist/rmuxBackend.d.mts +3 -0
  220. package/dist/rmuxBackend.mjs +2 -0
  221. package/dist/rolldown-runtime-VH7oDXx4.cjs +28 -0
  222. package/dist/rtkProcessor-B4_urXQr.mjs +10 -0
  223. package/dist/rtkProcessor-B4_urXQr.mjs.map +1 -0
  224. package/dist/rtkProcessor-B9KPdyzr.mjs +309 -0
  225. package/dist/rtkProcessor-B9KPdyzr.mjs.map +1 -0
  226. package/dist/rtkProcessor-Bc4L4o_8.cjs +335 -0
  227. package/dist/rtkProcessor-Bc4L4o_8.cjs.map +1 -0
  228. package/dist/rtkProcessor-CVZvNhkJ.d.mts +35 -0
  229. package/dist/rtkProcessor-CVZvNhkJ.d.mts.map +1 -0
  230. package/dist/rtkProcessor-CsrCPyTQ.cjs +33 -0
  231. package/dist/rtkProcessor-CsrCPyTQ.cjs.map +1 -0
  232. package/dist/rtkProcessor.cjs +11 -0
  233. package/dist/rtkProcessor.d.mts +7 -0
  234. package/dist/rtkProcessor.d.mts.map +1 -0
  235. package/dist/rtkProcessor.mjs +3 -0
  236. package/dist/runnerConfig-BQBlVAXn.mjs +134 -0
  237. package/dist/runnerConfig-BQBlVAXn.mjs.map +1 -0
  238. package/dist/runnerConfig-BjtulXBI.d.mts +57 -0
  239. package/dist/runnerConfig-BjtulXBI.d.mts.map +1 -0
  240. package/dist/runnerConfig-D2tGq5ZM.cjs +367 -0
  241. package/dist/runnerConfig-D2tGq5ZM.cjs.map +1 -0
  242. package/dist/runnerDependencies-DruByBGS.mjs +647 -0
  243. package/dist/runnerDependencies-DruByBGS.mjs.map +1 -0
  244. package/dist/runnerDependencies-KMZigIxB.cjs +667 -0
  245. package/dist/runnerDependencies-KMZigIxB.cjs.map +1 -0
  246. package/dist/runnerDependencies.cjs +3 -0
  247. package/dist/runnerDependencies.d.mts +2 -0
  248. package/dist/runnerDependencies.mjs +2 -0
  249. package/dist/runnerNamer-B8FH7n2v.mjs +44 -0
  250. package/dist/runnerNamer-B8FH7n2v.mjs.map +1 -0
  251. package/dist/runnerNamer-we1XVYfM.cjs +49 -0
  252. package/dist/runnerNamer-we1XVYfM.cjs.map +1 -0
  253. package/dist/runnerNamer.cjs +3 -0
  254. package/dist/runnerNamer.d.mts +11 -0
  255. package/dist/runnerNamer.d.mts.map +1 -0
  256. package/dist/runnerNamer.mjs +2 -0
  257. package/dist/runnerPaths-BTEuzxw0.cjs +471 -0
  258. package/dist/runnerPaths-BTEuzxw0.cjs.map +1 -0
  259. package/dist/runnerPaths-B_dAAeco.mjs +451 -0
  260. package/dist/runnerPaths-B_dAAeco.mjs.map +1 -0
  261. package/dist/runnerPaths.cjs +3 -0
  262. package/dist/runnerPaths.d.mts +50 -0
  263. package/dist/runnerPaths.d.mts.map +1 -0
  264. package/dist/runnerPaths.mjs +2 -0
  265. package/dist/runnerRegistry-BmkZTJHi.cjs +371 -0
  266. package/dist/runnerRegistry-BmkZTJHi.cjs.map +1 -0
  267. package/dist/runnerRegistry-CeOHEjBv.mjs +339 -0
  268. package/dist/runnerRegistry-CeOHEjBv.mjs.map +1 -0
  269. package/dist/runnerRegistry-CtJiD02R.d.mts +88 -0
  270. package/dist/runnerRegistry-CtJiD02R.d.mts.map +1 -0
  271. package/dist/runnerRegistry.cjs +4 -0
  272. package/dist/runnerRegistry.d.mts +3 -0
  273. package/dist/runnerRegistry.mjs +2 -0
  274. package/dist/runnerSettings-DiV1lvzx.d.mts +34 -0
  275. package/dist/runnerSettings-DiV1lvzx.d.mts.map +1 -0
  276. package/dist/services/lifeline/client.cjs +52 -0
  277. package/dist/services/lifeline/client.cjs.map +1 -0
  278. package/dist/services/lifeline/client.d.mts +22 -0
  279. package/dist/services/lifeline/client.d.mts.map +1 -0
  280. package/dist/services/lifeline/client.mjs +48 -0
  281. package/dist/services/lifeline/client.mjs.map +1 -0
  282. package/dist/services/runnerSupervisor/index.cjs +207 -0
  283. package/dist/services/runnerSupervisor/index.cjs.map +1 -0
  284. package/dist/services/runnerSupervisor/index.d.mts +71 -0
  285. package/dist/services/runnerSupervisor/index.d.mts.map +1 -0
  286. package/dist/services/runnerSupervisor/index.mjs +195 -0
  287. package/dist/services/runnerSupervisor/index.mjs.map +1 -0
  288. package/dist/session-BC43uEyG.cjs +29 -0
  289. package/dist/session-BC43uEyG.cjs.map +1 -0
  290. package/dist/session-Chsb_Nh2.mjs +18 -0
  291. package/dist/session-Chsb_Nh2.mjs.map +1 -0
  292. package/dist/session-DE2Acesp.mjs +6 -0
  293. package/dist/session-DE2Acesp.mjs.map +1 -0
  294. package/dist/session-SfIPtdZO.cjs +11 -0
  295. package/dist/session-SfIPtdZO.cjs.map +1 -0
  296. package/dist/session.cjs +6 -0
  297. package/dist/session.d.mts +11 -0
  298. package/dist/session.d.mts.map +1 -0
  299. package/dist/session.mjs +3 -0
  300. package/dist/spawner-BxFsINXP.cjs +68 -0
  301. package/dist/spawner-BxFsINXP.cjs.map +1 -0
  302. package/dist/spawner-CdrN_HNk.d.mts +35 -0
  303. package/dist/spawner-CdrN_HNk.d.mts.map +1 -0
  304. package/dist/spawner-LoVsn55-.mjs +63 -0
  305. package/dist/spawner-LoVsn55-.mjs.map +1 -0
  306. package/dist/spawner.cjs +3 -0
  307. package/dist/spawner.d.mts +9 -0
  308. package/dist/spawner.d.mts.map +1 -0
  309. package/dist/spawner.mjs +2 -0
  310. package/dist/type-BXM03qSw.d.mts +44 -0
  311. package/dist/type-BXM03qSw.d.mts.map +1 -0
  312. package/dist/type-C31e1gla.d.mts +43 -0
  313. package/dist/type-C31e1gla.d.mts.map +1 -0
  314. package/dist/type-vWQNTahw.d.mts +12 -0
  315. package/dist/type-vWQNTahw.d.mts.map +1 -0
  316. package/dist/types.cjs +0 -0
  317. package/dist/types.d.mts +3 -0
  318. package/dist/types.mjs +1 -0
  319. package/llms.txt +9 -0
  320. package/package.json +303 -0
  321. package/skills/doom-runner/SKILL.md +78 -0
  322. package/src/prompts/po-use-runner/SKILL.md +47 -0
@@ -0,0 +1,41 @@
1
+ let typebox = require("typebox");
2
+ //#region src/schemas/bashTool.ts
3
+ /** Replaces pi's built-in tool of the same name, so hooks keyed on `bash` keep working. */
4
+ /**
5
+ * Built-in bash parameters plus the backgrounding controls.
6
+ *
7
+ * `command` and `timeout` keep their original names and wording so the tool is
8
+ * a drop-in replacement. Every `description` is prompt copy the model reads.
9
+ */
10
+ const BashParamsSchema = typebox.Type.Object({
11
+ command: typebox.Type.String({ description: "Bash command to execute" }),
12
+ timeout: typebox.Type.Optional(typebox.Type.Number({ description: "Timeout in seconds (optional, no default timeout)" })),
13
+ background: typebox.Type.Optional(typebox.Type.Boolean({ description: "Start the command in the background immediately instead of waiting. Use for dev servers, watchers and other commands you already know will not finish." })),
14
+ interactive: typebox.Type.Optional(typebox.Type.Boolean({ description: "Run under a pseudo terminal so the command can prompt. Use only when the command asks for confirmation or input; answer it with doom-runner input. Logs from interactive runs are noisier." })),
15
+ name: typebox.Type.Optional(typebox.Type.String({ description: "Preferred runner name if the command ends up in the background. A name in use gets a suffix." }))
16
+ });
17
+ //#endregion
18
+ //#region src/constants/bashTool.ts
19
+ const BASH_TOOL_NAME = "bash";
20
+ const BASH_TOOL_LABEL = "bash";
21
+ //#endregion
22
+ Object.defineProperty(exports, "BASH_TOOL_LABEL", {
23
+ enumerable: true,
24
+ get: function() {
25
+ return BASH_TOOL_LABEL;
26
+ }
27
+ });
28
+ Object.defineProperty(exports, "BASH_TOOL_NAME", {
29
+ enumerable: true,
30
+ get: function() {
31
+ return BASH_TOOL_NAME;
32
+ }
33
+ });
34
+ Object.defineProperty(exports, "BashParamsSchema", {
35
+ enumerable: true,
36
+ get: function() {
37
+ return BashParamsSchema;
38
+ }
39
+ });
40
+
41
+ //# sourceMappingURL=bashTool-CdgtqVFD.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashTool-CdgtqVFD.cjs","names":["Type"],"sources":["../src/schemas/bashTool.ts","../src/constants/bashTool.ts"],"sourcesContent":["import { type Static, Type } from 'typebox';\n\n/** Replaces pi's built-in tool of the same name, so hooks keyed on `bash` keep working. */\n\n/**\n * Built-in bash parameters plus the backgrounding controls.\n *\n * `command` and `timeout` keep their original names and wording so the tool is\n * a drop-in replacement. Every `description` is prompt copy the model reads.\n */\nexport const BashParamsSchema = Type.Object({\n command: Type.String({ description: 'Bash command to execute' }),\n timeout: Type.Optional(Type.Number({ description: 'Timeout in seconds (optional, no default timeout)' })),\n background: Type.Optional(\n Type.Boolean({\n description:\n 'Start the command in the background immediately instead of waiting. Use for dev servers, watchers and other commands you already know will not finish.',\n }),\n ),\n interactive: Type.Optional(\n Type.Boolean({\n description:\n 'Run under a pseudo terminal so the command can prompt. Use only when the command asks for confirmation or input; answer it with doom-runner input. Logs from interactive runs are noisier.',\n }),\n ),\n name: Type.Optional(\n Type.String({\n description: 'Preferred runner name if the command ends up in the background. A name in use gets a suffix.',\n }),\n ),\n});\n\nexport type BashParams = Static<typeof BashParamsSchema>;\n","export const BASH_TOOL_NAME = 'bash';\nexport const BASH_TOOL_LABEL = 'bash';\n\nexport const MS_PER_SECOND = 1000;\n"],"mappings":";;;;;;;;;AAUA,MAAa,mBAAmBA,QAAAA,KAAK,OAAO;CAC1C,SAASA,QAAAA,KAAK,OAAO,EAAE,aAAa,0BAA0B,CAAC;CAC/D,SAASA,QAAAA,KAAK,SAASA,QAAAA,KAAK,OAAO,EAAE,aAAa,oDAAoD,CAAC,CAAC;CACxG,YAAYA,QAAAA,KAAK,SACfA,QAAAA,KAAK,QAAQ,EACX,aACE,yJACJ,CAAC,CACH;CACA,aAAaA,QAAAA,KAAK,SAChBA,QAAAA,KAAK,QAAQ,EACX,aACE,6LACJ,CAAC,CACH;CACA,MAAMA,QAAAA,KAAK,SACTA,QAAAA,KAAK,OAAO,EACV,aAAa,+FACf,CAAC,CACH;AACF,CAAC;;;AC9BD,MAAa,iBAAiB;AAC9B,MAAa,kBAAkB"}
@@ -0,0 +1,13 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_bashResult = require("./bashResult-DNgtahGR.cjs");
3
+ const require_logReader = require("./logReader-B6J7L7Ua.cjs");
4
+ const require_headless = require("./headless-CHUsBGhg.cjs");
5
+ //#region src/services/runnerResult/index.ts
6
+ function formatRunnerResult(result, budget = {}) {
7
+ return require_bashResult.formatRunResult(result, budget, require_logReader.summarizeLog);
8
+ }
9
+ //#endregion
10
+ exports.createHeadlessBashTool = require_headless.createHeadlessBashTool;
11
+ exports.formatRunResult = formatRunnerResult;
12
+
13
+ //# sourceMappingURL=bashTool.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashTool.cjs","names":["formatBashRunResult","summarizeLog"],"sources":["../src/services/runnerResult/index.ts"],"sourcesContent":["import { type ResultBudget, type ToolResult } from '../../types/bashResult';\nimport type { BashRunResult } from '../../types/bashRunService';\nimport { formatRunResult as formatBashRunResult } from '../bashResult';\nimport { summarizeLog } from '../logReader';\n\nexport function formatRunnerResult(result: BashRunResult, budget: ResultBudget = {}): ToolResult {\n return formatBashRunResult(result, budget, summarizeLog);\n}\n"],"mappings":";;;;;AAKA,SAAgB,mBAAmB,QAAuB,SAAuB,CAAC,GAAe;CAC/F,OAAOA,mBAAAA,gBAAoB,QAAQ,QAAQC,kBAAAA,YAAY;AACzD"}
@@ -0,0 +1,8 @@
1
+ import { n as BashRunResult } from "./bashRunService-Ci0cGdYO.mjs";
2
+ import { a as ResultBudget, s as ToolResult } from "./bashResult-DcrRaBLv.mjs";
3
+ import { t as createHeadlessBashTool } from "./index-BwB_jTI9.mjs";
4
+ //#region src/services/runnerResult/index.d.ts
5
+ declare function formatRunnerResult(result: BashRunResult, budget?: ResultBudget): ToolResult;
6
+ //#endregion
7
+ export { createHeadlessBashTool, formatRunnerResult as formatRunResult };
8
+ //# sourceMappingURL=bashTool.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashTool.d.mts","names":[],"sources":["../src/services/runnerResult/index.ts"],"mappings":";;;;iBAKgB,mBAAmB,QAAQ,eAAe,SAAQ,eAAoB"}
@@ -0,0 +1,11 @@
1
+ import { c as formatRunResult } from "./bashResult-bIVSzoj-.mjs";
2
+ import { r as summarizeLog } from "./logReader-UfbDbwQl.mjs";
3
+ import { t as createHeadlessBashTool } from "./headless-BGYfIlNk.mjs";
4
+ //#region src/services/runnerResult/index.ts
5
+ function formatRunnerResult(result, budget = {}) {
6
+ return formatRunResult(result, budget, summarizeLog);
7
+ }
8
+ //#endregion
9
+ export { createHeadlessBashTool, formatRunnerResult as formatRunResult };
10
+
11
+ //# sourceMappingURL=bashTool.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bashTool.mjs","names":["formatBashRunResult"],"sources":["../src/services/runnerResult/index.ts"],"sourcesContent":["import { type ResultBudget, type ToolResult } from '../../types/bashResult';\nimport type { BashRunResult } from '../../types/bashRunService';\nimport { formatRunResult as formatBashRunResult } from '../bashResult';\nimport { summarizeLog } from '../logReader';\n\nexport function formatRunnerResult(result: BashRunResult, budget: ResultBudget = {}): ToolResult {\n return formatBashRunResult(result, budget, summarizeLog);\n}\n"],"mappings":";;;;AAKA,SAAgB,mBAAmB,QAAuB,SAAuB,CAAC,GAAe;CAC/F,OAAOA,gBAAoB,QAAQ,QAAQ,YAAY;AACzD"}
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env node
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require_cliApp = require("../cliApp-Dj9nwaOv.cjs");
4
+ const require_runnerDependencies = require("../runnerDependencies-KMZigIxB.cjs");
5
+ let node_fs = require("node:fs");
6
+ let node_url = require("node:url");
7
+ let _agimon_ai_po_telemetry = require("@agimon-ai/po-telemetry");
8
+ //#region src/bin/cli.ts
9
+ async function readStdin() {
10
+ const chunks = [];
11
+ for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
12
+ return Buffer.concat(chunks).toString("utf8");
13
+ }
14
+ async function main(argv = process.argv.slice(2)) {
15
+ const startedAt = Date.now();
16
+ const environment = Object.freeze({ ...process.env });
17
+ const telemetry = (0, _agimon_ai_po_telemetry.createDoomTelemetry)({
18
+ serviceName: "doom-runner-cli",
19
+ packageName: "@agimon-ai/po-runner",
20
+ env: environment,
21
+ enableLogs: true,
22
+ enableTraces: true
23
+ });
24
+ const container = require_runnerDependencies.createRunnerDependencies({ environment });
25
+ const registry = container.runnerRegistry;
26
+ let stdoutBytes = 0;
27
+ let stderrBytes = 0;
28
+ try {
29
+ const exitCode = await require_cliApp.runCli(argv, {
30
+ registry,
31
+ launcher: container.launcher,
32
+ rmuxBackend: container.rmuxBackend,
33
+ logReader: container.logReader,
34
+ env: environment,
35
+ stdout: (text) => {
36
+ const output = text.endsWith("\n") ? text : `${text}\n`;
37
+ stdoutBytes += Buffer.byteLength(output, "utf8");
38
+ process.stdout.write(output);
39
+ },
40
+ stderr: (text) => {
41
+ const output = text.endsWith("\n") ? text : `${text}\n`;
42
+ stderrBytes += Buffer.byteLength(output, "utf8");
43
+ process.stderr.write(output);
44
+ },
45
+ readStdin
46
+ });
47
+ await telemetry.recordEvent("doom_runner.cli_finished", {
48
+ outcome: exitCode === 0 ? "completed" : "failed",
49
+ "runner.exit_code": exitCode,
50
+ duration_ms: Date.now() - startedAt,
51
+ "runner.argument_count": argv.length,
52
+ "runner.stdout_bytes": stdoutBytes,
53
+ "runner.stderr_bytes": stderrBytes
54
+ });
55
+ return exitCode;
56
+ } catch (error) {
57
+ await telemetry.recordError("doom_runner.cli_failed", error, {
58
+ duration_ms: Date.now() - startedAt,
59
+ "runner.argument_count": argv.length,
60
+ "runner.stdout_bytes": stdoutBytes,
61
+ "runner.stderr_bytes": stderrBytes
62
+ });
63
+ throw error;
64
+ } finally {
65
+ registry.close();
66
+ await telemetry.shutdown();
67
+ }
68
+ }
69
+ if (process.argv[1] && (0, node_fs.existsSync)(process.argv[1]) && (0, node_fs.realpathSync)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href)) === (0, node_fs.realpathSync)(process.argv[1])) main().then((code) => {
70
+ process.exitCode = code;
71
+ }, (error) => {
72
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
73
+ process.exitCode = 1;
74
+ });
75
+ //#endregion
76
+ exports.main = main;
77
+
78
+ //# sourceMappingURL=cli.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerDependencies","runCli","existsSync","realpathSync","fileURLToPath"],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { existsSync, realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\nimport { createDoomTelemetry } from '@agimon-ai/po-telemetry';\n\nimport { runCli } from '../services/cliApp';\nimport { createRunnerDependencies } from '../services/runnerDependencies';\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 environment = Object.freeze({ ...process.env });\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/po-runner',\n env: environment,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerDependencies({ environment });\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: environment,\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 (\n process.argv[1] &&\n existsSync(process.argv[1]) &&\n realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])\n) {\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":";;;;;;;;AAUA,eAAe,YAA6B;CAC1C,MAAM,SAAmB,CAAC;CAC1B,WAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;CACxG,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC9C;AAEA,eAAsB,KAAK,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAoB;CAC3F,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpD,MAAM,aAAA,GAAYA,wBAAAA,oBAAAA,CAAoB;EACpC,aAAa;EACb,aAAa;EACb,KAAK;EACL,YAAY;EACZ,cAAc;CAChB,CAAC;CACD,MAAM,YAAYC,2BAAAA,yBAAyB,EAAE,YAAY,CAAC;CAC1D,MAAM,WAAW,UAAU;CAC3B,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,IAAI;EACF,MAAM,WAAW,MAAMC,eAAAA,OAAO,MAAM;GAClC;GACA,UAAU,UAAU;GACpB,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB,KAAK;GACL,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA;EACF,CAAC;EACD,MAAM,UAAU,YAAY,4BAA4B;GACtD,SAAS,aAAa,IAAI,cAAc;GACxC,oBAAoB;GACpB,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,0BAA0B,OAAO;GAC3D,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,MAAM;CACR,UAAU;EACR,SAAS,MAAM;EACf,MAAM,UAAU,SAAS;CAC3B;AACF;AAEA,IACE,QAAQ,KAAK,OAAA,GACbC,QAAAA,WAAAA,CAAW,QAAQ,KAAK,EAAE,MAAA,GAC1BC,QAAAA,aAAAA,EAAAA,GAAaC,SAAAA,cAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAA6B,CAAC,OAAA,GAAMD,QAAAA,aAAAA,CAAa,QAAQ,KAAK,EAAE,GAE7E,KAAK,CAAC,CAAC,MACJ,SAAS;CACR,QAAQ,WAAW;AACrB,IACC,UAAmB;CAClB,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;CAClF,QAAQ,WAAW;AACrB,CACF"}
@@ -0,0 +1,4 @@
1
+ //#region src/bin/cli.d.ts
2
+ export declare function main(argv?: readonly string[]): Promise<number>;
3
+ //#endregion
4
+ //# sourceMappingURL=cli.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";wBAgBsB,KAAK,2BAAkD"}
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/env node
2
+ import { t as runCli } from "../cliApp-v8Z3rMCi.mjs";
3
+ import { t as createRunnerDependencies } from "../runnerDependencies-DruByBGS.mjs";
4
+ import { existsSync, realpathSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
+ import { createDoomTelemetry } from "@agimon-ai/po-telemetry";
7
+ //#region src/bin/cli.ts
8
+ async function readStdin() {
9
+ const chunks = [];
10
+ for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
11
+ return Buffer.concat(chunks).toString("utf8");
12
+ }
13
+ async function main(argv = process.argv.slice(2)) {
14
+ const startedAt = Date.now();
15
+ const environment = Object.freeze({ ...process.env });
16
+ const telemetry = createDoomTelemetry({
17
+ serviceName: "doom-runner-cli",
18
+ packageName: "@agimon-ai/po-runner",
19
+ env: environment,
20
+ enableLogs: true,
21
+ enableTraces: true
22
+ });
23
+ const container = createRunnerDependencies({ environment });
24
+ const registry = container.runnerRegistry;
25
+ let stdoutBytes = 0;
26
+ let stderrBytes = 0;
27
+ try {
28
+ const exitCode = await runCli(argv, {
29
+ registry,
30
+ launcher: container.launcher,
31
+ rmuxBackend: container.rmuxBackend,
32
+ logReader: container.logReader,
33
+ env: environment,
34
+ stdout: (text) => {
35
+ const output = text.endsWith("\n") ? text : `${text}\n`;
36
+ stdoutBytes += Buffer.byteLength(output, "utf8");
37
+ process.stdout.write(output);
38
+ },
39
+ stderr: (text) => {
40
+ const output = text.endsWith("\n") ? text : `${text}\n`;
41
+ stderrBytes += Buffer.byteLength(output, "utf8");
42
+ process.stderr.write(output);
43
+ },
44
+ readStdin
45
+ });
46
+ await telemetry.recordEvent("doom_runner.cli_finished", {
47
+ outcome: exitCode === 0 ? "completed" : "failed",
48
+ "runner.exit_code": exitCode,
49
+ duration_ms: Date.now() - startedAt,
50
+ "runner.argument_count": argv.length,
51
+ "runner.stdout_bytes": stdoutBytes,
52
+ "runner.stderr_bytes": stderrBytes
53
+ });
54
+ return exitCode;
55
+ } catch (error) {
56
+ await telemetry.recordError("doom_runner.cli_failed", error, {
57
+ duration_ms: Date.now() - startedAt,
58
+ "runner.argument_count": argv.length,
59
+ "runner.stdout_bytes": stdoutBytes,
60
+ "runner.stderr_bytes": stderrBytes
61
+ });
62
+ throw error;
63
+ } finally {
64
+ registry.close();
65
+ await telemetry.shutdown();
66
+ }
67
+ }
68
+ if (process.argv[1] && existsSync(process.argv[1]) && realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])) main().then((code) => {
69
+ process.exitCode = code;
70
+ }, (error) => {
71
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
72
+ process.exitCode = 1;
73
+ });
74
+ //#endregion
75
+ export { main };
76
+
77
+ //# sourceMappingURL=cli.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { existsSync, realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\nimport { createDoomTelemetry } from '@agimon-ai/po-telemetry';\n\nimport { runCli } from '../services/cliApp';\nimport { createRunnerDependencies } from '../services/runnerDependencies';\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 environment = Object.freeze({ ...process.env });\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/po-runner',\n env: environment,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerDependencies({ environment });\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: environment,\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 (\n process.argv[1] &&\n existsSync(process.argv[1]) &&\n realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])\n) {\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":";;;;;;;AAUA,eAAe,YAA6B;CAC1C,MAAM,SAAmB,CAAC;CAC1B,WAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;CACxG,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC9C;AAEA,eAAsB,KAAK,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAoB;CAC3F,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpD,MAAM,YAAY,oBAAoB;EACpC,aAAa;EACb,aAAa;EACb,KAAK;EACL,YAAY;EACZ,cAAc;CAChB,CAAC;CACD,MAAM,YAAY,yBAAyB,EAAE,YAAY,CAAC;CAC1D,MAAM,WAAW,UAAU;CAC3B,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,IAAI;EACF,MAAM,WAAW,MAAM,OAAO,MAAM;GAClC;GACA,UAAU,UAAU;GACpB,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB,KAAK;GACL,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA;EACF,CAAC;EACD,MAAM,UAAU,YAAY,4BAA4B;GACtD,SAAS,aAAa,IAAI,cAAc;GACxC,oBAAoB;GACpB,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,0BAA0B,OAAO;GAC3D,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,MAAM;CACR,UAAU;EACR,SAAS,MAAM;EACf,MAAM,UAAU,SAAS;CAC3B;AACF;AAEA,IACE,QAAQ,KAAK,MACb,WAAW,QAAQ,KAAK,EAAE,KAC1B,aAAa,cAAc,YAAY,GAAG,CAAC,MAAM,aAAa,QAAQ,KAAK,EAAE,GAE7E,KAAK,CAAC,CAAC,MACJ,SAAS;CACR,QAAQ,WAAW;AACrB,IACC,UAAmB;CAClB,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;CAClF,QAAQ,WAAW;AACrB,CACF"}
@@ -0,0 +1,102 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_rolldown_runtime = require("../rolldown-runtime-VH7oDXx4.cjs");
3
+ const require_ansiScrub = require("../ansiScrub-D5gpHDch.cjs");
4
+ let node_fs = require("node:fs");
5
+ node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
6
+ let node_url = require("node:url");
7
+ let _agimon_ai_po_telemetry = require("@agimon-ai/po-telemetry");
8
+ //#region src/bin/logSink.ts
9
+ async function main(argv = process.argv.slice(2)) {
10
+ const startedAt = Date.now();
11
+ const telemetry = (0, _agimon_ai_po_telemetry.createDoomTelemetry)({
12
+ serviceName: "doom-runner-log-sink",
13
+ packageName: "@agimon-ai/po-runner",
14
+ env: process.env,
15
+ enableLogs: true,
16
+ enableTraces: true
17
+ });
18
+ const [logPath, rotatedPath, maxBytesRaw, donePath, rawPath] = argv;
19
+ try {
20
+ if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) throw new Error("logSink requires log, rotated log, max bytes, and completion paths");
21
+ } catch (error) {
22
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
23
+ await telemetry.shutdown();
24
+ throw error;
25
+ }
26
+ let handle;
27
+ let written;
28
+ try {
29
+ handle = node_fs.default.openSync(logPath, "a");
30
+ written = node_fs.default.statSync(logPath).size;
31
+ } catch (error) {
32
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
33
+ await telemetry.shutdown();
34
+ throw error;
35
+ }
36
+ let chunks = 0;
37
+ const rawCeiling = Number.parseInt(maxBytesRaw, 10);
38
+ const raw = rawPath === void 0 || rawPath === "" ? void 0 : openRaw(rawPath);
39
+ let rawWritten = raw === void 0 ? 0 : rawSize(rawPath);
40
+ try {
41
+ process.stdin.setEncoding("utf8");
42
+ for await (const chunk of process.stdin) {
43
+ const source = String(chunk);
44
+ if (raw !== void 0) {
45
+ const rawBytes = Buffer.from(source, "utf8");
46
+ if (rawWritten + rawBytes.byteLength > rawCeiling) {
47
+ node_fs.default.ftruncateSync(raw, 0);
48
+ rawWritten = 0;
49
+ }
50
+ node_fs.default.writeSync(raw, rawBytes);
51
+ rawWritten += rawBytes.byteLength;
52
+ }
53
+ const text = require_ansiScrub.scrubTerminalOutput(source);
54
+ if (!text) continue;
55
+ const bytes = Buffer.from(text, "utf8");
56
+ node_fs.default.writeSync(handle, bytes);
57
+ written += bytes.byteLength;
58
+ chunks += 1;
59
+ }
60
+ node_fs.default.closeSync(handle);
61
+ if (raw !== void 0) node_fs.default.closeSync(raw);
62
+ writeDone(donePath);
63
+ await telemetry.recordEvent("doom_runner.file_sink_finished", {
64
+ outcome: "completed",
65
+ "runner.chunk_count": chunks,
66
+ "runner.bytes_written": written,
67
+ duration_ms: Date.now() - startedAt
68
+ });
69
+ return 0;
70
+ } catch (error) {
71
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
72
+ throw error;
73
+ } finally {
74
+ await telemetry.shutdown();
75
+ }
76
+ }
77
+ /** Truncating rather than appending: a stale pane from a previous run is not this one's. */
78
+ function openRaw(target) {
79
+ return node_fs.default.openSync(target, "w");
80
+ }
81
+ function rawSize(target) {
82
+ try {
83
+ return node_fs.default.statSync(target).size;
84
+ } catch {
85
+ return 0;
86
+ }
87
+ }
88
+ function writeDone(target) {
89
+ const temporary = `${target}.${process.pid}.tmp`;
90
+ node_fs.default.writeFileSync(temporary, "", { mode: 384 });
91
+ node_fs.default.renameSync(temporary, target);
92
+ }
93
+ if (process.argv[1] && require("url").pathToFileURL(__filename).href === (0, node_url.pathToFileURL)(process.argv[1]).href) main().then((code) => {
94
+ process.exitCode = code;
95
+ }, (error) => {
96
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
97
+ process.exitCode = 1;
98
+ });
99
+ //#endregion
100
+ exports.main = main;
101
+
102
+ //# sourceMappingURL=logSink.cjs.map
@@ -0,0 +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';\n\nimport { createDoomTelemetry } from '@agimon-ai/po-telemetry';\n\nimport { scrubTerminalOutput } from '../services/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/po-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath, rawPath] = argv;\n try {\n // Keep the legacy argument shape for the published executable subpath. The\n // scrubbed log is append-only, so the former rotation path is unused; the\n // ceiling now bounds the raw copy, which only interactive runs ask for.\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\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 // The pane's bytes before anything is taken out of them. Scrubbing exists so\n // the log stays worth grepping, and it is exactly what makes the log useless\n // to a terminal, so an attached view needs its own faithful copy.\n const rawCeiling = Number.parseInt(maxBytesRaw, 10);\n const raw = rawPath === undefined || rawPath === '' ? undefined : openRaw(rawPath);\n let rawWritten = raw === undefined ? 0 : rawSize(rawPath as string);\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const source = String(chunk);\n if (raw !== undefined) {\n const rawBytes = Buffer.from(source, 'utf8');\n // A terminal that scrolls all day must not fill the disk. Past the\n // ceiling the copy starts over: a reader attaching later wants the\n // recent screen, and no part of this is the record of the run.\n if (rawWritten + rawBytes.byteLength > rawCeiling) {\n fs.ftruncateSync(raw, 0);\n rawWritten = 0;\n }\n fs.writeSync(raw, rawBytes);\n rawWritten += rawBytes.byteLength;\n }\n const text = scrubTerminalOutput(source);\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n if (raw !== undefined) fs.closeSync(raw);\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 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\n/** Truncating rather than appending: a stale pane from a previous run is not this one's. */\nfunction openRaw(target: string): number {\n return fs.openSync(target, 'w');\n}\n\nfunction rawSize(target: string): number {\n try {\n return fs.statSync(target).size;\n } catch {\n return 0;\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":"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"}
@@ -0,0 +1,4 @@
1
+ //#region src/bin/logSink.d.ts
2
+ export declare function main(argv?: readonly string[]): Promise<number>;
3
+ //#endregion
4
+ //# sourceMappingURL=logSink.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSink.d.mts","names":[],"sources":["../../src/bin/logSink.ts"],"mappings":";wBAOsB,KAAK,2BAAkD"}
@@ -0,0 +1,99 @@
1
+ import { n as scrubTerminalOutput } from "../ansiScrub-CsqTSaVT.mjs";
2
+ import fs from "node:fs";
3
+ import { pathToFileURL } from "node:url";
4
+ import { createDoomTelemetry } from "@agimon-ai/po-telemetry";
5
+ //#region src/bin/logSink.ts
6
+ async function main(argv = process.argv.slice(2)) {
7
+ const startedAt = Date.now();
8
+ const telemetry = createDoomTelemetry({
9
+ serviceName: "doom-runner-log-sink",
10
+ packageName: "@agimon-ai/po-runner",
11
+ env: process.env,
12
+ enableLogs: true,
13
+ enableTraces: true
14
+ });
15
+ const [logPath, rotatedPath, maxBytesRaw, donePath, rawPath] = argv;
16
+ try {
17
+ if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) throw new Error("logSink requires log, rotated log, max bytes, and completion paths");
18
+ } catch (error) {
19
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
20
+ await telemetry.shutdown();
21
+ throw error;
22
+ }
23
+ let handle;
24
+ let written;
25
+ try {
26
+ handle = fs.openSync(logPath, "a");
27
+ written = fs.statSync(logPath).size;
28
+ } catch (error) {
29
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
30
+ await telemetry.shutdown();
31
+ throw error;
32
+ }
33
+ let chunks = 0;
34
+ const rawCeiling = Number.parseInt(maxBytesRaw, 10);
35
+ const raw = rawPath === void 0 || rawPath === "" ? void 0 : openRaw(rawPath);
36
+ let rawWritten = raw === void 0 ? 0 : rawSize(rawPath);
37
+ try {
38
+ process.stdin.setEncoding("utf8");
39
+ for await (const chunk of process.stdin) {
40
+ const source = String(chunk);
41
+ if (raw !== void 0) {
42
+ const rawBytes = Buffer.from(source, "utf8");
43
+ if (rawWritten + rawBytes.byteLength > rawCeiling) {
44
+ fs.ftruncateSync(raw, 0);
45
+ rawWritten = 0;
46
+ }
47
+ fs.writeSync(raw, rawBytes);
48
+ rawWritten += rawBytes.byteLength;
49
+ }
50
+ const text = scrubTerminalOutput(source);
51
+ if (!text) continue;
52
+ const bytes = Buffer.from(text, "utf8");
53
+ fs.writeSync(handle, bytes);
54
+ written += bytes.byteLength;
55
+ chunks += 1;
56
+ }
57
+ fs.closeSync(handle);
58
+ if (raw !== void 0) fs.closeSync(raw);
59
+ writeDone(donePath);
60
+ await telemetry.recordEvent("doom_runner.file_sink_finished", {
61
+ outcome: "completed",
62
+ "runner.chunk_count": chunks,
63
+ "runner.bytes_written": written,
64
+ duration_ms: Date.now() - startedAt
65
+ });
66
+ return 0;
67
+ } catch (error) {
68
+ await telemetry.recordError("doom_runner.file_sink_failed", error, { duration_ms: Date.now() - startedAt });
69
+ throw error;
70
+ } finally {
71
+ await telemetry.shutdown();
72
+ }
73
+ }
74
+ /** Truncating rather than appending: a stale pane from a previous run is not this one's. */
75
+ function openRaw(target) {
76
+ return fs.openSync(target, "w");
77
+ }
78
+ function rawSize(target) {
79
+ try {
80
+ return fs.statSync(target).size;
81
+ } catch {
82
+ return 0;
83
+ }
84
+ }
85
+ function writeDone(target) {
86
+ const temporary = `${target}.${process.pid}.tmp`;
87
+ fs.writeFileSync(temporary, "", { mode: 384 });
88
+ fs.renameSync(temporary, target);
89
+ }
90
+ if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) main().then((code) => {
91
+ process.exitCode = code;
92
+ }, (error) => {
93
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
94
+ process.exitCode = 1;
95
+ });
96
+ //#endregion
97
+ export { main };
98
+
99
+ //# sourceMappingURL=logSink.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logSink.mjs","names":[],"sources":["../../src/bin/logSink.ts"],"sourcesContent":["import fs from 'node:fs';\nimport { pathToFileURL } from 'node:url';\n\nimport { createDoomTelemetry } from '@agimon-ai/po-telemetry';\n\nimport { scrubTerminalOutput } from '../services/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/po-runner',\n env: process.env,\n enableLogs: true,\n enableTraces: true,\n });\n const [logPath, rotatedPath, maxBytesRaw, donePath, rawPath] = argv;\n try {\n // Keep the legacy argument shape for the published executable subpath. The\n // scrubbed log is append-only, so the former rotation path is unused; the\n // ceiling now bounds the raw copy, which only interactive runs ask for.\n if (!logPath || !rotatedPath || !maxBytesRaw || !donePath) {\n throw new Error('logSink requires log, rotated log, max bytes, and completion paths');\n }\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 // The pane's bytes before anything is taken out of them. Scrubbing exists so\n // the log stays worth grepping, and it is exactly what makes the log useless\n // to a terminal, so an attached view needs its own faithful copy.\n const rawCeiling = Number.parseInt(maxBytesRaw, 10);\n const raw = rawPath === undefined || rawPath === '' ? undefined : openRaw(rawPath);\n let rawWritten = raw === undefined ? 0 : rawSize(rawPath as string);\n try {\n process.stdin.setEncoding('utf8');\n for await (const chunk of process.stdin) {\n const source = String(chunk);\n if (raw !== undefined) {\n const rawBytes = Buffer.from(source, 'utf8');\n // A terminal that scrolls all day must not fill the disk. Past the\n // ceiling the copy starts over: a reader attaching later wants the\n // recent screen, and no part of this is the record of the run.\n if (rawWritten + rawBytes.byteLength > rawCeiling) {\n fs.ftruncateSync(raw, 0);\n rawWritten = 0;\n }\n fs.writeSync(raw, rawBytes);\n rawWritten += rawBytes.byteLength;\n }\n const text = scrubTerminalOutput(source);\n if (!text) continue;\n const bytes = Buffer.from(text, 'utf8');\n fs.writeSync(handle, bytes);\n written += bytes.byteLength;\n chunks += 1;\n }\n fs.closeSync(handle);\n if (raw !== undefined) fs.closeSync(raw);\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 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\n/** Truncating rather than appending: a stale pane from a previous run is not this one's. */\nfunction openRaw(target: string): number {\n return fs.openSync(target, 'w');\n}\n\nfunction rawSize(target: string): number {\n try {\n return fs.statSync(target).size;\n } catch {\n return 0;\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":";;;;;AAOA,eAAsB,KAAK,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAoB;CAC3F,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,YAAY,oBAAoB;EACpC,aAAa;EACb,aAAa;EACb,KAAK,QAAQ;EACb,YAAY;EACZ,cAAc;CAChB,CAAC;CACD,MAAM,CAAC,SAAS,aAAa,aAAa,UAAU,WAAW;CAC/D,IAAI;EAIF,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,eAAe,CAAC,UAC/C,MAAM,IAAI,MAAM,oEAAoE;CAExF,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,gCAAgC,OAAO,EAAE,aAAa,KAAK,IAAI,IAAI,UAAU,CAAC;EAC1G,MAAM,UAAU,SAAS;EACzB,MAAM;CACR;CAEA,IAAI;CACJ,IAAI;CACJ,IAAI;EACF,SAAS,GAAG,SAAS,SAAS,GAAG;EACjC,UAAU,GAAG,SAAS,OAAO,CAAC,CAAC;CACjC,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,gCAAgC,OAAO,EAAE,aAAa,KAAK,IAAI,IAAI,UAAU,CAAC;EAC1G,MAAM,UAAU,SAAS;EACzB,MAAM;CACR;CACA,IAAI,SAAS;CAIb,MAAM,aAAa,OAAO,SAAS,aAAa,EAAE;CAClD,MAAM,MAAM,YAAY,KAAA,KAAa,YAAY,KAAK,KAAA,IAAY,QAAQ,OAAO;CACjF,IAAI,aAAa,QAAQ,KAAA,IAAY,IAAI,QAAQ,OAAiB;CAClE,IAAI;EACF,QAAQ,MAAM,YAAY,MAAM;EAChC,WAAW,MAAM,SAAS,QAAQ,OAAO;GACvC,MAAM,SAAS,OAAO,KAAK;GAC3B,IAAI,QAAQ,KAAA,GAAW;IACrB,MAAM,WAAW,OAAO,KAAK,QAAQ,MAAM;IAI3C,IAAI,aAAa,SAAS,aAAa,YAAY;KACjD,GAAG,cAAc,KAAK,CAAC;KACvB,aAAa;IACf;IACA,GAAG,UAAU,KAAK,QAAQ;IAC1B,cAAc,SAAS;GACzB;GACA,MAAM,OAAO,oBAAoB,MAAM;GACvC,IAAI,CAAC,MAAM;GACX,MAAM,QAAQ,OAAO,KAAK,MAAM,MAAM;GACtC,GAAG,UAAU,QAAQ,KAAK;GAC1B,WAAW,MAAM;GACjB,UAAU;EACZ;EACA,GAAG,UAAU,MAAM;EACnB,IAAI,QAAQ,KAAA,GAAW,GAAG,UAAU,GAAG;EACvC,UAAU,QAAQ;EAClB,MAAM,UAAU,YAAY,kCAAkC;GAC5D,SAAS;GACT,sBAAsB;GACtB,wBAAwB;GACxB,aAAa,KAAK,IAAI,IAAI;EAC5B,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,gCAAgC,OAAO,EAAE,aAAa,KAAK,IAAI,IAAI,UAAU,CAAC;EAC1G,MAAM;CACR,UAAU;EACR,MAAM,UAAU,SAAS;CAC3B;AACF;;AAGA,SAAS,QAAQ,QAAwB;CACvC,OAAO,GAAG,SAAS,QAAQ,GAAG;AAChC;AAEA,SAAS,QAAQ,QAAwB;CACvC,IAAI;EACF,OAAO,GAAG,SAAS,MAAM,CAAC,CAAC;CAC7B,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,UAAU,QAAsB;CACvC,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,IAAI;CAC3C,GAAG,cAAc,WAAW,IAAI,EAAE,MAAM,IAAM,CAAC;CAC/C,GAAG,WAAW,WAAW,MAAM;AACjC;AAEA,IAAI,QAAQ,KAAK,MAAM,YAAY,QAAQ,cAAc,QAAQ,KAAK,EAAE,CAAC,CAAC,MACxE,KAAK,CAAC,CAAC,MACJ,SAAS;CACR,QAAQ,WAAW;AACrB,IACC,UAAmB;CAClB,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;CAClF,QAAQ,WAAW;AACrB,CACF"}