@agimon-ai/po-runner 0.0.0-alpha.2 → 0.0.0-alpha.21

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 (238) hide show
  1. package/LICENSE +149 -21
  2. package/README.md +17 -17
  3. package/dist/ansiScrub.mjs +1 -2
  4. package/dist/apiContracts.cjs +1 -1
  5. package/dist/apiContracts.cjs.map +1 -1
  6. package/dist/apiContracts.mjs +1 -1
  7. package/dist/apiContracts.mjs.map +1 -1
  8. package/dist/{bashResult-bIVSzoj-.mjs → bashResult-BqDa7sbC.mjs} +10 -9
  9. package/dist/bashResult-BqDa7sbC.mjs.map +1 -0
  10. package/dist/{bashResult-DNgtahGR.cjs → bashResult-C2iKhHpD.cjs} +10 -9
  11. package/dist/bashResult-C2iKhHpD.cjs.map +1 -0
  12. package/dist/{bashRunService-CJ02XaAq.mjs → bashRunService-Cl3pYccr.mjs} +2 -2
  13. package/dist/bashRunService-Cl3pYccr.mjs.map +1 -0
  14. package/dist/{bashRunService-DyqxOSlx.cjs → bashRunService-DjOH5kye.cjs} +2 -2
  15. package/dist/bashRunService-DjOH5kye.cjs.map +1 -0
  16. package/dist/bashRunService.cjs +1 -1
  17. package/dist/bashRunService.d.mts +3 -3
  18. package/dist/bashRunService.mjs +1 -2
  19. package/dist/bashSchema.cjs +1 -1
  20. package/dist/bashSchema.mjs +1 -2
  21. package/dist/{bashTool-C-k7fmyh.mjs → bashTool-BvC3YOgG.mjs} +2 -2
  22. package/dist/{bashTool-C-k7fmyh.mjs.map → bashTool-BvC3YOgG.mjs.map} +1 -1
  23. package/dist/{bashTool-CdgtqVFD.cjs → bashTool-euL6zMDl.cjs} +2 -2
  24. package/dist/{bashTool-CdgtqVFD.cjs.map → bashTool-euL6zMDl.cjs.map} +1 -1
  25. package/dist/bashTool.cjs +3 -3
  26. package/dist/bashTool.d.mts +1 -1
  27. package/dist/bashTool.mjs +3 -3
  28. package/dist/bin/cli.cjs +6 -6
  29. package/dist/bin/cli.cjs.map +1 -1
  30. package/dist/bin/cli.mjs +7 -7
  31. package/dist/bin/cli.mjs.map +1 -1
  32. package/dist/bin/logSink.cjs +6 -6
  33. package/dist/bin/logSink.cjs.map +1 -1
  34. package/dist/bin/logSink.mjs +7 -7
  35. package/dist/bin/logSink.mjs.map +1 -1
  36. package/dist/bin/runnerHost.cjs +4 -4
  37. package/dist/bin/runnerHost.cjs.map +1 -1
  38. package/dist/bin/runnerHost.mjs +5 -5
  39. package/dist/bin/runnerHost.mjs.map +1 -1
  40. package/dist/{cliApp-Dj9nwaOv.cjs → cliApp-T8Fx_-1j.cjs} +6 -6
  41. package/dist/cliApp-T8Fx_-1j.cjs.map +1 -0
  42. package/dist/{cliApp-v8Z3rMCi.mjs → cliApp-q97eVh4E.mjs} +6 -6
  43. package/dist/cliApp-q97eVh4E.mjs.map +1 -0
  44. package/dist/cliApp.cjs +1 -1
  45. package/dist/cliApp.d.mts +1 -1
  46. package/dist/cliApp.mjs +1 -2
  47. package/dist/clock.mjs +1 -2
  48. package/dist/{compaction-4QSUsBxq.cjs → compaction-Cduebib_.cjs} +3 -3
  49. package/dist/compaction-Cduebib_.cjs.map +1 -0
  50. package/dist/{compaction-DCw80VZj.mjs → compaction-nNlE6e5I.mjs} +3 -3
  51. package/dist/compaction-nNlE6e5I.mjs.map +1 -0
  52. package/dist/compaction.cjs +1 -1
  53. package/dist/compaction.d.mts +1 -1
  54. package/dist/compaction.mjs +1 -2
  55. package/dist/config.cjs +1 -1
  56. package/dist/config.d.mts +1 -1
  57. package/dist/config.mjs +1 -2
  58. package/dist/extensions/mcp-ui.mjs.map +1 -1
  59. package/dist/extensions/mcp.cjs +8 -7
  60. package/dist/extensions/mcp.cjs.map +1 -1
  61. package/dist/extensions/mcp.d.mts +1 -1
  62. package/dist/extensions/mcp.mjs +7 -6
  63. package/dist/extensions/mcp.mjs.map +1 -1
  64. package/dist/extensions/native.mjs +1 -1
  65. package/dist/extensions/native.mjs.map +1 -1
  66. package/dist/extensions/server.cjs +233 -119
  67. package/dist/extensions/server.cjs.map +1 -1
  68. package/dist/extensions/server.d.mts +2 -2
  69. package/dist/extensions/server.d.mts.map +1 -1
  70. package/dist/extensions/server.mjs +233 -119
  71. package/dist/extensions/server.mjs.map +1 -1
  72. package/dist/extensions/web.mjs +88 -62
  73. package/dist/extensions/web.mjs.map +1 -1
  74. package/dist/{headless-BGYfIlNk.mjs → headless-DOlCixyf.mjs} +5 -5
  75. package/dist/headless-DOlCixyf.mjs.map +1 -0
  76. package/dist/{headless-CHUsBGhg.cjs → headless-Dko_yBiy.cjs} +5 -5
  77. package/dist/headless-Dko_yBiy.cjs.map +1 -0
  78. package/dist/{index-Dhi8asLH.d.mts → index--xF7DvsE.d.mts} +4 -4
  79. package/dist/{index-Dhi8asLH.d.mts.map → index--xF7DvsE.d.mts.map} +1 -1
  80. package/dist/{index-BZL7keVW.d.mts → index-BCCF1sGD.d.mts} +2 -2
  81. package/dist/{index-BZL7keVW.d.mts.map → index-BCCF1sGD.d.mts.map} +1 -1
  82. package/dist/{index-BwB_jTI9.d.mts → index-BzeXJk6V.d.mts} +5 -5
  83. package/dist/index-BzeXJk6V.d.mts.map +1 -0
  84. package/dist/{index-D9-IXax4.d.mts → index-C-IC35d9.d.mts} +2 -2
  85. package/dist/{index-D9-IXax4.d.mts.map → index-C-IC35d9.d.mts.map} +1 -1
  86. package/dist/{index-DBz0DxnL.d.mts → index-CzCF_OP9.d.mts} +3 -4
  87. package/dist/index-CzCF_OP9.d.mts.map +1 -0
  88. package/dist/index.cjs +5 -5
  89. package/dist/index.d.mts +5 -5
  90. package/dist/index.mjs +5 -5
  91. package/dist/{launcher-BDm6-DiQ.mjs → launcher-CCYsFBM9.mjs} +3 -3
  92. package/dist/{launcher-BDm6-DiQ.mjs.map → launcher-CCYsFBM9.mjs.map} +1 -1
  93. package/dist/{launcher-SlyE8R3b.cjs → launcher-ZgDdyXpq.cjs} +8 -2
  94. package/dist/{launcher-SlyE8R3b.cjs.map → launcher-ZgDdyXpq.cjs.map} +1 -1
  95. package/dist/launcher.cjs +1 -1
  96. package/dist/launcher.d.mts +1 -1
  97. package/dist/launcher.mjs +1 -2
  98. package/dist/{lifeline-BZaQA0rm.mjs → lifeline-Bm-bHIjS.mjs} +6 -6
  99. package/dist/lifeline-Bm-bHIjS.mjs.map +1 -0
  100. package/dist/{lifeline-BuV_erib.cjs → lifeline-m7laIzIP.cjs} +6 -6
  101. package/dist/lifeline-m7laIzIP.cjs.map +1 -0
  102. package/dist/lifeline.cjs +1 -1
  103. package/dist/lifeline.d.mts +1 -1
  104. package/dist/lifeline.mjs +1 -1
  105. package/dist/{logFile-CNvepZh0.cjs → logFile-CnPKtxPy.cjs} +2 -2
  106. package/dist/{logFile-CNvepZh0.cjs.map → logFile-CnPKtxPy.cjs.map} +1 -1
  107. package/dist/{logFile-KKPbkC-a.mjs → logFile-XcDHBwu1.mjs} +2 -2
  108. package/dist/{logFile-KKPbkC-a.mjs.map → logFile-XcDHBwu1.mjs.map} +1 -1
  109. package/dist/logFile.cjs +1 -1
  110. package/dist/logFile.d.mts +1 -1
  111. package/dist/logFile.mjs +1 -2
  112. package/dist/{logReader-B6J7L7Ua.cjs → logReader-DHCK2BEr.cjs} +4 -4
  113. package/dist/{logReader-B6J7L7Ua.cjs.map → logReader-DHCK2BEr.cjs.map} +1 -1
  114. package/dist/{logReader-UfbDbwQl.mjs → logReader-mq9uVurh.mjs} +4 -4
  115. package/dist/{logReader-UfbDbwQl.mjs.map → logReader-mq9uVurh.mjs.map} +1 -1
  116. package/dist/logReader.cjs +1 -1
  117. package/dist/logReader.mjs +1 -2
  118. package/dist/processControl.mjs +1 -2
  119. package/dist/{ptyHost-DlQtTB8F.mjs → ptyHost-CwbLLr90.mjs} +2 -2
  120. package/dist/{ptyHost-DlQtTB8F.mjs.map → ptyHost-CwbLLr90.mjs.map} +1 -1
  121. package/dist/{ptyHost-MI2Z6WTG.cjs → ptyHost-D35hNmtd.cjs} +2 -2
  122. package/dist/{ptyHost-MI2Z6WTG.cjs.map → ptyHost-D35hNmtd.cjs.map} +1 -1
  123. package/dist/ptyHost.cjs +1 -1
  124. package/dist/ptyHost.mjs +1 -2
  125. package/dist/{ptySpawner-DEi1KOnd.mjs → ptySpawner-C375NJnj.mjs} +2 -2
  126. package/dist/ptySpawner-C375NJnj.mjs.map +1 -0
  127. package/dist/{ptySpawner-ijw0g5_T.cjs → ptySpawner-C39IzbRo.cjs} +2 -2
  128. package/dist/ptySpawner-C39IzbRo.cjs.map +1 -0
  129. package/dist/ptySpawner.cjs +1 -1
  130. package/dist/ptySpawner.d.mts +1 -1
  131. package/dist/ptySpawner.mjs +1 -2
  132. package/dist/{reconcile-DMeNSxwn.mjs → reconcile-5cZ11jSD.cjs} +12 -42
  133. package/dist/reconcile-5cZ11jSD.cjs.map +1 -0
  134. package/dist/{reconcile-BugwYFbV.cjs → reconcile-wNYQJZF-.mjs} +2 -62
  135. package/dist/reconcile-wNYQJZF-.mjs.map +1 -0
  136. package/dist/reconcile.cjs +1 -2
  137. package/dist/reconcile.d.mts +2 -9
  138. package/dist/reconcile.d.mts.map +1 -1
  139. package/dist/reconcile.mjs +1 -2
  140. package/dist/responseEnvelope.cjs +2 -2
  141. package/dist/responseEnvelope.d.mts +3 -3
  142. package/dist/responseEnvelope.mjs +2 -2
  143. package/dist/{rmuxBackend-DlxgqRZ1.cjs → rmuxBackend-Dh0CYVAL.cjs} +5 -5
  144. package/dist/rmuxBackend-Dh0CYVAL.cjs.map +1 -0
  145. package/dist/{rmuxBackend-DfyQwJrc.mjs → rmuxBackend-rjrVTG6K.mjs} +4 -4
  146. package/dist/rmuxBackend-rjrVTG6K.mjs.map +1 -0
  147. package/dist/rmuxBackend.cjs +1 -1
  148. package/dist/rmuxBackend.d.mts +1 -1
  149. package/dist/rmuxBackend.mjs +1 -2
  150. package/dist/{rtkProcessor-Bc4L4o_8.cjs → rtkProcessor-DSGbM-Cm.cjs} +4 -4
  151. package/dist/rtkProcessor-DSGbM-Cm.cjs.map +1 -0
  152. package/dist/{rtkProcessor-B9KPdyzr.mjs → rtkProcessor-Iw9gP5Xp.mjs} +3 -3
  153. package/dist/rtkProcessor-Iw9gP5Xp.mjs.map +1 -0
  154. package/dist/rtkProcessor.cjs +1 -1
  155. package/dist/rtkProcessor.d.mts +1 -1
  156. package/dist/rtkProcessor.mjs +1 -1
  157. package/dist/{runnerConfig-D2tGq5ZM.cjs → runnerConfig-BoLMinlx.cjs} +11 -11
  158. package/dist/runnerConfig-BoLMinlx.cjs.map +1 -0
  159. package/dist/{runnerConfig-BjtulXBI.d.mts → runnerConfig-DuWL6TJx.d.mts} +10 -10
  160. package/dist/{runnerConfig-BjtulXBI.d.mts.map → runnerConfig-DuWL6TJx.d.mts.map} +1 -1
  161. package/dist/{runnerConfig-BQBlVAXn.mjs → runnerConfig-XXMq4VQA.mjs} +11 -11
  162. package/dist/runnerConfig-XXMq4VQA.mjs.map +1 -0
  163. package/dist/{runnerDependencies-DruByBGS.mjs → runnerDependencies-7h_cxOva.mjs} +17 -17
  164. package/dist/runnerDependencies-7h_cxOva.mjs.map +1 -0
  165. package/dist/{runnerDependencies-KMZigIxB.cjs → runnerDependencies-DSun3xO-.cjs} +17 -17
  166. package/dist/runnerDependencies-DSun3xO-.cjs.map +1 -0
  167. package/dist/runnerDependencies.cjs +1 -1
  168. package/dist/runnerDependencies.d.mts +1 -1
  169. package/dist/runnerDependencies.mjs +1 -2
  170. package/dist/runnerNamer.d.mts +1 -1
  171. package/dist/runnerNamer.mjs +1 -2
  172. package/dist/{runnerPaths-BTEuzxw0.cjs → runnerPaths-B41rMOY6.cjs} +20 -38
  173. package/dist/runnerPaths-B41rMOY6.cjs.map +1 -0
  174. package/dist/{runnerPaths-B_dAAeco.mjs → runnerPaths-Dibbvyx_.mjs} +20 -38
  175. package/dist/runnerPaths-Dibbvyx_.mjs.map +1 -0
  176. package/dist/runnerPaths.cjs +1 -1
  177. package/dist/runnerPaths.d.mts +5 -7
  178. package/dist/runnerPaths.d.mts.map +1 -1
  179. package/dist/runnerPaths.mjs +1 -2
  180. package/dist/{runnerRegistry-CeOHEjBv.mjs → runnerRegistry-BgaR5O86.mjs} +12 -11
  181. package/dist/runnerRegistry-BgaR5O86.mjs.map +1 -0
  182. package/dist/{runnerRegistry-CtJiD02R.d.mts → runnerRegistry-V-Ocaf4N.d.mts} +1 -3
  183. package/dist/{runnerRegistry-CtJiD02R.d.mts.map → runnerRegistry-V-Ocaf4N.d.mts.map} +1 -1
  184. package/dist/{runnerRegistry-BmkZTJHi.cjs → runnerRegistry-dQYlMSpQ.cjs} +23 -10
  185. package/dist/runnerRegistry-dQYlMSpQ.cjs.map +1 -0
  186. package/dist/runnerRegistry.cjs +1 -1
  187. package/dist/runnerRegistry.d.mts +2 -2
  188. package/dist/runnerRegistry.mjs +1 -2
  189. package/dist/services/lifeline/client.cjs +2 -2
  190. package/dist/services/lifeline/client.cjs.map +1 -1
  191. package/dist/services/lifeline/client.d.mts +1 -1
  192. package/dist/services/lifeline/client.mjs +2 -2
  193. package/dist/services/lifeline/client.mjs.map +1 -1
  194. package/dist/{session-Chsb_Nh2.mjs → session-BKYnH4R6.mjs} +2 -2
  195. package/dist/{session-Chsb_Nh2.mjs.map → session-BKYnH4R6.mjs.map} +1 -1
  196. package/dist/{session-BC43uEyG.cjs → session-BvqzhXZY.cjs} +2 -2
  197. package/dist/{session-BC43uEyG.cjs.map → session-BvqzhXZY.cjs.map} +1 -1
  198. package/dist/session.cjs +1 -1
  199. package/dist/session.mjs +1 -1
  200. package/dist/spawner.mjs +1 -2
  201. package/dist/{type-C31e1gla.d.mts → type-Do0YxwVQ.d.mts} +4 -4
  202. package/dist/{type-C31e1gla.d.mts.map → type-Do0YxwVQ.d.mts.map} +1 -1
  203. package/dist/{type-BXM03qSw.d.mts → type-DwMZoINK.d.mts} +8 -8
  204. package/dist/{type-BXM03qSw.d.mts.map → type-DwMZoINK.d.mts.map} +1 -1
  205. package/dist/types.d.mts +1 -1
  206. package/package.json +31 -34
  207. package/skills/{doom-runner → po-runner}/SKILL.md +15 -15
  208. package/src/prompts/po-use-runner/SKILL.md +11 -11
  209. package/dist/bashResult-DNgtahGR.cjs.map +0 -1
  210. package/dist/bashResult-bIVSzoj-.mjs.map +0 -1
  211. package/dist/bashRunService-CJ02XaAq.mjs.map +0 -1
  212. package/dist/bashRunService-DyqxOSlx.cjs.map +0 -1
  213. package/dist/cliApp-Dj9nwaOv.cjs.map +0 -1
  214. package/dist/cliApp-v8Z3rMCi.mjs.map +0 -1
  215. package/dist/compaction-4QSUsBxq.cjs.map +0 -1
  216. package/dist/compaction-DCw80VZj.mjs.map +0 -1
  217. package/dist/headless-BGYfIlNk.mjs.map +0 -1
  218. package/dist/headless-CHUsBGhg.cjs.map +0 -1
  219. package/dist/index-BwB_jTI9.d.mts.map +0 -1
  220. package/dist/index-DBz0DxnL.d.mts.map +0 -1
  221. package/dist/lifeline-BZaQA0rm.mjs.map +0 -1
  222. package/dist/lifeline-BuV_erib.cjs.map +0 -1
  223. package/dist/ptySpawner-DEi1KOnd.mjs.map +0 -1
  224. package/dist/ptySpawner-ijw0g5_T.cjs.map +0 -1
  225. package/dist/reconcile-BugwYFbV.cjs.map +0 -1
  226. package/dist/reconcile-DMeNSxwn.mjs.map +0 -1
  227. package/dist/rmuxBackend-DfyQwJrc.mjs.map +0 -1
  228. package/dist/rmuxBackend-DlxgqRZ1.cjs.map +0 -1
  229. package/dist/rtkProcessor-B9KPdyzr.mjs.map +0 -1
  230. package/dist/rtkProcessor-Bc4L4o_8.cjs.map +0 -1
  231. package/dist/runnerConfig-BQBlVAXn.mjs.map +0 -1
  232. package/dist/runnerConfig-D2tGq5ZM.cjs.map +0 -1
  233. package/dist/runnerDependencies-DruByBGS.mjs.map +0 -1
  234. package/dist/runnerDependencies-KMZigIxB.cjs.map +0 -1
  235. package/dist/runnerPaths-BTEuzxw0.cjs.map +0 -1
  236. package/dist/runnerPaths-B_dAAeco.mjs.map +0 -1
  237. package/dist/runnerRegistry-BmkZTJHi.cjs.map +0 -1
  238. package/dist/runnerRegistry-CeOHEjBv.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_rtkProcessor = require("./rtkProcessor-CsrCPyTQ.cjs");
3
- const require_rtkProcessor$1 = require("./rtkProcessor-Bc4L4o_8.cjs");
3
+ const require_rtkProcessor$1 = require("./rtkProcessor-DSGbM-Cm.cjs");
4
4
  exports.RTK_FAILED_WARNING = require_rtkProcessor.RTK_FAILED_WARNING;
5
5
  exports.RTK_OVERSIZED_WARNING = require_rtkProcessor.RTK_OVERSIZED_WARNING;
6
6
  exports.RTK_STDIN_MAX_BYTES = require_rtkProcessor$1.RTK_STDIN_MAX_BYTES;
@@ -1,5 +1,5 @@
1
1
  import { a as RTK_UNAVAILABLE_WARNING, c as RtkProcessResult, i as RTK_TIMEOUT_WARNING, l as RtkProcessedOutput, n as RTK_FAILED_WARNING, o as RtkFilter, r as RTK_OVERSIZED_WARNING, s as RtkProcessRequest, t as IRtkProcessor } from "./rtkProcessor-CVZvNhkJ.mjs";
2
- import { n as classifyRtkFilter, r as rtkPackageForTarget, t as RtkProcessor } from "./index-BZL7keVW.mjs";
2
+ import { n as classifyRtkFilter, r as rtkPackageForTarget, t as RtkProcessor } from "./index-BCCF1sGD.mjs";
3
3
  //#region src/constants/rtkProcessor.d.ts
4
4
  export declare const RTK_STDIN_MAX_BYTES = 10485760;
5
5
  //#endregion
@@ -1,3 +1,3 @@
1
1
  import { i as RTK_UNAVAILABLE_WARNING, n as RTK_OVERSIZED_WARNING, r as RTK_TIMEOUT_WARNING, t as RTK_FAILED_WARNING } from "./rtkProcessor-B4_urXQr.mjs";
2
- import { i as RTK_STDIN_MAX_BYTES, n as classifyRtkFilter, r as rtkPackageForTarget, t as RtkProcessor } from "./rtkProcessor-B9KPdyzr.mjs";
2
+ import { i as RTK_STDIN_MAX_BYTES, n as classifyRtkFilter, r as rtkPackageForTarget, t as RtkProcessor } from "./rtkProcessor-Iw9gP5Xp.mjs";
3
3
  export { RTK_FAILED_WARNING, RTK_OVERSIZED_WARNING, RTK_STDIN_MAX_BYTES, RTK_TIMEOUT_WARNING, RTK_UNAVAILABLE_WARNING, RtkProcessor, classifyRtkFilter, rtkPackageForTarget };
@@ -1,13 +1,13 @@
1
1
  //#region src/constants/runnerConfig.ts
2
- const BG_THRESHOLD_MS_ENV = "DOOM_RUNNER_BG_THRESHOLD_MS";
3
- const RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_RESULT_MAX_BYTES";
4
- const SUCCESS_RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_BYTES";
5
- const RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_RESULT_MAX_TOKENS";
6
- const SUCCESS_RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
7
- const LOG_MAX_BYTES_ENV = "DOOM_RUNNER_LOG_MAX_BYTES";
8
- const LOG_TTL_MS_ENV = "DOOM_RUNNER_LOG_TTL_MS";
9
- const MAX_COMPLETED_RUNNERS_ENV = "DOOM_RUNNER_MAX_COMPLETED_RUNNERS";
10
- const LOG_DIR_ENV = "DOOM_RUNNER_LOG_DIR";
2
+ const BG_THRESHOLD_MS_ENV = "PO_RUNNER_BG_THRESHOLD_MS";
3
+ const RESULT_MAX_BYTES_ENV = "PO_RUNNER_RESULT_MAX_BYTES";
4
+ const SUCCESS_RESULT_MAX_BYTES_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_BYTES";
5
+ const RESULT_MAX_TOKENS_ENV = "PO_RUNNER_RESULT_MAX_TOKENS";
6
+ const SUCCESS_RESULT_MAX_TOKENS_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
7
+ const LOG_MAX_BYTES_ENV = "PO_RUNNER_LOG_MAX_BYTES";
8
+ const LOG_TTL_MS_ENV = "PO_RUNNER_LOG_TTL_MS";
9
+ const MAX_COMPLETED_RUNNERS_ENV = "PO_RUNNER_MAX_COMPLETED_RUNNERS";
10
+ const LOG_DIR_ENV = "PO_RUNNER_LOG_DIR";
11
11
  const DEFAULT_BG_THRESHOLD_MS = 6e4;
12
12
  const DEFAULT_RESULT_MAX_BYTES = 8192;
13
13
  const DEFAULT_RESULT_MAX_LINES = 120;
@@ -123,7 +123,7 @@ function noninteractiveEnvironment(environment) {
123
123
  NX_NATIVE_COMMAND_RUNNER: environment.NX_NATIVE_COMMAND_RUNNER ?? "false",
124
124
  NX_TUI: environment.NX_TUI ?? "false",
125
125
  NX_PARALLEL: environment.NX_PARALLEL ?? "1",
126
- DOOM_RUNNER_MAX_WORKERS: environment.DOOM_RUNNER_MAX_WORKERS ?? "2",
126
+ PO_RUNNER_MAX_WORKERS: environment.PO_RUNNER_MAX_WORKERS ?? "2",
127
127
  PLAYWRIGHT_WORKERS: environment.PLAYWRIGHT_WORKERS ?? "1",
128
128
  VITEST_MAX_WORKERS: environment.VITEST_MAX_WORKERS ?? "2"
129
129
  };
@@ -364,4 +364,4 @@ Object.defineProperty(exports, "setRunnerSettings", {
364
364
  }
365
365
  });
366
366
 
367
- //# sourceMappingURL=runnerConfig-D2tGq5ZM.cjs.map
367
+ //# sourceMappingURL=runnerConfig-BoLMinlx.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerConfig-BoLMinlx.cjs","names":[],"sources":["../src/constants/runnerConfig.ts","../src/models/runnerSettings.ts","../src/services/runnerConfig/index.ts"],"sourcesContent":["export const BG_THRESHOLD_MS_ENV = 'PO_RUNNER_BG_THRESHOLD_MS';\nexport const RESULT_MAX_BYTES_ENV = 'PO_RUNNER_RESULT_MAX_BYTES';\nexport const SUCCESS_RESULT_MAX_BYTES_ENV = 'PO_RUNNER_SUCCESS_RESULT_MAX_BYTES';\nexport const RESULT_MAX_TOKENS_ENV = 'PO_RUNNER_RESULT_MAX_TOKENS';\nexport const SUCCESS_RESULT_MAX_TOKENS_ENV = 'PO_RUNNER_SUCCESS_RESULT_MAX_TOKENS';\nexport const LOG_MAX_BYTES_ENV = 'PO_RUNNER_LOG_MAX_BYTES';\nexport const LOG_TTL_MS_ENV = 'PO_RUNNER_LOG_TTL_MS';\nexport const MAX_COMPLETED_RUNNERS_ENV = 'PO_RUNNER_MAX_COMPLETED_RUNNERS';\nexport const LOG_DIR_ENV = 'PO_RUNNER_LOG_DIR';\nexport const DEFAULT_BG_THRESHOLD_MS = 60_000;\nexport const DEFAULT_RESULT_MAX_BYTES = 8_192;\nexport const DEFAULT_RESULT_MAX_LINES = 120;\nexport const DEFAULT_SUCCESS_RESULT_MAX_BYTES = 2_048;\nexport const DEFAULT_RESULT_MAX_TOKENS = 2_048;\nexport const DEFAULT_SUCCESS_RESULT_MAX_TOKENS = 512;\nexport const DEFAULT_HEAD_RATIO = 0.2;\nexport const DEFAULT_ERROR_BUDGET_RATIO = 0.2;\nexport const DEFAULT_ERROR_MAX_ENTRIES = 10;\nexport const DEFAULT_ERROR_MAX_VARIANTS_JOINED = 6;\nexport const DEFAULT_LOG_MAX_BYTES = 5_242_880;\nexport const DEFAULT_LOG_TTL_MS = 604_800_000;\nexport const DEFAULT_MAX_COMPLETED_RUNNERS = 100;\n","import type { RunnerSettings } from '../types/runnerSettings';\nexport const runnerSettingsState: { value: RunnerSettings } = { value: {} };\n","import {\n BG_THRESHOLD_MS_ENV,\n DEFAULT_BG_THRESHOLD_MS,\n DEFAULT_ERROR_BUDGET_RATIO,\n DEFAULT_ERROR_MAX_ENTRIES,\n DEFAULT_ERROR_MAX_VARIANTS_JOINED,\n DEFAULT_HEAD_RATIO,\n DEFAULT_LOG_MAX_BYTES,\n DEFAULT_LOG_TTL_MS,\n DEFAULT_MAX_COMPLETED_RUNNERS,\n DEFAULT_RESULT_MAX_BYTES,\n DEFAULT_RESULT_MAX_LINES,\n DEFAULT_RESULT_MAX_TOKENS,\n DEFAULT_SUCCESS_RESULT_MAX_BYTES,\n DEFAULT_SUCCESS_RESULT_MAX_TOKENS,\n LOG_MAX_BYTES_ENV,\n LOG_TTL_MS_ENV,\n MAX_COMPLETED_RUNNERS_ENV,\n RESULT_MAX_BYTES_ENV,\n RESULT_MAX_TOKENS_ENV,\n SUCCESS_RESULT_MAX_BYTES_ENV,\n SUCCESS_RESULT_MAX_TOKENS_ENV,\n} from '../../constants/runnerConfig';\n/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file, matching po-task: po already carries\n * per-launch state to Pi through env vars.\n */\n/** Unscoped override for the runner log directory. */\nimport type { RunnerSettings } from '../../types/runnerSettings';\n\n/** A bash call still running at this point is promoted to a named runner. */\n/** Tool results past this size are excerpted and spilled to the log file. */\n/** Line ceiling for a single tool result, applied alongside the byte ceiling. */\n/**\n * A successful command gets a much smaller budget than a failing one. Exiting 0\n * has already reported the outcome, so its output buys far less than a failure's.\n */\n/**\n * Token ceilings sit alongside the byte ones because bytes do not track context\n * cost: 8 KiB of prose is roughly 2k tokens, while 8 KiB of base64 or CJK is\n * several times that. Whichever ceiling binds first wins.\n */\n/** Share of the budget spent on the leading excerpt; the remainder goes to the tail. */\n/** Share reserved for errors rescued from the elided middle, when any exist. */\n/** Distinct failures rescued from the elided middle. */\n/** Variants joined inside one bracket before the rest become a count. */\n/** Legacy rotation value retained so existing configuration imports remain compatible. */\n/** Retention window for logs with no live registry record. */\n/**\n * Completed runners a single session keeps on disk.\n *\n * A count bound, not just an age one, because a session that stays open for a\n * working day never ages its own records past the TTL: they would accumulate\n * for as long as the session lives.\n */\n\nfunction positiveNumber(raw: string | undefined, fallback: number): number {\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\n/** Age at which a bash call becomes a background runner. */\nexport function getBackgroundThresholdMs(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[BG_THRESHOLD_MS_ENV], DEFAULT_BG_THRESHOLD_MS);\n}\n\n/** Byte ceiling for a single tool result before tail truncation kicks in. */\nexport function getResultMaxBytes(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(env[RESULT_MAX_BYTES_ENV], settings.maxResultBytes ?? DEFAULT_RESULT_MAX_BYTES);\n}\n\n/** Legacy rotation setting retained for public API compatibility. */\nexport function getLogMaxBytes(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[LOG_MAX_BYTES_ENV], DEFAULT_LOG_MAX_BYTES);\n}\n\n/** Retention window for orphaned runner logs. */\nexport function getLogTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[LOG_TTL_MS_ENV], DEFAULT_LOG_TTL_MS);\n}\n\n/** Completed runners one session retains before the oldest are swept. */\nexport function getMaxCompletedRunners(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[MAX_COMPLETED_RUNNERS_ENV], DEFAULT_MAX_COMPLETED_RUNNERS);\n}\n\n/**\n * Project settings sit below the environment on purpose: a checked-in file is\n * the project's baseline, while an environment variable is set for one run.\n */\nimport { runnerSettingsState } from '../../models/runnerSettings';\n\nexport function setRunnerSettings(settings: RunnerSettings): void {\n runnerSettingsState.value = settings;\n}\n\nexport function getRunnerSettings(): RunnerSettings {\n return runnerSettingsState.value;\n}\n\n/** Byte ceiling for the result of a command that succeeded. */\nexport function getSuccessResultMaxBytes(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(\n env[SUCCESS_RESULT_MAX_BYTES_ENV],\n settings.successMaxResultBytes ?? DEFAULT_SUCCESS_RESULT_MAX_BYTES,\n );\n}\n\n/** Token ceiling for a single tool result. */\nexport function getResultMaxTokens(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(env[RESULT_MAX_TOKENS_ENV], settings.maxResultTokens ?? DEFAULT_RESULT_MAX_TOKENS);\n}\n\n/** Token ceiling for the result of a command that succeeded. */\nexport function getSuccessResultMaxTokens(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(\n env[SUCCESS_RESULT_MAX_TOKENS_ENV],\n settings.successMaxResultTokens ?? DEFAULT_SUCCESS_RESULT_MAX_TOKENS,\n );\n}\n\n/** Line ceiling for a single tool result. */\nexport function getResultMaxLines(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.maxResultLines ?? DEFAULT_RESULT_MAX_LINES;\n}\n\nexport function getHeadRatio(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.headRatio ?? DEFAULT_HEAD_RATIO;\n}\n\nexport function getErrorBudgetRatio(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorBudgetRatio ?? DEFAULT_ERROR_BUDGET_RATIO;\n}\n\nexport function getErrorMaxEntries(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorMaxEntries ?? DEFAULT_ERROR_MAX_ENTRIES;\n}\n\nexport function getErrorMaxVariantsJoined(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorMaxVariantsJoined ?? DEFAULT_ERROR_MAX_VARIANTS_JOINED;\n}\n\n/** Extra severity patterns appended to the built-in matcher. */\nexport function getErrorPatterns(settings: RunnerSettings = runnerSettingsState.value): readonly string[] {\n return settings.errorPatterns ?? [];\n}\n\n/** Defaults for agent-owned, noninteractive child processes only. Explicit settings still win. */\nexport function noninteractiveEnvironment(\n environment: Readonly<Record<string, string | undefined>>,\n): Record<string, string> {\n return {\n NX_NATIVE_COMMAND_RUNNER: environment.NX_NATIVE_COMMAND_RUNNER ?? 'false',\n NX_TUI: environment.NX_TUI ?? 'false',\n NX_PARALLEL: environment.NX_PARALLEL ?? '1',\n PO_RUNNER_MAX_WORKERS: environment.PO_RUNNER_MAX_WORKERS ?? '2',\n PLAYWRIGHT_WORKERS: environment.PLAYWRIGHT_WORKERS ?? '1',\n VITEST_MAX_WORKERS: environment.VITEST_MAX_WORKERS ?? '2',\n };\n}\n"],"mappings":";AAAA,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,+BAA+B;AAC5C,MAAa,wBAAwB;AACrC,MAAa,gCAAgC;AAC7C,MAAa,oBAAoB;AACjC,MAAa,iBAAiB;AAC9B,MAAa,4BAA4B;AACzC,MAAa,cAAc;AAC3B,MAAa,0BAA0B;AACvC,MAAa,2BAA2B;AACxC,MAAa,2BAA2B;AACxC,MAAa,mCAAmC;AAChD,MAAa,4BAA4B;AACzC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,6BAA6B;AAC1C,MAAa,4BAA4B;AACzC,MAAa,oCAAoC;AACjD,MAAa,wBAAwB;AACrC,MAAa,qBAAqB;AAClC,MAAa,gCAAgC;;;ACpB7C,MAAa,sBAAiD,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACyD1E,SAAS,eAAe,KAAyB,UAA0B;CACzE,MAAM,QAAQ,OAAO,GAAG;CACxB,OAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AACvD;;AAGA,SAAgB,yBAAyB,MAAyB,QAAQ,KAAa;CACrF,OAAO,eAAe,IAAI,sBAAsB,uBAAuB;AACzE;;AAGA,SAAgB,kBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eAAe,IAAI,uBAAuB,SAAS,kBAAA,IAA0C;AACtG;;AAGA,SAAgB,eAAe,MAAyB,QAAQ,KAAa;CAC3E,OAAO,eAAe,IAAI,oBAAoB,qBAAqB;AACrE;;AAGA,SAAgB,YAAY,MAAyB,QAAQ,KAAa;CACxE,OAAO,eAAe,IAAI,iBAAiB,kBAAkB;AAC/D;;AAGA,SAAgB,uBAAuB,MAAyB,QAAQ,KAAa;CACnF,OAAO,eAAe,IAAI,4BAAA,GAAyD;AACrF;AAQA,SAAgB,kBAAkB,UAAgC;CAChE,oBAAoB,QAAQ;AAC9B;AAEA,SAAgB,oBAAoC;CAClD,OAAO,oBAAoB;AAC7B;;AAGA,SAAgB,yBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eACL,IAAI,+BACJ,SAAS,yBAAA,IACX;AACF;;AAGA,SAAgB,mBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eAAe,IAAI,wBAAwB,SAAS,mBAAA,IAA4C;AACzG;;AAGA,SAAgB,0BACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eACL,IAAI,gCACJ,SAAS,0BAAA,GACX;AACF;;AAGA,SAAgB,kBAAkB,WAA2B,oBAAoB,OAAe;CAC9F,OAAO,SAAS,kBAAA;AAClB;AAEA,SAAgB,aAAa,WAA2B,oBAAoB,OAAe;CACzF,OAAO,SAAS,aAAA;AAClB;AAEA,SAAgB,oBAAoB,WAA2B,oBAAoB,OAAe;CAChG,OAAO,SAAS,oBAAA;AAClB;AAEA,SAAgB,mBAAmB,WAA2B,oBAAoB,OAAe;CAC/F,OAAO,SAAS,mBAAA;AAClB;AAEA,SAAgB,0BAA0B,WAA2B,oBAAoB,OAAe;CACtG,OAAO,SAAS,0BAAA;AAClB;;AAGA,SAAgB,iBAAiB,WAA2B,oBAAoB,OAA0B;CACxG,OAAO,SAAS,iBAAiB,CAAC;AACpC;;AAGA,SAAgB,0BACd,aACwB;CACxB,OAAO;EACL,0BAA0B,YAAY,4BAA4B;EAClE,QAAQ,YAAY,UAAU;EAC9B,aAAa,YAAY,eAAe;EACxC,uBAAuB,YAAY,yBAAyB;EAC5D,oBAAoB,YAAY,sBAAsB;EACtD,oBAAoB,YAAY,sBAAsB;CACxD;AACF"}
@@ -30,15 +30,15 @@ declare function getErrorPatterns(settings?: RunnerSettings): readonly string[];
30
30
  declare function noninteractiveEnvironment(environment: Readonly<Record<string, string | undefined>>): Record<string, string>;
31
31
  //#endregion
32
32
  //#region src/constants/runnerConfig.d.ts
33
- declare const BG_THRESHOLD_MS_ENV = "DOOM_RUNNER_BG_THRESHOLD_MS";
34
- declare const RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_RESULT_MAX_BYTES";
35
- declare const SUCCESS_RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_BYTES";
36
- declare const RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_RESULT_MAX_TOKENS";
37
- declare const SUCCESS_RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
38
- declare const LOG_MAX_BYTES_ENV = "DOOM_RUNNER_LOG_MAX_BYTES";
39
- declare const LOG_TTL_MS_ENV = "DOOM_RUNNER_LOG_TTL_MS";
40
- declare const MAX_COMPLETED_RUNNERS_ENV = "DOOM_RUNNER_MAX_COMPLETED_RUNNERS";
41
- declare const LOG_DIR_ENV = "DOOM_RUNNER_LOG_DIR";
33
+ declare const BG_THRESHOLD_MS_ENV = "PO_RUNNER_BG_THRESHOLD_MS";
34
+ declare const RESULT_MAX_BYTES_ENV = "PO_RUNNER_RESULT_MAX_BYTES";
35
+ declare const SUCCESS_RESULT_MAX_BYTES_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_BYTES";
36
+ declare const RESULT_MAX_TOKENS_ENV = "PO_RUNNER_RESULT_MAX_TOKENS";
37
+ declare const SUCCESS_RESULT_MAX_TOKENS_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
38
+ declare const LOG_MAX_BYTES_ENV = "PO_RUNNER_LOG_MAX_BYTES";
39
+ declare const LOG_TTL_MS_ENV = "PO_RUNNER_LOG_TTL_MS";
40
+ declare const MAX_COMPLETED_RUNNERS_ENV = "PO_RUNNER_MAX_COMPLETED_RUNNERS";
41
+ declare const LOG_DIR_ENV = "PO_RUNNER_LOG_DIR";
42
42
  declare const DEFAULT_BG_THRESHOLD_MS = 60000;
43
43
  declare const DEFAULT_RESULT_MAX_BYTES = 8192;
44
44
  declare const DEFAULT_RESULT_MAX_LINES = 120;
@@ -54,4 +54,4 @@ declare const DEFAULT_LOG_TTL_MS = 604800000;
54
54
  declare const DEFAULT_MAX_COMPLETED_RUNNERS = 100;
55
55
  //#endregion
56
56
  export { getLogTtlMs as A, getBackgroundThresholdMs as C, getErrorPatterns as D, getErrorMaxVariantsJoined as E, getRunnerSettings as F, getSuccessResultMaxBytes as I, getSuccessResultMaxTokens as L, getResultMaxBytes as M, getResultMaxLines as N, getHeadRatio as O, getResultMaxTokens as P, noninteractiveEnvironment as R, SUCCESS_RESULT_MAX_TOKENS_ENV as S, getErrorMaxEntries as T, LOG_TTL_MS_ENV as _, DEFAULT_ERROR_MAX_VARIANTS_JOINED as a, RESULT_MAX_TOKENS_ENV as b, DEFAULT_LOG_TTL_MS as c, DEFAULT_RESULT_MAX_LINES as d, DEFAULT_RESULT_MAX_TOKENS as f, LOG_MAX_BYTES_ENV as g, LOG_DIR_ENV as h, DEFAULT_ERROR_MAX_ENTRIES as i, getMaxCompletedRunners as j, getLogMaxBytes as k, DEFAULT_MAX_COMPLETED_RUNNERS as l, DEFAULT_SUCCESS_RESULT_MAX_TOKENS as m, DEFAULT_BG_THRESHOLD_MS as n, DEFAULT_HEAD_RATIO as o, DEFAULT_SUCCESS_RESULT_MAX_BYTES as p, DEFAULT_ERROR_BUDGET_RATIO as r, DEFAULT_LOG_MAX_BYTES as s, BG_THRESHOLD_MS_ENV as t, DEFAULT_RESULT_MAX_BYTES as u, MAX_COMPLETED_RUNNERS_ENV as v, getErrorBudgetRatio as w, SUCCESS_RESULT_MAX_BYTES_ENV as x, RESULT_MAX_BYTES_ENV as y, setRunnerSettings as z };
57
- //# sourceMappingURL=runnerConfig-BjtulXBI.d.mts.map
57
+ //# sourceMappingURL=runnerConfig-DuWL6TJx.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runnerConfig-BjtulXBI.d.mts","names":[],"sources":["../src/services/runnerConfig/index.ts","../src/constants/runnerConfig.ts"],"mappings":";;;iBAgEgB,yBAAyB,MAAK,OAAO;;iBAKrC,kBACd,MAAK,OAAO,YACZ,WAAU;;iBAMI,eAAe,MAAK,OAAO;;iBAK3B,YAAY,MAAK,OAAO;;iBAKxB,uBAAuB,MAAK,OAAO;iBAUnC,kBAAkB,UAAU;iBAI5B,qBAAqB;;iBAKrB,yBACd,MAAK,OAAO,YACZ,WAAU;;iBASI,mBACd,MAAK,OAAO,YACZ,WAAU;;iBAMI,0BACd,MAAK,OAAO,YACZ,WAAU;;iBASI,kBAAkB,WAAU;iBAI5B,aAAa,WAAU;iBAIvB,oBAAoB,WAAU;iBAI9B,mBAAmB,WAAU;iBAI7B,0BAA0B,WAAU;;iBAKpC,iBAAiB,WAAU;;iBAK3B,0BACd,aAAa,SAAS,sCACrB;;;cCpKU;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA"}
1
+ {"version":3,"file":"runnerConfig-DuWL6TJx.d.mts","names":[],"sources":["../src/services/runnerConfig/index.ts","../src/constants/runnerConfig.ts"],"mappings":";;;iBAgEgB,yBAAyB,MAAK,OAAO;;iBAKrC,kBACd,MAAK,OAAO,YACZ,WAAU;;iBAMI,eAAe,MAAK,OAAO;;iBAK3B,YAAY,MAAK,OAAO;;iBAKxB,uBAAuB,MAAK,OAAO;iBAUnC,kBAAkB,UAAU;iBAI5B,qBAAqB;;iBAKrB,yBACd,MAAK,OAAO,YACZ,WAAU;;iBASI,mBACd,MAAK,OAAO,YACZ,WAAU;;iBAMI,0BACd,MAAK,OAAO,YACZ,WAAU;;iBASI,kBAAkB,WAAU;iBAI5B,aAAa,WAAU;iBAIvB,oBAAoB,WAAU;iBAI9B,mBAAmB,WAAU;iBAI7B,0BAA0B,WAAU;;iBAKpC,iBAAiB,WAAU;;iBAK3B,0BACd,aAAa,SAAS,sCACrB;;;cCpKU;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA;cACA"}
@@ -1,13 +1,13 @@
1
1
  //#region src/constants/runnerConfig.ts
2
- const BG_THRESHOLD_MS_ENV = "DOOM_RUNNER_BG_THRESHOLD_MS";
3
- const RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_RESULT_MAX_BYTES";
4
- const SUCCESS_RESULT_MAX_BYTES_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_BYTES";
5
- const RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_RESULT_MAX_TOKENS";
6
- const SUCCESS_RESULT_MAX_TOKENS_ENV = "DOOM_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
7
- const LOG_MAX_BYTES_ENV = "DOOM_RUNNER_LOG_MAX_BYTES";
8
- const LOG_TTL_MS_ENV = "DOOM_RUNNER_LOG_TTL_MS";
9
- const MAX_COMPLETED_RUNNERS_ENV = "DOOM_RUNNER_MAX_COMPLETED_RUNNERS";
10
- const LOG_DIR_ENV = "DOOM_RUNNER_LOG_DIR";
2
+ const BG_THRESHOLD_MS_ENV = "PO_RUNNER_BG_THRESHOLD_MS";
3
+ const RESULT_MAX_BYTES_ENV = "PO_RUNNER_RESULT_MAX_BYTES";
4
+ const SUCCESS_RESULT_MAX_BYTES_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_BYTES";
5
+ const RESULT_MAX_TOKENS_ENV = "PO_RUNNER_RESULT_MAX_TOKENS";
6
+ const SUCCESS_RESULT_MAX_TOKENS_ENV = "PO_RUNNER_SUCCESS_RESULT_MAX_TOKENS";
7
+ const LOG_MAX_BYTES_ENV = "PO_RUNNER_LOG_MAX_BYTES";
8
+ const LOG_TTL_MS_ENV = "PO_RUNNER_LOG_TTL_MS";
9
+ const MAX_COMPLETED_RUNNERS_ENV = "PO_RUNNER_MAX_COMPLETED_RUNNERS";
10
+ const LOG_DIR_ENV = "PO_RUNNER_LOG_DIR";
11
11
  const DEFAULT_BG_THRESHOLD_MS = 6e4;
12
12
  const DEFAULT_RESULT_MAX_BYTES = 8192;
13
13
  const DEFAULT_RESULT_MAX_LINES = 120;
@@ -123,7 +123,7 @@ function noninteractiveEnvironment(environment) {
123
123
  NX_NATIVE_COMMAND_RUNNER: environment.NX_NATIVE_COMMAND_RUNNER ?? "false",
124
124
  NX_TUI: environment.NX_TUI ?? "false",
125
125
  NX_PARALLEL: environment.NX_PARALLEL ?? "1",
126
- DOOM_RUNNER_MAX_WORKERS: environment.DOOM_RUNNER_MAX_WORKERS ?? "2",
126
+ PO_RUNNER_MAX_WORKERS: environment.PO_RUNNER_MAX_WORKERS ?? "2",
127
127
  PLAYWRIGHT_WORKERS: environment.PLAYWRIGHT_WORKERS ?? "1",
128
128
  VITEST_MAX_WORKERS: environment.VITEST_MAX_WORKERS ?? "2"
129
129
  };
@@ -131,4 +131,4 @@ function noninteractiveEnvironment(environment) {
131
131
  //#endregion
132
132
  export { DEFAULT_SUCCESS_RESULT_MAX_BYTES as A, DEFAULT_HEAD_RATIO as C, DEFAULT_RESULT_MAX_BYTES as D, DEFAULT_MAX_COMPLETED_RUNNERS as E, MAX_COMPLETED_RUNNERS_ENV as F, RESULT_MAX_BYTES_ENV as I, RESULT_MAX_TOKENS_ENV as L, LOG_DIR_ENV as M, LOG_MAX_BYTES_ENV as N, DEFAULT_RESULT_MAX_LINES as O, LOG_TTL_MS_ENV as P, SUCCESS_RESULT_MAX_BYTES_ENV as R, DEFAULT_ERROR_MAX_VARIANTS_JOINED as S, DEFAULT_LOG_TTL_MS as T, setRunnerSettings as _, getErrorPatterns as a, DEFAULT_ERROR_BUDGET_RATIO as b, getLogTtlMs as c, getResultMaxLines as d, getResultMaxTokens as f, noninteractiveEnvironment as g, getSuccessResultMaxTokens as h, getErrorMaxVariantsJoined as i, DEFAULT_SUCCESS_RESULT_MAX_TOKENS as j, DEFAULT_RESULT_MAX_TOKENS as k, getMaxCompletedRunners as l, getSuccessResultMaxBytes as m, getErrorBudgetRatio as n, getHeadRatio as o, getRunnerSettings as p, getErrorMaxEntries as r, getLogMaxBytes as s, getBackgroundThresholdMs as t, getResultMaxBytes as u, BG_THRESHOLD_MS_ENV as v, DEFAULT_LOG_MAX_BYTES as w, DEFAULT_ERROR_MAX_ENTRIES as x, DEFAULT_BG_THRESHOLD_MS as y, SUCCESS_RESULT_MAX_TOKENS_ENV as z };
133
133
 
134
- //# sourceMappingURL=runnerConfig-BQBlVAXn.mjs.map
134
+ //# sourceMappingURL=runnerConfig-XXMq4VQA.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerConfig-XXMq4VQA.mjs","names":[],"sources":["../src/constants/runnerConfig.ts","../src/models/runnerSettings.ts","../src/services/runnerConfig/index.ts"],"sourcesContent":["export const BG_THRESHOLD_MS_ENV = 'PO_RUNNER_BG_THRESHOLD_MS';\nexport const RESULT_MAX_BYTES_ENV = 'PO_RUNNER_RESULT_MAX_BYTES';\nexport const SUCCESS_RESULT_MAX_BYTES_ENV = 'PO_RUNNER_SUCCESS_RESULT_MAX_BYTES';\nexport const RESULT_MAX_TOKENS_ENV = 'PO_RUNNER_RESULT_MAX_TOKENS';\nexport const SUCCESS_RESULT_MAX_TOKENS_ENV = 'PO_RUNNER_SUCCESS_RESULT_MAX_TOKENS';\nexport const LOG_MAX_BYTES_ENV = 'PO_RUNNER_LOG_MAX_BYTES';\nexport const LOG_TTL_MS_ENV = 'PO_RUNNER_LOG_TTL_MS';\nexport const MAX_COMPLETED_RUNNERS_ENV = 'PO_RUNNER_MAX_COMPLETED_RUNNERS';\nexport const LOG_DIR_ENV = 'PO_RUNNER_LOG_DIR';\nexport const DEFAULT_BG_THRESHOLD_MS = 60_000;\nexport const DEFAULT_RESULT_MAX_BYTES = 8_192;\nexport const DEFAULT_RESULT_MAX_LINES = 120;\nexport const DEFAULT_SUCCESS_RESULT_MAX_BYTES = 2_048;\nexport const DEFAULT_RESULT_MAX_TOKENS = 2_048;\nexport const DEFAULT_SUCCESS_RESULT_MAX_TOKENS = 512;\nexport const DEFAULT_HEAD_RATIO = 0.2;\nexport const DEFAULT_ERROR_BUDGET_RATIO = 0.2;\nexport const DEFAULT_ERROR_MAX_ENTRIES = 10;\nexport const DEFAULT_ERROR_MAX_VARIANTS_JOINED = 6;\nexport const DEFAULT_LOG_MAX_BYTES = 5_242_880;\nexport const DEFAULT_LOG_TTL_MS = 604_800_000;\nexport const DEFAULT_MAX_COMPLETED_RUNNERS = 100;\n","import type { RunnerSettings } from '../types/runnerSettings';\nexport const runnerSettingsState: { value: RunnerSettings } = { value: {} };\n","import {\n BG_THRESHOLD_MS_ENV,\n DEFAULT_BG_THRESHOLD_MS,\n DEFAULT_ERROR_BUDGET_RATIO,\n DEFAULT_ERROR_MAX_ENTRIES,\n DEFAULT_ERROR_MAX_VARIANTS_JOINED,\n DEFAULT_HEAD_RATIO,\n DEFAULT_LOG_MAX_BYTES,\n DEFAULT_LOG_TTL_MS,\n DEFAULT_MAX_COMPLETED_RUNNERS,\n DEFAULT_RESULT_MAX_BYTES,\n DEFAULT_RESULT_MAX_LINES,\n DEFAULT_RESULT_MAX_TOKENS,\n DEFAULT_SUCCESS_RESULT_MAX_BYTES,\n DEFAULT_SUCCESS_RESULT_MAX_TOKENS,\n LOG_MAX_BYTES_ENV,\n LOG_TTL_MS_ENV,\n MAX_COMPLETED_RUNNERS_ENV,\n RESULT_MAX_BYTES_ENV,\n RESULT_MAX_TOKENS_ENV,\n SUCCESS_RESULT_MAX_BYTES_ENV,\n SUCCESS_RESULT_MAX_TOKENS_ENV,\n} from '../../constants/runnerConfig';\n/**\n * Extension configuration, read from the environment.\n *\n * Env rather than a config file, matching po-task: po already carries\n * per-launch state to Pi through env vars.\n */\n/** Unscoped override for the runner log directory. */\nimport type { RunnerSettings } from '../../types/runnerSettings';\n\n/** A bash call still running at this point is promoted to a named runner. */\n/** Tool results past this size are excerpted and spilled to the log file. */\n/** Line ceiling for a single tool result, applied alongside the byte ceiling. */\n/**\n * A successful command gets a much smaller budget than a failing one. Exiting 0\n * has already reported the outcome, so its output buys far less than a failure's.\n */\n/**\n * Token ceilings sit alongside the byte ones because bytes do not track context\n * cost: 8 KiB of prose is roughly 2k tokens, while 8 KiB of base64 or CJK is\n * several times that. Whichever ceiling binds first wins.\n */\n/** Share of the budget spent on the leading excerpt; the remainder goes to the tail. */\n/** Share reserved for errors rescued from the elided middle, when any exist. */\n/** Distinct failures rescued from the elided middle. */\n/** Variants joined inside one bracket before the rest become a count. */\n/** Legacy rotation value retained so existing configuration imports remain compatible. */\n/** Retention window for logs with no live registry record. */\n/**\n * Completed runners a single session keeps on disk.\n *\n * A count bound, not just an age one, because a session that stays open for a\n * working day never ages its own records past the TTL: they would accumulate\n * for as long as the session lives.\n */\n\nfunction positiveNumber(raw: string | undefined, fallback: number): number {\n const value = Number(raw);\n return Number.isFinite(value) && value > 0 ? value : fallback;\n}\n\n/** Age at which a bash call becomes a background runner. */\nexport function getBackgroundThresholdMs(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[BG_THRESHOLD_MS_ENV], DEFAULT_BG_THRESHOLD_MS);\n}\n\n/** Byte ceiling for a single tool result before tail truncation kicks in. */\nexport function getResultMaxBytes(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(env[RESULT_MAX_BYTES_ENV], settings.maxResultBytes ?? DEFAULT_RESULT_MAX_BYTES);\n}\n\n/** Legacy rotation setting retained for public API compatibility. */\nexport function getLogMaxBytes(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[LOG_MAX_BYTES_ENV], DEFAULT_LOG_MAX_BYTES);\n}\n\n/** Retention window for orphaned runner logs. */\nexport function getLogTtlMs(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[LOG_TTL_MS_ENV], DEFAULT_LOG_TTL_MS);\n}\n\n/** Completed runners one session retains before the oldest are swept. */\nexport function getMaxCompletedRunners(env: NodeJS.ProcessEnv = process.env): number {\n return positiveNumber(env[MAX_COMPLETED_RUNNERS_ENV], DEFAULT_MAX_COMPLETED_RUNNERS);\n}\n\n/**\n * Project settings sit below the environment on purpose: a checked-in file is\n * the project's baseline, while an environment variable is set for one run.\n */\nimport { runnerSettingsState } from '../../models/runnerSettings';\n\nexport function setRunnerSettings(settings: RunnerSettings): void {\n runnerSettingsState.value = settings;\n}\n\nexport function getRunnerSettings(): RunnerSettings {\n return runnerSettingsState.value;\n}\n\n/** Byte ceiling for the result of a command that succeeded. */\nexport function getSuccessResultMaxBytes(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(\n env[SUCCESS_RESULT_MAX_BYTES_ENV],\n settings.successMaxResultBytes ?? DEFAULT_SUCCESS_RESULT_MAX_BYTES,\n );\n}\n\n/** Token ceiling for a single tool result. */\nexport function getResultMaxTokens(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(env[RESULT_MAX_TOKENS_ENV], settings.maxResultTokens ?? DEFAULT_RESULT_MAX_TOKENS);\n}\n\n/** Token ceiling for the result of a command that succeeded. */\nexport function getSuccessResultMaxTokens(\n env: NodeJS.ProcessEnv = process.env,\n settings: RunnerSettings = runnerSettingsState.value,\n): number {\n return positiveNumber(\n env[SUCCESS_RESULT_MAX_TOKENS_ENV],\n settings.successMaxResultTokens ?? DEFAULT_SUCCESS_RESULT_MAX_TOKENS,\n );\n}\n\n/** Line ceiling for a single tool result. */\nexport function getResultMaxLines(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.maxResultLines ?? DEFAULT_RESULT_MAX_LINES;\n}\n\nexport function getHeadRatio(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.headRatio ?? DEFAULT_HEAD_RATIO;\n}\n\nexport function getErrorBudgetRatio(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorBudgetRatio ?? DEFAULT_ERROR_BUDGET_RATIO;\n}\n\nexport function getErrorMaxEntries(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorMaxEntries ?? DEFAULT_ERROR_MAX_ENTRIES;\n}\n\nexport function getErrorMaxVariantsJoined(settings: RunnerSettings = runnerSettingsState.value): number {\n return settings.errorMaxVariantsJoined ?? DEFAULT_ERROR_MAX_VARIANTS_JOINED;\n}\n\n/** Extra severity patterns appended to the built-in matcher. */\nexport function getErrorPatterns(settings: RunnerSettings = runnerSettingsState.value): readonly string[] {\n return settings.errorPatterns ?? [];\n}\n\n/** Defaults for agent-owned, noninteractive child processes only. Explicit settings still win. */\nexport function noninteractiveEnvironment(\n environment: Readonly<Record<string, string | undefined>>,\n): Record<string, string> {\n return {\n NX_NATIVE_COMMAND_RUNNER: environment.NX_NATIVE_COMMAND_RUNNER ?? 'false',\n NX_TUI: environment.NX_TUI ?? 'false',\n NX_PARALLEL: environment.NX_PARALLEL ?? '1',\n PO_RUNNER_MAX_WORKERS: environment.PO_RUNNER_MAX_WORKERS ?? '2',\n PLAYWRIGHT_WORKERS: environment.PLAYWRIGHT_WORKERS ?? '1',\n VITEST_MAX_WORKERS: environment.VITEST_MAX_WORKERS ?? '2',\n };\n}\n"],"mappings":";AAAA,MAAa,sBAAsB;AACnC,MAAa,uBAAuB;AACpC,MAAa,+BAA+B;AAC5C,MAAa,wBAAwB;AACrC,MAAa,gCAAgC;AAC7C,MAAa,oBAAoB;AACjC,MAAa,iBAAiB;AAC9B,MAAa,4BAA4B;AACzC,MAAa,cAAc;AAC3B,MAAa,0BAA0B;AACvC,MAAa,2BAA2B;AACxC,MAAa,2BAA2B;AACxC,MAAa,mCAAmC;AAChD,MAAa,4BAA4B;AACzC,MAAa,oCAAoC;AACjD,MAAa,qBAAqB;AAClC,MAAa,6BAA6B;AAC1C,MAAa,4BAA4B;AACzC,MAAa,oCAAoC;AACjD,MAAa,wBAAwB;AACrC,MAAa,qBAAqB;AAClC,MAAa,gCAAgC;;;ACpB7C,MAAa,sBAAiD,EAAE,OAAO,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACyD1E,SAAS,eAAe,KAAyB,UAA0B;CACzE,MAAM,QAAQ,OAAO,GAAG;CACxB,OAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,QAAQ;AACvD;;AAGA,SAAgB,yBAAyB,MAAyB,QAAQ,KAAa;CACrF,OAAO,eAAe,IAAI,sBAAsB,uBAAuB;AACzE;;AAGA,SAAgB,kBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eAAe,IAAI,uBAAuB,SAAS,kBAAA,IAA0C;AACtG;;AAGA,SAAgB,eAAe,MAAyB,QAAQ,KAAa;CAC3E,OAAO,eAAe,IAAI,oBAAoB,qBAAqB;AACrE;;AAGA,SAAgB,YAAY,MAAyB,QAAQ,KAAa;CACxE,OAAO,eAAe,IAAI,iBAAiB,kBAAkB;AAC/D;;AAGA,SAAgB,uBAAuB,MAAyB,QAAQ,KAAa;CACnF,OAAO,eAAe,IAAI,4BAAA,GAAyD;AACrF;AAQA,SAAgB,kBAAkB,UAAgC;CAChE,oBAAoB,QAAQ;AAC9B;AAEA,SAAgB,oBAAoC;CAClD,OAAO,oBAAoB;AAC7B;;AAGA,SAAgB,yBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eACL,IAAI,+BACJ,SAAS,yBAAA,IACX;AACF;;AAGA,SAAgB,mBACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eAAe,IAAI,wBAAwB,SAAS,mBAAA,IAA4C;AACzG;;AAGA,SAAgB,0BACd,MAAyB,QAAQ,KACjC,WAA2B,oBAAoB,OACvC;CACR,OAAO,eACL,IAAI,gCACJ,SAAS,0BAAA,GACX;AACF;;AAGA,SAAgB,kBAAkB,WAA2B,oBAAoB,OAAe;CAC9F,OAAO,SAAS,kBAAA;AAClB;AAEA,SAAgB,aAAa,WAA2B,oBAAoB,OAAe;CACzF,OAAO,SAAS,aAAA;AAClB;AAEA,SAAgB,oBAAoB,WAA2B,oBAAoB,OAAe;CAChG,OAAO,SAAS,oBAAA;AAClB;AAEA,SAAgB,mBAAmB,WAA2B,oBAAoB,OAAe;CAC/F,OAAO,SAAS,mBAAA;AAClB;AAEA,SAAgB,0BAA0B,WAA2B,oBAAoB,OAAe;CACtG,OAAO,SAAS,0BAAA;AAClB;;AAGA,SAAgB,iBAAiB,WAA2B,oBAAoB,OAA0B;CACxG,OAAO,SAAS,iBAAiB,CAAC;AACpC;;AAGA,SAAgB,0BACd,aACwB;CACxB,OAAO;EACL,0BAA0B,YAAY,4BAA4B;EAClE,QAAQ,YAAY,UAAU;EAC9B,aAAa,YAAY,eAAe;EACxC,uBAAuB,YAAY,yBAAyB;EAC5D,oBAAoB,YAAY,sBAAsB;EACtD,oBAAoB,YAAY,sBAAsB;CACxD;AACF"}
@@ -1,19 +1,19 @@
1
- import { t as BashRunService } from "./bashRunService-CJ02XaAq.mjs";
2
- import { g as noninteractiveEnvironment, s as getLogMaxBytes, u as getResultMaxBytes } from "./runnerConfig-BQBlVAXn.mjs";
3
- import { t as LogReader } from "./logReader-UfbDbwQl.mjs";
1
+ import { t as BashRunService } from "./bashRunService-Cl3pYccr.mjs";
2
+ import { g as noninteractiveEnvironment, s as getLogMaxBytes, u as getResultMaxBytes } from "./runnerConfig-XXMq4VQA.mjs";
3
+ import { t as LogReader } from "./logReader-mq9uVurh.mjs";
4
4
  import { t as SystemClock } from "./clock-Cv2pddgo.mjs";
5
- import { t as RmuxBackend } from "./rmuxBackend-DfyQwJrc.mjs";
5
+ import { t as RmuxBackend } from "./rmuxBackend-rjrVTG6K.mjs";
6
6
  import { NO_TERMINAL_INPUT_ENV, cleanupSupervisorFiles, readExitMetadata, runtimeEntry, shellJoin, supervisorPaths, writeCommandSpec } from "./services/runnerSupervisor/index.mjs";
7
- import { t as RtkProcessor } from "./rtkProcessor-B9KPdyzr.mjs";
8
- import { t as Launcher } from "./launcher-BDm6-DiQ.mjs";
9
- import { t as NodeLifeline } from "./lifeline-BZaQA0rm.mjs";
10
- import { t as LogFile } from "./logFile-KKPbkC-a.mjs";
7
+ import { t as RtkProcessor } from "./rtkProcessor-Iw9gP5Xp.mjs";
8
+ import { t as Launcher } from "./launcher-CCYsFBM9.mjs";
9
+ import { t as NodeLifeline } from "./lifeline-Bm-bHIjS.mjs";
10
+ import { t as LogFile } from "./logFile-XcDHBwu1.mjs";
11
11
  import { t as NodeProcessControl } from "./processControl-DApTpV16.mjs";
12
- import { t as PtyHost } from "./ptyHost-DlQtTB8F.mjs";
13
- import { t as NodePtySpawner } from "./ptySpawner-DEi1KOnd.mjs";
12
+ import { t as PtyHost } from "./ptyHost-CwbLLr90.mjs";
13
+ import { t as NodePtySpawner } from "./ptySpawner-C375NJnj.mjs";
14
14
  import { t as RunnerNamer } from "./runnerNamer-B8FH7n2v.mjs";
15
- import { t as RunnerPaths } from "./runnerPaths-B_dAAeco.mjs";
16
- import { n as createDefaultProcessRegistry, t as RunnerRegistry } from "./runnerRegistry-CeOHEjBv.mjs";
15
+ import { t as RunnerPaths } from "./runnerPaths-Dibbvyx_.mjs";
16
+ import { n as createDefaultProcessRegistry, t as RunnerRegistry } from "./runnerRegistry-BgaR5O86.mjs";
17
17
  import { t as NodeSpawner } from "./spawner-LoVsn55-.mjs";
18
18
  import { createHash } from "node:crypto";
19
19
  import fs from "node:fs";
@@ -23,9 +23,9 @@ import { sharedExecutionBudget } from "@agimon-ai/po-core/packageApi";
23
23
  //#region src/constants/tmuxBackend.ts
24
24
  const LOG_DRAIN_TIMEOUT_MS = 2e3;
25
25
  const PANE_STATE_FORMAT = "#{pane_dead}:#{pane_dead_status}:#{session_name}";
26
- const SESSION_PREFIX = "doom-tmux-";
27
- const OWNED_TARGET_PATTERN = /^doom-tmux-[A-Za-z0-9_-]+$/;
28
- const SOCKET_PREFIX = "doom-tmux-";
26
+ const SESSION_PREFIX = "po-tmux-";
27
+ const OWNED_TARGET_PATTERN = /^po-tmux-[A-Za-z0-9_-]+$/;
28
+ const SOCKET_PREFIX = "po-tmux-";
29
29
  const NON_INTERACTIVE_ENV = {
30
30
  NO_COLOR: "1",
31
31
  CI: "1"
@@ -72,7 +72,7 @@ var PtyBackendChain = class {
72
72
  return this.rmux.get(name) ?? this.tmux.get(name);
73
73
  }
74
74
  owner(target) {
75
- return target.startsWith("doom-tmux-") ? this.tmux : this.rmux;
75
+ return target.startsWith("po-tmux-") ? this.tmux : this.rmux;
76
76
  }
77
77
  };
78
78
  //#endregion
@@ -644,4 +644,4 @@ function createRunnerDependencies(overrides) {
644
644
  //#endregion
645
645
  export { TmuxBackend as n, PtyBackendChain as r, createRunnerDependencies as t };
646
646
 
647
- //# sourceMappingURL=runnerDependencies-DruByBGS.mjs.map
647
+ //# sourceMappingURL=runnerDependencies-7h_cxOva.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerDependencies-7h_cxOva.mjs","names":[],"sources":["../src/constants/tmuxBackend.ts","../src/services/ptyBackendChain/index.ts","../src/services/tmuxBackend/TmuxClient.ts","../src/services/tmuxBackend/index.ts","../src/services/runnerDependencies/index.ts"],"sourcesContent":["export const POLL_MS = 100;\nexport const LOG_DRAIN_TIMEOUT_MS = 2_000;\nexport const LOG_DRAIN_POLL_MS = 25;\nexport const PANE_STATE_FORMAT = '#{pane_dead}:#{pane_dead_status}:#{session_name}';\nexport const STOP_GRACE_MS = 3_000;\nexport const SESSION_PREFIX = 'po-tmux-';\nexport const OWNED_TARGET_PATTERN = /^po-tmux-[A-Za-z0-9_-]+$/;\nexport const TMUX_TARGET_PREFIX = SESSION_PREFIX;\nexport const SOCKET_HASH_LENGTH = 12;\nexport const SOCKET_PREFIX = 'po-tmux-';\nexport const NON_INTERACTIVE_ENV = { NO_COLOR: '1', CI: '1' };\n","import { TMUX_TARGET_PREFIX } from '../../constants/tmuxBackend';\nimport type { RunHandle } from '../../types/launcher';\nimport type { PtyRun } from '../../types/ptyHost';\nimport type { IRmuxBackend, RmuxLaunchRequest } from '../../types/rmuxBackend';\nimport type { ExitResult } from '../../types/spawner';\n\n/**\n * Presents the available PTY backends as one, preferring RMUX.\n *\n * A launch takes the first backend that accepts it, so a host without a\n * compatible RMUX binary still gets panes rather than falling through to the\n * plain subprocess launcher. Every later call routes on the target's prefix\n * instead of asking each backend in turn: a backend cannot tell \"this session\n * is gone\" from \"this session was never mine\", and guessing would let one\n * report success for the other's run.\n */\nexport class PtyBackendChain implements IRmuxBackend {\n constructor(\n private readonly rmux: IRmuxBackend,\n private readonly tmux: IRmuxBackend,\n ) {}\n\n async launch(request: RmuxLaunchRequest): Promise<RunHandle | undefined> {\n return (await this.rmux.launch(request)) ?? (await this.tmux.launch(request));\n }\n\n watch(id: string, target: string, sessionId?: string): Promise<ExitResult | undefined> {\n return this.owner(target).watch(id, target, sessionId);\n }\n\n stop(target: string, expectedPid: number): Promise<boolean> {\n return this.owner(target).stop(target, expectedPid);\n }\n\n input(target: string, text: string): Promise<boolean> {\n return this.owner(target).input(target, text);\n }\n\n capture(target: string): Promise<string | undefined> {\n return this.owner(target).capture(target);\n }\n\n /** Both backends persist terminal evidence at the same path, so either answers. */\n readOutcome(id: string, sessionId: string): ExitResult | undefined {\n return this.rmux.readOutcome(id, sessionId) ?? this.tmux.readOutcome(id, sessionId);\n }\n\n get(name: string): PtyRun | undefined {\n return this.rmux.get(name) ?? this.tmux.get(name);\n }\n\n private owner(target: string): IRmuxBackend {\n return target.startsWith(TMUX_TARGET_PREFIX) ? this.tmux : this.rmux;\n }\n}\n","import { execFile } from 'node:child_process';\n\nimport type { ITmuxClient, TmuxResult } from '../../types/tmuxClient';\n\nconst TMUX_BINARY = 'tmux';\nconst SOCKET_OPTION = '-L';\n/** Long enough for a loaded server, short enough that a hung tmux is not fatal. */\nconst COMMAND_TIMEOUT_MS = 10_000;\nconst MAX_OUTPUT_BYTES = 4 * 1024 * 1024;\n\nexport class TmuxClient implements ITmuxClient {\n constructor(\n private readonly socket: string,\n private readonly binary = TMUX_BINARY,\n ) {}\n\n run(args: readonly string[]): Promise<TmuxResult> {\n return new Promise((resolve, reject) => {\n execFile(\n this.binary,\n [SOCKET_OPTION, this.socket, ...args],\n { timeout: COMMAND_TIMEOUT_MS, maxBuffer: MAX_OUTPUT_BYTES, encoding: 'utf8' },\n (error, stdout, stderr) => {\n // A non-zero tmux exit is an answer, not a fault: `has-session`\n // reports absence that way. Only a missing or hung binary rejects.\n const code = (error as (Error & { code?: number | string }) | null)?.code;\n if (error && typeof code !== 'number') {\n reject(error);\n return;\n }\n resolve({ returnCode: typeof code === 'number' ? code : 0, stdout, stderr });\n },\n );\n });\n }\n\n async format(target: string, format: string): Promise<string | undefined> {\n const result = await this.run(['display-message', '-p', '-t', target, '-F', format]).catch(() => undefined);\n if (!result || result.returnCode !== 0) return undefined;\n return result.stdout.replace(/\\n$/, '');\n }\n\n async sessionMissing(target: string): Promise<boolean> {\n const result = await this.run(['has-session', '-t', target]).catch(() => undefined);\n return !result || result.returnCode !== 0;\n }\n}\n","import { createHash } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n LOG_DRAIN_POLL_MS,\n LOG_DRAIN_TIMEOUT_MS,\n NON_INTERACTIVE_ENV,\n OWNED_TARGET_PATTERN,\n PANE_STATE_FORMAT,\n POLL_MS,\n SESSION_PREFIX,\n SOCKET_HASH_LENGTH,\n SOCKET_PREFIX,\n STOP_GRACE_MS,\n} from '../../constants/tmuxBackend';\nimport type { RunHandle } from '../../types/launcher';\nimport type { PtyRun } from '../../types/ptyHost';\nimport type { IRmuxBackend, RmuxLaunchRequest } from '../../types/rmuxBackend';\nimport type { RunnerSettings } from '../../types/runnerSettings';\nimport type { ExitResult } from '../../types/spawner';\nimport type { ITmuxClient } from '../../types/tmuxClient';\nimport { getLogMaxBytes, getResultMaxBytes, noninteractiveEnvironment } from '../runnerConfig';\nimport type { IRunnerPaths } from '../runnerPaths/type';\nimport {\n type CommandSpec,\n type SupervisorPaths,\n cleanupSupervisorFiles,\n NO_TERMINAL_INPUT_ENV,\n readExitMetadata,\n runtimeEntry,\n shellJoin,\n supervisorPaths,\n writeCommandSpec,\n} from '../runnerSupervisor';\nimport { TmuxClient } from './TmuxClient';\n\n/** Pane liveness, its exit status, and whether the session still exists, in one read. */\n/** Distinct from the RMUX prefix so a target names the backend that owns it. */\n\n/**\n * Supervises runs in tmux panes, for hosts with no compatible RMUX binary.\n *\n * The pane runs the same runnerHost supervisor as the RMUX backend, so exit\n * metadata, log rotation, and lifeline handling are shared rather than\n * reimplemented: only the multiplexer differs. Kept beside the RMUX backend\n * rather than folded into it because that path has no unit coverage to\n * refactor against.\n */\nexport class TmuxBackend implements IRmuxBackend {\n private clientPromise: Promise<ITmuxClient | undefined> | undefined;\n private readonly runs = new Map<string, PtyRun>();\n private readonly completions = new Map<string, Promise<ExitResult>>();\n\n constructor(\n private readonly paths: IRunnerPaths,\n private readonly createClient: (socket: string) => ITmuxClient = (socket) => new TmuxClient(socket),\n private readonly env: Readonly<Record<string, string | undefined>> = process.env,\n private readonly settings?: RunnerSettings,\n ) {}\n\n async launch(request: RmuxLaunchRequest): Promise<RunHandle | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n\n this.paths.ensureDirectories();\n const target = `${SESSION_PREFIX}${request.id}`;\n const logPath = this.paths.logPathFor(request.id);\n const aux = this.auxPaths(request.id, request.sessionId);\n let created = false;\n let released = false;\n\n try {\n this.prepareFiles(request, logPath, aux);\n // One quoted command rather than an argv: tmux takes shell-command as a\n // single word, and quoting here is what keeps a path with spaces intact.\n const supervisor = shellJoin([process.execPath, runtimeEntry('runnerHost'), aux.spec, aux.gate, aux.exit]);\n await this.checked(tmux, ['new-session', '-d', '-s', target, '-c', request.cwd, supervisor]);\n created = true;\n // Set before the gate opens, so it is in force by the time the command\n // can exit. A pane that vanishes on exit takes the log sink down with it\n // before Node has finished starting, losing the output of fast commands,\n // and leaves #{pane_dead} with nothing to report.\n await this.checked(tmux, ['set-option', '-t', target, 'remain-on-exit', 'on']);\n await this.checked(tmux, ['pipe-pane', '-t', target, this.logPipeCommand(logPath, aux.logDone, request)]);\n\n const pid = await panePid(tmux, target);\n fs.writeFileSync(aux.gate, '', { mode: 0o600 });\n released = true;\n\n let buffering = true;\n const completion = this.monitor(tmux, target, aux);\n this.trackCompletion(target, completion);\n const handle: RunHandle = {\n id: request.id,\n name: request.name,\n pid,\n logPath,\n backend: 'tmux',\n backendTarget: target,\n output: () => (buffering ? readTail(logPath, getResultMaxBytes(this.env, this.settings) * 2) : ''),\n completion: () => completion,\n detach: () => {\n buffering = false;\n },\n stop: () => this.stop(target, pid),\n };\n\n if (request.interactive) this.runs.set(request.name, this.interactiveRun(handle, tmux, target, completion));\n void completion\n .finally(() => this.runs.delete(request.name))\n .catch((error: unknown) => process.emitWarning(`tmux completion failed for ${target}: ${errorMessage(error)}`));\n return handle;\n } catch (error) {\n if (released) throw error;\n if (created) await killSession(tmux, target);\n cleanupSupervisorFiles(aux);\n process.emitWarning(\n request.interactive\n ? `tmux launch unavailable for interactive runner: ${errorMessage(error)}`\n : `tmux launch unavailable, using supervised subprocess: ${errorMessage(error)}`,\n );\n return undefined;\n }\n }\n\n async stop(target: string, expectedPid: number): Promise<boolean> {\n if (!OWNED_TARGET_PATTERN.test(target) || !Number.isInteger(expectedPid) || expectedPid <= 0) return false;\n\n const tmux = await this.client();\n if (!tmux) return false;\n try {\n if (await tmux.sessionMissing(target)) return true;\n\n const pid = await panePid(tmux, target);\n if (pid !== expectedPid) return false;\n const signalled = signalPane(pid, target);\n if (signalled === 'gone') return true;\n if (signalled === 'failed') return false;\n\n if (await waitForPaneStop(tmux, target, STOP_GRACE_MS)) return true;\n if (await tmux.sessionMissing(target)) return true;\n\n // Revalidate after the grace period so a replacement pane is never closed.\n const currentPid = await panePid(tmux, target).catch(() => undefined);\n if (currentPid !== expectedPid) return false;\n\n return killSession(tmux, target);\n } catch (error) {\n process.emitWarning(`Could not stop tmux target ${target}: ${errorMessage(error)}`);\n return false;\n }\n }\n\n async watch(id: string, target: string, sessionId?: string): Promise<ExitResult | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n if (await tmux.sessionMissing(target)) return undefined;\n const completion = this.monitor(tmux, target, this.auxPaths(id, sessionId));\n this.trackCompletion(target, completion);\n return completion;\n }\n\n async input(target: string, text: string): Promise<boolean> {\n const tmux = await this.client();\n if (!tmux) return false;\n const result = await tmux.run(['send-keys', '-t', target, '-l', text]).catch((error: unknown) => {\n process.emitWarning(`Could not send input to tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0;\n }\n\n async capture(target: string): Promise<string | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n const result = await tmux.run(['capture-pane', '-p', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not capture tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0 ? result.stdout : undefined;\n }\n\n get(name: string): PtyRun | undefined {\n return this.runs.get(name);\n }\n\n readOutcome(id: string, sessionId: string): ExitResult | undefined {\n return readExitMetadata(this.auxPaths(id, sessionId).exit);\n }\n\n private trackCompletion(target: string, completion: Promise<ExitResult>): void {\n this.completions.set(target, completion);\n void completion\n .finally(() => this.completions.delete(target))\n .catch((error: unknown) => process.emitWarning(`tmux monitor failed for ${target}: ${errorMessage(error)}`));\n }\n\n private client(): Promise<ITmuxClient | undefined> {\n this.clientPromise ??= this.resolveClient();\n return this.clientPromise;\n }\n\n private async resolveClient(): Promise<ITmuxClient | undefined> {\n const client = this.createClient(socketName(this.paths.repositoryPath()));\n try {\n const version = await client.run(['-V']);\n if (version.returnCode !== 0) throw new Error(version.stderr.trim() || 'tmux reported no version');\n return client;\n } catch (error) {\n process.emitWarning(`tmux is unavailable: ${errorMessage(error)}`);\n return undefined;\n }\n }\n\n private async checked(tmux: ITmuxClient, args: readonly string[]): Promise<void> {\n const result = await tmux.run(args);\n if (result.returnCode !== 0) {\n throw new Error(`tmux ${args[0] ?? ''} failed: ${result.stderr.trim() || `exit ${result.returnCode}`}`);\n }\n }\n\n private prepareFiles(request: RmuxLaunchRequest, logPath: string, aux: SupervisorPaths): void {\n cleanupSupervisorFiles(aux);\n fs.writeFileSync(logPath, '', { mode: 0o600 });\n const env = environment(request.sessionId, request.interactive, this.env);\n const spec: CommandSpec = { command: request.command, cwd: request.cwd, env };\n writeCommandSpec(aux.spec, spec);\n }\n\n private auxPaths(id: string, sessionId?: string): SupervisorPaths {\n return supervisorPaths(this.paths.stateDirectory(sessionId), id);\n }\n\n /**\n * The sink the pane pipes into.\n *\n * An interactive run also asks for a raw copy: the scrubbed log it writes\n * beside it has had cursor movement taken out, which is what a terminal\n * needs most. Only interactive runs pay for it, because only they can be\n * attached to.\n */\n private logPipeCommand(logPath: string, donePath: string, request: RmuxLaunchRequest): string {\n const id = path.basename(logPath, '.log');\n return shellJoin([\n process.execPath,\n runtimeEntry('logSink'),\n logPath,\n this.paths.rotatedLogPathFor(id),\n String(getLogMaxBytes(this.env)),\n donePath,\n ...(request.interactive ? [this.paths.rawLogPathFor(id)] : []),\n ]);\n }\n\n private async monitor(tmux: ITmuxClient, target: string, aux: SupervisorPaths): Promise<ExitResult> {\n try {\n const paneCode = await waitForRunEnd(tmux, target, aux.exit);\n await waitForLogDrain(tmux, target, aux.logDone);\n return readExitMetadata(aux.exit) ?? { code: paneCode, signal: null };\n } finally {\n if (!(await tmux.sessionMissing(target).catch(() => false))) await killSession(tmux, target);\n cleanupSupervisorFiles(aux);\n }\n }\n\n private interactiveRun(\n handle: RunHandle,\n tmux: ITmuxClient,\n target: string,\n completion: Promise<ExitResult>,\n ): PtyRun {\n let screen = '';\n let active = true;\n const handlers = new Set<(data: string) => void>();\n const refresh = async (): Promise<void> => {\n while (active) {\n const captured = await tmux.run(['capture-pane', '-p', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not capture tmux screen for ${handle.name}: ${errorMessage(error)}`);\n return undefined;\n });\n const next = captured?.returnCode === 0 ? captured.stdout : screen;\n if (next !== screen) {\n screen = next;\n for (const handler of handlers) handler(next);\n }\n await delay(POLL_MS);\n }\n };\n void refresh();\n void completion\n .finally(() => {\n active = false;\n })\n .catch((error: unknown) =>\n process.emitWarning(`tmux interactive completion failed for ${handle.name}: ${errorMessage(error)}`),\n );\n return {\n ...handle,\n write: (text) => {\n void tmux\n .run(['send-keys', '-t', target, '-l', text])\n .catch((error: unknown) => process.emitWarning(errorMessage(error)));\n },\n screen: () => screen,\n onData: (handler) => {\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n resize: (cols, rows) => {\n void tmux\n .run(['resize-window', '-t', target, '-x', String(cols), '-y', String(rows)])\n .catch((error: unknown) => process.emitWarning(errorMessage(error)));\n },\n };\n }\n}\n\nfunction socketName(repositoryPath: string): string {\n const hash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, SOCKET_HASH_LENGTH);\n return `${SOCKET_PREFIX}${hash}`;\n}\n\nfunction environment(\n sessionId: string,\n interactive: boolean,\n env: Readonly<Record<string, string | undefined>>,\n): Record<string, string> {\n const values: NodeJS.ProcessEnv = {\n ...env,\n ...(interactive ? {} : { ...NON_INTERACTIVE_ENV, ...noninteractiveEnvironment(env) }),\n ...NO_TERMINAL_INPUT_ENV,\n PI_SESSION_ID: sessionId,\n };\n if (!interactive) delete values['FORCE_COLOR'];\n return Object.fromEntries(\n Object.entries(values).filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nasync function killSession(tmux: ITmuxClient, target: string): Promise<boolean> {\n const result = await tmux.run(['kill-session', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not close tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0;\n}\n\nasync function panePid(tmux: ITmuxClient, target: string): Promise<number> {\n const message = await tmux.format(target, '#{pane_pid}');\n const pid = Number(message);\n if (!Number.isInteger(pid) || pid <= 0) throw new Error(`tmux did not report a pane pid for ${target}`);\n return pid;\n}\n\n/**\n * Waits for the run to end, preferring the supervisor's own record of it.\n *\n * The sidecar is written before the pane can end and outlives the server the\n * pane's exit takes down, so asking tmux is the fallback for a supervisor that\n * died without recording anything.\n */\nasync function waitForRunEnd(tmux: ITmuxClient, target: string, exitPath: string): Promise<number | null> {\n for (;;) {\n if (fs.existsSync(exitPath)) return null;\n const state = await readPaneExit(tmux, target);\n if (state.exited) return state.code;\n await delay(POLL_MS);\n }\n}\n\nasync function waitForLogDrain(tmux: ITmuxClient, target: string, donePath: string): Promise<void> {\n const deadline = Date.now() + LOG_DRAIN_TIMEOUT_MS;\n while (Date.now() < deadline) {\n if (fs.existsSync(donePath)) return;\n if (await tmux.sessionMissing(target)) return;\n await delay(LOG_DRAIN_POLL_MS);\n }\n}\n\nasync function waitForPaneStop(tmux: ITmuxClient, target: string, timeoutMs: number): Promise<boolean> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n if ((await readPaneExit(tmux, target)).exited) return true;\n await delay(POLL_MS);\n }\n return false;\n}\n\n/** One formatted read answers both questions this poll asks. */\nasync function readPaneExit(tmux: ITmuxClient, target: string): Promise<{ exited: boolean; code: number | null }> {\n const message = await tmux.format(target, PANE_STATE_FORMAT);\n // An unreachable server is the ordinary end of the last run: the pane exiting\n // ends its session, and the last session ending stops the server.\n if (message === undefined) return { exited: true, code: null };\n const [dead, status, ...rest] = message.trim().split(':');\n if (rest.join(':') === '') return { exited: true, code: null };\n if (dead === '1' || dead === 'true') {\n const code = Number(status);\n return { exited: true, code: Number.isInteger(code) ? code : null };\n }\n return { exited: false, code: null };\n}\n\nfunction signalPane(pid: number, target: string): 'signalled' | 'gone' | 'failed' {\n try {\n process.kill(pid, 'SIGTERM');\n return 'signalled';\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ESRCH') return 'gone';\n process.emitWarning(`Could not signal tmux target ${target}: ${errorMessage(error)}`);\n return 'failed';\n }\n}\n\nfunction readTail(target: string, maxBytes: number): string {\n let handle: number | undefined;\n try {\n const size = fs.statSync(target).size;\n const bytes = Math.min(size, maxBytes);\n const buffer = Buffer.alloc(bytes);\n handle = fs.openSync(target, 'r');\n fs.readSync(handle, buffer, 0, bytes, size - bytes);\n return buffer.toString('utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n process.emitWarning(`Could not read tmux log ${target}: ${errorMessage(error)}`);\n }\n return '';\n } finally {\n if (handle !== undefined) fs.closeSync(handle);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n timer.unref?.();\n });\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { sharedExecutionBudget, type PoHostExecutionBudget } from '@agimon-ai/po-core/packageApi';\n\nimport { BashRunService } from '../bashRunService';\nimport { SystemClock } from '../clock';\nimport { Launcher } from '../launcher';\nimport { NodeLifeline } from '../lifeline';\nimport { LogFile } from '../logFile';\nimport { LogReader } from '../logReader';\nimport { NodeProcessControl } from '../processControl';\nimport { PtyBackendChain } from '../ptyBackendChain';\nimport { PtyHost } from '../ptyHost';\nimport { NodePtySpawner } from '../ptySpawner';\nimport { RmuxBackend } from '../rmuxBackend';\nimport { RtkProcessor } from '../rtkProcessor';\nimport { RunnerNamer } from '../runnerNamer';\nimport { RunnerPaths } from '../runnerPaths';\nimport { RunnerRegistry, createDefaultProcessRegistry } from '../runnerRegistry';\nimport { NodeSpawner } from '../spawner';\nimport { TmuxBackend } from '../tmuxBackend';\nimport type { RunnerDependencies } from './type';\n/** Build once on first access, then hand back the same instance. */\nfunction memoize<T>(build: () => T): () => T {\n let value: T | undefined;\n let built = false;\n return () => {\n if (!built) {\n value = build();\n built = true;\n }\n return value as T;\n };\n}\n\n/**\n * Builds the extension's service graph.\n *\n * A factory rather than a module-level singleton: the extension owns one graph\n * per session, and tests get a fresh one they can substitute ports on through\n * `overrides` without leaking state between cases.\n *\n * Every slot resolves lazily and memoizes, which keeps the previous container's\n * behaviour: nothing is constructed until it is asked for, so opening the SQLite\n * process registry stays deferred until something actually needs a runner.\n */\nexport function createRunnerDependencies(\n overrides: Partial<RunnerDependencies> & {\n environment: Readonly<Record<string, string | undefined>>;\n cwd?: string;\n executionBudget?: PoHostExecutionBudget;\n },\n): RunnerDependencies {\n const settings =\n overrides.settings === undefined\n ? undefined\n : Object.freeze({\n ...overrides.settings,\n ...(overrides.settings?.errorPatterns\n ? { errorPatterns: Object.freeze([...overrides.settings.errorPatterns]) }\n : {}),\n });\n const environment = { ...overrides.environment };\n const cwd = overrides.cwd ?? process.cwd();\n const clock = memoize(() => overrides.clock ?? new SystemClock());\n const spawner = memoize(() => overrides.spawner ?? new NodeSpawner());\n const processControl = memoize(() => overrides.processControl ?? new NodeProcessControl());\n const ptySpawner = memoize(() => overrides.ptySpawner ?? new NodePtySpawner());\n const paths = memoize(() => overrides.paths ?? new RunnerPaths(cwd, environment));\n const lifeline = memoize(() => overrides.lifeline ?? new NodeLifeline(paths()));\n const processRegistry = memoize(() => overrides.processRegistry ?? createDefaultProcessRegistry(environment));\n const runnerRegistry = memoize(\n () => overrides.runnerRegistry ?? new RunnerRegistry(paths(), processControl(), processRegistry(), environment),\n );\n const namer = memoize(() => overrides.namer ?? new RunnerNamer(runnerRegistry()));\n const logFile = memoize(() => overrides.logFile ?? new LogFile(paths()));\n const logReader = memoize(() => overrides.logReader ?? new LogReader());\n const launcher = memoize(\n () =>\n overrides.launcher ??\n new Launcher(spawner(), processControl(), logFile(), clock(), paths(), lifeline(), environment, settings),\n );\n const rmuxBackend = memoize(\n () =>\n overrides.rmuxBackend ??\n new PtyBackendChain(\n new RmuxBackend(paths(), environment, settings),\n new TmuxBackend(paths(), undefined, environment, settings),\n ),\n );\n const rtkProcessor = memoize(\n () => overrides.rtkProcessor ?? new RtkProcessor(undefined, undefined, environment, settings),\n );\n const ptyHost = memoize(\n () => overrides.ptyHost ?? new PtyHost(ptySpawner(), logFile(), processControl(), clock(), environment, settings),\n );\n const bashRunService = memoize(\n () =>\n overrides.bashRunService ??\n new BashRunService(\n launcher(),\n rmuxBackend(),\n namer(),\n runnerRegistry(),\n clock(),\n rtkProcessor(),\n cwd,\n environment,\n overrides.executionBudget ?? sharedExecutionBudget(environment),\n ),\n );\n\n return {\n settings,\n environment,\n get clock() {\n return clock();\n },\n get spawner() {\n return spawner();\n },\n get processControl() {\n return processControl();\n },\n get ptySpawner() {\n return ptySpawner();\n },\n get paths() {\n return paths();\n },\n get lifeline() {\n return lifeline();\n },\n get processRegistry() {\n return processRegistry();\n },\n get runnerRegistry() {\n return runnerRegistry();\n },\n get namer() {\n return namer();\n },\n get logFile() {\n return logFile();\n },\n get logReader() {\n return logReader();\n },\n get launcher() {\n return launcher();\n },\n get rmuxBackend() {\n return rmuxBackend();\n },\n get rtkProcessor() {\n return rtkProcessor();\n },\n get ptyHost() {\n return ptyHost();\n },\n get bashRunService() {\n return bashRunService();\n },\n };\n}\n"],"mappings":"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"}
@@ -1,20 +1,20 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
2
- const require_bashRunService = require("./bashRunService-DyqxOSlx.cjs");
3
- const require_runnerConfig = require("./runnerConfig-D2tGq5ZM.cjs");
4
- const require_logReader = require("./logReader-B6J7L7Ua.cjs");
2
+ const require_bashRunService = require("./bashRunService-DjOH5kye.cjs");
3
+ const require_runnerConfig = require("./runnerConfig-BoLMinlx.cjs");
4
+ const require_logReader = require("./logReader-DHCK2BEr.cjs");
5
5
  const require_clock = require("./clock-jqnLWziT.cjs");
6
- const require_rmuxBackend = require("./rmuxBackend-DlxgqRZ1.cjs");
6
+ const require_rmuxBackend = require("./rmuxBackend-Dh0CYVAL.cjs");
7
7
  const require_services_runnerSupervisor_index = require("./services/runnerSupervisor/index.cjs");
8
- const require_rtkProcessor = require("./rtkProcessor-Bc4L4o_8.cjs");
9
- const require_launcher = require("./launcher-SlyE8R3b.cjs");
10
- const require_lifeline = require("./lifeline-BuV_erib.cjs");
11
- const require_logFile = require("./logFile-CNvepZh0.cjs");
8
+ const require_rtkProcessor = require("./rtkProcessor-DSGbM-Cm.cjs");
9
+ const require_launcher = require("./launcher-ZgDdyXpq.cjs");
10
+ const require_lifeline = require("./lifeline-m7laIzIP.cjs");
11
+ const require_logFile = require("./logFile-CnPKtxPy.cjs");
12
12
  const require_processControl = require("./processControl-DNJ1WZ9N.cjs");
13
- const require_ptyHost = require("./ptyHost-MI2Z6WTG.cjs");
14
- const require_ptySpawner = require("./ptySpawner-ijw0g5_T.cjs");
13
+ const require_ptyHost = require("./ptyHost-D35hNmtd.cjs");
14
+ const require_ptySpawner = require("./ptySpawner-C39IzbRo.cjs");
15
15
  const require_runnerNamer = require("./runnerNamer-we1XVYfM.cjs");
16
- const require_runnerPaths = require("./runnerPaths-BTEuzxw0.cjs");
17
- const require_runnerRegistry = require("./runnerRegistry-BmkZTJHi.cjs");
16
+ const require_runnerPaths = require("./runnerPaths-B41rMOY6.cjs");
17
+ const require_runnerRegistry = require("./runnerRegistry-dQYlMSpQ.cjs");
18
18
  const require_spawner = require("./spawner-BxFsINXP.cjs");
19
19
  let node_crypto = require("node:crypto");
20
20
  let node_fs = require("node:fs");
@@ -26,9 +26,9 @@ let _agimon_ai_po_core_packageApi = require("@agimon-ai/po-core/packageApi");
26
26
  //#region src/constants/tmuxBackend.ts
27
27
  const LOG_DRAIN_TIMEOUT_MS = 2e3;
28
28
  const PANE_STATE_FORMAT = "#{pane_dead}:#{pane_dead_status}:#{session_name}";
29
- const SESSION_PREFIX = "doom-tmux-";
30
- const OWNED_TARGET_PATTERN = /^doom-tmux-[A-Za-z0-9_-]+$/;
31
- const SOCKET_PREFIX = "doom-tmux-";
29
+ const SESSION_PREFIX = "po-tmux-";
30
+ const OWNED_TARGET_PATTERN = /^po-tmux-[A-Za-z0-9_-]+$/;
31
+ const SOCKET_PREFIX = "po-tmux-";
32
32
  const NON_INTERACTIVE_ENV = {
33
33
  NO_COLOR: "1",
34
34
  CI: "1"
@@ -75,7 +75,7 @@ var PtyBackendChain = class {
75
75
  return this.rmux.get(name) ?? this.tmux.get(name);
76
76
  }
77
77
  owner(target) {
78
- return target.startsWith("doom-tmux-") ? this.tmux : this.rmux;
78
+ return target.startsWith("po-tmux-") ? this.tmux : this.rmux;
79
79
  }
80
80
  };
81
81
  //#endregion
@@ -664,4 +664,4 @@ Object.defineProperty(exports, "createRunnerDependencies", {
664
664
  }
665
665
  });
666
666
 
667
- //# sourceMappingURL=runnerDependencies-KMZigIxB.cjs.map
667
+ //# sourceMappingURL=runnerDependencies-DSun3xO-.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerDependencies-DSun3xO-.cjs","names":["shellJoin","runtimeEntry","getResultMaxBytes","readExitMetadata","supervisorPaths","path","getLogMaxBytes","createHash","noninteractiveEnvironment","NO_TERMINAL_INPUT_ENV","fs","SystemClock","NodeSpawner","NodeProcessControl","NodePtySpawner","RunnerPaths","NodeLifeline","createDefaultProcessRegistry","RunnerRegistry","RunnerNamer","LogFile","LogReader","Launcher","RmuxBackend","RtkProcessor","PtyHost","BashRunService","sharedExecutionBudget"],"sources":["../src/constants/tmuxBackend.ts","../src/services/ptyBackendChain/index.ts","../src/services/tmuxBackend/TmuxClient.ts","../src/services/tmuxBackend/index.ts","../src/services/runnerDependencies/index.ts"],"sourcesContent":["export const POLL_MS = 100;\nexport const LOG_DRAIN_TIMEOUT_MS = 2_000;\nexport const LOG_DRAIN_POLL_MS = 25;\nexport const PANE_STATE_FORMAT = '#{pane_dead}:#{pane_dead_status}:#{session_name}';\nexport const STOP_GRACE_MS = 3_000;\nexport const SESSION_PREFIX = 'po-tmux-';\nexport const OWNED_TARGET_PATTERN = /^po-tmux-[A-Za-z0-9_-]+$/;\nexport const TMUX_TARGET_PREFIX = SESSION_PREFIX;\nexport const SOCKET_HASH_LENGTH = 12;\nexport const SOCKET_PREFIX = 'po-tmux-';\nexport const NON_INTERACTIVE_ENV = { NO_COLOR: '1', CI: '1' };\n","import { TMUX_TARGET_PREFIX } from '../../constants/tmuxBackend';\nimport type { RunHandle } from '../../types/launcher';\nimport type { PtyRun } from '../../types/ptyHost';\nimport type { IRmuxBackend, RmuxLaunchRequest } from '../../types/rmuxBackend';\nimport type { ExitResult } from '../../types/spawner';\n\n/**\n * Presents the available PTY backends as one, preferring RMUX.\n *\n * A launch takes the first backend that accepts it, so a host without a\n * compatible RMUX binary still gets panes rather than falling through to the\n * plain subprocess launcher. Every later call routes on the target's prefix\n * instead of asking each backend in turn: a backend cannot tell \"this session\n * is gone\" from \"this session was never mine\", and guessing would let one\n * report success for the other's run.\n */\nexport class PtyBackendChain implements IRmuxBackend {\n constructor(\n private readonly rmux: IRmuxBackend,\n private readonly tmux: IRmuxBackend,\n ) {}\n\n async launch(request: RmuxLaunchRequest): Promise<RunHandle | undefined> {\n return (await this.rmux.launch(request)) ?? (await this.tmux.launch(request));\n }\n\n watch(id: string, target: string, sessionId?: string): Promise<ExitResult | undefined> {\n return this.owner(target).watch(id, target, sessionId);\n }\n\n stop(target: string, expectedPid: number): Promise<boolean> {\n return this.owner(target).stop(target, expectedPid);\n }\n\n input(target: string, text: string): Promise<boolean> {\n return this.owner(target).input(target, text);\n }\n\n capture(target: string): Promise<string | undefined> {\n return this.owner(target).capture(target);\n }\n\n /** Both backends persist terminal evidence at the same path, so either answers. */\n readOutcome(id: string, sessionId: string): ExitResult | undefined {\n return this.rmux.readOutcome(id, sessionId) ?? this.tmux.readOutcome(id, sessionId);\n }\n\n get(name: string): PtyRun | undefined {\n return this.rmux.get(name) ?? this.tmux.get(name);\n }\n\n private owner(target: string): IRmuxBackend {\n return target.startsWith(TMUX_TARGET_PREFIX) ? this.tmux : this.rmux;\n }\n}\n","import { execFile } from 'node:child_process';\n\nimport type { ITmuxClient, TmuxResult } from '../../types/tmuxClient';\n\nconst TMUX_BINARY = 'tmux';\nconst SOCKET_OPTION = '-L';\n/** Long enough for a loaded server, short enough that a hung tmux is not fatal. */\nconst COMMAND_TIMEOUT_MS = 10_000;\nconst MAX_OUTPUT_BYTES = 4 * 1024 * 1024;\n\nexport class TmuxClient implements ITmuxClient {\n constructor(\n private readonly socket: string,\n private readonly binary = TMUX_BINARY,\n ) {}\n\n run(args: readonly string[]): Promise<TmuxResult> {\n return new Promise((resolve, reject) => {\n execFile(\n this.binary,\n [SOCKET_OPTION, this.socket, ...args],\n { timeout: COMMAND_TIMEOUT_MS, maxBuffer: MAX_OUTPUT_BYTES, encoding: 'utf8' },\n (error, stdout, stderr) => {\n // A non-zero tmux exit is an answer, not a fault: `has-session`\n // reports absence that way. Only a missing or hung binary rejects.\n const code = (error as (Error & { code?: number | string }) | null)?.code;\n if (error && typeof code !== 'number') {\n reject(error);\n return;\n }\n resolve({ returnCode: typeof code === 'number' ? code : 0, stdout, stderr });\n },\n );\n });\n }\n\n async format(target: string, format: string): Promise<string | undefined> {\n const result = await this.run(['display-message', '-p', '-t', target, '-F', format]).catch(() => undefined);\n if (!result || result.returnCode !== 0) return undefined;\n return result.stdout.replace(/\\n$/, '');\n }\n\n async sessionMissing(target: string): Promise<boolean> {\n const result = await this.run(['has-session', '-t', target]).catch(() => undefined);\n return !result || result.returnCode !== 0;\n }\n}\n","import { createHash } from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport {\n LOG_DRAIN_POLL_MS,\n LOG_DRAIN_TIMEOUT_MS,\n NON_INTERACTIVE_ENV,\n OWNED_TARGET_PATTERN,\n PANE_STATE_FORMAT,\n POLL_MS,\n SESSION_PREFIX,\n SOCKET_HASH_LENGTH,\n SOCKET_PREFIX,\n STOP_GRACE_MS,\n} from '../../constants/tmuxBackend';\nimport type { RunHandle } from '../../types/launcher';\nimport type { PtyRun } from '../../types/ptyHost';\nimport type { IRmuxBackend, RmuxLaunchRequest } from '../../types/rmuxBackend';\nimport type { RunnerSettings } from '../../types/runnerSettings';\nimport type { ExitResult } from '../../types/spawner';\nimport type { ITmuxClient } from '../../types/tmuxClient';\nimport { getLogMaxBytes, getResultMaxBytes, noninteractiveEnvironment } from '../runnerConfig';\nimport type { IRunnerPaths } from '../runnerPaths/type';\nimport {\n type CommandSpec,\n type SupervisorPaths,\n cleanupSupervisorFiles,\n NO_TERMINAL_INPUT_ENV,\n readExitMetadata,\n runtimeEntry,\n shellJoin,\n supervisorPaths,\n writeCommandSpec,\n} from '../runnerSupervisor';\nimport { TmuxClient } from './TmuxClient';\n\n/** Pane liveness, its exit status, and whether the session still exists, in one read. */\n/** Distinct from the RMUX prefix so a target names the backend that owns it. */\n\n/**\n * Supervises runs in tmux panes, for hosts with no compatible RMUX binary.\n *\n * The pane runs the same runnerHost supervisor as the RMUX backend, so exit\n * metadata, log rotation, and lifeline handling are shared rather than\n * reimplemented: only the multiplexer differs. Kept beside the RMUX backend\n * rather than folded into it because that path has no unit coverage to\n * refactor against.\n */\nexport class TmuxBackend implements IRmuxBackend {\n private clientPromise: Promise<ITmuxClient | undefined> | undefined;\n private readonly runs = new Map<string, PtyRun>();\n private readonly completions = new Map<string, Promise<ExitResult>>();\n\n constructor(\n private readonly paths: IRunnerPaths,\n private readonly createClient: (socket: string) => ITmuxClient = (socket) => new TmuxClient(socket),\n private readonly env: Readonly<Record<string, string | undefined>> = process.env,\n private readonly settings?: RunnerSettings,\n ) {}\n\n async launch(request: RmuxLaunchRequest): Promise<RunHandle | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n\n this.paths.ensureDirectories();\n const target = `${SESSION_PREFIX}${request.id}`;\n const logPath = this.paths.logPathFor(request.id);\n const aux = this.auxPaths(request.id, request.sessionId);\n let created = false;\n let released = false;\n\n try {\n this.prepareFiles(request, logPath, aux);\n // One quoted command rather than an argv: tmux takes shell-command as a\n // single word, and quoting here is what keeps a path with spaces intact.\n const supervisor = shellJoin([process.execPath, runtimeEntry('runnerHost'), aux.spec, aux.gate, aux.exit]);\n await this.checked(tmux, ['new-session', '-d', '-s', target, '-c', request.cwd, supervisor]);\n created = true;\n // Set before the gate opens, so it is in force by the time the command\n // can exit. A pane that vanishes on exit takes the log sink down with it\n // before Node has finished starting, losing the output of fast commands,\n // and leaves #{pane_dead} with nothing to report.\n await this.checked(tmux, ['set-option', '-t', target, 'remain-on-exit', 'on']);\n await this.checked(tmux, ['pipe-pane', '-t', target, this.logPipeCommand(logPath, aux.logDone, request)]);\n\n const pid = await panePid(tmux, target);\n fs.writeFileSync(aux.gate, '', { mode: 0o600 });\n released = true;\n\n let buffering = true;\n const completion = this.monitor(tmux, target, aux);\n this.trackCompletion(target, completion);\n const handle: RunHandle = {\n id: request.id,\n name: request.name,\n pid,\n logPath,\n backend: 'tmux',\n backendTarget: target,\n output: () => (buffering ? readTail(logPath, getResultMaxBytes(this.env, this.settings) * 2) : ''),\n completion: () => completion,\n detach: () => {\n buffering = false;\n },\n stop: () => this.stop(target, pid),\n };\n\n if (request.interactive) this.runs.set(request.name, this.interactiveRun(handle, tmux, target, completion));\n void completion\n .finally(() => this.runs.delete(request.name))\n .catch((error: unknown) => process.emitWarning(`tmux completion failed for ${target}: ${errorMessage(error)}`));\n return handle;\n } catch (error) {\n if (released) throw error;\n if (created) await killSession(tmux, target);\n cleanupSupervisorFiles(aux);\n process.emitWarning(\n request.interactive\n ? `tmux launch unavailable for interactive runner: ${errorMessage(error)}`\n : `tmux launch unavailable, using supervised subprocess: ${errorMessage(error)}`,\n );\n return undefined;\n }\n }\n\n async stop(target: string, expectedPid: number): Promise<boolean> {\n if (!OWNED_TARGET_PATTERN.test(target) || !Number.isInteger(expectedPid) || expectedPid <= 0) return false;\n\n const tmux = await this.client();\n if (!tmux) return false;\n try {\n if (await tmux.sessionMissing(target)) return true;\n\n const pid = await panePid(tmux, target);\n if (pid !== expectedPid) return false;\n const signalled = signalPane(pid, target);\n if (signalled === 'gone') return true;\n if (signalled === 'failed') return false;\n\n if (await waitForPaneStop(tmux, target, STOP_GRACE_MS)) return true;\n if (await tmux.sessionMissing(target)) return true;\n\n // Revalidate after the grace period so a replacement pane is never closed.\n const currentPid = await panePid(tmux, target).catch(() => undefined);\n if (currentPid !== expectedPid) return false;\n\n return killSession(tmux, target);\n } catch (error) {\n process.emitWarning(`Could not stop tmux target ${target}: ${errorMessage(error)}`);\n return false;\n }\n }\n\n async watch(id: string, target: string, sessionId?: string): Promise<ExitResult | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n if (await tmux.sessionMissing(target)) return undefined;\n const completion = this.monitor(tmux, target, this.auxPaths(id, sessionId));\n this.trackCompletion(target, completion);\n return completion;\n }\n\n async input(target: string, text: string): Promise<boolean> {\n const tmux = await this.client();\n if (!tmux) return false;\n const result = await tmux.run(['send-keys', '-t', target, '-l', text]).catch((error: unknown) => {\n process.emitWarning(`Could not send input to tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0;\n }\n\n async capture(target: string): Promise<string | undefined> {\n const tmux = await this.client();\n if (!tmux) return undefined;\n const result = await tmux.run(['capture-pane', '-p', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not capture tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0 ? result.stdout : undefined;\n }\n\n get(name: string): PtyRun | undefined {\n return this.runs.get(name);\n }\n\n readOutcome(id: string, sessionId: string): ExitResult | undefined {\n return readExitMetadata(this.auxPaths(id, sessionId).exit);\n }\n\n private trackCompletion(target: string, completion: Promise<ExitResult>): void {\n this.completions.set(target, completion);\n void completion\n .finally(() => this.completions.delete(target))\n .catch((error: unknown) => process.emitWarning(`tmux monitor failed for ${target}: ${errorMessage(error)}`));\n }\n\n private client(): Promise<ITmuxClient | undefined> {\n this.clientPromise ??= this.resolveClient();\n return this.clientPromise;\n }\n\n private async resolveClient(): Promise<ITmuxClient | undefined> {\n const client = this.createClient(socketName(this.paths.repositoryPath()));\n try {\n const version = await client.run(['-V']);\n if (version.returnCode !== 0) throw new Error(version.stderr.trim() || 'tmux reported no version');\n return client;\n } catch (error) {\n process.emitWarning(`tmux is unavailable: ${errorMessage(error)}`);\n return undefined;\n }\n }\n\n private async checked(tmux: ITmuxClient, args: readonly string[]): Promise<void> {\n const result = await tmux.run(args);\n if (result.returnCode !== 0) {\n throw new Error(`tmux ${args[0] ?? ''} failed: ${result.stderr.trim() || `exit ${result.returnCode}`}`);\n }\n }\n\n private prepareFiles(request: RmuxLaunchRequest, logPath: string, aux: SupervisorPaths): void {\n cleanupSupervisorFiles(aux);\n fs.writeFileSync(logPath, '', { mode: 0o600 });\n const env = environment(request.sessionId, request.interactive, this.env);\n const spec: CommandSpec = { command: request.command, cwd: request.cwd, env };\n writeCommandSpec(aux.spec, spec);\n }\n\n private auxPaths(id: string, sessionId?: string): SupervisorPaths {\n return supervisorPaths(this.paths.stateDirectory(sessionId), id);\n }\n\n /**\n * The sink the pane pipes into.\n *\n * An interactive run also asks for a raw copy: the scrubbed log it writes\n * beside it has had cursor movement taken out, which is what a terminal\n * needs most. Only interactive runs pay for it, because only they can be\n * attached to.\n */\n private logPipeCommand(logPath: string, donePath: string, request: RmuxLaunchRequest): string {\n const id = path.basename(logPath, '.log');\n return shellJoin([\n process.execPath,\n runtimeEntry('logSink'),\n logPath,\n this.paths.rotatedLogPathFor(id),\n String(getLogMaxBytes(this.env)),\n donePath,\n ...(request.interactive ? [this.paths.rawLogPathFor(id)] : []),\n ]);\n }\n\n private async monitor(tmux: ITmuxClient, target: string, aux: SupervisorPaths): Promise<ExitResult> {\n try {\n const paneCode = await waitForRunEnd(tmux, target, aux.exit);\n await waitForLogDrain(tmux, target, aux.logDone);\n return readExitMetadata(aux.exit) ?? { code: paneCode, signal: null };\n } finally {\n if (!(await tmux.sessionMissing(target).catch(() => false))) await killSession(tmux, target);\n cleanupSupervisorFiles(aux);\n }\n }\n\n private interactiveRun(\n handle: RunHandle,\n tmux: ITmuxClient,\n target: string,\n completion: Promise<ExitResult>,\n ): PtyRun {\n let screen = '';\n let active = true;\n const handlers = new Set<(data: string) => void>();\n const refresh = async (): Promise<void> => {\n while (active) {\n const captured = await tmux.run(['capture-pane', '-p', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not capture tmux screen for ${handle.name}: ${errorMessage(error)}`);\n return undefined;\n });\n const next = captured?.returnCode === 0 ? captured.stdout : screen;\n if (next !== screen) {\n screen = next;\n for (const handler of handlers) handler(next);\n }\n await delay(POLL_MS);\n }\n };\n void refresh();\n void completion\n .finally(() => {\n active = false;\n })\n .catch((error: unknown) =>\n process.emitWarning(`tmux interactive completion failed for ${handle.name}: ${errorMessage(error)}`),\n );\n return {\n ...handle,\n write: (text) => {\n void tmux\n .run(['send-keys', '-t', target, '-l', text])\n .catch((error: unknown) => process.emitWarning(errorMessage(error)));\n },\n screen: () => screen,\n onData: (handler) => {\n handlers.add(handler);\n return () => handlers.delete(handler);\n },\n resize: (cols, rows) => {\n void tmux\n .run(['resize-window', '-t', target, '-x', String(cols), '-y', String(rows)])\n .catch((error: unknown) => process.emitWarning(errorMessage(error)));\n },\n };\n }\n}\n\nfunction socketName(repositoryPath: string): string {\n const hash = createHash('sha256').update(repositoryPath).digest('hex').slice(0, SOCKET_HASH_LENGTH);\n return `${SOCKET_PREFIX}${hash}`;\n}\n\nfunction environment(\n sessionId: string,\n interactive: boolean,\n env: Readonly<Record<string, string | undefined>>,\n): Record<string, string> {\n const values: NodeJS.ProcessEnv = {\n ...env,\n ...(interactive ? {} : { ...NON_INTERACTIVE_ENV, ...noninteractiveEnvironment(env) }),\n ...NO_TERMINAL_INPUT_ENV,\n PI_SESSION_ID: sessionId,\n };\n if (!interactive) delete values['FORCE_COLOR'];\n return Object.fromEntries(\n Object.entries(values).filter((entry): entry is [string, string] => entry[1] !== undefined),\n );\n}\n\nasync function killSession(tmux: ITmuxClient, target: string): Promise<boolean> {\n const result = await tmux.run(['kill-session', '-t', target]).catch((error: unknown) => {\n process.emitWarning(`Could not close tmux target ${target}: ${errorMessage(error)}`);\n return undefined;\n });\n return result?.returnCode === 0;\n}\n\nasync function panePid(tmux: ITmuxClient, target: string): Promise<number> {\n const message = await tmux.format(target, '#{pane_pid}');\n const pid = Number(message);\n if (!Number.isInteger(pid) || pid <= 0) throw new Error(`tmux did not report a pane pid for ${target}`);\n return pid;\n}\n\n/**\n * Waits for the run to end, preferring the supervisor's own record of it.\n *\n * The sidecar is written before the pane can end and outlives the server the\n * pane's exit takes down, so asking tmux is the fallback for a supervisor that\n * died without recording anything.\n */\nasync function waitForRunEnd(tmux: ITmuxClient, target: string, exitPath: string): Promise<number | null> {\n for (;;) {\n if (fs.existsSync(exitPath)) return null;\n const state = await readPaneExit(tmux, target);\n if (state.exited) return state.code;\n await delay(POLL_MS);\n }\n}\n\nasync function waitForLogDrain(tmux: ITmuxClient, target: string, donePath: string): Promise<void> {\n const deadline = Date.now() + LOG_DRAIN_TIMEOUT_MS;\n while (Date.now() < deadline) {\n if (fs.existsSync(donePath)) return;\n if (await tmux.sessionMissing(target)) return;\n await delay(LOG_DRAIN_POLL_MS);\n }\n}\n\nasync function waitForPaneStop(tmux: ITmuxClient, target: string, timeoutMs: number): Promise<boolean> {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n if ((await readPaneExit(tmux, target)).exited) return true;\n await delay(POLL_MS);\n }\n return false;\n}\n\n/** One formatted read answers both questions this poll asks. */\nasync function readPaneExit(tmux: ITmuxClient, target: string): Promise<{ exited: boolean; code: number | null }> {\n const message = await tmux.format(target, PANE_STATE_FORMAT);\n // An unreachable server is the ordinary end of the last run: the pane exiting\n // ends its session, and the last session ending stops the server.\n if (message === undefined) return { exited: true, code: null };\n const [dead, status, ...rest] = message.trim().split(':');\n if (rest.join(':') === '') return { exited: true, code: null };\n if (dead === '1' || dead === 'true') {\n const code = Number(status);\n return { exited: true, code: Number.isInteger(code) ? code : null };\n }\n return { exited: false, code: null };\n}\n\nfunction signalPane(pid: number, target: string): 'signalled' | 'gone' | 'failed' {\n try {\n process.kill(pid, 'SIGTERM');\n return 'signalled';\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ESRCH') return 'gone';\n process.emitWarning(`Could not signal tmux target ${target}: ${errorMessage(error)}`);\n return 'failed';\n }\n}\n\nfunction readTail(target: string, maxBytes: number): string {\n let handle: number | undefined;\n try {\n const size = fs.statSync(target).size;\n const bytes = Math.min(size, maxBytes);\n const buffer = Buffer.alloc(bytes);\n handle = fs.openSync(target, 'r');\n fs.readSync(handle, buffer, 0, bytes, size - bytes);\n return buffer.toString('utf8');\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n process.emitWarning(`Could not read tmux log ${target}: ${errorMessage(error)}`);\n }\n return '';\n } finally {\n if (handle !== undefined) fs.closeSync(handle);\n }\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n const timer = setTimeout(resolve, ms);\n timer.unref?.();\n });\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { sharedExecutionBudget, type PoHostExecutionBudget } from '@agimon-ai/po-core/packageApi';\n\nimport { BashRunService } from '../bashRunService';\nimport { SystemClock } from '../clock';\nimport { Launcher } from '../launcher';\nimport { NodeLifeline } from '../lifeline';\nimport { LogFile } from '../logFile';\nimport { LogReader } from '../logReader';\nimport { NodeProcessControl } from '../processControl';\nimport { PtyBackendChain } from '../ptyBackendChain';\nimport { PtyHost } from '../ptyHost';\nimport { NodePtySpawner } from '../ptySpawner';\nimport { RmuxBackend } from '../rmuxBackend';\nimport { RtkProcessor } from '../rtkProcessor';\nimport { RunnerNamer } from '../runnerNamer';\nimport { RunnerPaths } from '../runnerPaths';\nimport { RunnerRegistry, createDefaultProcessRegistry } from '../runnerRegistry';\nimport { NodeSpawner } from '../spawner';\nimport { TmuxBackend } from '../tmuxBackend';\nimport type { RunnerDependencies } from './type';\n/** Build once on first access, then hand back the same instance. */\nfunction memoize<T>(build: () => T): () => T {\n let value: T | undefined;\n let built = false;\n return () => {\n if (!built) {\n value = build();\n built = true;\n }\n return value as T;\n };\n}\n\n/**\n * Builds the extension's service graph.\n *\n * A factory rather than a module-level singleton: the extension owns one graph\n * per session, and tests get a fresh one they can substitute ports on through\n * `overrides` without leaking state between cases.\n *\n * Every slot resolves lazily and memoizes, which keeps the previous container's\n * behaviour: nothing is constructed until it is asked for, so opening the SQLite\n * process registry stays deferred until something actually needs a runner.\n */\nexport function createRunnerDependencies(\n overrides: Partial<RunnerDependencies> & {\n environment: Readonly<Record<string, string | undefined>>;\n cwd?: string;\n executionBudget?: PoHostExecutionBudget;\n },\n): RunnerDependencies {\n const settings =\n overrides.settings === undefined\n ? undefined\n : Object.freeze({\n ...overrides.settings,\n ...(overrides.settings?.errorPatterns\n ? { errorPatterns: Object.freeze([...overrides.settings.errorPatterns]) }\n : {}),\n });\n const environment = { ...overrides.environment };\n const cwd = overrides.cwd ?? process.cwd();\n const clock = memoize(() => overrides.clock ?? new SystemClock());\n const spawner = memoize(() => overrides.spawner ?? new NodeSpawner());\n const processControl = memoize(() => overrides.processControl ?? new NodeProcessControl());\n const ptySpawner = memoize(() => overrides.ptySpawner ?? new NodePtySpawner());\n const paths = memoize(() => overrides.paths ?? new RunnerPaths(cwd, environment));\n const lifeline = memoize(() => overrides.lifeline ?? new NodeLifeline(paths()));\n const processRegistry = memoize(() => overrides.processRegistry ?? createDefaultProcessRegistry(environment));\n const runnerRegistry = memoize(\n () => overrides.runnerRegistry ?? new RunnerRegistry(paths(), processControl(), processRegistry(), environment),\n );\n const namer = memoize(() => overrides.namer ?? new RunnerNamer(runnerRegistry()));\n const logFile = memoize(() => overrides.logFile ?? new LogFile(paths()));\n const logReader = memoize(() => overrides.logReader ?? new LogReader());\n const launcher = memoize(\n () =>\n overrides.launcher ??\n new Launcher(spawner(), processControl(), logFile(), clock(), paths(), lifeline(), environment, settings),\n );\n const rmuxBackend = memoize(\n () =>\n overrides.rmuxBackend ??\n new PtyBackendChain(\n new RmuxBackend(paths(), environment, settings),\n new TmuxBackend(paths(), undefined, environment, settings),\n ),\n );\n const rtkProcessor = memoize(\n () => overrides.rtkProcessor ?? new RtkProcessor(undefined, undefined, environment, settings),\n );\n const ptyHost = memoize(\n () => overrides.ptyHost ?? new PtyHost(ptySpawner(), logFile(), processControl(), clock(), environment, settings),\n );\n const bashRunService = memoize(\n () =>\n overrides.bashRunService ??\n new BashRunService(\n launcher(),\n rmuxBackend(),\n namer(),\n runnerRegistry(),\n clock(),\n rtkProcessor(),\n cwd,\n environment,\n overrides.executionBudget ?? sharedExecutionBudget(environment),\n ),\n );\n\n return {\n settings,\n environment,\n get clock() {\n return clock();\n },\n get spawner() {\n return spawner();\n },\n get processControl() {\n return processControl();\n },\n get ptySpawner() {\n return ptySpawner();\n },\n get paths() {\n return paths();\n },\n get lifeline() {\n return lifeline();\n },\n get processRegistry() {\n return processRegistry();\n },\n get runnerRegistry() {\n return runnerRegistry();\n },\n get namer() {\n return namer();\n },\n get logFile() {\n return logFile();\n },\n get logReader() {\n return logReader();\n },\n get launcher() {\n return launcher();\n },\n get rmuxBackend() {\n return rmuxBackend();\n },\n get rtkProcessor() {\n return rtkProcessor();\n },\n get ptyHost() {\n return ptyHost();\n },\n get bashRunService() {\n return bashRunService();\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,MAAa,uBAAuB;AAEpC,MAAa,oBAAoB;AAEjC,MAAa,iBAAiB;AAC9B,MAAa,uBAAuB;AAGpC,MAAa,gBAAgB;AAC7B,MAAa,sBAAsB;CAAE,UAAU;CAAK,IAAI;AAAI;;;;;;;;;;;;;ACM5D,IAAa,kBAAb,MAAqD;CAEhC;CACA;CAFnB,YACE,MACA,MACA;EAFiB,KAAA,OAAA;EACA,KAAA,OAAA;CAChB;CAEH,MAAM,OAAO,SAA4D;EACvE,OAAQ,MAAM,KAAK,KAAK,OAAO,OAAO,KAAO,MAAM,KAAK,KAAK,OAAO,OAAO;CAC7E;CAEA,MAAM,IAAY,QAAgB,WAAqD;EACrF,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,MAAM,IAAI,QAAQ,SAAS;CACvD;CAEA,KAAK,QAAgB,aAAuC;EAC1D,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,KAAK,QAAQ,WAAW;CACpD;CAEA,MAAM,QAAgB,MAAgC;EACpD,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,MAAM,QAAQ,IAAI;CAC9C;CAEA,QAAQ,QAA6C;EACnD,OAAO,KAAK,MAAM,MAAM,CAAC,CAAC,QAAQ,MAAM;CAC1C;;CAGA,YAAY,IAAY,WAA2C;EACjE,OAAO,KAAK,KAAK,YAAY,IAAI,SAAS,KAAK,KAAK,KAAK,YAAY,IAAI,SAAS;CACpF;CAEA,IAAI,MAAkC;EACpC,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI;CAClD;CAEA,MAAc,QAA8B;EAC1C,OAAO,OAAO,WAAA,UAA6B,IAAI,KAAK,OAAO,KAAK;CAClE;AACF;;;AClDA,MAAM,cAAc;AACpB,MAAM,gBAAgB;;AAEtB,MAAM,qBAAqB;AAC3B,MAAM,mBAAmB;AAEzB,IAAa,aAAb,MAA+C;CAE1B;CACA;CAFnB,YACE,QACA,SAA0B,aAC1B;EAFiB,KAAA,SAAA;EACA,KAAA,SAAA;CAChB;CAEH,IAAI,MAA8C;EAChD,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,CAAA,GAAA,mBAAA,SAAA,CACE,KAAK,QACL;IAAC;IAAe,KAAK;IAAQ,GAAG;GAAI,GACpC;IAAE,SAAS;IAAoB,WAAW;IAAkB,UAAU;GAAO,IAC5E,OAAO,QAAQ,WAAW;IAGzB,MAAM,OAAQ,OAAuD;IACrE,IAAI,SAAS,OAAO,SAAS,UAAU;KACrC,OAAO,KAAK;KACZ;IACF;IACA,QAAQ;KAAE,YAAY,OAAO,SAAS,WAAW,OAAO;KAAG;KAAQ;IAAO,CAAC;GAC7E,CACF;EACF,CAAC;CACH;CAEA,MAAM,OAAO,QAAgB,QAA6C;EACxE,MAAM,SAAS,MAAM,KAAK,IAAI;GAAC;GAAmB;GAAM;GAAM;GAAQ;GAAM;EAAM,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EAC1G,IAAI,CAAC,UAAU,OAAO,eAAe,GAAG,OAAO,KAAA;EAC/C,OAAO,OAAO,OAAO,QAAQ,OAAO,EAAE;CACxC;CAEA,MAAM,eAAe,QAAkC;EACrD,MAAM,SAAS,MAAM,KAAK,IAAI;GAAC;GAAe;GAAM;EAAM,CAAC,CAAC,CAAC,YAAY,KAAA,CAAS;EAClF,OAAO,CAAC,UAAU,OAAO,eAAe;CAC1C;AACF;;;;;;;;;;;;;;ACGA,IAAa,cAAb,MAAiD;CAM5B;CACA;CACA;CACA;CARnB;CACA,uBAAwB,IAAI,IAAoB;CAChD,8BAA+B,IAAI,IAAiC;CAEpE,YACE,OACA,gBAAkE,WAAW,IAAI,WAAW,MAAM,GAClG,MAAqE,QAAQ,KAC7E,UACA;EAJiB,KAAA,QAAA;EACA,KAAA,eAAA;EACA,KAAA,MAAA;EACA,KAAA,WAAA;CAChB;CAEH,MAAM,OAAO,SAA4D;EACvE,MAAM,OAAO,MAAM,KAAK,OAAO;EAC/B,IAAI,CAAC,MAAM,OAAO,KAAA;EAElB,KAAK,MAAM,kBAAkB;EAC7B,MAAM,SAAS,GAAG,iBAAiB,QAAQ;EAC3C,MAAM,UAAU,KAAK,MAAM,WAAW,QAAQ,EAAE;EAChD,MAAM,MAAM,KAAK,SAAS,QAAQ,IAAI,QAAQ,SAAS;EACvD,IAAI,UAAU;EACd,IAAI,WAAW;EAEf,IAAI;GACF,KAAK,aAAa,SAAS,SAAS,GAAG;GAGvC,MAAM,aAAaA,wCAAAA,UAAU;IAAC,QAAQ;IAAUC,wCAAAA,aAAa,YAAY;IAAG,IAAI;IAAM,IAAI;IAAM,IAAI;GAAI,CAAC;GACzG,MAAM,KAAK,QAAQ,MAAM;IAAC;IAAe;IAAM;IAAM;IAAQ;IAAM,QAAQ;IAAK;GAAU,CAAC;GAC3F,UAAU;GAKV,MAAM,KAAK,QAAQ,MAAM;IAAC;IAAc;IAAM;IAAQ;IAAkB;GAAI,CAAC;GAC7E,MAAM,KAAK,QAAQ,MAAM;IAAC;IAAa;IAAM;IAAQ,KAAK,eAAe,SAAS,IAAI,SAAS,OAAO;GAAC,CAAC;GAExG,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM;GACtC,QAAA,QAAG,cAAc,IAAI,MAAM,IAAI,EAAE,MAAM,IAAM,CAAC;GAC9C,WAAW;GAEX,IAAI,YAAY;GAChB,MAAM,aAAa,KAAK,QAAQ,MAAM,QAAQ,GAAG;GACjD,KAAK,gBAAgB,QAAQ,UAAU;GACvC,MAAM,SAAoB;IACxB,IAAI,QAAQ;IACZ,MAAM,QAAQ;IACd;IACA;IACA,SAAS;IACT,eAAe;IACf,cAAe,YAAY,SAAS,SAASC,qBAAAA,kBAAkB,KAAK,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI;IAC/F,kBAAkB;IAClB,cAAc;KACZ,YAAY;IACd;IACA,YAAY,KAAK,KAAK,QAAQ,GAAG;GACnC;GAEA,IAAI,QAAQ,aAAa,KAAK,KAAK,IAAI,QAAQ,MAAM,KAAK,eAAe,QAAQ,MAAM,QAAQ,UAAU,CAAC;GAC1G,WACG,cAAc,KAAK,KAAK,OAAO,QAAQ,IAAI,CAAC,CAAC,CAC7C,OAAO,UAAmB,QAAQ,YAAY,8BAA8B,OAAO,IAAI,aAAa,KAAK,GAAG,CAAC;GAChH,OAAO;EACT,SAAS,OAAO;GACd,IAAI,UAAU,MAAM;GACpB,IAAI,SAAS,MAAM,YAAY,MAAM,MAAM;GAC3C,wCAAA,uBAAuB,GAAG;GAC1B,QAAQ,YACN,QAAQ,cACJ,mDAAmD,aAAa,KAAK,MACrE,yDAAyD,aAAa,KAAK,GACjF;GACA;EACF;CACF;CAEA,MAAM,KAAK,QAAgB,aAAuC;EAChE,IAAI,CAAC,qBAAqB,KAAK,MAAM,KAAK,CAAC,OAAO,UAAU,WAAW,KAAK,eAAe,GAAG,OAAO;EAErG,MAAM,OAAO,MAAM,KAAK,OAAO;EAC/B,IAAI,CAAC,MAAM,OAAO;EAClB,IAAI;GACF,IAAI,MAAM,KAAK,eAAe,MAAM,GAAG,OAAO;GAE9C,MAAM,MAAM,MAAM,QAAQ,MAAM,MAAM;GACtC,IAAI,QAAQ,aAAa,OAAO;GAChC,MAAM,YAAY,WAAW,KAAK,MAAM;GACxC,IAAI,cAAc,QAAQ,OAAO;GACjC,IAAI,cAAc,UAAU,OAAO;GAEnC,IAAI,MAAM,gBAAgB,MAAM,QAAA,GAAqB,GAAG,OAAO;GAC/D,IAAI,MAAM,KAAK,eAAe,MAAM,GAAG,OAAO;GAI9C,IAAI,MADqB,QAAQ,MAAM,MAAM,CAAC,CAAC,YAAY,KAAA,CAAS,MACjD,aAAa,OAAO;GAEvC,OAAO,YAAY,MAAM,MAAM;EACjC,SAAS,OAAO;GACd,QAAQ,YAAY,8BAA8B,OAAO,IAAI,aAAa,KAAK,GAAG;GAClF,OAAO;EACT;CACF;CAEA,MAAM,MAAM,IAAY,QAAgB,WAAqD;EAC3F,MAAM,OAAO,MAAM,KAAK,OAAO;EAC/B,IAAI,CAAC,MAAM,OAAO,KAAA;EAClB,IAAI,MAAM,KAAK,eAAe,MAAM,GAAG,OAAO,KAAA;EAC9C,MAAM,aAAa,KAAK,QAAQ,MAAM,QAAQ,KAAK,SAAS,IAAI,SAAS,CAAC;EAC1E,KAAK,gBAAgB,QAAQ,UAAU;EACvC,OAAO;CACT;CAEA,MAAM,MAAM,QAAgB,MAAgC;EAC1D,MAAM,OAAO,MAAM,KAAK,OAAO;EAC/B,IAAI,CAAC,MAAM,OAAO;EAKlB,QAAO,MAJc,KAAK,IAAI;GAAC;GAAa;GAAM;GAAQ;GAAM;EAAI,CAAC,CAAC,CAAC,OAAO,UAAmB;GAC/F,QAAQ,YAAY,uCAAuC,OAAO,IAAI,aAAa,KAAK,GAAG;EAE7F,CAAC,EAAA,EACc,eAAe;CAChC;CAEA,MAAM,QAAQ,QAA6C;EACzD,MAAM,OAAO,MAAM,KAAK,OAAO;EAC/B,IAAI,CAAC,MAAM,OAAO,KAAA;EAClB,MAAM,SAAS,MAAM,KAAK,IAAI;GAAC;GAAgB;GAAM;GAAM;EAAM,CAAC,CAAC,CAAC,OAAO,UAAmB;GAC5F,QAAQ,YAAY,iCAAiC,OAAO,IAAI,aAAa,KAAK,GAAG;EAEvF,CAAC;EACD,OAAO,QAAQ,eAAe,IAAI,OAAO,SAAS,KAAA;CACpD;CAEA,IAAI,MAAkC;EACpC,OAAO,KAAK,KAAK,IAAI,IAAI;CAC3B;CAEA,YAAY,IAAY,WAA2C;EACjE,OAAOC,wCAAAA,iBAAiB,KAAK,SAAS,IAAI,SAAS,CAAC,CAAC,IAAI;CAC3D;CAEA,gBAAwB,QAAgB,YAAuC;EAC7E,KAAK,YAAY,IAAI,QAAQ,UAAU;EACvC,WACG,cAAc,KAAK,YAAY,OAAO,MAAM,CAAC,CAAC,CAC9C,OAAO,UAAmB,QAAQ,YAAY,2BAA2B,OAAO,IAAI,aAAa,KAAK,GAAG,CAAC;CAC/G;CAEA,SAAmD;EACjD,KAAK,kBAAkB,KAAK,cAAc;EAC1C,OAAO,KAAK;CACd;CAEA,MAAc,gBAAkD;EAC9D,MAAM,SAAS,KAAK,aAAa,WAAW,KAAK,MAAM,eAAe,CAAC,CAAC;EACxE,IAAI;GACF,MAAM,UAAU,MAAM,OAAO,IAAI,CAAC,IAAI,CAAC;GACvC,IAAI,QAAQ,eAAe,GAAG,MAAM,IAAI,MAAM,QAAQ,OAAO,KAAK,KAAK,0BAA0B;GACjG,OAAO;EACT,SAAS,OAAO;GACd,QAAQ,YAAY,wBAAwB,aAAa,KAAK,GAAG;GACjE;EACF;CACF;CAEA,MAAc,QAAQ,MAAmB,MAAwC;EAC/E,MAAM,SAAS,MAAM,KAAK,IAAI,IAAI;EAClC,IAAI,OAAO,eAAe,GACxB,MAAM,IAAI,MAAM,QAAQ,KAAK,MAAM,GAAG,WAAW,OAAO,OAAO,KAAK,KAAK,QAAQ,OAAO,cAAc;CAE1G;CAEA,aAAqB,SAA4B,SAAiB,KAA4B;EAC5F,wCAAA,uBAAuB,GAAG;EAC1B,QAAA,QAAG,cAAc,SAAS,IAAI,EAAE,MAAM,IAAM,CAAC;EAC7C,MAAM,MAAM,YAAY,QAAQ,WAAW,QAAQ,aAAa,KAAK,GAAG;EACxE,MAAM,OAAoB;GAAE,SAAS,QAAQ;GAAS,KAAK,QAAQ;GAAK;EAAI;EAC5E,wCAAA,iBAAiB,IAAI,MAAM,IAAI;CACjC;CAEA,SAAiB,IAAY,WAAqC;EAChE,OAAOC,wCAAAA,gBAAgB,KAAK,MAAM,eAAe,SAAS,GAAG,EAAE;CACjE;;;;;;;;;CAUA,eAAuB,SAAiB,UAAkB,SAAoC;EAC5F,MAAM,KAAKC,UAAAA,QAAK,SAAS,SAAS,MAAM;EACxC,OAAOL,wCAAAA,UAAU;GACf,QAAQ;GACRC,wCAAAA,aAAa,SAAS;GACtB;GACA,KAAK,MAAM,kBAAkB,EAAE;GAC/B,OAAOK,qBAAAA,eAAe,KAAK,GAAG,CAAC;GAC/B;GACA,GAAI,QAAQ,cAAc,CAAC,KAAK,MAAM,cAAc,EAAE,CAAC,IAAI,CAAC;EAC9D,CAAC;CACH;CAEA,MAAc,QAAQ,MAAmB,QAAgB,KAA2C;EAClG,IAAI;GACF,MAAM,WAAW,MAAM,cAAc,MAAM,QAAQ,IAAI,IAAI;GAC3D,MAAM,gBAAgB,MAAM,QAAQ,IAAI,OAAO;GAC/C,OAAOH,wCAAAA,iBAAiB,IAAI,IAAI,KAAK;IAAE,MAAM;IAAU,QAAQ;GAAK;EACtE,UAAU;GACR,IAAI,CAAE,MAAM,KAAK,eAAe,MAAM,CAAC,CAAC,YAAY,KAAK,GAAI,MAAM,YAAY,MAAM,MAAM;GAC3F,wCAAA,uBAAuB,GAAG;EAC5B;CACF;CAEA,eACE,QACA,MACA,QACA,YACQ;EACR,IAAI,SAAS;EACb,IAAI,SAAS;EACb,MAAM,2BAAW,IAAI,IAA4B;EACjD,MAAM,UAAU,YAA2B;GACzC,OAAO,QAAQ;IACb,MAAM,WAAW,MAAM,KAAK,IAAI;KAAC;KAAgB;KAAM;KAAM;IAAM,CAAC,CAAC,CAAC,OAAO,UAAmB;KAC9F,QAAQ,YAAY,qCAAqC,OAAO,KAAK,IAAI,aAAa,KAAK,GAAG;IAEhG,CAAC;IACD,MAAM,OAAO,UAAU,eAAe,IAAI,SAAS,SAAS;IAC5D,IAAI,SAAS,QAAQ;KACnB,SAAS;KACT,KAAK,MAAM,WAAW,UAAU,QAAQ,IAAI;IAC9C;IACA,MAAM,MAAA,GAAa;GACrB;EACF;EACA,QAAa;EACb,WACG,cAAc;GACb,SAAS;EACX,CAAC,CAAC,CACD,OAAO,UACN,QAAQ,YAAY,0CAA0C,OAAO,KAAK,IAAI,aAAa,KAAK,GAAG,CACrG;EACF,OAAO;GACL,GAAG;GACH,QAAQ,SAAS;IACf,KACG,IAAI;KAAC;KAAa;KAAM;KAAQ;KAAM;IAAI,CAAC,CAAC,CAC5C,OAAO,UAAmB,QAAQ,YAAY,aAAa,KAAK,CAAC,CAAC;GACvE;GACA,cAAc;GACd,SAAS,YAAY;IACnB,SAAS,IAAI,OAAO;IACpB,aAAa,SAAS,OAAO,OAAO;GACtC;GACA,SAAS,MAAM,SAAS;IACtB,KACG,IAAI;KAAC;KAAiB;KAAM;KAAQ;KAAM,OAAO,IAAI;KAAG;KAAM,OAAO,IAAI;IAAC,CAAC,CAAC,CAC5E,OAAO,UAAmB,QAAQ,YAAY,aAAa,KAAK,CAAC,CAAC;GACvE;EACF;CACF;AACF;AAEA,SAAS,WAAW,gBAAgC;CAClD,MAAM,QAAA,GAAOI,YAAAA,WAAAA,CAAW,QAAQ,CAAC,CAAC,OAAO,cAAc,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,GAAA,EAAqB;CAClG,OAAO,GAAG,gBAAgB;AAC5B;AAEA,SAAS,YACP,WACA,aACA,KACwB;CACxB,MAAM,SAA4B;EAChC,GAAG;EACH,GAAI,cAAc,CAAC,IAAI;GAAE,GAAG;GAAqB,GAAGC,qBAAAA,0BAA0B,GAAG;EAAE;EACnF,GAAGC,wCAAAA;EACH,eAAe;CACjB;CACA,IAAI,CAAC,aAAa,OAAO,OAAO;CAChC,OAAO,OAAO,YACZ,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,UAAqC,MAAM,OAAO,KAAA,CAAS,CAC5F;AACF;AAEA,eAAe,YAAY,MAAmB,QAAkC;CAK9E,QAAO,MAJc,KAAK,IAAI;EAAC;EAAgB;EAAM;CAAM,CAAC,CAAC,CAAC,OAAO,UAAmB;EACtF,QAAQ,YAAY,+BAA+B,OAAO,IAAI,aAAa,KAAK,GAAG;CAErF,CAAC,EAAA,EACc,eAAe;AAChC;AAEA,eAAe,QAAQ,MAAmB,QAAiC;CACzE,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,aAAa;CACvD,MAAM,MAAM,OAAO,OAAO;CAC1B,IAAI,CAAC,OAAO,UAAU,GAAG,KAAK,OAAO,GAAG,MAAM,IAAI,MAAM,sCAAsC,QAAQ;CACtG,OAAO;AACT;;;;;;;;AASA,eAAe,cAAc,MAAmB,QAAgB,UAA0C;CACxG,SAAS;EACP,IAAIC,QAAAA,QAAG,WAAW,QAAQ,GAAG,OAAO;EACpC,MAAM,QAAQ,MAAM,aAAa,MAAM,MAAM;EAC7C,IAAI,MAAM,QAAQ,OAAO,MAAM;EAC/B,MAAM,MAAA,GAAa;CACrB;AACF;AAEA,eAAe,gBAAgB,MAAmB,QAAgB,UAAiC;CACjG,MAAM,WAAW,KAAK,IAAI,IAAI;CAC9B,OAAO,KAAK,IAAI,IAAI,UAAU;EAC5B,IAAIA,QAAAA,QAAG,WAAW,QAAQ,GAAG;EAC7B,IAAI,MAAM,KAAK,eAAe,MAAM,GAAG;EACvC,MAAM,MAAA,EAAuB;CAC/B;AACF;AAEA,eAAe,gBAAgB,MAAmB,QAAgB,WAAqC;CACrG,MAAM,WAAW,KAAK,IAAI,IAAI;CAC9B,OAAO,KAAK,IAAI,IAAI,UAAU;EAC5B,KAAK,MAAM,aAAa,MAAM,MAAM,EAAA,CAAG,QAAQ,OAAO;EACtD,MAAM,MAAA,GAAa;CACrB;CACA,OAAO;AACT;;AAGA,eAAe,aAAa,MAAmB,QAAmE;CAChH,MAAM,UAAU,MAAM,KAAK,OAAO,QAAQ,iBAAiB;CAG3D,IAAI,YAAY,KAAA,GAAW,OAAO;EAAE,QAAQ;EAAM,MAAM;CAAK;CAC7D,MAAM,CAAC,MAAM,QAAQ,GAAG,QAAQ,QAAQ,KAAK,CAAC,CAAC,MAAM,GAAG;CACxD,IAAI,KAAK,KAAK,GAAG,MAAM,IAAI,OAAO;EAAE,QAAQ;EAAM,MAAM;CAAK;CAC7D,IAAI,SAAS,OAAO,SAAS,QAAQ;EACnC,MAAM,OAAO,OAAO,MAAM;EAC1B,OAAO;GAAE,QAAQ;GAAM,MAAM,OAAO,UAAU,IAAI,IAAI,OAAO;EAAK;CACpE;CACA,OAAO;EAAE,QAAQ;EAAO,MAAM;CAAK;AACrC;AAEA,SAAS,WAAW,KAAa,QAAiD;CAChF,IAAI;EACF,QAAQ,KAAK,KAAK,SAAS;EAC3B,OAAO;CACT,SAAS,OAAO;EACd,IAAK,MAAgC,SAAS,SAAS,OAAO;EAC9D,QAAQ,YAAY,gCAAgC,OAAO,IAAI,aAAa,KAAK,GAAG;EACpF,OAAO;CACT;AACF;AAEA,SAAS,SAAS,QAAgB,UAA0B;CAC1D,IAAI;CACJ,IAAI;EACF,MAAM,OAAOA,QAAAA,QAAG,SAAS,MAAM,CAAC,CAAC;EACjC,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ;EACrC,MAAM,SAAS,OAAO,MAAM,KAAK;EACjC,SAASA,QAAAA,QAAG,SAAS,QAAQ,GAAG;EAChC,QAAA,QAAG,SAAS,QAAQ,QAAQ,GAAG,OAAO,OAAO,KAAK;EAClD,OAAO,OAAO,SAAS,MAAM;CAC/B,SAAS,OAAO;EACd,IAAK,MAAgC,SAAS,UAC5C,QAAQ,YAAY,2BAA2B,OAAO,IAAI,aAAa,KAAK,GAAG;EAEjF,OAAO;CACT,UAAU;EACR,IAAI,WAAW,KAAA,GAAW,QAAA,QAAG,UAAU,MAAM;CAC/C;AACF;AAEA,SAAS,MAAM,IAA2B;CACxC,OAAO,IAAI,SAAS,YAAY;EAE9B,WADyB,SAAS,EAC9B,CAAC,CAAC,QAAQ;CAChB,CAAC;AACH;AAEA,SAAS,aAAa,OAAwB;CAC5C,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;;;;ACtaA,SAAS,QAAW,OAAyB;CAC3C,IAAI;CACJ,IAAI,QAAQ;CACZ,aAAa;EACX,IAAI,CAAC,OAAO;GACV,QAAQ,MAAM;GACd,QAAQ;EACV;EACA,OAAO;CACT;AACF;;;;;;;;;;;;AAaA,SAAgB,yBACd,WAKoB;CACpB,MAAM,WACJ,UAAU,aAAa,KAAA,IACnB,KAAA,IACA,OAAO,OAAO;EACZ,GAAG,UAAU;EACb,GAAI,UAAU,UAAU,gBACpB,EAAE,eAAe,OAAO,OAAO,CAAC,GAAG,UAAU,SAAS,aAAa,CAAC,EAAE,IACtE,CAAC;CACP,CAAC;CACP,MAAM,cAAc,EAAE,GAAG,UAAU,YAAY;CAC/C,MAAM,MAAM,UAAU,OAAO,QAAQ,IAAI;CACzC,MAAM,QAAQ,cAAc,UAAU,SAAS,IAAIC,cAAAA,YAAY,CAAC;CAChE,MAAM,UAAU,cAAc,UAAU,WAAW,IAAIC,gBAAAA,YAAY,CAAC;CACpE,MAAM,iBAAiB,cAAc,UAAU,kBAAkB,IAAIC,uBAAAA,mBAAmB,CAAC;CACzF,MAAM,aAAa,cAAc,UAAU,cAAc,IAAIC,mBAAAA,eAAe,CAAC;CAC7E,MAAM,QAAQ,cAAc,UAAU,SAAS,IAAIC,oBAAAA,YAAY,KAAK,WAAW,CAAC;CAChF,MAAM,WAAW,cAAc,UAAU,YAAY,IAAIC,iBAAAA,aAAa,MAAM,CAAC,CAAC;CAC9E,MAAM,kBAAkB,cAAc,UAAU,mBAAmBC,uBAAAA,6BAA6B,WAAW,CAAC;CAC5G,MAAM,iBAAiB,cACf,UAAU,kBAAkB,IAAIC,uBAAAA,eAAe,MAAM,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAW,CAChH;CACA,MAAM,QAAQ,cAAc,UAAU,SAAS,IAAIC,oBAAAA,YAAY,eAAe,CAAC,CAAC;CAChF,MAAM,UAAU,cAAc,UAAU,WAAW,IAAIC,gBAAAA,QAAQ,MAAM,CAAC,CAAC;CACvE,MAAM,YAAY,cAAc,UAAU,aAAa,IAAIC,kBAAAA,UAAU,CAAC;CACtE,MAAM,WAAW,cAEb,UAAU,YACV,IAAIC,iBAAAA,SAAS,QAAQ,GAAG,eAAe,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,QAAQ,CAC5G;CACA,MAAM,cAAc,cAEhB,UAAU,eACV,IAAI,gBACF,IAAIC,oBAAAA,YAAY,MAAM,GAAG,aAAa,QAAQ,GAC9C,IAAI,YAAY,MAAM,GAAG,KAAA,GAAW,aAAa,QAAQ,CAC3D,CACJ;CACA,MAAM,eAAe,cACb,UAAU,gBAAgB,IAAIC,qBAAAA,aAAa,KAAA,GAAW,KAAA,GAAW,aAAa,QAAQ,CAC9F;CACA,MAAM,UAAU,cACR,UAAU,WAAW,IAAIC,gBAAAA,QAAQ,WAAW,GAAG,QAAQ,GAAG,eAAe,GAAG,MAAM,GAAG,aAAa,QAAQ,CAClH;CACA,MAAM,iBAAiB,cAEnB,UAAU,kBACV,IAAIC,uBAAAA,eACF,SAAS,GACT,YAAY,GACZ,MAAM,GACN,eAAe,GACf,MAAM,GACN,aAAa,GACb,KACA,aACA,UAAU,oBAAA,GAAmBC,8BAAAA,sBAAAA,CAAsB,WAAW,CAChE,CACJ;CAEA,OAAO;EACL;EACA;EACA,IAAI,QAAQ;GACV,OAAO,MAAM;EACf;EACA,IAAI,UAAU;GACZ,OAAO,QAAQ;EACjB;EACA,IAAI,iBAAiB;GACnB,OAAO,eAAe;EACxB;EACA,IAAI,aAAa;GACf,OAAO,WAAW;EACpB;EACA,IAAI,QAAQ;GACV,OAAO,MAAM;EACf;EACA,IAAI,WAAW;GACb,OAAO,SAAS;EAClB;EACA,IAAI,kBAAkB;GACpB,OAAO,gBAAgB;EACzB;EACA,IAAI,iBAAiB;GACnB,OAAO,eAAe;EACxB;EACA,IAAI,QAAQ;GACV,OAAO,MAAM;EACf;EACA,IAAI,UAAU;GACZ,OAAO,QAAQ;EACjB;EACA,IAAI,YAAY;GACd,OAAO,UAAU;EACnB;EACA,IAAI,WAAW;GACb,OAAO,SAAS;EAClB;EACA,IAAI,cAAc;GAChB,OAAO,YAAY;EACrB;EACA,IAAI,eAAe;GACjB,OAAO,aAAa;EACtB;EACA,IAAI,UAAU;GACZ,OAAO,QAAQ;EACjB;EACA,IAAI,iBAAiB;GACnB,OAAO,eAAe;EACxB;CACF;AACF"}
@@ -1,3 +1,3 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_runnerDependencies = require("./runnerDependencies-KMZigIxB.cjs");
2
+ const require_runnerDependencies = require("./runnerDependencies-DSun3xO-.cjs");
3
3
  exports.createRunnerDependencies = require_runnerDependencies.createRunnerDependencies;
@@ -1,2 +1,2 @@
1
- import { t as createRunnerDependencies } from "./index-Dhi8asLH.mjs";
1
+ import { t as createRunnerDependencies } from "./index--xF7DvsE.mjs";
2
2
  export { createRunnerDependencies };
@@ -1,2 +1 @@
1
- import { t as createRunnerDependencies } from "./runnerDependencies-DruByBGS.mjs";
2
- export { createRunnerDependencies };
1
+ export { t as createRunnerDependencies } from "./runnerDependencies-7h_cxOva.mjs";
@@ -1,4 +1,4 @@
1
- import { n as IRunnerRegistry } from "./runnerRegistry-CtJiD02R.mjs";
1
+ import { n as IRunnerRegistry } from "./runnerRegistry-V-Ocaf4N.mjs";
2
2
  import { t as IRunnerNamer } from "./type-vWQNTahw.mjs";
3
3
  //#region src/services/runnerNamer/index.d.ts
4
4
  export declare class RunnerNamer implements IRunnerNamer {
@@ -1,2 +1 @@
1
- import { t as RunnerNamer } from "./runnerNamer-B8FH7n2v.mjs";
2
- export { RunnerNamer };
1
+ export { t as RunnerNamer } from "./runnerNamer-B8FH7n2v.mjs";