@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,23 +1,29 @@
1
- import { c as getLogTtlMs } from "../runnerConfig-BQBlVAXn.mjs";
2
- import { r as summarizeLog, t as LogReader } from "../logReader-UfbDbwQl.mjs";
3
- import { n as createHeadlessRunnersCommand, t as createHeadlessBashTool } from "../headless-BGYfIlNk.mjs";
4
- import { n as reconcileActiveRunners, r as stopRunnerProcess, t as cleanupLegacyRunnerStore } from "../reconcile-DMeNSxwn.mjs";
5
- import { t as activeRunnerRecovery } from "../compaction-DCw80VZj.mjs";
6
- import { t as RmuxBackend } from "../rmuxBackend-DfyQwJrc.mjs";
7
- import { n as TmuxBackend, r as PtyBackendChain, t as createRunnerDependencies } from "../runnerDependencies-DruByBGS.mjs";
8
- import { n as resolveRunnerStoreDirectory, r as runnerStateDirFor, t as RunnerPaths } from "../runnerPaths-B_dAAeco.mjs";
9
- import { a as isRunnerRecord, i as formatRunnerStatus, r as formatRunnerFinished } from "../runnerRegistry-CeOHEjBv.mjs";
1
+ import { c as getLogTtlMs } from "../runnerConfig-XXMq4VQA.mjs";
2
+ import { r as summarizeLog, t as LogReader } from "../logReader-mq9uVurh.mjs";
3
+ import { n as createHeadlessRunnersCommand, t as createHeadlessBashTool } from "../headless-DOlCixyf.mjs";
4
+ import { n as stopRunnerProcess, t as reconcileActiveRunners } from "../reconcile-wNYQJZF-.mjs";
5
+ import { t as SystemClock } from "../clock-Cv2pddgo.mjs";
6
+ import { t as activeRunnerRecovery } from "../compaction-nNlE6e5I.mjs";
7
+ import { t as RmuxBackend } from "../rmuxBackend-rjrVTG6K.mjs";
8
+ import { n as TERM_GRACE_MS } from "../launcher-CCYsFBM9.mjs";
9
+ import { n as TmuxBackend, r as PtyBackendChain, t as createRunnerDependencies } from "../runnerDependencies-7h_cxOva.mjs";
10
+ import { n as resolveRunnerStoreDirectory, r as runnerStateDirFor, t as RunnerPaths } from "../runnerPaths-Dibbvyx_.mjs";
11
+ import { a as formatRunnerStatus, i as formatRunnerFinishedNotice, n as createDefaultProcessRegistry, o as isRunnerRecord, r as formatRunnerFinished } from "../runnerRegistry-BgaR5O86.mjs";
10
12
  import fs from "node:fs";
11
13
  import path from "node:path";
12
14
  import { resolveRootSessionId } from "@agimon-ai/po-core/childProcess";
13
- import { composeServerProviderOverrides, defineServerPlugin, packageResourcePath, readPackageResource } from "@agimon-ai/po-core/serverFacet";
14
- import { composeRootHooks, defineChannel, defineHook, defineResource, defineRoot, defineRoute, defineServerCommand, defineServerTool } from "@agimon-ai/po-core/extensionFile";
15
- import { DOOM_BACKGROUND_WORK_SERVICE, readDoomBackgroundWorkService } from "@agimon-ai/po-core/backgroundWork";
16
- import { createDoomTelemetry } from "@agimon-ai/po-telemetry";
15
+ import { composeServerProviderOverrides, defineServerPlugin, packageResourcePath, readPackageResource } from "@agimon-ai/po-core/serverPlugin";
16
+ import { composeRootHooks, composeRootInjects, defineChannel, defineHook, defineResource, defineRoot, defineRoute, defineServerCommand, defineServerTool, runCleanups } from "@agimon-ai/po-core/extensionFile";
17
+ import { PO_BACKGROUND_WORK_SERVICE, readPoBackgroundWorkService } from "@agimon-ai/po-core/backgroundWork";
18
+ import { createPoTelemetry } from "@agimon-ai/po-telemetry";
17
19
  import { CONFIG_DIR_NAME } from "@earendil-works/pi-coding-agent";
18
20
  import { Hono } from "hono";
19
21
  import { streamSSE } from "hono/streaming";
20
- import { DOOM_HELP_WHEN } from "@agimon-ai/po-core/help";
22
+ import { PO_HELP_WHEN } from "@agimon-ai/po-core/help";
23
+ const RUNNER_STATUS_KEY = "po-runner-runners";
24
+ const BACKGROUND_WORK_PROVIDER = "po-runner";
25
+ const HISTORY_SWEEP_INTERVAL_MS = 6e5;
26
+ //#endregion
21
27
  //#region src/constants/runnerSettings.ts
22
28
  const RUNNER_SETTINGS_FILE = "po-runner.json";
23
29
  const RATIO_KEYS = ["headRatio", "errorBudgetRatio"];
@@ -25,10 +31,110 @@ const MAX_RESULT_BYTES_CEILING = 262144;
25
31
  const MAX_RESULT_LINES_CEILING = 5e3;
26
32
  const MAX_RESULT_TOKENS_CEILING = 1e5;
27
33
  //#endregion
28
- //#region src/constants/runnerRuntime.ts
29
- const RUNNER_STATUS_KEY = "doom-runner-runners";
30
- const BACKGROUND_WORK_PROVIDER = "doom-runner";
31
- const HISTORY_SWEEP_INTERVAL_MS = 6e5;
34
+ //#region src/services/runnerHost/index.ts
35
+ const describe = (error) => error instanceof Error ? error.message : String(error);
36
+ /** Runs `pass` again `ms` after the previous pass finished, so two passes never overlap. */
37
+ function repeat(clock, ms, pass) {
38
+ let stopped = false;
39
+ let cancel;
40
+ let running;
41
+ const arm = () => {
42
+ cancel = clock.after(ms, () => {
43
+ cancel = void 0;
44
+ running = pass().finally(() => {
45
+ running = void 0;
46
+ if (!stopped) arm();
47
+ });
48
+ });
49
+ };
50
+ arm();
51
+ return { async stop() {
52
+ stopped = true;
53
+ cancel?.();
54
+ await running;
55
+ } };
56
+ }
57
+ /**
58
+ * The housekeeping every session running one po-runner build in one hub shares.
59
+ *
60
+ * A session used to open its own registry connection and arm its own status poll and history
61
+ * sweep, and each sweep walked the whole runner store. Here one loop refreshes the attached sessions
62
+ * one at a time, one sweep per store spares every attached session at once, and runners a crashed
63
+ * server left behind are reclaimed once rather than at every session start.
64
+ */
65
+ function createRunnerHost(options) {
66
+ const sessions = /* @__PURE__ */ new Set();
67
+ let closed = false;
68
+ let reclaiming;
69
+ let sweeping;
70
+ const refreshAll = async () => {
71
+ for (const session of sessions) {
72
+ if (closed) return;
73
+ try {
74
+ await session.refresh();
75
+ } catch (error) {
76
+ options.onWarning(`Could not refresh po-runner session ${session.sessionId}: ${describe(error)}`);
77
+ }
78
+ }
79
+ };
80
+ const sweepAll = () => {
81
+ sweeping ??= (async () => {
82
+ try {
83
+ const byStore = /* @__PURE__ */ new Map();
84
+ for (const session of sessions) {
85
+ const store = session.paths.storeDirectory();
86
+ byStore.set(store, [...byStore.get(store) ?? [], session]);
87
+ }
88
+ for (const group of byStore.values()) {
89
+ const [first] = group;
90
+ if (closed || first === void 0) return;
91
+ const live = new Set(group.map((session) => session.sessionId));
92
+ const now = options.clock.now();
93
+ const result = first.paths.sweepHistoryAsync ? await first.paths.sweepHistoryAsync(first.historyTtlMs, now, live) : first.paths.sweepHistory(first.historyTtlMs, now, live);
94
+ for (const error of result.errors) options.onWarning(error);
95
+ }
96
+ } catch (error) {
97
+ options.onWarning(`Could not sweep po-runner history: ${describe(error)}`);
98
+ }
99
+ })().finally(() => {
100
+ sweeping = void 0;
101
+ });
102
+ return sweeping;
103
+ };
104
+ const polling = repeat(options.clock, options.statusPollMs, refreshAll);
105
+ const sweeper = repeat(options.clock, options.historySweepMs, sweepAll);
106
+ return {
107
+ processRegistry: {
108
+ registerProcess: (...args) => options.processRegistry.registerProcess(...args),
109
+ releaseProcess: (...args) => options.processRegistry.releaseProcess(...args),
110
+ listProcesses: (...args) => options.processRegistry.listProcesses(...args),
111
+ close: () => void 0
112
+ },
113
+ attach(session) {
114
+ if (closed) throw new Error("The po-runner host is disposed.");
115
+ sessions.add(session);
116
+ if (reclaiming === void 0) {
117
+ reclaiming = session.reclaimOrphans().catch((error) => options.onWarning(`Could not reclaim orphaned runners: ${describe(error)}`));
118
+ sweepAll();
119
+ }
120
+ return () => {
121
+ sessions.delete(session);
122
+ };
123
+ },
124
+ async dispose() {
125
+ if (closed) return;
126
+ closed = true;
127
+ sessions.clear();
128
+ await Promise.all([
129
+ polling.stop(),
130
+ sweeper.stop(),
131
+ reclaiming,
132
+ sweeping
133
+ ]);
134
+ options.processRegistry.close();
135
+ }
136
+ };
137
+ }
32
138
  //#endregion
33
139
  //#region src/constants/webRunners.ts
34
140
  const RUNNER_RUNS_TYPE = "runner_runs";
@@ -84,9 +190,9 @@ function presentRunnerRuns(records, now) {
84
190
  //#endregion
85
191
  //#region src/services/runnerServerRuntime/index.ts
86
192
  const COMPLETION_RETRY_MS = 1e3;
87
- function createRunnerServerRuntime(container, directEvents, wakeAgent, execution) {
88
- const telemetry = execution ? createDoomTelemetry({
89
- serviceName: "doom-runner",
193
+ function createRunnerServerRuntime(container, host, directEvents, wakeAgent, execution) {
194
+ const telemetry = execution ? createPoTelemetry({
195
+ serviceName: "po-runner",
90
196
  packageName: "@agimon-ai/po-runner",
91
197
  cwd: execution.cwd,
92
198
  env: execution.environment,
@@ -105,41 +211,31 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
105
211
  let wakes = Promise.resolve();
106
212
  let closing = false;
107
213
  let retryTimer;
108
- let statusTimer;
109
- let historyTimer;
110
- let historySweep;
111
- const sweepHistory = () => {
112
- if (closing) return Promise.resolve();
113
- historySweep ??= (async () => {
114
- const ttl = getLogTtlMs(container.environment);
115
- const result = container.paths.sweepHistoryAsync ? await container.paths.sweepHistoryAsync(ttl) : container.paths.sweepHistory(ttl);
116
- for (const error of result.errors) process.emitWarning(error);
117
- })().catch((error) => process.emitWarning(`Could not sweep doom-runner history: ${String(error)}`)).finally(() => {
118
- historySweep = void 0;
214
+ /** Stops the shared loop refreshing this session and sweeping around it. */
215
+ let detach;
216
+ /** Every runner of every session the registry knows, reclaimed when its owning process is gone. */
217
+ const reclaimOrphans = async () => {
218
+ const reclaimed = await reconcileActiveRunners({
219
+ registry: container.runnerRegistry,
220
+ launcher: container.launcher,
221
+ rmuxBackend: container.rmuxBackend,
222
+ processControl: container.processControl,
223
+ currentHostPid: process.pid,
224
+ startup: false
119
225
  });
120
- return historySweep;
226
+ for (const error of reclaimed.errors) process.emitWarning(error);
121
227
  };
122
228
  const ensureSession = (requestedSessionId) => {
123
229
  if (closing) return Promise.reject(/* @__PURE__ */ new Error("Runner runtime is closing."));
124
230
  if (sessionId !== void 0 && sessionId !== requestedSessionId) throw new Error(`Runner runtime belongs to session ${sessionId}.`);
125
231
  sessionId ??= requestedSessionId;
126
232
  supervision ??= (async () => {
127
- await telemetry?.recordEvent("doom_runner.session_started", { outcome: "started" });
233
+ telemetry?.recordEvent("po_runner.session_started", { outcome: "started" }).catch((error) => process.emitWarning(`Could not record runner session telemetry: ${String(error)}`));
128
234
  if (closing) return;
129
235
  container.paths.setSessionId(requestedSessionId);
130
236
  if (await container.lifeline.arm(requestedSessionId) === void 0) throw new Error("Could not arm runner supervision lifeline.");
131
237
  if (closing) return;
132
238
  const promotedIds = (await container.runnerRegistry.listAll(requestedSessionId)).filter((record) => record.state === "running" && record.promoted).map((record) => record.id);
133
- const legacy = await cleanupLegacyRunnerStore({
134
- registry: container.runnerRegistry,
135
- launcher: container.launcher,
136
- rmuxBackend: container.rmuxBackend,
137
- processControl: container.processControl,
138
- currentHostPid: process.pid,
139
- paths: container.paths
140
- });
141
- for (const error of legacy.errors) process.emitWarning(error);
142
- if (closing) return;
143
239
  const reconciled = await reconcileActiveRunners({
144
240
  registry: container.runnerRegistry,
145
241
  launcher: container.launcher,
@@ -147,28 +243,26 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
147
243
  processControl: container.processControl,
148
244
  currentHostPid: process.pid,
149
245
  startup: true,
150
- startupSessionId: requestedSessionId
246
+ startupSessionId: requestedSessionId,
247
+ active: await container.runnerRegistry.listBySession(requestedSessionId)
151
248
  });
152
249
  for (const error of reconciled.errors) process.emitWarning(error);
153
- await telemetry?.recordEvent("doom_runner.reconciled", {
154
- "runner.reclaimed_count": legacy.reclaimed.length + reconciled.reclaimed.length,
155
- "runner.error_count": legacy.errors.length + reconciled.errors.length,
156
- outcome: legacy.errors.length + reconciled.errors.length === 0 ? "completed" : "degraded"
157
- });
250
+ telemetry?.recordEvent("po_runner.reconciled", {
251
+ "runner.reclaimed_count": reconciled.reclaimed.length,
252
+ "runner.error_count": reconciled.errors.length,
253
+ outcome: reconciled.errors.length === 0 ? "completed" : "degraded"
254
+ }).catch((error) => process.emitWarning(`Could not record runner reconcile telemetry: ${String(error)}`));
158
255
  if (!closing) {
159
256
  unsubscribeRunnerUpdates ??= container.runnerRegistry.subscribe(() => requestPublish(requestedSessionId), requestedSessionId);
160
257
  for (const id of promotedIds) watchRunner(id);
161
258
  requestPublish(requestedSessionId);
162
- await sweepHistory();
163
- if (closing) return;
164
- statusTimer ??= setInterval(() => {
165
- refreshSession(requestedSessionId);
166
- }, 500);
167
- statusTimer.unref?.();
168
- historyTimer ??= setInterval(() => {
169
- sweepHistory();
170
- }, HISTORY_SWEEP_INTERVAL_MS);
171
- historyTimer.unref?.();
259
+ detach ??= host.attach({
260
+ sessionId: requestedSessionId,
261
+ paths: container.paths,
262
+ historyTtlMs: getLogTtlMs(container.environment),
263
+ refresh: () => refreshSession(requestedSessionId),
264
+ reclaimOrphans
265
+ });
172
266
  }
173
267
  })().catch((error) => {
174
268
  supervision = void 0;
@@ -181,36 +275,36 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
181
275
  await supervision?.catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
182
276
  const ownedSessionId = sessionId;
183
277
  if (ownedSessionId === void 0) return;
184
- const records = await container.runnerRegistry.listBySession(ownedSessionId).catch(() => []);
185
- await Promise.all(records.map(async (record) => {
186
- try {
187
- if (!await stopRunnerProcess(record, container.launcher, container.rmuxBackend, {
188
- registry: container.runnerRegistry,
189
- intent: {
278
+ await runCleanups([
279
+ async () => {
280
+ const records = await container.runnerRegistry.listBySession(ownedSessionId);
281
+ const errors = (await Promise.allSettled(records.map(async (record) => {
282
+ await stopRunnerProcess(record, container.launcher, container.rmuxBackend, {
283
+ registry: container.runnerRegistry,
284
+ intent: {
285
+ reason: "stopped",
286
+ terminationReason: "parent_session_cleanup",
287
+ stopReason: "session ended"
288
+ }
289
+ });
290
+ const deadline = container.clock.now() + TERM_GRACE_MS;
291
+ while (container.processControl.isAlive(record.pid)) {
292
+ if (container.clock.now() >= deadline) throw new Error(`Could not stop runner ${record.id} during session shutdown`);
293
+ await new Promise((resolve) => container.clock.after(100, resolve));
294
+ }
295
+ await container.runnerRegistry.complete(record.id, {
190
296
  reason: "stopped",
191
- terminationReason: "parent_session_cleanup",
297
+ code: null,
298
+ signal: null,
192
299
  stopReason: "session ended"
193
- }
194
- }) && container.processControl.isAlive(record.pid)) {
195
- process.emitWarning(`Could not stop runner ${record.id} during session shutdown`);
196
- return;
197
- }
198
- await container.runnerRegistry.complete(record.id, {
199
- reason: "stopped",
200
- code: null,
201
- signal: null,
202
- stopReason: "session ended"
203
- }, ownedSessionId);
204
- } catch (error) {
205
- process.emitWarning(`Could not clean up runner ${record.id}: ${String(error)}`);
206
- }
207
- }));
208
- try {
209
- await container.ptyHost.disposeAll();
210
- } finally {
211
- container.lifeline.dispose();
212
- container.runnerRegistry.close();
213
- }
300
+ }, ownedSessionId);
301
+ }))).filter((result) => result.status === "rejected").map((result) => result.reason);
302
+ if (errors.length) throw new AggregateError(errors, "Runner process cleanup failed.");
303
+ },
304
+ () => container.ptyHost.disposeAll(),
305
+ () => container.lifeline.dispose(),
306
+ () => container.runnerRegistry.close()
307
+ ], "Runner runtime cleanup failed.");
214
308
  })();
215
309
  return runtimeDisposal;
216
310
  };
@@ -240,7 +334,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
240
334
  wakeForFinished(ownedSessionId);
241
335
  }
242
336
  } catch (error) {
243
- process.emitWarning(`Could not refresh doom-runner: ${String(error)}`);
337
+ process.emitWarning(`Could not refresh po-runner: ${String(error)}`);
244
338
  }
245
339
  };
246
340
  const publishRuns = async (ownedSessionId) => {
@@ -299,8 +393,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
299
393
  const record = await container.runnerRegistry.get(id, ownedSessionId);
300
394
  if (closing) return;
301
395
  if (record?.state === "running") continue;
302
- if (record) await wakeAgent?.(formatRunnerFinished(record), `runner-finished:${JSON.stringify([ownedSessionId, id])}`);
303
- if (record) await telemetry?.recordEvent("doom_runner.process_finished", {
396
+ if (record) await wakeAgent?.(formatRunnerFinished(record), `runner-finished:${JSON.stringify([ownedSessionId, id])}`, formatRunnerFinishedNotice(record));
397
+ if (record) await telemetry?.recordEvent("po_runner.process_finished", {
304
398
  outcome: "completed",
305
399
  "runner.exit_code": record.exit?.code ?? 0,
306
400
  "runner.backend": record.backend
@@ -342,7 +436,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
342
436
  activity: {
343
437
  name: "runner",
344
438
  start: async (executionContext) => {
345
- await ensureSession(executionContext.sessionId);
439
+ ensureSession(executionContext.sessionId).catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
346
440
  requestPublish(executionContext.sessionId);
347
441
  return () => {};
348
442
  }
@@ -365,7 +459,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
365
459
  const text = activeRunnerRecovery(active);
366
460
  if (!text) return;
367
461
  await execution.session.appendMessage?.({
368
- type: "doom-runner-compaction",
462
+ type: "po-runner-compaction",
369
463
  text,
370
464
  display: false,
371
465
  details: {
@@ -376,8 +470,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
376
470
  if (!closing) recoveredCompactionId = event.entryId;
377
471
  },
378
472
  backgroundWorkPlugin: (context) => {
379
- context.inject([DOOM_BACKGROUND_WORK_SERVICE], (serviceContext) => {
380
- const service = readDoomBackgroundWorkService(serviceContext);
473
+ context.inject([PO_BACKGROUND_WORK_SERVICE], (serviceContext) => {
474
+ const service = readPoBackgroundWorkService(serviceContext);
381
475
  if (!service) return void 0;
382
476
  const registration = service.register({
383
477
  provider: BACKGROUND_WORK_PROVIDER,
@@ -395,8 +489,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
395
489
  closing = true;
396
490
  disposal = (async () => {
397
491
  closing = true;
398
- clearInterval(statusTimer);
399
- clearInterval(historyTimer);
492
+ detach?.();
493
+ detach = void 0;
400
494
  clearTimeout(retryTimer);
401
495
  retryTimer = void 0;
402
496
  watched.clear();
@@ -406,16 +500,17 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
406
500
  unsubscribeRunnerUpdates = void 0;
407
501
  await wakes;
408
502
  await publishInFlight;
409
- await historySweep;
410
503
  await refreshInFlight;
411
504
  try {
412
505
  execution?.client.setStatus(RUNNER_STATUS_KEY, void 0);
413
506
  } catch (error) {
414
507
  process.emitWarning(`Could not clear runner status: ${String(error)}`);
415
508
  }
416
- await disposeRuntime();
417
- await telemetry?.recordEvent("doom_runner.session_finished", { outcome: "stopped" });
418
- await telemetry?.shutdown();
509
+ await runCleanups([
510
+ disposeRuntime,
511
+ () => telemetry?.recordEvent("po_runner.session_finished", { outcome: "stopped" }),
512
+ () => telemetry?.shutdown()
513
+ ], "Runner shutdown failed.");
419
514
  })();
420
515
  return disposal;
421
516
  }
@@ -531,27 +626,41 @@ function validate(parsed) {
531
626
  }
532
627
  //#endregion
533
628
  //#region src/extensions/workspaces/sessions/(backend)/_lib/serverRoot.ts
534
- const RUNNER_SERVER_SCOPE_SERVICE = "doom/runner-server-scope";
535
- const createRunnerServerRoot = ({ host, agent, signal }) => {
536
- if (!host.context.directEvents) throw new Error("Runner headless facet requires the session direct event bus.");
537
- if (!host.context.cwd || !host.context.environment) throw new Error("Runner headless facet requires session cwd and environment.");
629
+ const RUNNER_SERVER_SCOPE_SERVICE = "po/runner-server-scope";
630
+ const createRunnerServerRoot = async ({ host, agent, signal, resources }) => {
631
+ if (!host.context.directEvents) throw new Error("Runner server plugin requires the session direct event bus.");
632
+ if (!host.context.cwd || !host.context.environment) throw new Error("Runner server plugin requires session cwd and environment.");
538
633
  const loaded = new RunnerSettingsLoader().load(host.context.cwd, true);
539
634
  const settings = Object.freeze({
540
635
  ...loaded.settings,
541
636
  ...loaded.settings.errorPatterns ? { errorPatterns: Object.freeze([...loaded.settings.errorPatterns]) } : {}
542
637
  });
543
638
  for (const issue of loaded.issues) process.emitWarning(`${RUNNER_SETTINGS_FILE}: ${issue}`);
639
+ const environment = host.context.environment;
640
+ const runnerHost = await resources.acquire(["runner-host", environment["PROCESS_REGISTRY_PATH"] ?? null], () => createRunnerHost({
641
+ processRegistry: createDefaultProcessRegistry(environment),
642
+ clock: new SystemClock(),
643
+ statusPollMs: 500,
644
+ historySweepMs: HISTORY_SWEEP_INTERVAL_MS,
645
+ onWarning: (message) => process.emitWarning(message)
646
+ }), (shared) => shared.dispose());
544
647
  const dependencies = createRunnerDependencies({
545
648
  settings,
546
649
  cwd: host.context.cwd,
547
- environment: host.context.environment,
650
+ environment,
651
+ processRegistry: runnerHost.processRegistry,
548
652
  ...host.context.executionBudget === void 0 ? {} : { executionBudget: host.context.executionBudget }
549
653
  });
550
654
  const execution = agent?.context;
551
- const wakeAgent = execution && (async (content, requestId) => {
655
+ const wakeAgent = execution && (async (content, requestId, notice) => {
552
656
  try {
553
- if (!execution.session.admitPrompt) throw new Error("The session cannot admit a runner notification.");
554
- await execution.session.admitPrompt(content, "steer", void 0, requestId);
657
+ if (!execution.session.admitMessage) throw new Error("The session cannot admit a runner notification.");
658
+ await execution.session.admitMessage({
659
+ type: "po-runner-finished",
660
+ text: content,
661
+ display: true,
662
+ details: { notice }
663
+ }, "steer", requestId);
555
664
  } catch (error) {
556
665
  await Promise.resolve().then(() => execution.client.notify({
557
666
  body: String(error),
@@ -560,7 +669,7 @@ const createRunnerServerRoot = ({ host, agent, signal }) => {
560
669
  throw error;
561
670
  }
562
671
  });
563
- const runtime = createRunnerServerRuntime(dependencies, host.context.directEvents, wakeAgent, execution);
672
+ const runtime = createRunnerServerRuntime(dependencies, runnerHost, host.context.directEvents, wakeAgent, execution);
564
673
  const bash = (wakeOnExit) => createHeadlessBashTool({ run: async (request) => {
565
674
  await runtime.ensureSession(request.sessionId);
566
675
  const result = await dependencies.bashRunService.run({
@@ -582,7 +691,9 @@ const createRunnerServerRoot = ({ host, agent, signal }) => {
582
691
  context.plugin((providerContext) => providerContext.provide(RUNNER_SERVER_SCOPE_SERVICE, value));
583
692
  }],
584
693
  activities: [runtime.activity],
585
- onStart: execution ? () => runtime.ensureSession(execution.sessionId) : void 0,
694
+ onStart: execution ? () => {
695
+ runtime.ensureSession(execution.sessionId).catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
696
+ } : void 0,
586
697
  onStop: runtime.dispose
587
698
  };
588
699
  };
@@ -1164,8 +1275,8 @@ var session_compact_server_default = defineHook(({ root }) => ({
1164
1275
  //#region src/extensions/workspaces/sessions/(backend)/resource/po-use-runner.server.ts
1165
1276
  var po_use_runner_server_default = defineResource({
1166
1277
  name: "po-use-runner",
1167
- description: "Use Doom Pi Runner to supervise shell commands, inspect durable logs, provide interactive input, and stop background runs.",
1168
- when: DOOM_HELP_WHEN,
1278
+ description: "Use Po Pi Runner to supervise shell commands, inspect durable logs, provide interactive input, and stop background runs.",
1279
+ when: PO_HELP_WHEN,
1169
1280
  kind: "skill",
1170
1281
  path: packageResourcePath(import.meta.url, "src/prompts/po-use-runner/SKILL.md"),
1171
1282
  read: () => readPackageResource(import.meta.url, "src/prompts/po-use-runner/SKILL.md")
@@ -1176,21 +1287,24 @@ var bash_server_default = defineServerTool((context) => context.root.tool);
1176
1287
  //#endregion
1177
1288
  //#region generated/server.ts
1178
1289
  const at = (value, context) => typeof value === "function" ? value(context) : value;
1290
+ /* v8 ignore next -- generated normalization branch */
1291
+ const defined = (values) => values.filter((value) => value !== void 0);
1179
1292
  const via = (identity, value) => value === void 0 ? void 0 : {
1180
1293
  ...identity,
1181
1294
  ...value
1182
1295
  };
1183
- const facet = defineServerPlugin({
1296
+ const serverPlugin = defineServerPlugin({
1184
1297
  name: "@agimon-ai/po-runner",
1185
1298
  providerOverrides: composeServerProviderOverrides(root_server_default),
1299
+ injects: composeRootInjects({ session: [root_server_default] }),
1186
1300
  global: () => ({ get channels() {
1187
1301
  return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
1188
1302
  } }),
1189
- workspace: () => ({ get channels() {
1190
- return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
1303
+ workspace: (context) => ({ get channels() {
1304
+ return defined([context.hosted("global") ? void 0 : () => via({ frameType: "runner_runs" }, runnerRuns_server_default())]);
1191
1305
  } }),
1192
1306
  session: async (context) => {
1193
- const scopeSession = await root_server_default(context);
1307
+ const scopeSession = await context.scopeRoot("session", root_server_default, context);
1194
1308
  const contextSession = {
1195
1309
  ...context,
1196
1310
  root: scopeSession.value
@@ -1201,7 +1315,7 @@ const facet = defineServerPlugin({
1201
1315
  return [at(route_server_default, contextSession)];
1202
1316
  },
1203
1317
  get channels() {
1204
- return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
1318
+ return defined([context.hosted("global") ? void 0 : () => via({ frameType: "runner_runs" }, runnerRuns_server_default())]);
1205
1319
  },
1206
1320
  get commands() {
1207
1321
  return [via({ name: "runners" }, at(runners_server_default, contextSession))];
@@ -1223,6 +1337,6 @@ const facet = defineServerPlugin({
1223
1337
  }
1224
1338
  });
1225
1339
  //#endregion
1226
- export { facet as default, facet };
1340
+ export { serverPlugin as default, serverPlugin };
1227
1341
 
1228
1342
  //# sourceMappingURL=server.mjs.map