@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,237 @@
1
+ import { l as formatRunnerLine } from "./bashResult-bIVSzoj-.mjs";
2
+ import { n as requiredSessionId, t as inheritedSessionId } from "./session-Chsb_Nh2.mjs";
3
+ import fs from "node:fs";
4
+ const STOPPED_REASON = "stopped";
5
+ const TERMINATION_SIGNAL = "SIGTERM";
6
+ //#endregion
7
+ //#region src/services/cliApp/index.ts
8
+ const MULTIPLEXER_BACKENDS = /* @__PURE__ */ new Set(["rmux", "tmux"]);
9
+ async function runCli(argv, dependencies) {
10
+ const [command, ...args] = argv;
11
+ if (command !== void 0 && command !== "--help" && command !== "-h" && !inheritedSessionId(dependencies.env)) {
12
+ dependencies.stderr("PI_SESSION_ID is required for doom-runner commands");
13
+ return 1;
14
+ }
15
+ switch (command) {
16
+ case "list": return list(args, dependencies);
17
+ case "status": return status(args, dependencies);
18
+ case "logs": return logs(args, dependencies);
19
+ case "stop": return stop(args, dependencies);
20
+ case "stop-all": return stopAll(args, dependencies);
21
+ case "input": return input(args, dependencies);
22
+ case "--help":
23
+ case "-h":
24
+ case void 0:
25
+ dependencies.stdout(help());
26
+ return 0;
27
+ default:
28
+ dependencies.stderr(`Unknown command: ${command}\n\n${help()}`);
29
+ return 1;
30
+ }
31
+ }
32
+ async function list(args, dependencies) {
33
+ const sessionId = requiredSessionId(dependencies.env);
34
+ const records = args.includes("--all") ? await dependencies.registry.listAll(sessionId) : await dependencies.registry.listBySession(sessionId);
35
+ dependencies.stdout(records.length > 0 ? records.map(formatRecord).join("\n") : "No runners");
36
+ return 0;
37
+ }
38
+ async function status(args, dependencies) {
39
+ const record = await requiredRecord(args[0], dependencies);
40
+ if (!record) return 1;
41
+ dependencies.stdout([
42
+ `ID: ${record.id}`,
43
+ `Name: ${record.name}`,
44
+ `State: ${record.state}`,
45
+ `Backend: ${record.backend}`,
46
+ ...record.backendTarget ? [`Backend target: ${record.backendTarget}`] : [],
47
+ `PID: ${record.pid}`,
48
+ `Command: ${record.command}`,
49
+ `CWD: ${record.cwd}`,
50
+ `Session: ${record.sessionId}`,
51
+ `Log: ${record.logPath}`,
52
+ ...record.exit ? [`Exit: ${formatExit(record)}`] : []
53
+ ].join("\n"));
54
+ return 0;
55
+ }
56
+ async function logs(args, dependencies) {
57
+ const record = await requiredRecord(args[0], dependencies);
58
+ if (!record) return 1;
59
+ const lines = positiveInteger(option(args, "--lines")) ?? 200;
60
+ const result = dependencies.logReader.read(record.logPath, { lines });
61
+ if (!result.exists) {
62
+ dependencies.stderr(`Runner ${record.id} has not written a log yet`);
63
+ return 1;
64
+ }
65
+ if (result.text) dependencies.stdout(result.text);
66
+ if (!args.includes("--follow")) return 0;
67
+ return follow(record, result.fileSize, dependencies);
68
+ }
69
+ async function stop(args, dependencies) {
70
+ const record = await requiredRecord(args[0], dependencies);
71
+ if (!record) return 1;
72
+ if (record.state !== "running") {
73
+ dependencies.stderr(`Runner ${record.id} is already ${record.state}`);
74
+ return 1;
75
+ }
76
+ const reason = option(args, "--reason");
77
+ if (!await stopRecord(record, dependencies, reason)) {
78
+ dependencies.stderr(`Could not stop runner ${record.id}`);
79
+ return 1;
80
+ }
81
+ await dependencies.registry.complete(record.id, {
82
+ reason: STOPPED_REASON,
83
+ code: null,
84
+ signal: TERMINATION_SIGNAL,
85
+ ...reason ? { stopReason: reason } : {}
86
+ }, record.sessionId);
87
+ dependencies.stdout(`Stopped ${record.id}\nLog: ${record.logPath}`);
88
+ return 0;
89
+ }
90
+ async function stopAll(args, dependencies) {
91
+ const sessionId = requiredSessionId(dependencies.env);
92
+ const records = await dependencies.registry.listBySession(sessionId);
93
+ const reason = option(args, "--reason");
94
+ const stopped = [];
95
+ for (const record of records) {
96
+ if (!await stopRecord(record, dependencies, reason)) continue;
97
+ await dependencies.registry.complete(record.id, {
98
+ reason: STOPPED_REASON,
99
+ code: null,
100
+ signal: TERMINATION_SIGNAL,
101
+ ...reason ? { stopReason: reason } : {}
102
+ }, record.sessionId);
103
+ stopped.push(record);
104
+ }
105
+ dependencies.stdout(records.length === 0 ? `No active runners for session ${sessionId}` : `Stopped ${stopped.length} runner(s) for session ${sessionId}: ${stopped.map((record) => record.id).join(", ")}`);
106
+ if (stopped.length !== records.length) {
107
+ dependencies.stderr(`Could not stop ${records.length - stopped.length} runner(s) for session ${sessionId}`);
108
+ return 1;
109
+ }
110
+ return 0;
111
+ }
112
+ async function input(args, dependencies) {
113
+ const record = await requiredRecord(args[0], dependencies);
114
+ if (!record) return 1;
115
+ if (record.state === "completed") {
116
+ dependencies.stderr(`Runner ${record.id} is already completed; use doom-runner logs ${record.id}`);
117
+ return 1;
118
+ }
119
+ if (!record.interactive) {
120
+ dependencies.stderr(`Runner ${record.id} was not started with interactive: true`);
121
+ return 1;
122
+ }
123
+ const text = option(args, "--text") ?? await dependencies.readStdin();
124
+ const payload = args.includes("--enter") && !text.endsWith("\n") ? `${text}\n` : text;
125
+ if (!MULTIPLEXER_BACKENDS.has(record.backend) || !record.backendTarget) {
126
+ dependencies.stderr(`Runner ${record.id} uses the ${record.backend} backend, which does not expose CLI input`);
127
+ return 1;
128
+ }
129
+ if (!await dependencies.rmuxBackend.input(record.backendTarget, payload)) {
130
+ dependencies.stderr(`Runner ${record.id} is no longer accepting RMUX input`);
131
+ return 1;
132
+ }
133
+ dependencies.stdout(`Sent input to ${record.id}`);
134
+ return 0;
135
+ }
136
+ async function requiredRecord(id, dependencies) {
137
+ if (!id) {
138
+ dependencies.stderr("A runner ID is required");
139
+ return;
140
+ }
141
+ const sessionId = requiredSessionId(dependencies.env);
142
+ const scopedRecord = await dependencies.registry.get(id, sessionId);
143
+ if (!scopedRecord) {
144
+ dependencies.stderr(`No runner with id ${id}`);
145
+ return;
146
+ }
147
+ return scopedRecord;
148
+ }
149
+ function formatRecord(record) {
150
+ const active = formatRunnerLine(record, Date.now());
151
+ return `${record.id} ${record.state} ${record.backend} ${active}`;
152
+ }
153
+ function formatExit(record) {
154
+ const exit = record.exit;
155
+ if (!exit) return "unknown";
156
+ const detail = exit.code !== null ? ` code ${exit.code}` : exit.signal ? ` ${exit.signal}` : "";
157
+ const attribution = exit.terminationReason ? ` [${exit.terminationReason}]` : "";
158
+ const note = exit.stopReason ? ` (${exit.stopReason})` : "";
159
+ return `${exit.reason}${detail}${attribution}${note}`;
160
+ }
161
+ function option(args, name) {
162
+ const index = args.indexOf(name);
163
+ return index >= 0 ? args[index + 1] : void 0;
164
+ }
165
+ function positiveInteger(value) {
166
+ if (value === void 0) return void 0;
167
+ const parsed = Number(value);
168
+ return Number.isInteger(parsed) && parsed > 0 ? parsed : void 0;
169
+ }
170
+ async function follow(record, initialSize, dependencies) {
171
+ let offset = initialSize;
172
+ return new Promise((resolve) => {
173
+ let stopped = false;
174
+ let stateTimer;
175
+ const listener = (current) => {
176
+ if (current.size < offset) offset = 0;
177
+ if (current.size === offset) return;
178
+ const length = current.size - offset;
179
+ const buffer = Buffer.alloc(length);
180
+ const descriptor = fs.openSync(record.logPath, "r");
181
+ try {
182
+ const bytesRead = fs.readSync(descriptor, buffer, 0, length, offset);
183
+ if (bytesRead > 0) dependencies.stdout(buffer.subarray(0, bytesRead).toString("utf8"));
184
+ } finally {
185
+ fs.closeSync(descriptor);
186
+ }
187
+ offset = current.size;
188
+ };
189
+ const stopFollowing = () => {
190
+ if (stopped) return;
191
+ stopped = true;
192
+ try {
193
+ listener(fs.statSync(record.logPath));
194
+ } catch (error) {
195
+ if (error.code !== "ENOENT") dependencies.stderr(`Runner ${record.id} failed to flush its final log output: ${error.message}`);
196
+ }
197
+ fs.unwatchFile(record.logPath, listener);
198
+ clearInterval(stateTimer);
199
+ process.off("SIGINT", stopFollowing);
200
+ resolve(0);
201
+ };
202
+ process.once("SIGINT", stopFollowing);
203
+ fs.watchFile(record.logPath, { interval: 250 }, listener);
204
+ stateTimer = setInterval(() => {
205
+ dependencies.registry.get(record.id).then((current) => {
206
+ if (current?.state === "completed") stopFollowing();
207
+ });
208
+ }, 250);
209
+ });
210
+ }
211
+ async function stopRecord(record, dependencies, reason) {
212
+ await dependencies.registry.requestTermination(record.id, {
213
+ reason: STOPPED_REASON,
214
+ terminationReason: "user_stop",
215
+ ...reason ? { stopReason: reason } : {}
216
+ }, record.sessionId);
217
+ const stopped = MULTIPLEXER_BACKENDS.has(record.backend) && record.backendTarget ? await dependencies.rmuxBackend.stop(record.backendTarget, record.pid) : await dependencies.launcher.stop(record.pid);
218
+ if (!stopped) await dependencies.registry.requestTermination(record.id, void 0, record.sessionId);
219
+ return stopped;
220
+ }
221
+ function help() {
222
+ return [
223
+ "Usage: doom-runner <command>",
224
+ "",
225
+ "Commands:",
226
+ " list [--all]",
227
+ " status <id>",
228
+ " logs <id> [--lines N] [--follow]",
229
+ " stop <id> [--reason <text>]",
230
+ " stop-all [--reason <text>]",
231
+ " input <id> [--text <text>] [--enter]"
232
+ ].join("\n");
233
+ }
234
+ //#endregion
235
+ export { runCli as t };
236
+
237
+ //# sourceMappingURL=cliApp-v8Z3rMCi.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliApp-v8Z3rMCi.mjs","names":[],"sources":["../src/constants/cliApp.ts","../src/services/cliApp/index.ts"],"sourcesContent":["export const DEFAULT_LOG_LINES = 200;\nexport const FOLLOW_INTERVAL_MS = 250;\nexport const COMPLETED_STATE = 'completed';\nexport const STOPPED_REASON = 'stopped';\nexport const TERMINATION_SIGNAL = 'SIGTERM';\n","import fs from 'node:fs';\n\nimport {\n COMPLETED_STATE,\n DEFAULT_LOG_LINES,\n FOLLOW_INTERVAL_MS,\n STOPPED_REASON,\n TERMINATION_SIGNAL,\n} from '../../constants/cliApp';\nimport { formatRunnerLine } from '../../services/bashResult';\nimport { inheritedSessionId, requiredSessionId } from '../../services/session';\nimport type { ILauncher } from '../../types/launcher';\nimport type { ILogReader } from '../../types/logReader';\nimport type { IRmuxBackend } from '../../types/rmuxBackend';\nimport type { IRunnerRegistry, RunnerRecord } from '../../types/runnerRegistry';\n\nconst MULTIPLEXER_BACKENDS = new Set(['rmux', 'tmux']);\n\nexport interface CliDependencies {\n registry: IRunnerRegistry;\n launcher: ILauncher;\n rmuxBackend: IRmuxBackend;\n logReader: ILogReader;\n env?: NodeJS.ProcessEnv;\n stdout(text: string): void;\n stderr(text: string): void;\n readStdin(): Promise<string>;\n}\n\nexport async function runCli(argv: readonly string[], dependencies: CliDependencies): Promise<number> {\n const [command, ...args] = argv;\n if (command !== undefined && command !== '--help' && command !== '-h' && !inheritedSessionId(dependencies.env)) {\n dependencies.stderr('PI_SESSION_ID is required for doom-runner commands');\n return 1;\n }\n switch (command) {\n case 'list':\n return list(args, dependencies);\n case 'status':\n return status(args, dependencies);\n case 'logs':\n return logs(args, dependencies);\n case 'stop':\n return stop(args, dependencies);\n case 'stop-all':\n return stopAll(args, dependencies);\n case 'input':\n return input(args, dependencies);\n case '--help':\n case '-h':\n case undefined:\n dependencies.stdout(help());\n return 0;\n default:\n dependencies.stderr(`Unknown command: ${command}\\n\\n${help()}`);\n return 1;\n }\n}\n\nasync function list(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const sessionId = requiredSessionId(dependencies.env);\n const records = args.includes('--all')\n ? await dependencies.registry.listAll(sessionId)\n : await dependencies.registry.listBySession(sessionId);\n dependencies.stdout(records.length > 0 ? records.map(formatRecord).join('\\n') : 'No runners');\n return 0;\n}\n\nasync function status(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const record = await requiredRecord(args[0], dependencies);\n if (!record) return 1;\n dependencies.stdout(\n [\n `ID: ${record.id}`,\n `Name: ${record.name}`,\n `State: ${record.state}`,\n `Backend: ${record.backend}`,\n ...(record.backendTarget ? [`Backend target: ${record.backendTarget}`] : []),\n `PID: ${record.pid}`,\n `Command: ${record.command}`,\n `CWD: ${record.cwd}`,\n `Session: ${record.sessionId}`,\n `Log: ${record.logPath}`,\n ...(record.exit ? [`Exit: ${formatExit(record)}`] : []),\n ].join('\\n'),\n );\n return 0;\n}\n\nasync function logs(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const record = await requiredRecord(args[0], dependencies);\n if (!record) return 1;\n const lines = positiveInteger(option(args, '--lines')) ?? DEFAULT_LOG_LINES;\n const result = dependencies.logReader.read(record.logPath, { lines });\n if (!result.exists) {\n dependencies.stderr(`Runner ${record.id} has not written a log yet`);\n return 1;\n }\n if (result.text) dependencies.stdout(result.text);\n if (!args.includes('--follow')) return 0;\n return follow(record, result.fileSize, dependencies);\n}\n\nasync function stop(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const record = await requiredRecord(args[0], dependencies);\n if (!record) return 1;\n if (record.state !== 'running') {\n dependencies.stderr(`Runner ${record.id} is already ${record.state}`);\n return 1;\n }\n const reason = option(args, '--reason');\n if (!(await stopRecord(record, dependencies, reason))) {\n dependencies.stderr(`Could not stop runner ${record.id}`);\n return 1;\n }\n await dependencies.registry.complete(\n record.id,\n {\n reason: STOPPED_REASON,\n code: null,\n signal: TERMINATION_SIGNAL,\n ...(reason ? { stopReason: reason } : {}),\n },\n record.sessionId,\n );\n dependencies.stdout(`Stopped ${record.id}\\nLog: ${record.logPath}`);\n return 0;\n}\n\nasync function stopAll(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const sessionId = requiredSessionId(dependencies.env);\n const records = await dependencies.registry.listBySession(sessionId);\n const reason = option(args, '--reason');\n const stopped: RunnerRecord[] = [];\n for (const record of records) {\n if (!(await stopRecord(record, dependencies, reason))) continue;\n await dependencies.registry.complete(\n record.id,\n {\n reason: STOPPED_REASON,\n code: null,\n signal: TERMINATION_SIGNAL,\n ...(reason ? { stopReason: reason } : {}),\n },\n record.sessionId,\n );\n stopped.push(record);\n }\n dependencies.stdout(\n records.length === 0\n ? `No active runners for session ${sessionId}`\n : `Stopped ${stopped.length} runner(s) for session ${sessionId}: ${stopped.map((record) => record.id).join(', ')}`,\n );\n if (stopped.length !== records.length) {\n dependencies.stderr(`Could not stop ${records.length - stopped.length} runner(s) for session ${sessionId}`);\n return 1;\n }\n return 0;\n}\n\nasync function input(args: readonly string[], dependencies: CliDependencies): Promise<number> {\n const record = await requiredRecord(args[0], dependencies);\n if (!record) return 1;\n if (record.state === COMPLETED_STATE) {\n dependencies.stderr(`Runner ${record.id} is already completed; use doom-runner logs ${record.id}`);\n return 1;\n }\n if (!record.interactive) {\n dependencies.stderr(`Runner ${record.id} was not started with interactive: true`);\n return 1;\n }\n const supplied = option(args, '--text');\n const text = supplied ?? (await dependencies.readStdin());\n const payload = args.includes('--enter') && !text.endsWith('\\n') ? `${text}\\n` : text;\n if (!MULTIPLEXER_BACKENDS.has(record.backend) || !record.backendTarget) {\n dependencies.stderr(`Runner ${record.id} uses the ${record.backend} backend, which does not expose CLI input`);\n return 1;\n }\n if (!(await dependencies.rmuxBackend.input(record.backendTarget, payload))) {\n dependencies.stderr(`Runner ${record.id} is no longer accepting RMUX input`);\n return 1;\n }\n dependencies.stdout(`Sent input to ${record.id}`);\n return 0;\n}\n\nasync function requiredRecord(\n id: string | undefined,\n dependencies: CliDependencies,\n): Promise<RunnerRecord | undefined> {\n if (!id) {\n dependencies.stderr('A runner ID is required');\n return undefined;\n }\n const sessionId = requiredSessionId(dependencies.env);\n const scopedRecord = await dependencies.registry.get(id, sessionId);\n if (!scopedRecord) {\n dependencies.stderr(`No runner with id ${id}`);\n return undefined;\n }\n return scopedRecord;\n}\n\nfunction formatRecord(record: RunnerRecord): string {\n const active = formatRunnerLine(record, Date.now());\n return `${record.id} ${record.state} ${record.backend} ${active}`;\n}\n\nfunction formatExit(record: RunnerRecord): string {\n const exit = record.exit;\n if (!exit) return 'unknown';\n const detail = exit.code !== null ? ` code ${exit.code}` : exit.signal ? ` ${exit.signal}` : '';\n const attribution = exit.terminationReason ? ` [${exit.terminationReason}]` : '';\n const note = exit.stopReason ? ` (${exit.stopReason})` : '';\n return `${exit.reason}${detail}${attribution}${note}`;\n}\n\nfunction option(args: readonly string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n\nfunction positiveInteger(value: string | undefined): number | undefined {\n if (value === undefined) return undefined;\n const parsed = Number(value);\n return Number.isInteger(parsed) && parsed > 0 ? parsed : undefined;\n}\n\nasync function follow(record: RunnerRecord, initialSize: number, dependencies: CliDependencies): Promise<number> {\n let offset = initialSize;\n return new Promise<number>((resolve) => {\n let stopped = false;\n let stateTimer: NodeJS.Timeout;\n const listener = (current: fs.Stats): void => {\n if (current.size < offset) offset = 0;\n if (current.size === offset) return;\n const length = current.size - offset;\n const buffer = Buffer.alloc(length);\n const descriptor = fs.openSync(record.logPath, 'r');\n try {\n const bytesRead = fs.readSync(descriptor, buffer, 0, length, offset);\n if (bytesRead > 0) dependencies.stdout(buffer.subarray(0, bytesRead).toString('utf8'));\n } finally {\n fs.closeSync(descriptor);\n }\n offset = current.size;\n };\n const stopFollowing = (): void => {\n if (stopped) return;\n stopped = true;\n try {\n listener(fs.statSync(record.logPath));\n } catch (error) {\n // A missing log file was already reported by the initial read.\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n dependencies.stderr(`Runner ${record.id} failed to flush its final log output: ${(error as Error).message}`);\n }\n }\n fs.unwatchFile(record.logPath, listener);\n clearInterval(stateTimer);\n process.off('SIGINT', stopFollowing);\n resolve(0);\n };\n process.once('SIGINT', stopFollowing);\n fs.watchFile(record.logPath, { interval: FOLLOW_INTERVAL_MS }, listener);\n stateTimer = setInterval(() => {\n void dependencies.registry.get(record.id).then((current) => {\n if (current?.state === COMPLETED_STATE) stopFollowing();\n });\n }, FOLLOW_INTERVAL_MS);\n });\n}\n\nasync function stopRecord(record: RunnerRecord, dependencies: CliDependencies, reason?: string): Promise<boolean> {\n await dependencies.registry.requestTermination(\n record.id,\n {\n reason: STOPPED_REASON,\n terminationReason: 'user_stop',\n ...(reason ? { stopReason: reason } : {}),\n },\n record.sessionId,\n );\n const stopped =\n MULTIPLEXER_BACKENDS.has(record.backend) && record.backendTarget\n ? await dependencies.rmuxBackend.stop(record.backendTarget, record.pid)\n : await dependencies.launcher.stop(record.pid);\n if (!stopped) await dependencies.registry.requestTermination(record.id, undefined, record.sessionId);\n return stopped;\n}\n\nfunction help(): string {\n return [\n 'Usage: doom-runner <command>',\n '',\n 'Commands:',\n ' list [--all]',\n ' status <id>',\n ' logs <id> [--lines N] [--follow]',\n ' stop <id> [--reason <text>]',\n ' stop-all [--reason <text>]',\n ' input <id> [--text <text>] [--enter]',\n ].join('\\n');\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_cliApp = require("./cliApp-Dj9nwaOv.cjs");
3
+ exports.runCli = require_cliApp.runCli;
@@ -0,0 +1,18 @@
1
+ import { t as ILauncher } from "./launcher-BG5t9nvG.mjs";
2
+ import { t as IRmuxBackend } from "./rmuxBackend-CaEWooWn.mjs";
3
+ import { n as IRunnerRegistry } from "./runnerRegistry-CtJiD02R.mjs";
4
+ import { t as ILogReader } from "./logReader-MdW9ffvV.mjs";
5
+ //#region src/services/cliApp/index.d.ts
6
+ export interface CliDependencies {
7
+ registry: IRunnerRegistry;
8
+ launcher: ILauncher;
9
+ rmuxBackend: IRmuxBackend;
10
+ logReader: ILogReader;
11
+ env?: NodeJS.ProcessEnv;
12
+ stdout(text: string): void;
13
+ stderr(text: string): void;
14
+ readStdin(): Promise<string>;
15
+ }
16
+ export declare function runCli(argv: readonly string[], dependencies: CliDependencies): Promise<number>;
17
+ //#endregion
18
+ //# sourceMappingURL=cliApp.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cliApp.d.mts","names":[],"sources":["../src/services/cliApp/index.ts"],"mappings":";;;;;iBAkBiB;EACf,UAAU;EACV,UAAU;EACV,aAAa;EACb,WAAW;EACX,MAAM,OAAO;EACb,OAAO;EACP,OAAO;EACP,aAAa;;wBAGO,OAAO,yBAAyB,cAAc,kBAAkB"}
@@ -0,0 +1,2 @@
1
+ import { t as runCli } from "./cliApp-v8Z3rMCi.mjs";
2
+ export { runCli };
@@ -0,0 +1,16 @@
1
+ //#region src/services/clock/index.ts
2
+ /** Real wall clock and timers. */
3
+ var SystemClock = class {
4
+ now() {
5
+ return Date.now();
6
+ }
7
+ after(ms, handler) {
8
+ const timer = setTimeout(handler, ms);
9
+ timer.unref?.();
10
+ return () => clearTimeout(timer);
11
+ }
12
+ };
13
+ //#endregion
14
+ export { SystemClock as t };
15
+
16
+ //# sourceMappingURL=clock-Cv2pddgo.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock-Cv2pddgo.mjs","names":[],"sources":["../src/services/clock/index.ts"],"sourcesContent":["import type { IClock } from '../../types/clock';\n\n/** Real wall clock and timers. */\nexport class SystemClock implements IClock {\n now(): number {\n return Date.now();\n }\n\n after(ms: number, handler: () => void): () => void {\n const timer = setTimeout(handler, ms);\n // The timer must never be the reason the host process stays alive.\n timer.unref?.();\n return () => clearTimeout(timer);\n }\n}\n"],"mappings":";;AAGA,IAAa,cAAb,MAA2C;CACzC,MAAc;EACZ,OAAO,KAAK,IAAI;CAClB;CAEA,MAAM,IAAY,SAAiC;EACjD,MAAM,QAAQ,WAAW,SAAS,EAAE;EAEpC,MAAM,QAAQ;EACd,aAAa,aAAa,KAAK;CACjC;AACF"}
@@ -0,0 +1,11 @@
1
+ //#region src/types/clock.d.ts
2
+ /** Time and timers as a port, so the background threshold is testable. */
3
+ interface IClock {
4
+ /** Milliseconds since the epoch. */
5
+ now(): number;
6
+ /** Schedules `handler` after `ms` and returns a cancel function. */
7
+ after(ms: number, handler: () => void): () => void;
8
+ }
9
+ //#endregion
10
+ export { IClock as t };
11
+ //# sourceMappingURL=clock-euJkweLq.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock-euJkweLq.d.mts","names":[],"sources":["../src/types/clock.ts"],"mappings":";;UACiB;;EAEf;;EAEA,MAAM,YAAY"}
@@ -0,0 +1,21 @@
1
+ //#region src/services/clock/index.ts
2
+ /** Real wall clock and timers. */
3
+ var SystemClock = class {
4
+ now() {
5
+ return Date.now();
6
+ }
7
+ after(ms, handler) {
8
+ const timer = setTimeout(handler, ms);
9
+ timer.unref?.();
10
+ return () => clearTimeout(timer);
11
+ }
12
+ };
13
+ //#endregion
14
+ Object.defineProperty(exports, "SystemClock", {
15
+ enumerable: true,
16
+ get: function() {
17
+ return SystemClock;
18
+ }
19
+ });
20
+
21
+ //# sourceMappingURL=clock-jqnLWziT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock-jqnLWziT.cjs","names":[],"sources":["../src/services/clock/index.ts"],"sourcesContent":["import type { IClock } from '../../types/clock';\n\n/** Real wall clock and timers. */\nexport class SystemClock implements IClock {\n now(): number {\n return Date.now();\n }\n\n after(ms: number, handler: () => void): () => void {\n const timer = setTimeout(handler, ms);\n // The timer must never be the reason the host process stays alive.\n timer.unref?.();\n return () => clearTimeout(timer);\n }\n}\n"],"mappings":";;AAGA,IAAa,cAAb,MAA2C;CACzC,MAAc;EACZ,OAAO,KAAK,IAAI;CAClB;CAEA,MAAM,IAAY,SAAiC;EACjD,MAAM,QAAQ,WAAW,SAAS,EAAE;EAEpC,MAAM,QAAQ;EACd,aAAa,aAAa,KAAK;CACjC;AACF"}
package/dist/clock.cjs ADDED
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_clock = require("./clock-jqnLWziT.cjs");
3
+ exports.SystemClock = require_clock.SystemClock;
@@ -0,0 +1,10 @@
1
+ import { t as IClock } from "./clock-euJkweLq.mjs";
2
+ //#region src/services/clock/index.d.ts
3
+ /** Real wall clock and timers. */
4
+ export declare class SystemClock implements IClock {
5
+ now(): number;
6
+ after(ms: number, handler: () => void): () => void;
7
+ }
8
+ //#endregion
9
+ export type { IClock };
10
+ //# sourceMappingURL=clock.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock.d.mts","names":[],"sources":["../src/services/clock/index.ts"],"mappings":";;;qBAGa,uBAAuB;EAClC;EAIA,MAAM,YAAY"}
package/dist/clock.mjs ADDED
@@ -0,0 +1,2 @@
1
+ import { t as SystemClock } from "./clock-Cv2pddgo.mjs";
2
+ export { SystemClock };
@@ -0,0 +1,40 @@
1
+ //#region src/constants/compaction.ts
2
+ const COMPACTION_RUNNERS_MARKER = "Active background runners survived compaction:";
3
+ //#endregion
4
+ //#region src/services/compaction/index.ts
5
+ function activeRunnerRecovery(active) {
6
+ if (active.length === 0) return "";
7
+ const runners = active.flatMap((record) => [
8
+ `- ${record.name} (${record.id}), log: ${record.logPath}`,
9
+ ` Check: doom-runner status ${record.id}`,
10
+ ` Stream: doom-runner logs ${record.id} --follow`
11
+ ]);
12
+ return [
13
+ COMPACTION_RUNNERS_MARKER,
14
+ ...runners,
15
+ "Use these CLI commands to inspect existing runners before launching another command."
16
+ ].join("\n");
17
+ }
18
+ function appendActiveRunnersToSummary(summary, active) {
19
+ if (active.length === 0 || summary.includes("Active background runners survived compaction:")) return summary;
20
+ return [
21
+ summary,
22
+ "",
23
+ activeRunnerRecovery(active)
24
+ ].join("\n");
25
+ }
26
+ //#endregion
27
+ Object.defineProperty(exports, "activeRunnerRecovery", {
28
+ enumerable: true,
29
+ get: function() {
30
+ return activeRunnerRecovery;
31
+ }
32
+ });
33
+ Object.defineProperty(exports, "appendActiveRunnersToSummary", {
34
+ enumerable: true,
35
+ get: function() {
36
+ return appendActiveRunnersToSummary;
37
+ }
38
+ });
39
+
40
+ //# sourceMappingURL=compaction-4QSUsBxq.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-4QSUsBxq.cjs","names":[],"sources":["../src/constants/compaction.ts","../src/services/compaction/index.ts"],"sourcesContent":["export const COMPACTION_RUNNERS_MARKER = 'Active background runners survived compaction:';\nexport const RUNNER_COMPACTION_MESSAGE = 'doom-runner-compaction';\n","import { COMPACTION_RUNNERS_MARKER } from '../../constants/compaction';\nimport type { RunnerRecord } from '../../types/runnerRegistry';\n\nexport interface RunnerCompactionDependencies {\n getSessionId(): string | undefined | Promise<string | undefined>;\n listBySession(sessionId: string): Promise<RunnerRecord[]>;\n}\n\nexport function activeRunnerRecovery(active: readonly RunnerRecord[]): string {\n if (active.length === 0) return '';\n const runners = active.flatMap((record) => [\n `- ${record.name} (${record.id}), log: ${record.logPath}`,\n ` Check: doom-runner status ${record.id}`,\n ` Stream: doom-runner logs ${record.id} --follow`,\n ]);\n return [\n COMPACTION_RUNNERS_MARKER,\n ...runners,\n 'Use these CLI commands to inspect existing runners before launching another command.',\n ].join('\\n');\n}\n\nexport function appendActiveRunnersToSummary(summary: string, active: readonly RunnerRecord[]): string {\n if (active.length === 0 || summary.includes(COMPACTION_RUNNERS_MARKER)) return summary;\n return [summary, '', activeRunnerRecovery(active)].join('\\n');\n}\n"],"mappings":";AAAA,MAAa,4BAA4B;;;ACQzC,SAAgB,qBAAqB,QAAyC;CAC5E,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,MAAM,UAAU,OAAO,SAAS,WAAW;EACzC,KAAK,OAAO,KAAK,IAAI,OAAO,GAAG,UAAU,OAAO;EAChD,+BAA+B,OAAO;EACtC,8BAA8B,OAAO,GAAG;CAC1C,CAAC;CACD,OAAO;EACL;EACA,GAAG;EACH;CACF,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAgB,6BAA6B,SAAiB,QAAyC;CACrG,IAAI,OAAO,WAAW,KAAK,QAAQ,SAAA,gDAAkC,GAAG,OAAO;CAC/E,OAAO;EAAC;EAAS;EAAI,qBAAqB,MAAM;CAAC,CAAC,CAAC,KAAK,IAAI;AAC9D"}
@@ -0,0 +1,29 @@
1
+ //#region src/constants/compaction.ts
2
+ const COMPACTION_RUNNERS_MARKER = "Active background runners survived compaction:";
3
+ //#endregion
4
+ //#region src/services/compaction/index.ts
5
+ function activeRunnerRecovery(active) {
6
+ if (active.length === 0) return "";
7
+ const runners = active.flatMap((record) => [
8
+ `- ${record.name} (${record.id}), log: ${record.logPath}`,
9
+ ` Check: doom-runner status ${record.id}`,
10
+ ` Stream: doom-runner logs ${record.id} --follow`
11
+ ]);
12
+ return [
13
+ COMPACTION_RUNNERS_MARKER,
14
+ ...runners,
15
+ "Use these CLI commands to inspect existing runners before launching another command."
16
+ ].join("\n");
17
+ }
18
+ function appendActiveRunnersToSummary(summary, active) {
19
+ if (active.length === 0 || summary.includes("Active background runners survived compaction:")) return summary;
20
+ return [
21
+ summary,
22
+ "",
23
+ activeRunnerRecovery(active)
24
+ ].join("\n");
25
+ }
26
+ //#endregion
27
+ export { appendActiveRunnersToSummary as n, activeRunnerRecovery as t };
28
+
29
+ //# sourceMappingURL=compaction-DCw80VZj.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction-DCw80VZj.mjs","names":[],"sources":["../src/constants/compaction.ts","../src/services/compaction/index.ts"],"sourcesContent":["export const COMPACTION_RUNNERS_MARKER = 'Active background runners survived compaction:';\nexport const RUNNER_COMPACTION_MESSAGE = 'doom-runner-compaction';\n","import { COMPACTION_RUNNERS_MARKER } from '../../constants/compaction';\nimport type { RunnerRecord } from '../../types/runnerRegistry';\n\nexport interface RunnerCompactionDependencies {\n getSessionId(): string | undefined | Promise<string | undefined>;\n listBySession(sessionId: string): Promise<RunnerRecord[]>;\n}\n\nexport function activeRunnerRecovery(active: readonly RunnerRecord[]): string {\n if (active.length === 0) return '';\n const runners = active.flatMap((record) => [\n `- ${record.name} (${record.id}), log: ${record.logPath}`,\n ` Check: doom-runner status ${record.id}`,\n ` Stream: doom-runner logs ${record.id} --follow`,\n ]);\n return [\n COMPACTION_RUNNERS_MARKER,\n ...runners,\n 'Use these CLI commands to inspect existing runners before launching another command.',\n ].join('\\n');\n}\n\nexport function appendActiveRunnersToSummary(summary: string, active: readonly RunnerRecord[]): string {\n if (active.length === 0 || summary.includes(COMPACTION_RUNNERS_MARKER)) return summary;\n return [summary, '', activeRunnerRecovery(active)].join('\\n');\n}\n"],"mappings":";AAAA,MAAa,4BAA4B;;;ACQzC,SAAgB,qBAAqB,QAAyC;CAC5E,IAAI,OAAO,WAAW,GAAG,OAAO;CAChC,MAAM,UAAU,OAAO,SAAS,WAAW;EACzC,KAAK,OAAO,KAAK,IAAI,OAAO,GAAG,UAAU,OAAO;EAChD,+BAA+B,OAAO;EACtC,8BAA8B,OAAO,GAAG;CAC1C,CAAC;CACD,OAAO;EACL;EACA,GAAG;EACH;CACF,CAAC,CAAC,KAAK,IAAI;AACb;AAEA,SAAgB,6BAA6B,SAAiB,QAAyC;CACrG,IAAI,OAAO,WAAW,KAAK,QAAQ,SAAA,gDAAkC,GAAG,OAAO;CAC/E,OAAO;EAAC;EAAS;EAAI,qBAAqB,MAAM;CAAC,CAAC,CAAC,KAAK,IAAI;AAC9D"}
@@ -0,0 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_compaction = require("./compaction-4QSUsBxq.cjs");
3
+ exports.activeRunnerRecovery = require_compaction.activeRunnerRecovery;
4
+ exports.appendActiveRunnersToSummary = require_compaction.appendActiveRunnersToSummary;
@@ -0,0 +1,10 @@
1
+ import { i as RunnerRecord } from "./runnerRegistry-CtJiD02R.mjs";
2
+ //#region src/services/compaction/index.d.ts
3
+ export interface RunnerCompactionDependencies {
4
+ getSessionId(): string | undefined | Promise<string | undefined>;
5
+ listBySession(sessionId: string): Promise<RunnerRecord[]>;
6
+ }
7
+ export declare function activeRunnerRecovery(active: readonly RunnerRecord[]): string;
8
+ export declare function appendActiveRunnersToSummary(summary: string, active: readonly RunnerRecord[]): string;
9
+ //#endregion
10
+ //# sourceMappingURL=compaction.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compaction.d.mts","names":[],"sources":["../src/services/compaction/index.ts"],"mappings":";;iBAGiB;EACf,qCAAqC;EACrC,cAAc,oBAAoB,QAAQ;;wBAG5B,qBAAqB,iBAAiB;wBActC,6BAA6B,iBAAiB,iBAAiB"}
@@ -0,0 +1,2 @@
1
+ import { n as appendActiveRunnersToSummary, t as activeRunnerRecovery } from "./compaction-DCw80VZj.mjs";
2
+ export { activeRunnerRecovery, appendActiveRunnersToSummary };
@@ -0,0 +1,41 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_runnerConfig = require("./runnerConfig-D2tGq5ZM.cjs");
3
+ exports.BG_THRESHOLD_MS_ENV = require_runnerConfig.BG_THRESHOLD_MS_ENV;
4
+ exports.DEFAULT_BG_THRESHOLD_MS = require_runnerConfig.DEFAULT_BG_THRESHOLD_MS;
5
+ exports.DEFAULT_ERROR_BUDGET_RATIO = require_runnerConfig.DEFAULT_ERROR_BUDGET_RATIO;
6
+ exports.DEFAULT_ERROR_MAX_ENTRIES = require_runnerConfig.DEFAULT_ERROR_MAX_ENTRIES;
7
+ exports.DEFAULT_ERROR_MAX_VARIANTS_JOINED = require_runnerConfig.DEFAULT_ERROR_MAX_VARIANTS_JOINED;
8
+ exports.DEFAULT_HEAD_RATIO = require_runnerConfig.DEFAULT_HEAD_RATIO;
9
+ exports.DEFAULT_LOG_MAX_BYTES = require_runnerConfig.DEFAULT_LOG_MAX_BYTES;
10
+ exports.DEFAULT_LOG_TTL_MS = require_runnerConfig.DEFAULT_LOG_TTL_MS;
11
+ exports.DEFAULT_MAX_COMPLETED_RUNNERS = require_runnerConfig.DEFAULT_MAX_COMPLETED_RUNNERS;
12
+ exports.DEFAULT_RESULT_MAX_BYTES = require_runnerConfig.DEFAULT_RESULT_MAX_BYTES;
13
+ exports.DEFAULT_RESULT_MAX_LINES = require_runnerConfig.DEFAULT_RESULT_MAX_LINES;
14
+ exports.DEFAULT_RESULT_MAX_TOKENS = require_runnerConfig.DEFAULT_RESULT_MAX_TOKENS;
15
+ exports.DEFAULT_SUCCESS_RESULT_MAX_BYTES = require_runnerConfig.DEFAULT_SUCCESS_RESULT_MAX_BYTES;
16
+ exports.DEFAULT_SUCCESS_RESULT_MAX_TOKENS = require_runnerConfig.DEFAULT_SUCCESS_RESULT_MAX_TOKENS;
17
+ exports.LOG_DIR_ENV = require_runnerConfig.LOG_DIR_ENV;
18
+ exports.LOG_MAX_BYTES_ENV = require_runnerConfig.LOG_MAX_BYTES_ENV;
19
+ exports.LOG_TTL_MS_ENV = require_runnerConfig.LOG_TTL_MS_ENV;
20
+ exports.MAX_COMPLETED_RUNNERS_ENV = require_runnerConfig.MAX_COMPLETED_RUNNERS_ENV;
21
+ exports.RESULT_MAX_BYTES_ENV = require_runnerConfig.RESULT_MAX_BYTES_ENV;
22
+ exports.RESULT_MAX_TOKENS_ENV = require_runnerConfig.RESULT_MAX_TOKENS_ENV;
23
+ exports.SUCCESS_RESULT_MAX_BYTES_ENV = require_runnerConfig.SUCCESS_RESULT_MAX_BYTES_ENV;
24
+ exports.SUCCESS_RESULT_MAX_TOKENS_ENV = require_runnerConfig.SUCCESS_RESULT_MAX_TOKENS_ENV;
25
+ exports.getBackgroundThresholdMs = require_runnerConfig.getBackgroundThresholdMs;
26
+ exports.getErrorBudgetRatio = require_runnerConfig.getErrorBudgetRatio;
27
+ exports.getErrorMaxEntries = require_runnerConfig.getErrorMaxEntries;
28
+ exports.getErrorMaxVariantsJoined = require_runnerConfig.getErrorMaxVariantsJoined;
29
+ exports.getErrorPatterns = require_runnerConfig.getErrorPatterns;
30
+ exports.getHeadRatio = require_runnerConfig.getHeadRatio;
31
+ exports.getLogMaxBytes = require_runnerConfig.getLogMaxBytes;
32
+ exports.getLogTtlMs = require_runnerConfig.getLogTtlMs;
33
+ exports.getMaxCompletedRunners = require_runnerConfig.getMaxCompletedRunners;
34
+ exports.getResultMaxBytes = require_runnerConfig.getResultMaxBytes;
35
+ exports.getResultMaxLines = require_runnerConfig.getResultMaxLines;
36
+ exports.getResultMaxTokens = require_runnerConfig.getResultMaxTokens;
37
+ exports.getRunnerSettings = require_runnerConfig.getRunnerSettings;
38
+ exports.getSuccessResultMaxBytes = require_runnerConfig.getSuccessResultMaxBytes;
39
+ exports.getSuccessResultMaxTokens = require_runnerConfig.getSuccessResultMaxTokens;
40
+ exports.noninteractiveEnvironment = require_runnerConfig.noninteractiveEnvironment;
41
+ exports.setRunnerSettings = require_runnerConfig.setRunnerSettings;
@@ -0,0 +1,2 @@
1
+ import { A as getLogTtlMs, C as getBackgroundThresholdMs, D as getErrorPatterns, E as getErrorMaxVariantsJoined, F as getRunnerSettings, I as getSuccessResultMaxBytes, L as getSuccessResultMaxTokens, M as getResultMaxBytes, N as getResultMaxLines, O as getHeadRatio, P as getResultMaxTokens, R as noninteractiveEnvironment, S as SUCCESS_RESULT_MAX_TOKENS_ENV, T as getErrorMaxEntries, _ as LOG_TTL_MS_ENV, a as DEFAULT_ERROR_MAX_VARIANTS_JOINED, b as RESULT_MAX_TOKENS_ENV, c as DEFAULT_LOG_TTL_MS, d as DEFAULT_RESULT_MAX_LINES, f as DEFAULT_RESULT_MAX_TOKENS, g as LOG_MAX_BYTES_ENV, h as LOG_DIR_ENV, i as DEFAULT_ERROR_MAX_ENTRIES, j as getMaxCompletedRunners, k as getLogMaxBytes, l as DEFAULT_MAX_COMPLETED_RUNNERS, m as DEFAULT_SUCCESS_RESULT_MAX_TOKENS, n as DEFAULT_BG_THRESHOLD_MS, o as DEFAULT_HEAD_RATIO, p as DEFAULT_SUCCESS_RESULT_MAX_BYTES, r as DEFAULT_ERROR_BUDGET_RATIO, s as DEFAULT_LOG_MAX_BYTES, t as BG_THRESHOLD_MS_ENV, u as DEFAULT_RESULT_MAX_BYTES, v as MAX_COMPLETED_RUNNERS_ENV, w as getErrorBudgetRatio, x as SUCCESS_RESULT_MAX_BYTES_ENV, y as RESULT_MAX_BYTES_ENV, z as setRunnerSettings } from "./runnerConfig-BjtulXBI.mjs";
2
+ export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_ERROR_BUDGET_RATIO, DEFAULT_ERROR_MAX_ENTRIES, DEFAULT_ERROR_MAX_VARIANTS_JOINED, DEFAULT_HEAD_RATIO, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_MAX_COMPLETED_RUNNERS, DEFAULT_RESULT_MAX_BYTES, DEFAULT_RESULT_MAX_LINES, DEFAULT_RESULT_MAX_TOKENS, DEFAULT_SUCCESS_RESULT_MAX_BYTES, DEFAULT_SUCCESS_RESULT_MAX_TOKENS, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, MAX_COMPLETED_RUNNERS_ENV, RESULT_MAX_BYTES_ENV, RESULT_MAX_TOKENS_ENV, SUCCESS_RESULT_MAX_BYTES_ENV, SUCCESS_RESULT_MAX_TOKENS_ENV, getBackgroundThresholdMs, getErrorBudgetRatio, getErrorMaxEntries, getErrorMaxVariantsJoined, getErrorPatterns, getHeadRatio, getLogMaxBytes, getLogTtlMs, getMaxCompletedRunners, getResultMaxBytes, getResultMaxLines, getResultMaxTokens, getRunnerSettings, getSuccessResultMaxBytes, getSuccessResultMaxTokens, noninteractiveEnvironment, setRunnerSettings };
@@ -0,0 +1,2 @@
1
+ import { A as DEFAULT_SUCCESS_RESULT_MAX_BYTES, C as DEFAULT_HEAD_RATIO, D as DEFAULT_RESULT_MAX_BYTES, E as DEFAULT_MAX_COMPLETED_RUNNERS, F as MAX_COMPLETED_RUNNERS_ENV, I as RESULT_MAX_BYTES_ENV, L as RESULT_MAX_TOKENS_ENV, M as LOG_DIR_ENV, N as LOG_MAX_BYTES_ENV, O as DEFAULT_RESULT_MAX_LINES, P as LOG_TTL_MS_ENV, R as SUCCESS_RESULT_MAX_BYTES_ENV, S as DEFAULT_ERROR_MAX_VARIANTS_JOINED, T as DEFAULT_LOG_TTL_MS, _ as setRunnerSettings, a as getErrorPatterns, b as DEFAULT_ERROR_BUDGET_RATIO, c as getLogTtlMs, d as getResultMaxLines, f as getResultMaxTokens, g as noninteractiveEnvironment, h as getSuccessResultMaxTokens, i as getErrorMaxVariantsJoined, j as DEFAULT_SUCCESS_RESULT_MAX_TOKENS, k as DEFAULT_RESULT_MAX_TOKENS, l as getMaxCompletedRunners, m as getSuccessResultMaxBytes, n as getErrorBudgetRatio, o as getHeadRatio, p as getRunnerSettings, r as getErrorMaxEntries, s as getLogMaxBytes, t as getBackgroundThresholdMs, u as getResultMaxBytes, v as BG_THRESHOLD_MS_ENV, w as DEFAULT_LOG_MAX_BYTES, x as DEFAULT_ERROR_MAX_ENTRIES, y as DEFAULT_BG_THRESHOLD_MS, z as SUCCESS_RESULT_MAX_TOKENS_ENV } from "./runnerConfig-BQBlVAXn.mjs";
2
+ export { BG_THRESHOLD_MS_ENV, DEFAULT_BG_THRESHOLD_MS, DEFAULT_ERROR_BUDGET_RATIO, DEFAULT_ERROR_MAX_ENTRIES, DEFAULT_ERROR_MAX_VARIANTS_JOINED, DEFAULT_HEAD_RATIO, DEFAULT_LOG_MAX_BYTES, DEFAULT_LOG_TTL_MS, DEFAULT_MAX_COMPLETED_RUNNERS, DEFAULT_RESULT_MAX_BYTES, DEFAULT_RESULT_MAX_LINES, DEFAULT_RESULT_MAX_TOKENS, DEFAULT_SUCCESS_RESULT_MAX_BYTES, DEFAULT_SUCCESS_RESULT_MAX_TOKENS, LOG_DIR_ENV, LOG_MAX_BYTES_ENV, LOG_TTL_MS_ENV, MAX_COMPLETED_RUNNERS_ENV, RESULT_MAX_BYTES_ENV, RESULT_MAX_TOKENS_ENV, SUCCESS_RESULT_MAX_BYTES_ENV, SUCCESS_RESULT_MAX_TOKENS_ENV, getBackgroundThresholdMs, getErrorBudgetRatio, getErrorMaxEntries, getErrorMaxVariantsJoined, getErrorPatterns, getHeadRatio, getLogMaxBytes, getLogTtlMs, getMaxCompletedRunners, getResultMaxBytes, getResultMaxLines, getResultMaxTokens, getRunnerSettings, getSuccessResultMaxBytes, getSuccessResultMaxTokens, noninteractiveEnvironment, setRunnerSettings };
@@ -0,0 +1,23 @@
1
+ import { defineMcpWidget } from "@agimon-ai/po-core/web";
2
+ import { McpToolFields, McpToolFrame, McpToolOutput } from "@agimon-ai/po-web-components";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/extensions/workspaces/sessions/(frontend)/tool/bash.mcp.tsx
5
+ function BashMcpWidget(props) {
6
+ return /* @__PURE__ */ jsxs(McpToolFrame, {
7
+ ...props,
8
+ title: "Run command",
9
+ children: [/* @__PURE__ */ jsx(McpToolFields, { fields: [
10
+ ["Name", props.args.name],
11
+ ["Command", props.args.command],
12
+ ["Background", props.args.background],
13
+ ["Timeout", props.args.timeout]
14
+ ] }), /* @__PURE__ */ jsx(McpToolOutput, { result: props.result })]
15
+ });
16
+ }
17
+ //#endregion
18
+ //#region generated/mcp-ui.ts
19
+ const widgets = { "@agimon-ai/po-runner/bash": defineMcpWidget(BashMcpWidget) };
20
+ //#endregion
21
+ export { widgets };
22
+
23
+ //# sourceMappingURL=mcp-ui.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-ui.mjs","names":["Widget0"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/bash.mcp.tsx","../../generated/mcp-ui.ts"],"sourcesContent":["import { defineMcpWidget, type DoomMcpWidgetProps } from '@agimon-ai/po-core/web';\nimport { McpToolFrame, McpToolFields, McpToolOutput } from '@agimon-ai/po-web-components';\n\nfunction BashMcpWidget(props: DoomMcpWidgetProps) {\n return (\n <McpToolFrame {...props} title=\"Run command\">\n <McpToolFields\n fields={[\n ['Name', props.args.name],\n ['Command', props.args.command],\n ['Background', props.args.background],\n ['Timeout', props.args.timeout],\n ]}\n />\n <McpToolOutput result={props.result} />\n </McpToolFrame>\n );\n}\n\nexport default defineMcpWidget(BashMcpWidget);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport type { ComponentType } from 'react';\nimport type { DoomMcpWidgetProps } from '@agimon-ai/po-core/mcpWidget';\nimport Widget0 from \"../src/extensions/workspaces/sessions/(frontend)/tool/bash.mcp\";\n\nexport const widgets: Readonly<Record<string, ComponentType<DoomMcpWidgetProps>>> = {\n \"@agimon-ai/po-runner/bash\": Widget0,\n};\n"],"mappings":";;;;AAGA,SAAS,cAAc,OAA2B;CAChD,OACE,qBAAC,cAAD;EAAc,GAAI;EAAO,OAAM;EAA/B,UAAA,CACE,oBAAC,eAAD,EACE,QAAQ;GACN,CAAC,QAAQ,MAAM,KAAK,IAAI;GACxB,CAAC,WAAW,MAAM,KAAK,OAAO;GAC9B,CAAC,cAAc,MAAM,KAAK,UAAU;GACpC,CAAC,WAAW,MAAM,KAAK,OAAO;EAChC,EACD,CAAA,GACD,oBAAC,eAAD,EAAe,QAAQ,MAAM,OAAS,CAAA,CAC1B;;AAElB;;;ACZA,MAAa,UAAuE,EAClF,6BDaa,gBAAgB,aCbAA,EAC/B"}