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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +257 -0
  3. package/dist/ansiScrub-CsqTSaVT.mjs +71 -0
  4. package/dist/ansiScrub-CsqTSaVT.mjs.map +1 -0
  5. package/dist/ansiScrub-D5gpHDch.cjs +100 -0
  6. package/dist/ansiScrub-D5gpHDch.cjs.map +1 -0
  7. package/dist/ansiScrub.cjs +7 -0
  8. package/dist/ansiScrub.d.mts +26 -0
  9. package/dist/ansiScrub.d.mts.map +1 -0
  10. package/dist/ansiScrub.mjs +2 -0
  11. package/dist/apiContracts.cjs +162 -0
  12. package/dist/apiContracts.cjs.map +1 -0
  13. package/dist/apiContracts.d.mts +53 -0
  14. package/dist/apiContracts.d.mts.map +1 -0
  15. package/dist/apiContracts.mjs +157 -0
  16. package/dist/apiContracts.mjs.map +1 -0
  17. package/dist/bashResult-DNgtahGR.cjs +629 -0
  18. package/dist/bashResult-DNgtahGR.cjs.map +1 -0
  19. package/dist/bashResult-DcrRaBLv.d.mts +49 -0
  20. package/dist/bashResult-DcrRaBLv.d.mts.map +1 -0
  21. package/dist/bashResult-bIVSzoj-.mjs +546 -0
  22. package/dist/bashResult-bIVSzoj-.mjs.map +1 -0
  23. package/dist/bashRunService-CJ02XaAq.mjs +440 -0
  24. package/dist/bashRunService-CJ02XaAq.mjs.map +1 -0
  25. package/dist/bashRunService-Ci0cGdYO.d.mts +71 -0
  26. package/dist/bashRunService-Ci0cGdYO.d.mts.map +1 -0
  27. package/dist/bashRunService-DyqxOSlx.cjs +445 -0
  28. package/dist/bashRunService-DyqxOSlx.cjs.map +1 -0
  29. package/dist/bashRunService.cjs +3 -0
  30. package/dist/bashRunService.d.mts +36 -0
  31. package/dist/bashRunService.d.mts.map +1 -0
  32. package/dist/bashRunService.mjs +2 -0
  33. package/dist/bashSchema.cjs +5 -0
  34. package/dist/bashSchema.d.mts +7 -0
  35. package/dist/bashSchema.d.mts.map +1 -0
  36. package/dist/bashSchema.mjs +2 -0
  37. package/dist/bashTool-B1EwZLo_.d.mts +20 -0
  38. package/dist/bashTool-B1EwZLo_.d.mts.map +1 -0
  39. package/dist/bashTool-C-k7fmyh.mjs +24 -0
  40. package/dist/bashTool-C-k7fmyh.mjs.map +1 -0
  41. package/dist/bashTool-CdgtqVFD.cjs +41 -0
  42. package/dist/bashTool-CdgtqVFD.cjs.map +1 -0
  43. package/dist/bashTool.cjs +13 -0
  44. package/dist/bashTool.cjs.map +1 -0
  45. package/dist/bashTool.d.mts +8 -0
  46. package/dist/bashTool.d.mts.map +1 -0
  47. package/dist/bashTool.mjs +11 -0
  48. package/dist/bashTool.mjs.map +1 -0
  49. package/dist/bin/cli.cjs +78 -0
  50. package/dist/bin/cli.cjs.map +1 -0
  51. package/dist/bin/cli.d.mts +4 -0
  52. package/dist/bin/cli.d.mts.map +1 -0
  53. package/dist/bin/cli.mjs +77 -0
  54. package/dist/bin/cli.mjs.map +1 -0
  55. package/dist/bin/logSink.cjs +102 -0
  56. package/dist/bin/logSink.cjs.map +1 -0
  57. package/dist/bin/logSink.d.mts +4 -0
  58. package/dist/bin/logSink.d.mts.map +1 -0
  59. package/dist/bin/logSink.mjs +99 -0
  60. package/dist/bin/logSink.mjs.map +1 -0
  61. package/dist/bin/runnerHost.cjs +131 -0
  62. package/dist/bin/runnerHost.cjs.map +1 -0
  63. package/dist/bin/runnerHost.d.mts +4 -0
  64. package/dist/bin/runnerHost.d.mts.map +1 -0
  65. package/dist/bin/runnerHost.mjs +127 -0
  66. package/dist/bin/runnerHost.mjs.map +1 -0
  67. package/dist/cliApp-Dj9nwaOv.cjs +244 -0
  68. package/dist/cliApp-Dj9nwaOv.cjs.map +1 -0
  69. package/dist/cliApp-v8Z3rMCi.mjs +237 -0
  70. package/dist/cliApp-v8Z3rMCi.mjs.map +1 -0
  71. package/dist/cliApp.cjs +3 -0
  72. package/dist/cliApp.d.mts +18 -0
  73. package/dist/cliApp.d.mts.map +1 -0
  74. package/dist/cliApp.mjs +2 -0
  75. package/dist/clock-Cv2pddgo.mjs +16 -0
  76. package/dist/clock-Cv2pddgo.mjs.map +1 -0
  77. package/dist/clock-euJkweLq.d.mts +11 -0
  78. package/dist/clock-euJkweLq.d.mts.map +1 -0
  79. package/dist/clock-jqnLWziT.cjs +21 -0
  80. package/dist/clock-jqnLWziT.cjs.map +1 -0
  81. package/dist/clock.cjs +3 -0
  82. package/dist/clock.d.mts +10 -0
  83. package/dist/clock.d.mts.map +1 -0
  84. package/dist/clock.mjs +2 -0
  85. package/dist/compaction-4QSUsBxq.cjs +40 -0
  86. package/dist/compaction-4QSUsBxq.cjs.map +1 -0
  87. package/dist/compaction-DCw80VZj.mjs +29 -0
  88. package/dist/compaction-DCw80VZj.mjs.map +1 -0
  89. package/dist/compaction.cjs +4 -0
  90. package/dist/compaction.d.mts +10 -0
  91. package/dist/compaction.d.mts.map +1 -0
  92. package/dist/compaction.mjs +2 -0
  93. package/dist/config.cjs +41 -0
  94. package/dist/config.d.mts +2 -0
  95. package/dist/config.mjs +2 -0
  96. package/dist/extensions/mcp-ui.mjs +23 -0
  97. package/dist/extensions/mcp-ui.mjs.map +1 -0
  98. package/dist/extensions/mcp.cjs +142 -0
  99. package/dist/extensions/mcp.cjs.map +1 -0
  100. package/dist/extensions/mcp.d.mts +5 -0
  101. package/dist/extensions/mcp.d.mts.map +1 -0
  102. package/dist/extensions/mcp.mjs +114 -0
  103. package/dist/extensions/mcp.mjs.map +1 -0
  104. package/dist/extensions/server.cjs +1156 -0
  105. package/dist/extensions/server.cjs.map +1 -0
  106. package/dist/extensions/server.d.mts +5 -0
  107. package/dist/extensions/server.d.mts.map +1 -0
  108. package/dist/extensions/server.mjs +1146 -0
  109. package/dist/extensions/server.mjs.map +1 -0
  110. package/dist/extensions/web.mjs +1785 -0
  111. package/dist/extensions/web.mjs.map +1 -0
  112. package/dist/headless-BGYfIlNk.mjs +169 -0
  113. package/dist/headless-BGYfIlNk.mjs.map +1 -0
  114. package/dist/headless-CHUsBGhg.cjs +180 -0
  115. package/dist/headless-CHUsBGhg.cjs.map +1 -0
  116. package/dist/index-BZL7keVW.d.mts +31 -0
  117. package/dist/index-BZL7keVW.d.mts.map +1 -0
  118. package/dist/index-BwB_jTI9.d.mts +12 -0
  119. package/dist/index-BwB_jTI9.d.mts.map +1 -0
  120. package/dist/index-D9-IXax4.d.mts +43 -0
  121. package/dist/index-D9-IXax4.d.mts.map +1 -0
  122. package/dist/index-DBz0DxnL.d.mts +39 -0
  123. package/dist/index-DBz0DxnL.d.mts.map +1 -0
  124. package/dist/index-DM7yJpMs.d.mts +25 -0
  125. package/dist/index-DM7yJpMs.d.mts.map +1 -0
  126. package/dist/index-Dhi8asLH.d.mts +22 -0
  127. package/dist/index-Dhi8asLH.d.mts.map +1 -0
  128. package/dist/index.cjs +19 -0
  129. package/dist/index.d.mts +7 -0
  130. package/dist/index.mjs +6 -0
  131. package/dist/launcher-BDm6-DiQ.mjs +150 -0
  132. package/dist/launcher-BDm6-DiQ.mjs.map +1 -0
  133. package/dist/launcher-BG5t9nvG.d.mts +39 -0
  134. package/dist/launcher-BG5t9nvG.d.mts.map +1 -0
  135. package/dist/launcher-SlyE8R3b.cjs +157 -0
  136. package/dist/launcher-SlyE8R3b.cjs.map +1 -0
  137. package/dist/launcher.cjs +3 -0
  138. package/dist/launcher.d.mts +33 -0
  139. package/dist/launcher.d.mts.map +1 -0
  140. package/dist/launcher.mjs +2 -0
  141. package/dist/lifeline-BZaQA0rm.mjs +88 -0
  142. package/dist/lifeline-BZaQA0rm.mjs.map +1 -0
  143. package/dist/lifeline-BuV_erib.cjs +98 -0
  144. package/dist/lifeline-BuV_erib.cjs.map +1 -0
  145. package/dist/lifeline-eJdZV0nN.d.mts +19 -0
  146. package/dist/lifeline-eJdZV0nN.d.mts.map +1 -0
  147. package/dist/lifeline.cjs +6 -0
  148. package/dist/lifeline.d.mts +21 -0
  149. package/dist/lifeline.d.mts.map +1 -0
  150. package/dist/lifeline.mjs +3 -0
  151. package/dist/logFile-C7oQ_v-g.d.mts +16 -0
  152. package/dist/logFile-C7oQ_v-g.d.mts.map +1 -0
  153. package/dist/logFile-CNvepZh0.cjs +67 -0
  154. package/dist/logFile-CNvepZh0.cjs.map +1 -0
  155. package/dist/logFile-KKPbkC-a.mjs +60 -0
  156. package/dist/logFile-KKPbkC-a.mjs.map +1 -0
  157. package/dist/logFile.cjs +3 -0
  158. package/dist/logFile.d.mts +11 -0
  159. package/dist/logFile.d.mts.map +1 -0
  160. package/dist/logFile.mjs +2 -0
  161. package/dist/logReader-B6J7L7Ua.cjs +282 -0
  162. package/dist/logReader-B6J7L7Ua.cjs.map +1 -0
  163. package/dist/logReader-MdW9ffvV.d.mts +43 -0
  164. package/dist/logReader-MdW9ffvV.d.mts.map +1 -0
  165. package/dist/logReader-UfbDbwQl.mjs +257 -0
  166. package/dist/logReader-UfbDbwQl.mjs.map +1 -0
  167. package/dist/logReader.cjs +4 -0
  168. package/dist/logReader.d.mts +3 -0
  169. package/dist/logReader.mjs +2 -0
  170. package/dist/processControl-BAOa3oo_.d.mts +14 -0
  171. package/dist/processControl-BAOa3oo_.d.mts.map +1 -0
  172. package/dist/processControl-DApTpV16.mjs +26 -0
  173. package/dist/processControl-DApTpV16.mjs.map +1 -0
  174. package/dist/processControl-DNJ1WZ9N.cjs +31 -0
  175. package/dist/processControl-DNJ1WZ9N.cjs.map +1 -0
  176. package/dist/processControl.cjs +3 -0
  177. package/dist/processControl.d.mts +10 -0
  178. package/dist/processControl.d.mts.map +1 -0
  179. package/dist/processControl.mjs +2 -0
  180. package/dist/ptyHost-DWWtRrGn.d.mts +38 -0
  181. package/dist/ptyHost-DWWtRrGn.d.mts.map +1 -0
  182. package/dist/ptyHost-DlQtTB8F.mjs +150 -0
  183. package/dist/ptyHost-DlQtTB8F.mjs.map +1 -0
  184. package/dist/ptyHost-MI2Z6WTG.cjs +157 -0
  185. package/dist/ptyHost-MI2Z6WTG.cjs.map +1 -0
  186. package/dist/ptyHost.cjs +3 -0
  187. package/dist/ptyHost.d.mts +26 -0
  188. package/dist/ptyHost.d.mts.map +1 -0
  189. package/dist/ptyHost.mjs +2 -0
  190. package/dist/ptySpawner-B6GsueZd.d.mts +28 -0
  191. package/dist/ptySpawner-B6GsueZd.d.mts.map +1 -0
  192. package/dist/ptySpawner-DEi1KOnd.mjs +17 -0
  193. package/dist/ptySpawner-DEi1KOnd.mjs.map +1 -0
  194. package/dist/ptySpawner-ijw0g5_T.cjs +22 -0
  195. package/dist/ptySpawner-ijw0g5_T.cjs.map +1 -0
  196. package/dist/ptySpawner.cjs +3 -0
  197. package/dist/ptySpawner.d.mts +14 -0
  198. package/dist/ptySpawner.d.mts.map +1 -0
  199. package/dist/ptySpawner.mjs +2 -0
  200. package/dist/reconcile-BugwYFbV.cjs +133 -0
  201. package/dist/reconcile-BugwYFbV.cjs.map +1 -0
  202. package/dist/reconcile-DMeNSxwn.mjs +114 -0
  203. package/dist/reconcile-DMeNSxwn.mjs.map +1 -0
  204. package/dist/reconcile.cjs +5 -0
  205. package/dist/reconcile.d.mts +36 -0
  206. package/dist/reconcile.d.mts.map +1 -0
  207. package/dist/reconcile.mjs +2 -0
  208. package/dist/responseEnvelope.cjs +19 -0
  209. package/dist/responseEnvelope.d.mts +50 -0
  210. package/dist/responseEnvelope.d.mts.map +1 -0
  211. package/dist/responseEnvelope.mjs +3 -0
  212. package/dist/rmuxBackend-CaEWooWn.d.mts +36 -0
  213. package/dist/rmuxBackend-CaEWooWn.d.mts.map +1 -0
  214. package/dist/rmuxBackend-DfyQwJrc.mjs +509 -0
  215. package/dist/rmuxBackend-DfyQwJrc.mjs.map +1 -0
  216. package/dist/rmuxBackend-DlxgqRZ1.cjs +523 -0
  217. package/dist/rmuxBackend-DlxgqRZ1.cjs.map +1 -0
  218. package/dist/rmuxBackend.cjs +4 -0
  219. package/dist/rmuxBackend.d.mts +3 -0
  220. package/dist/rmuxBackend.mjs +2 -0
  221. package/dist/rolldown-runtime-VH7oDXx4.cjs +28 -0
  222. package/dist/rtkProcessor-B4_urXQr.mjs +10 -0
  223. package/dist/rtkProcessor-B4_urXQr.mjs.map +1 -0
  224. package/dist/rtkProcessor-B9KPdyzr.mjs +309 -0
  225. package/dist/rtkProcessor-B9KPdyzr.mjs.map +1 -0
  226. package/dist/rtkProcessor-Bc4L4o_8.cjs +335 -0
  227. package/dist/rtkProcessor-Bc4L4o_8.cjs.map +1 -0
  228. package/dist/rtkProcessor-CVZvNhkJ.d.mts +35 -0
  229. package/dist/rtkProcessor-CVZvNhkJ.d.mts.map +1 -0
  230. package/dist/rtkProcessor-CsrCPyTQ.cjs +33 -0
  231. package/dist/rtkProcessor-CsrCPyTQ.cjs.map +1 -0
  232. package/dist/rtkProcessor.cjs +11 -0
  233. package/dist/rtkProcessor.d.mts +7 -0
  234. package/dist/rtkProcessor.d.mts.map +1 -0
  235. package/dist/rtkProcessor.mjs +3 -0
  236. package/dist/runnerConfig-BQBlVAXn.mjs +134 -0
  237. package/dist/runnerConfig-BQBlVAXn.mjs.map +1 -0
  238. package/dist/runnerConfig-BjtulXBI.d.mts +57 -0
  239. package/dist/runnerConfig-BjtulXBI.d.mts.map +1 -0
  240. package/dist/runnerConfig-D2tGq5ZM.cjs +367 -0
  241. package/dist/runnerConfig-D2tGq5ZM.cjs.map +1 -0
  242. package/dist/runnerDependencies-DruByBGS.mjs +647 -0
  243. package/dist/runnerDependencies-DruByBGS.mjs.map +1 -0
  244. package/dist/runnerDependencies-KMZigIxB.cjs +667 -0
  245. package/dist/runnerDependencies-KMZigIxB.cjs.map +1 -0
  246. package/dist/runnerDependencies.cjs +3 -0
  247. package/dist/runnerDependencies.d.mts +2 -0
  248. package/dist/runnerDependencies.mjs +2 -0
  249. package/dist/runnerNamer-B8FH7n2v.mjs +44 -0
  250. package/dist/runnerNamer-B8FH7n2v.mjs.map +1 -0
  251. package/dist/runnerNamer-we1XVYfM.cjs +49 -0
  252. package/dist/runnerNamer-we1XVYfM.cjs.map +1 -0
  253. package/dist/runnerNamer.cjs +3 -0
  254. package/dist/runnerNamer.d.mts +11 -0
  255. package/dist/runnerNamer.d.mts.map +1 -0
  256. package/dist/runnerNamer.mjs +2 -0
  257. package/dist/runnerPaths-BTEuzxw0.cjs +471 -0
  258. package/dist/runnerPaths-BTEuzxw0.cjs.map +1 -0
  259. package/dist/runnerPaths-B_dAAeco.mjs +451 -0
  260. package/dist/runnerPaths-B_dAAeco.mjs.map +1 -0
  261. package/dist/runnerPaths.cjs +3 -0
  262. package/dist/runnerPaths.d.mts +50 -0
  263. package/dist/runnerPaths.d.mts.map +1 -0
  264. package/dist/runnerPaths.mjs +2 -0
  265. package/dist/runnerRegistry-BmkZTJHi.cjs +371 -0
  266. package/dist/runnerRegistry-BmkZTJHi.cjs.map +1 -0
  267. package/dist/runnerRegistry-CeOHEjBv.mjs +339 -0
  268. package/dist/runnerRegistry-CeOHEjBv.mjs.map +1 -0
  269. package/dist/runnerRegistry-CtJiD02R.d.mts +88 -0
  270. package/dist/runnerRegistry-CtJiD02R.d.mts.map +1 -0
  271. package/dist/runnerRegistry.cjs +4 -0
  272. package/dist/runnerRegistry.d.mts +3 -0
  273. package/dist/runnerRegistry.mjs +2 -0
  274. package/dist/runnerSettings-DiV1lvzx.d.mts +34 -0
  275. package/dist/runnerSettings-DiV1lvzx.d.mts.map +1 -0
  276. package/dist/services/lifeline/client.cjs +52 -0
  277. package/dist/services/lifeline/client.cjs.map +1 -0
  278. package/dist/services/lifeline/client.d.mts +22 -0
  279. package/dist/services/lifeline/client.d.mts.map +1 -0
  280. package/dist/services/lifeline/client.mjs +48 -0
  281. package/dist/services/lifeline/client.mjs.map +1 -0
  282. package/dist/services/runnerSupervisor/index.cjs +207 -0
  283. package/dist/services/runnerSupervisor/index.cjs.map +1 -0
  284. package/dist/services/runnerSupervisor/index.d.mts +71 -0
  285. package/dist/services/runnerSupervisor/index.d.mts.map +1 -0
  286. package/dist/services/runnerSupervisor/index.mjs +195 -0
  287. package/dist/services/runnerSupervisor/index.mjs.map +1 -0
  288. package/dist/session-BC43uEyG.cjs +29 -0
  289. package/dist/session-BC43uEyG.cjs.map +1 -0
  290. package/dist/session-Chsb_Nh2.mjs +18 -0
  291. package/dist/session-Chsb_Nh2.mjs.map +1 -0
  292. package/dist/session-DE2Acesp.mjs +6 -0
  293. package/dist/session-DE2Acesp.mjs.map +1 -0
  294. package/dist/session-SfIPtdZO.cjs +11 -0
  295. package/dist/session-SfIPtdZO.cjs.map +1 -0
  296. package/dist/session.cjs +6 -0
  297. package/dist/session.d.mts +11 -0
  298. package/dist/session.d.mts.map +1 -0
  299. package/dist/session.mjs +3 -0
  300. package/dist/spawner-BxFsINXP.cjs +68 -0
  301. package/dist/spawner-BxFsINXP.cjs.map +1 -0
  302. package/dist/spawner-CdrN_HNk.d.mts +35 -0
  303. package/dist/spawner-CdrN_HNk.d.mts.map +1 -0
  304. package/dist/spawner-LoVsn55-.mjs +63 -0
  305. package/dist/spawner-LoVsn55-.mjs.map +1 -0
  306. package/dist/spawner.cjs +3 -0
  307. package/dist/spawner.d.mts +9 -0
  308. package/dist/spawner.d.mts.map +1 -0
  309. package/dist/spawner.mjs +2 -0
  310. package/dist/type-BXM03qSw.d.mts +44 -0
  311. package/dist/type-BXM03qSw.d.mts.map +1 -0
  312. package/dist/type-C31e1gla.d.mts +43 -0
  313. package/dist/type-C31e1gla.d.mts.map +1 -0
  314. package/dist/type-vWQNTahw.d.mts +12 -0
  315. package/dist/type-vWQNTahw.d.mts.map +1 -0
  316. package/dist/types.cjs +0 -0
  317. package/dist/types.d.mts +3 -0
  318. package/dist/types.mjs +1 -0
  319. package/llms.txt +9 -0
  320. package/package.json +303 -0
  321. package/skills/doom-runner/SKILL.md +78 -0
  322. package/src/prompts/po-use-runner/SKILL.md +47 -0
@@ -0,0 +1,335 @@
1
+ const require_rolldown_runtime = require("./rolldown-runtime-VH7oDXx4.cjs");
2
+ const require_rtkProcessor = require("./rtkProcessor-CsrCPyTQ.cjs");
3
+ const require_runnerConfig = require("./runnerConfig-D2tGq5ZM.cjs");
4
+ let node_fs = require("node:fs");
5
+ node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
6
+ let node_path = require("node:path");
7
+ node_path = require_rolldown_runtime.__toESM(node_path, 1);
8
+ let node_module = require("node:module");
9
+ let node_child_process = require("node:child_process");
10
+ //#region src/constants/rtkProcessor.ts
11
+ const RTK_STDIN_MAX_BYTES = 10485760;
12
+ const DEFAULT_RTK_TIMEOUT_MS = 1e4;
13
+ const RTK_KILL_WAIT_MS = 1e3;
14
+ const SIMPLE_TOKEN_PATTERN = /^[A-Za-z0-9_./:@%+=,-]+$/u;
15
+ const SHELL_CONTROL_PATTERN = /[\r\n;&|<>`$\\'"(){}*?!]/u;
16
+ const RTK_BINARY_ENV = "PO_RTK_BINARY";
17
+ //#endregion
18
+ //#region src/services/rtkProcessor/index.ts
19
+ const GIT_DIFF_INCOMPATIBLE_OPTIONS = [
20
+ "-s",
21
+ "-z",
22
+ "--raw",
23
+ "--numstat",
24
+ "--shortstat",
25
+ "--stat",
26
+ "--dirstat",
27
+ "--dirstat-by-file",
28
+ "--summary",
29
+ "--compact-summary",
30
+ "--name-only",
31
+ "--name-status",
32
+ "--check",
33
+ "--binary",
34
+ "--word-diff",
35
+ "--word-diff-regex",
36
+ "--color",
37
+ "--color-words",
38
+ "--color-moved",
39
+ "--color-moved-ws",
40
+ "--line-prefix",
41
+ "--no-patch",
42
+ "--patch-with-raw",
43
+ "--patch-with-stat",
44
+ "--ext-diff",
45
+ "--textconv",
46
+ "--quiet",
47
+ "--submodule"
48
+ ];
49
+ const STRUCTURED_SEARCH_INCOMPATIBLE_OPTIONS = [
50
+ "--json",
51
+ "--null",
52
+ "--null-data",
53
+ "--color",
54
+ "--colour",
55
+ "--after-context",
56
+ "--before-context",
57
+ "--context",
58
+ "--no-filename",
59
+ "--no-line-number",
60
+ "--heading"
61
+ ];
62
+ const PACKAGE_BY_PLATFORM = {
63
+ "darwin-arm64": "@agimon-ai/po-runner-rtk-darwin-arm64",
64
+ "darwin-x64": "@agimon-ai/po-runner-rtk-darwin-x64",
65
+ "linux-arm64": "@agimon-ai/po-runner-rtk-linux-arm64",
66
+ "linux-x64": "@agimon-ai/po-runner-rtk-linux-x64"
67
+ };
68
+ var RtkProcessor = class {
69
+ resolveBinary;
70
+ timeoutMs;
71
+ env;
72
+ settings;
73
+ /**
74
+ * Latched once a binary proves unrunnable on this host.
75
+ *
76
+ * A glibc build installed on a musl host satisfies os and cpu, so it
77
+ * resolves and then fails to exec. Without this the same doomed spawn is
78
+ * paid on every command, and each one is reported as a processing failure
79
+ * rather than the absence it actually is.
80
+ */
81
+ unrunnable = false;
82
+ constructor(resolveBinary = bundledBinary, timeoutMs = DEFAULT_RTK_TIMEOUT_MS, env = process.env, settings) {
83
+ this.resolveBinary = resolveBinary;
84
+ this.timeoutMs = timeoutMs;
85
+ this.env = env;
86
+ this.settings = settings;
87
+ }
88
+ async process(request) {
89
+ const filter = classifyRtkFilter(request.command);
90
+ if (!filter) return { kind: "skipped" };
91
+ let inputBytes;
92
+ try {
93
+ inputBytes = node_fs.default.statSync(request.logPath).size;
94
+ } catch {
95
+ return {
96
+ kind: "fallback",
97
+ warning: require_rtkProcessor.RTK_FAILED_WARNING
98
+ };
99
+ }
100
+ if (inputBytes > 10485760) return {
101
+ kind: "fallback",
102
+ warning: require_rtkProcessor.RTK_OVERSIZED_WARNING
103
+ };
104
+ if (this.unrunnable) return {
105
+ kind: "fallback",
106
+ warning: require_rtkProcessor.RTK_UNAVAILABLE_WARNING
107
+ };
108
+ let binary;
109
+ try {
110
+ binary = this.resolveBinary === bundledBinary ? bundledBinary(this.env) : this.resolveBinary();
111
+ if (!binary) return {
112
+ kind: "fallback",
113
+ warning: require_rtkProcessor.RTK_UNAVAILABLE_WARNING
114
+ };
115
+ if ((node_fs.default.statSync(binary).mode & 73) === 0) node_fs.default.chmodSync(binary, 493);
116
+ } catch {
117
+ return {
118
+ kind: "fallback",
119
+ warning: require_rtkProcessor.RTK_UNAVAILABLE_WARNING
120
+ };
121
+ }
122
+ return this.pipe(binary, filter, request.logPath, inputBytes);
123
+ }
124
+ pipe(binary, filter, logPath, inputBytes) {
125
+ return new Promise((resolve) => {
126
+ let child;
127
+ try {
128
+ child = (0, node_child_process.spawn)(binary, [
129
+ "pipe",
130
+ "-f",
131
+ filter
132
+ ], { stdio: "pipe" });
133
+ } catch {
134
+ this.unrunnable = true;
135
+ resolve({
136
+ kind: "fallback",
137
+ warning: require_rtkProcessor.RTK_UNAVAILABLE_WARNING
138
+ });
139
+ return;
140
+ }
141
+ const input = node_fs.default.createReadStream(logPath);
142
+ const outputLimit = require_runnerConfig.getResultMaxBytes(this.env, this.settings) * 2;
143
+ let head = Buffer.alloc(0);
144
+ let output = Buffer.alloc(0);
145
+ let outputBytes = 0;
146
+ let newlineCount = 0;
147
+ let lastByte;
148
+ let settled = false;
149
+ let fallbackWarning;
150
+ let killWaitTimer;
151
+ const finish = (result) => {
152
+ if (settled) return;
153
+ settled = true;
154
+ clearTimeout(timer);
155
+ if (killWaitTimer) clearTimeout(killWaitTimer);
156
+ input.destroy();
157
+ resolve(result);
158
+ };
159
+ const stop = (warning) => {
160
+ if (settled) return;
161
+ fallbackWarning = warning;
162
+ let killed = false;
163
+ try {
164
+ killed = child.kill("SIGKILL");
165
+ } catch {
166
+ finish({
167
+ kind: "fallback",
168
+ warning
169
+ });
170
+ return;
171
+ }
172
+ if (!killed) {
173
+ finish({
174
+ kind: "fallback",
175
+ warning
176
+ });
177
+ return;
178
+ }
179
+ killWaitTimer ??= setTimeout(() => finish({
180
+ kind: "fallback",
181
+ warning
182
+ }), RTK_KILL_WAIT_MS);
183
+ };
184
+ const timer = setTimeout(() => stop(require_rtkProcessor.RTK_TIMEOUT_WARNING), this.timeoutMs);
185
+ child.stdout.on("data", (chunk) => {
186
+ outputBytes += chunk.byteLength;
187
+ for (const byte of chunk) if (byte === 10) newlineCount += 1;
188
+ lastByte = chunk.at(-1);
189
+ if (head.byteLength < outputLimit) head = Buffer.concat([head, chunk.subarray(0, outputLimit - head.byteLength)]);
190
+ output = appendTail(output, chunk, outputLimit);
191
+ });
192
+ child.stderr.resume();
193
+ child.once("error", (error) => {
194
+ if (error.code === "ENOENT" || error.code === "EACCES" || error.code === "ENOEXEC") {
195
+ this.unrunnable = true;
196
+ stop(require_rtkProcessor.RTK_UNAVAILABLE_WARNING);
197
+ return;
198
+ }
199
+ stop(require_rtkProcessor.RTK_FAILED_WARNING);
200
+ });
201
+ child.stdin.once("error", () => stop(require_rtkProcessor.RTK_FAILED_WARNING));
202
+ input.once("error", () => stop(require_rtkProcessor.RTK_FAILED_WARNING));
203
+ child.once("close", (code) => {
204
+ if (fallbackWarning) {
205
+ finish({
206
+ kind: "fallback",
207
+ warning: fallbackWarning
208
+ });
209
+ return;
210
+ }
211
+ const processedOutput = decodeUtf8Tail(output);
212
+ if (code !== 0 || inputBytes > 0 && processedOutput.trim().length === 0) {
213
+ finish({
214
+ kind: "fallback",
215
+ warning: require_rtkProcessor.RTK_FAILED_WARNING
216
+ });
217
+ return;
218
+ }
219
+ const lines = newlineCount + (outputBytes > 0 && lastByte !== 10 ? 1 : 0);
220
+ finish({
221
+ kind: "processed",
222
+ result: {
223
+ filter,
224
+ head: outputBytes > output.byteLength ? head.toString("utf8") : "",
225
+ output: processedOutput,
226
+ bytes: outputBytes,
227
+ lines
228
+ }
229
+ });
230
+ });
231
+ input.pipe(child.stdin);
232
+ });
233
+ }
234
+ };
235
+ /**
236
+ * Classifies only whitespace-delimited single commands. Shell syntax, expansion,
237
+ * quoting, and globbing are rejected instead of being partially interpreted.
238
+ */
239
+ function classifyRtkFilter(command) {
240
+ if (SHELL_CONTROL_PATTERN.test(command)) return void 0;
241
+ const trimmed = command.trim();
242
+ if (!trimmed) return void 0;
243
+ const tokens = trimmed.split(/[ \t]+/u);
244
+ if (tokens.some((token) => !SIMPLE_TOKEN_PATTERN.test(token))) return void 0;
245
+ if (tokens[0] === "cargo" && tokens[1] === "test") {
246
+ if (tokens.includes("--") || tokens.some((token) => token.startsWith("--message-format") || token === "--json")) return;
247
+ return "cargo-test";
248
+ }
249
+ if (tokens[0] === "pytest") {
250
+ if (tokens.some((token) => token.startsWith("--json-report"))) return void 0;
251
+ return "pytest";
252
+ }
253
+ if (tokens[0] === "git" && tokens[1] === "diff") {
254
+ if (tokens.some((token) => GIT_DIFF_INCOMPATIBLE_OPTIONS.some((option) => token === option || token.startsWith(`${option}=`)))) return;
255
+ return "git-diff";
256
+ }
257
+ if (tokens[0] === "grep") {
258
+ if (tokens.length < 4 || incompatibleStructuredSearch(tokens)) return void 0;
259
+ return hasShortOrLongOption(tokens, "n", "--line-number") && hasShortOrLongOption(tokens, "H", "--with-filename") ? "grep" : void 0;
260
+ }
261
+ if (tokens[0] === "rg") {
262
+ if (tokens.length < 4 || incompatibleStructuredSearch(tokens) || !tokens.includes("--no-heading")) return void 0;
263
+ return hasShortOrLongOption(tokens, "n", "--line-number") && hasShortOrLongOption(tokens, "H", "--with-filename") ? "grep" : void 0;
264
+ }
265
+ if (tokens[0] === "go" && tokens[1] === "test") {
266
+ let jsonOutput = false;
267
+ for (const token of tokens.slice(2)) {
268
+ if (token === "-json" || token === "-json=true") jsonOutput = true;
269
+ if (token === "-json=false") jsonOutput = false;
270
+ }
271
+ return jsonOutput ? "go-test" : void 0;
272
+ }
273
+ if (tokens[0] === "ruff" && tokens[1] === "check") return tokens.some((token, index) => token === "--output-format=json" || token === "--output-format" && tokens[index + 1] === "json") ? "ruff-check" : void 0;
274
+ }
275
+ function rtkPackageForTarget(platform, architecture) {
276
+ const target = `${platform}-${architecture}`;
277
+ const packageName = PACKAGE_BY_PLATFORM[target];
278
+ if (!packageName) process.emitWarning(`Bundled RTK binary is unavailable for unsupported target ${target}`);
279
+ return packageName;
280
+ }
281
+ function bundledBinary(env = process.env) {
282
+ const configured = env[RTK_BINARY_ENV];
283
+ if (configured !== void 0 && configured !== "") return configured;
284
+ const packageName = rtkPackageForTarget(process.platform, process.arch);
285
+ if (!packageName) return void 0;
286
+ try {
287
+ const manifest = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href).resolve(`${packageName}/package.json`);
288
+ return node_path.default.join(node_path.default.dirname(manifest), "vendor", "bin", "rtk");
289
+ } catch {
290
+ return;
291
+ }
292
+ }
293
+ function appendTail(current, chunk, limit) {
294
+ if (chunk.byteLength >= limit) return Buffer.from(chunk.subarray(chunk.byteLength - limit));
295
+ const combined = Buffer.concat([current, chunk]);
296
+ return combined.byteLength > limit ? Buffer.from(combined.subarray(combined.byteLength - limit)) : combined;
297
+ }
298
+ function decodeUtf8Tail(output) {
299
+ let start = 0;
300
+ while (start < output.byteLength && (output[start] & 192) === 128) start += 1;
301
+ return output.subarray(start).toString("utf8");
302
+ }
303
+ function hasShortOrLongOption(tokens, short, long) {
304
+ return tokens.some((token) => token === long || token.startsWith("-") && !token.startsWith("--") && token.slice(1).includes(short));
305
+ }
306
+ function incompatibleStructuredSearch(tokens) {
307
+ return tokens.some((token) => token.startsWith("-") && !token.startsWith("--") && /[0ABCILNchzZ]/u.test(token.slice(1)) || STRUCTURED_SEARCH_INCOMPATIBLE_OPTIONS.some((option) => token === option || token.startsWith(`${option}=`)));
308
+ }
309
+ //#endregion
310
+ Object.defineProperty(exports, "RTK_STDIN_MAX_BYTES", {
311
+ enumerable: true,
312
+ get: function() {
313
+ return RTK_STDIN_MAX_BYTES;
314
+ }
315
+ });
316
+ Object.defineProperty(exports, "RtkProcessor", {
317
+ enumerable: true,
318
+ get: function() {
319
+ return RtkProcessor;
320
+ }
321
+ });
322
+ Object.defineProperty(exports, "classifyRtkFilter", {
323
+ enumerable: true,
324
+ get: function() {
325
+ return classifyRtkFilter;
326
+ }
327
+ });
328
+ Object.defineProperty(exports, "rtkPackageForTarget", {
329
+ enumerable: true,
330
+ get: function() {
331
+ return rtkPackageForTarget;
332
+ }
333
+ });
334
+
335
+ //# sourceMappingURL=rtkProcessor-Bc4L4o_8.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtkProcessor-Bc4L4o_8.cjs","names":["fs","RTK_FAILED_WARNING","RTK_OVERSIZED_WARNING","RTK_UNAVAILABLE_WARNING","spawn","getResultMaxBytes","RTK_TIMEOUT_WARNING","createRequire","path"],"sources":["../src/constants/rtkProcessor.ts","../src/services/rtkProcessor/index.ts"],"sourcesContent":["export const BYTES_PER_MIB = 1_048_576;\nexport const RTK_STDIN_MAX_BYTES = 10_485_760;\nexport const DEFAULT_RTK_TIMEOUT_MS = 10_000;\nexport const RTK_KILL_WAIT_MS = 1_000;\nexport const OUTPUT_BUFFER_FACTOR = 2;\nexport const EXECUTABLE_MODE = 0o755;\nexport const SIMPLE_TOKEN_PATTERN = /^[A-Za-z0-9_./:@%+=,-]+$/u;\nexport const SHELL_CONTROL_PATTERN = /[\\r\\n;&|<>`$\\\\'\"(){}*?!]/u;\nexport const RTK_BINARY_ENV = 'PO_RTK_BINARY';\n","import { type ChildProcessWithoutNullStreams, spawn } from 'node:child_process';\nimport fs from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\n\nimport {\n DEFAULT_RTK_TIMEOUT_MS,\n EXECUTABLE_MODE,\n OUTPUT_BUFFER_FACTOR,\n RTK_BINARY_ENV,\n RTK_KILL_WAIT_MS,\n RTK_STDIN_MAX_BYTES,\n SHELL_CONTROL_PATTERN,\n SIMPLE_TOKEN_PATTERN,\n} from '../../constants/rtkProcessor';\nimport {\n type IRtkProcessor,\n RTK_FAILED_WARNING,\n RTK_OVERSIZED_WARNING,\n RTK_TIMEOUT_WARNING,\n RTK_UNAVAILABLE_WARNING,\n type RtkFilter,\n type RtkProcessRequest,\n type RtkProcessResult,\n} from '../../types/rtkProcessor';\nimport type { RunnerSettings } from '../../types/runnerSettings';\nimport { getResultMaxBytes } from '../runnerConfig';\n\nconst GIT_DIFF_INCOMPATIBLE_OPTIONS = [\n '-s',\n '-z',\n '--raw',\n '--numstat',\n '--shortstat',\n '--stat',\n '--dirstat',\n '--dirstat-by-file',\n '--summary',\n '--compact-summary',\n '--name-only',\n '--name-status',\n '--check',\n '--binary',\n '--word-diff',\n '--word-diff-regex',\n '--color',\n '--color-words',\n '--color-moved',\n '--color-moved-ws',\n '--line-prefix',\n '--no-patch',\n '--patch-with-raw',\n '--patch-with-stat',\n '--ext-diff',\n '--textconv',\n '--quiet',\n '--submodule',\n] as const;\nconst STRUCTURED_SEARCH_INCOMPATIBLE_OPTIONS = [\n '--json',\n '--null',\n '--null-data',\n '--color',\n '--colour',\n '--after-context',\n '--before-context',\n '--context',\n '--no-filename',\n '--no-line-number',\n '--heading',\n] as const;\nconst PACKAGE_BY_PLATFORM: Readonly<Record<string, string>> = {\n 'darwin-arm64': '@agimon-ai/po-runner-rtk-darwin-arm64',\n 'darwin-x64': '@agimon-ai/po-runner-rtk-darwin-x64',\n 'linux-arm64': '@agimon-ai/po-runner-rtk-linux-arm64',\n 'linux-x64': '@agimon-ai/po-runner-rtk-linux-x64',\n};\n\ntype BinaryResolver = () => string | undefined;\n\nexport class RtkProcessor implements IRtkProcessor {\n /**\n * Latched once a binary proves unrunnable on this host.\n *\n * A glibc build installed on a musl host satisfies os and cpu, so it\n * resolves and then fails to exec. Without this the same doomed spawn is\n * paid on every command, and each one is reported as a processing failure\n * rather than the absence it actually is.\n */\n private unrunnable = false;\n\n constructor(\n private readonly resolveBinary: BinaryResolver = bundledBinary,\n private readonly timeoutMs = DEFAULT_RTK_TIMEOUT_MS,\n private readonly env: Readonly<Record<string, string | undefined>> = process.env,\n private readonly settings?: RunnerSettings,\n ) {}\n\n async process(request: RtkProcessRequest): Promise<RtkProcessResult> {\n const filter = classifyRtkFilter(request.command);\n if (!filter) return { kind: 'skipped' };\n\n let inputBytes: number;\n try {\n inputBytes = fs.statSync(request.logPath).size;\n } catch {\n return { kind: 'fallback', warning: RTK_FAILED_WARNING };\n }\n if (inputBytes > RTK_STDIN_MAX_BYTES) return { kind: 'fallback', warning: RTK_OVERSIZED_WARNING };\n\n if (this.unrunnable) return { kind: 'fallback', warning: RTK_UNAVAILABLE_WARNING };\n\n let binary: string | undefined;\n try {\n binary = this.resolveBinary === bundledBinary ? bundledBinary(this.env) : this.resolveBinary();\n if (!binary) return { kind: 'fallback', warning: RTK_UNAVAILABLE_WARNING };\n if ((fs.statSync(binary).mode & 0o111) === 0) fs.chmodSync(binary, EXECUTABLE_MODE);\n } catch {\n return { kind: 'fallback', warning: RTK_UNAVAILABLE_WARNING };\n }\n\n return this.pipe(binary, filter, request.logPath, inputBytes);\n }\n\n private pipe(binary: string, filter: RtkFilter, logPath: string, inputBytes: number): Promise<RtkProcessResult> {\n return new Promise((resolve) => {\n let child: ChildProcessWithoutNullStreams;\n try {\n child = spawn(binary, ['pipe', '-f', filter], { stdio: 'pipe' });\n } catch {\n this.unrunnable = true;\n resolve({ kind: 'fallback', warning: RTK_UNAVAILABLE_WARNING });\n return;\n }\n\n const input = fs.createReadStream(logPath);\n const outputLimit = getResultMaxBytes(this.env, this.settings) * OUTPUT_BUFFER_FACTOR;\n let head: Buffer<ArrayBufferLike> = Buffer.alloc(0);\n let output: Buffer<ArrayBufferLike> = Buffer.alloc(0);\n let outputBytes = 0;\n let newlineCount = 0;\n let lastByte: number | undefined;\n let settled = false;\n let fallbackWarning: string | undefined;\n let killWaitTimer: ReturnType<typeof setTimeout> | undefined;\n\n const finish = (result: RtkProcessResult): void => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n if (killWaitTimer) clearTimeout(killWaitTimer);\n input.destroy();\n resolve(result);\n };\n const stop = (warning: string): void => {\n if (settled) return;\n fallbackWarning = warning;\n let killed = false;\n try {\n killed = child.kill('SIGKILL');\n } catch {\n finish({ kind: 'fallback', warning });\n return;\n }\n if (!killed) {\n finish({ kind: 'fallback', warning });\n return;\n }\n killWaitTimer ??= setTimeout(() => finish({ kind: 'fallback', warning }), RTK_KILL_WAIT_MS);\n };\n const timer = setTimeout(() => stop(RTK_TIMEOUT_WARNING), this.timeoutMs);\n\n child.stdout.on('data', (chunk: Buffer) => {\n outputBytes += chunk.byteLength;\n for (const byte of chunk) if (byte === 0x0a) newlineCount += 1;\n lastByte = chunk.at(-1);\n if (head.byteLength < outputLimit) {\n head = Buffer.concat([head, chunk.subarray(0, outputLimit - head.byteLength)]);\n }\n output = appendTail(output, chunk, outputLimit);\n });\n child.stderr.resume();\n child.once('error', (error: NodeJS.ErrnoException) => {\n // Reaching the process is a precondition, not part of processing, so a\n // failure to start reports absence and is not attempted again.\n if (error.code === 'ENOENT' || error.code === 'EACCES' || error.code === 'ENOEXEC') {\n this.unrunnable = true;\n stop(RTK_UNAVAILABLE_WARNING);\n return;\n }\n stop(RTK_FAILED_WARNING);\n });\n child.stdin.once('error', () => stop(RTK_FAILED_WARNING));\n input.once('error', () => stop(RTK_FAILED_WARNING));\n child.once('close', (code) => {\n if (fallbackWarning) {\n finish({ kind: 'fallback', warning: fallbackWarning });\n return;\n }\n const processedOutput = decodeUtf8Tail(output);\n if (code !== 0 || (inputBytes > 0 && processedOutput.trim().length === 0)) {\n finish({ kind: 'fallback', warning: RTK_FAILED_WARNING });\n return;\n }\n const lines = newlineCount + (outputBytes > 0 && lastByte !== 0x0a ? 1 : 0);\n finish({\n kind: 'processed',\n result: {\n filter,\n // Only meaningful once the stream outgrew the buffer; below that\n // `output` already starts at byte zero.\n head: outputBytes > output.byteLength ? head.toString('utf8') : '',\n output: processedOutput,\n bytes: outputBytes,\n lines,\n },\n });\n });\n\n input.pipe(child.stdin);\n });\n }\n}\n\n/**\n * Classifies only whitespace-delimited single commands. Shell syntax, expansion,\n * quoting, and globbing are rejected instead of being partially interpreted.\n */\nexport function classifyRtkFilter(command: string): RtkFilter | undefined {\n if (SHELL_CONTROL_PATTERN.test(command)) return undefined;\n const trimmed = command.trim();\n if (!trimmed) return undefined;\n const tokens = trimmed.split(/[ \\t]+/u);\n if (tokens.some((token) => !SIMPLE_TOKEN_PATTERN.test(token))) return undefined;\n\n if (tokens[0] === 'cargo' && tokens[1] === 'test') {\n if (tokens.includes('--') || tokens.some((token) => token.startsWith('--message-format') || token === '--json')) {\n return undefined;\n }\n return 'cargo-test';\n }\n if (tokens[0] === 'pytest') {\n if (tokens.some((token) => token.startsWith('--json-report'))) return undefined;\n return 'pytest';\n }\n if (tokens[0] === 'git' && tokens[1] === 'diff') {\n if (\n tokens.some((token) =>\n GIT_DIFF_INCOMPATIBLE_OPTIONS.some((option) => token === option || token.startsWith(`${option}=`)),\n )\n ) {\n return undefined;\n }\n return 'git-diff';\n }\n if (tokens[0] === 'grep') {\n if (tokens.length < 4 || incompatibleStructuredSearch(tokens)) return undefined;\n return hasShortOrLongOption(tokens, 'n', '--line-number') && hasShortOrLongOption(tokens, 'H', '--with-filename')\n ? 'grep'\n : undefined;\n }\n if (tokens[0] === 'rg') {\n if (tokens.length < 4 || incompatibleStructuredSearch(tokens) || !tokens.includes('--no-heading')) return undefined;\n return hasShortOrLongOption(tokens, 'n', '--line-number') && hasShortOrLongOption(tokens, 'H', '--with-filename')\n ? 'grep'\n : undefined;\n }\n if (tokens[0] === 'go' && tokens[1] === 'test') {\n let jsonOutput = false;\n for (const token of tokens.slice(2)) {\n if (token === '-json' || token === '-json=true') jsonOutput = true;\n if (token === '-json=false') jsonOutput = false;\n }\n return jsonOutput ? 'go-test' : undefined;\n }\n if (tokens[0] === 'ruff' && tokens[1] === 'check') {\n const jsonOutput = tokens.some(\n (token, index) =>\n token === '--output-format=json' || (token === '--output-format' && tokens[index + 1] === 'json'),\n );\n return jsonOutput ? 'ruff-check' : undefined;\n }\n return undefined;\n}\n\nexport function rtkPackageForTarget(platform: string, architecture: string): string | undefined {\n const target = `${platform}-${architecture}`;\n const packageName = PACKAGE_BY_PLATFORM[target];\n if (!packageName) process.emitWarning(`Bundled RTK binary is unavailable for unsupported target ${target}`);\n return packageName;\n}\n\nfunction bundledBinary(env: Readonly<Record<string, string | undefined>> = process.env): string | undefined {\n const configured = env[RTK_BINARY_ENV];\n if (configured !== undefined && configured !== '') return configured;\n const packageName = rtkPackageForTarget(process.platform, process.arch);\n if (!packageName) return undefined;\n try {\n const require = createRequire(import.meta.url);\n const manifest = require.resolve(`${packageName}/package.json`);\n return path.join(path.dirname(manifest), 'vendor', 'bin', 'rtk');\n } catch {\n return undefined;\n }\n}\n\nfunction appendTail(\n current: Buffer<ArrayBufferLike>,\n chunk: Buffer<ArrayBufferLike>,\n limit: number,\n): Buffer<ArrayBufferLike> {\n if (chunk.byteLength >= limit) return Buffer.from(chunk.subarray(chunk.byteLength - limit));\n const combined = Buffer.concat([current, chunk]);\n return combined.byteLength > limit ? Buffer.from(combined.subarray(combined.byteLength - limit)) : combined;\n}\n\nfunction decodeUtf8Tail(output: Buffer<ArrayBufferLike>): string {\n let start = 0;\n while (start < output.byteLength && (output[start]! & 0xc0) === 0x80) start += 1;\n return output.subarray(start).toString('utf8');\n}\nfunction hasShortOrLongOption(tokens: readonly string[], short: string, long: string): boolean {\n return tokens.some(\n (token) => token === long || (token.startsWith('-') && !token.startsWith('--') && token.slice(1).includes(short)),\n );\n}\n\nfunction incompatibleStructuredSearch(tokens: readonly string[]): boolean {\n return tokens.some(\n (token) =>\n (token.startsWith('-') && !token.startsWith('--') && /[0ABCILNchzZ]/u.test(token.slice(1))) ||\n STRUCTURED_SEARCH_INCOMPATIBLE_OPTIONS.some((option) => token === option || token.startsWith(`${option}=`)),\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ //#region src/types/rtkProcessor.d.ts
2
+ type RtkFilter = 'cargo-test' | 'pytest' | 'git-diff' | 'grep' | 'go-test' | 'ruff-check';
3
+ interface RtkProcessedOutput {
4
+ readonly filter: RtkFilter;
5
+ /** Leading excerpt of RTK stdout, empty when `output` already holds the start. */
6
+ readonly head: string;
7
+ /** Tail-capped RTK stdout. The raw log remains the authoritative complete output. */
8
+ readonly output: string;
9
+ readonly bytes: number;
10
+ readonly lines: number;
11
+ }
12
+ type RtkProcessResult = {
13
+ readonly kind: 'skipped';
14
+ } | {
15
+ readonly kind: 'processed';
16
+ readonly result: RtkProcessedOutput;
17
+ } | {
18
+ readonly kind: 'fallback';
19
+ readonly warning: string;
20
+ };
21
+ interface RtkProcessRequest {
22
+ readonly command: string;
23
+ readonly logPath: string;
24
+ }
25
+ interface IRtkProcessor {
26
+ process(request: RtkProcessRequest): Promise<RtkProcessResult>;
27
+ }
28
+ /** Raw-output fallback notices. Shared so the processor and its caller cannot drift. */
29
+ declare const RTK_UNAVAILABLE_WARNING = "Warning: RTK is unavailable; showing raw output.";
30
+ declare const RTK_FAILED_WARNING = "Warning: RTK processing failed; showing raw output.";
31
+ declare const RTK_TIMEOUT_WARNING = "Warning: RTK processing timed out; showing raw output.";
32
+ declare const RTK_OVERSIZED_WARNING = "Warning: RTK input exceeds 10 MiB; showing raw output.";
33
+ //#endregion
34
+ export { RTK_UNAVAILABLE_WARNING as a, RtkProcessResult as c, RTK_TIMEOUT_WARNING as i, RtkProcessedOutput as l, RTK_FAILED_WARNING as n, RtkFilter as o, RTK_OVERSIZED_WARNING as r, RtkProcessRequest as s, IRtkProcessor as t };
35
+ //# sourceMappingURL=rtkProcessor-CVZvNhkJ.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtkProcessor-CVZvNhkJ.d.mts","names":[],"sources":["../src/types/rtkProcessor.ts"],"mappings":";KAAY;UAEK;WACN,QAAQ;;WAER;;WAEA;WACA;WACA;;KAGC;WACG;;WACA;WAA4B,QAAQ;;WACpC;WAA2B;;UAEzB;WACN;WACA;;UAGM;EACf,QAAQ,SAAS,oBAAoB,QAAQ;;;cAIlC;cACA;cACA;cACA"}
@@ -0,0 +1,33 @@
1
+ //#region src/types/rtkProcessor.ts
2
+ /** Raw-output fallback notices. Shared so the processor and its caller cannot drift. */
3
+ const RTK_UNAVAILABLE_WARNING = "Warning: RTK is unavailable; showing raw output.";
4
+ const RTK_FAILED_WARNING = "Warning: RTK processing failed; showing raw output.";
5
+ const RTK_TIMEOUT_WARNING = "Warning: RTK processing timed out; showing raw output.";
6
+ const RTK_OVERSIZED_WARNING = "Warning: RTK input exceeds 10 MiB; showing raw output.";
7
+ //#endregion
8
+ Object.defineProperty(exports, "RTK_FAILED_WARNING", {
9
+ enumerable: true,
10
+ get: function() {
11
+ return RTK_FAILED_WARNING;
12
+ }
13
+ });
14
+ Object.defineProperty(exports, "RTK_OVERSIZED_WARNING", {
15
+ enumerable: true,
16
+ get: function() {
17
+ return RTK_OVERSIZED_WARNING;
18
+ }
19
+ });
20
+ Object.defineProperty(exports, "RTK_TIMEOUT_WARNING", {
21
+ enumerable: true,
22
+ get: function() {
23
+ return RTK_TIMEOUT_WARNING;
24
+ }
25
+ });
26
+ Object.defineProperty(exports, "RTK_UNAVAILABLE_WARNING", {
27
+ enumerable: true,
28
+ get: function() {
29
+ return RTK_UNAVAILABLE_WARNING;
30
+ }
31
+ });
32
+
33
+ //# sourceMappingURL=rtkProcessor-CsrCPyTQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtkProcessor-CsrCPyTQ.cjs","names":[],"sources":["../src/types/rtkProcessor.ts"],"sourcesContent":["export type RtkFilter = 'cargo-test' | 'pytest' | 'git-diff' | 'grep' | 'go-test' | 'ruff-check';\n\nexport interface RtkProcessedOutput {\n readonly filter: RtkFilter;\n /** Leading excerpt of RTK stdout, empty when `output` already holds the start. */\n readonly head: string;\n /** Tail-capped RTK stdout. The raw log remains the authoritative complete output. */\n readonly output: string;\n readonly bytes: number;\n readonly lines: number;\n}\n\nexport type RtkProcessResult =\n | { readonly kind: 'skipped' }\n | { readonly kind: 'processed'; readonly result: RtkProcessedOutput }\n | { readonly kind: 'fallback'; readonly warning: string };\n\nexport interface RtkProcessRequest {\n readonly command: string;\n readonly logPath: string;\n}\n\nexport interface IRtkProcessor {\n process(request: RtkProcessRequest): Promise<RtkProcessResult>;\n}\n\n/** Raw-output fallback notices. Shared so the processor and its caller cannot drift. */\nexport const RTK_UNAVAILABLE_WARNING = 'Warning: RTK is unavailable; showing raw output.';\nexport const RTK_FAILED_WARNING = 'Warning: RTK processing failed; showing raw output.';\nexport const RTK_TIMEOUT_WARNING = 'Warning: RTK processing timed out; showing raw output.';\nexport const RTK_OVERSIZED_WARNING = 'Warning: RTK input exceeds 10 MiB; showing raw output.';\n"],"mappings":";;AA2BA,MAAa,0BAA0B;AACvC,MAAa,qBAAqB;AAClC,MAAa,sBAAsB;AACnC,MAAa,wBAAwB"}
@@ -0,0 +1,11 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_rtkProcessor = require("./rtkProcessor-CsrCPyTQ.cjs");
3
+ const require_rtkProcessor$1 = require("./rtkProcessor-Bc4L4o_8.cjs");
4
+ exports.RTK_FAILED_WARNING = require_rtkProcessor.RTK_FAILED_WARNING;
5
+ exports.RTK_OVERSIZED_WARNING = require_rtkProcessor.RTK_OVERSIZED_WARNING;
6
+ exports.RTK_STDIN_MAX_BYTES = require_rtkProcessor$1.RTK_STDIN_MAX_BYTES;
7
+ exports.RTK_TIMEOUT_WARNING = require_rtkProcessor.RTK_TIMEOUT_WARNING;
8
+ exports.RTK_UNAVAILABLE_WARNING = require_rtkProcessor.RTK_UNAVAILABLE_WARNING;
9
+ exports.RtkProcessor = require_rtkProcessor$1.RtkProcessor;
10
+ exports.classifyRtkFilter = require_rtkProcessor$1.classifyRtkFilter;
11
+ exports.rtkPackageForTarget = require_rtkProcessor$1.rtkPackageForTarget;
@@ -0,0 +1,7 @@
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";
3
+ //#region src/constants/rtkProcessor.d.ts
4
+ export declare const RTK_STDIN_MAX_BYTES = 10485760;
5
+ //#endregion
6
+ export { type IRtkProcessor, RTK_FAILED_WARNING, RTK_OVERSIZED_WARNING, RTK_TIMEOUT_WARNING, RTK_UNAVAILABLE_WARNING, type RtkFilter, type RtkProcessRequest, type RtkProcessResult, type RtkProcessedOutput, RtkProcessor, classifyRtkFilter, rtkPackageForTarget };
7
+ //# sourceMappingURL=rtkProcessor.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtkProcessor.d.mts","names":[],"sources":["../src/constants/rtkProcessor.ts"],"mappings":";;;qBACa"}
@@ -0,0 +1,3 @@
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";
3
+ export { RTK_FAILED_WARNING, RTK_OVERSIZED_WARNING, RTK_STDIN_MAX_BYTES, RTK_TIMEOUT_WARNING, RTK_UNAVAILABLE_WARNING, RtkProcessor, classifyRtkFilter, rtkPackageForTarget };
@@ -0,0 +1,134 @@
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";
11
+ const DEFAULT_BG_THRESHOLD_MS = 6e4;
12
+ const DEFAULT_RESULT_MAX_BYTES = 8192;
13
+ const DEFAULT_RESULT_MAX_LINES = 120;
14
+ const DEFAULT_SUCCESS_RESULT_MAX_BYTES = 2048;
15
+ const DEFAULT_RESULT_MAX_TOKENS = 2048;
16
+ const DEFAULT_SUCCESS_RESULT_MAX_TOKENS = 512;
17
+ const DEFAULT_HEAD_RATIO = .2;
18
+ const DEFAULT_ERROR_BUDGET_RATIO = .2;
19
+ const DEFAULT_ERROR_MAX_ENTRIES = 10;
20
+ const DEFAULT_ERROR_MAX_VARIANTS_JOINED = 6;
21
+ const DEFAULT_LOG_MAX_BYTES = 5242880;
22
+ const DEFAULT_LOG_TTL_MS = 6048e5;
23
+ const DEFAULT_MAX_COMPLETED_RUNNERS = 100;
24
+ //#endregion
25
+ //#region src/models/runnerSettings.ts
26
+ const runnerSettingsState = { value: {} };
27
+ //#endregion
28
+ //#region src/services/runnerConfig/index.ts
29
+ /**
30
+ * Project settings sit below the environment on purpose: a checked-in file is
31
+ * the project's baseline, while an environment variable is set for one run.
32
+ */
33
+ /** A bash call still running at this point is promoted to a named runner. */
34
+ /** Tool results past this size are excerpted and spilled to the log file. */
35
+ /** Line ceiling for a single tool result, applied alongside the byte ceiling. */
36
+ /**
37
+ * A successful command gets a much smaller budget than a failing one. Exiting 0
38
+ * has already reported the outcome, so its output buys far less than a failure's.
39
+ */
40
+ /**
41
+ * Token ceilings sit alongside the byte ones because bytes do not track context
42
+ * cost: 8 KiB of prose is roughly 2k tokens, while 8 KiB of base64 or CJK is
43
+ * several times that. Whichever ceiling binds first wins.
44
+ */
45
+ /** Share of the budget spent on the leading excerpt; the remainder goes to the tail. */
46
+ /** Share reserved for errors rescued from the elided middle, when any exist. */
47
+ /** Distinct failures rescued from the elided middle. */
48
+ /** Variants joined inside one bracket before the rest become a count. */
49
+ /** Legacy rotation value retained so existing configuration imports remain compatible. */
50
+ /** Retention window for logs with no live registry record. */
51
+ /**
52
+ * Completed runners a single session keeps on disk.
53
+ *
54
+ * A count bound, not just an age one, because a session that stays open for a
55
+ * working day never ages its own records past the TTL: they would accumulate
56
+ * for as long as the session lives.
57
+ */
58
+ function positiveNumber(raw, fallback) {
59
+ const value = Number(raw);
60
+ return Number.isFinite(value) && value > 0 ? value : fallback;
61
+ }
62
+ /** Age at which a bash call becomes a background runner. */
63
+ function getBackgroundThresholdMs(env = process.env) {
64
+ return positiveNumber(env[BG_THRESHOLD_MS_ENV], DEFAULT_BG_THRESHOLD_MS);
65
+ }
66
+ /** Byte ceiling for a single tool result before tail truncation kicks in. */
67
+ function getResultMaxBytes(env = process.env, settings = runnerSettingsState.value) {
68
+ return positiveNumber(env[RESULT_MAX_BYTES_ENV], settings.maxResultBytes ?? 8192);
69
+ }
70
+ /** Legacy rotation setting retained for public API compatibility. */
71
+ function getLogMaxBytes(env = process.env) {
72
+ return positiveNumber(env[LOG_MAX_BYTES_ENV], DEFAULT_LOG_MAX_BYTES);
73
+ }
74
+ /** Retention window for orphaned runner logs. */
75
+ function getLogTtlMs(env = process.env) {
76
+ return positiveNumber(env[LOG_TTL_MS_ENV], DEFAULT_LOG_TTL_MS);
77
+ }
78
+ /** Completed runners one session retains before the oldest are swept. */
79
+ function getMaxCompletedRunners(env = process.env) {
80
+ return positiveNumber(env[MAX_COMPLETED_RUNNERS_ENV], 100);
81
+ }
82
+ function setRunnerSettings(settings) {
83
+ runnerSettingsState.value = settings;
84
+ }
85
+ function getRunnerSettings() {
86
+ return runnerSettingsState.value;
87
+ }
88
+ /** Byte ceiling for the result of a command that succeeded. */
89
+ function getSuccessResultMaxBytes(env = process.env, settings = runnerSettingsState.value) {
90
+ return positiveNumber(env[SUCCESS_RESULT_MAX_BYTES_ENV], settings.successMaxResultBytes ?? 2048);
91
+ }
92
+ /** Token ceiling for a single tool result. */
93
+ function getResultMaxTokens(env = process.env, settings = runnerSettingsState.value) {
94
+ return positiveNumber(env[RESULT_MAX_TOKENS_ENV], settings.maxResultTokens ?? 2048);
95
+ }
96
+ /** Token ceiling for the result of a command that succeeded. */
97
+ function getSuccessResultMaxTokens(env = process.env, settings = runnerSettingsState.value) {
98
+ return positiveNumber(env[SUCCESS_RESULT_MAX_TOKENS_ENV], settings.successMaxResultTokens ?? 512);
99
+ }
100
+ /** Line ceiling for a single tool result. */
101
+ function getResultMaxLines(settings = runnerSettingsState.value) {
102
+ return settings.maxResultLines ?? 120;
103
+ }
104
+ function getHeadRatio(settings = runnerSettingsState.value) {
105
+ return settings.headRatio ?? .2;
106
+ }
107
+ function getErrorBudgetRatio(settings = runnerSettingsState.value) {
108
+ return settings.errorBudgetRatio ?? .2;
109
+ }
110
+ function getErrorMaxEntries(settings = runnerSettingsState.value) {
111
+ return settings.errorMaxEntries ?? 10;
112
+ }
113
+ function getErrorMaxVariantsJoined(settings = runnerSettingsState.value) {
114
+ return settings.errorMaxVariantsJoined ?? 6;
115
+ }
116
+ /** Extra severity patterns appended to the built-in matcher. */
117
+ function getErrorPatterns(settings = runnerSettingsState.value) {
118
+ return settings.errorPatterns ?? [];
119
+ }
120
+ /** Defaults for agent-owned, noninteractive child processes only. Explicit settings still win. */
121
+ function noninteractiveEnvironment(environment) {
122
+ return {
123
+ NX_NATIVE_COMMAND_RUNNER: environment.NX_NATIVE_COMMAND_RUNNER ?? "false",
124
+ NX_TUI: environment.NX_TUI ?? "false",
125
+ NX_PARALLEL: environment.NX_PARALLEL ?? "1",
126
+ DOOM_RUNNER_MAX_WORKERS: environment.DOOM_RUNNER_MAX_WORKERS ?? "2",
127
+ PLAYWRIGHT_WORKERS: environment.PLAYWRIGHT_WORKERS ?? "1",
128
+ VITEST_MAX_WORKERS: environment.VITEST_MAX_WORKERS ?? "2"
129
+ };
130
+ }
131
+ //#endregion
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
+
134
+ //# sourceMappingURL=runnerConfig-BQBlVAXn.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runnerConfig-BQBlVAXn.mjs","names":[],"sources":["../src/constants/runnerConfig.ts","../src/models/runnerSettings.ts","../src/services/runnerConfig/index.ts"],"sourcesContent":["export const BG_THRESHOLD_MS_ENV = 'DOOM_RUNNER_BG_THRESHOLD_MS';\nexport const RESULT_MAX_BYTES_ENV = 'DOOM_RUNNER_RESULT_MAX_BYTES';\nexport const SUCCESS_RESULT_MAX_BYTES_ENV = 'DOOM_RUNNER_SUCCESS_RESULT_MAX_BYTES';\nexport const RESULT_MAX_TOKENS_ENV = 'DOOM_RUNNER_RESULT_MAX_TOKENS';\nexport const SUCCESS_RESULT_MAX_TOKENS_ENV = 'DOOM_RUNNER_SUCCESS_RESULT_MAX_TOKENS';\nexport const LOG_MAX_BYTES_ENV = 'DOOM_RUNNER_LOG_MAX_BYTES';\nexport const LOG_TTL_MS_ENV = 'DOOM_RUNNER_LOG_TTL_MS';\nexport const MAX_COMPLETED_RUNNERS_ENV = 'DOOM_RUNNER_MAX_COMPLETED_RUNNERS';\nexport const LOG_DIR_ENV = 'DOOM_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 doom-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 DOOM_RUNNER_MAX_WORKERS: environment.DOOM_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,yBAAyB,YAAY,2BAA2B;EAChE,oBAAoB,YAAY,sBAAsB;EACtD,oBAAoB,YAAY,sBAAsB;CACxD;AACF"}