@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.
- package/LICENSE +149 -21
- package/README.md +17 -17
- package/dist/ansiScrub.mjs +1 -2
- package/dist/apiContracts.cjs +1 -1
- package/dist/apiContracts.cjs.map +1 -1
- package/dist/apiContracts.mjs +1 -1
- package/dist/apiContracts.mjs.map +1 -1
- package/dist/{bashResult-bIVSzoj-.mjs → bashResult-BqDa7sbC.mjs} +10 -9
- package/dist/bashResult-BqDa7sbC.mjs.map +1 -0
- package/dist/{bashResult-DNgtahGR.cjs → bashResult-C2iKhHpD.cjs} +10 -9
- package/dist/bashResult-C2iKhHpD.cjs.map +1 -0
- package/dist/{bashRunService-CJ02XaAq.mjs → bashRunService-Cl3pYccr.mjs} +2 -2
- package/dist/bashRunService-Cl3pYccr.mjs.map +1 -0
- package/dist/{bashRunService-DyqxOSlx.cjs → bashRunService-DjOH5kye.cjs} +2 -2
- package/dist/bashRunService-DjOH5kye.cjs.map +1 -0
- package/dist/bashRunService.cjs +1 -1
- package/dist/bashRunService.d.mts +3 -3
- package/dist/bashRunService.mjs +1 -2
- package/dist/bashSchema.cjs +1 -1
- package/dist/bashSchema.mjs +1 -2
- package/dist/{bashTool-C-k7fmyh.mjs → bashTool-BvC3YOgG.mjs} +2 -2
- package/dist/{bashTool-C-k7fmyh.mjs.map → bashTool-BvC3YOgG.mjs.map} +1 -1
- package/dist/{bashTool-CdgtqVFD.cjs → bashTool-euL6zMDl.cjs} +2 -2
- package/dist/{bashTool-CdgtqVFD.cjs.map → bashTool-euL6zMDl.cjs.map} +1 -1
- package/dist/bashTool.cjs +3 -3
- package/dist/bashTool.d.mts +1 -1
- package/dist/bashTool.mjs +3 -3
- package/dist/bin/cli.cjs +6 -6
- package/dist/bin/cli.cjs.map +1 -1
- package/dist/bin/cli.mjs +7 -7
- package/dist/bin/cli.mjs.map +1 -1
- package/dist/bin/logSink.cjs +6 -6
- package/dist/bin/logSink.cjs.map +1 -1
- package/dist/bin/logSink.mjs +7 -7
- package/dist/bin/logSink.mjs.map +1 -1
- package/dist/bin/runnerHost.cjs +4 -4
- package/dist/bin/runnerHost.cjs.map +1 -1
- package/dist/bin/runnerHost.mjs +5 -5
- package/dist/bin/runnerHost.mjs.map +1 -1
- package/dist/{cliApp-Dj9nwaOv.cjs → cliApp-T8Fx_-1j.cjs} +6 -6
- package/dist/cliApp-T8Fx_-1j.cjs.map +1 -0
- package/dist/{cliApp-v8Z3rMCi.mjs → cliApp-q97eVh4E.mjs} +6 -6
- package/dist/cliApp-q97eVh4E.mjs.map +1 -0
- package/dist/cliApp.cjs +1 -1
- package/dist/cliApp.d.mts +1 -1
- package/dist/cliApp.mjs +1 -2
- package/dist/clock.mjs +1 -2
- package/dist/{compaction-4QSUsBxq.cjs → compaction-Cduebib_.cjs} +3 -3
- package/dist/compaction-Cduebib_.cjs.map +1 -0
- package/dist/{compaction-DCw80VZj.mjs → compaction-nNlE6e5I.mjs} +3 -3
- package/dist/compaction-nNlE6e5I.mjs.map +1 -0
- package/dist/compaction.cjs +1 -1
- package/dist/compaction.d.mts +1 -1
- package/dist/compaction.mjs +1 -2
- package/dist/config.cjs +1 -1
- package/dist/config.d.mts +1 -1
- package/dist/config.mjs +1 -2
- package/dist/extensions/mcp-ui.mjs.map +1 -1
- package/dist/extensions/mcp.cjs +8 -7
- package/dist/extensions/mcp.cjs.map +1 -1
- package/dist/extensions/mcp.d.mts +1 -1
- package/dist/extensions/mcp.mjs +7 -6
- package/dist/extensions/mcp.mjs.map +1 -1
- package/dist/extensions/native.mjs +1 -1
- package/dist/extensions/native.mjs.map +1 -1
- package/dist/extensions/server.cjs +233 -119
- package/dist/extensions/server.cjs.map +1 -1
- package/dist/extensions/server.d.mts +2 -2
- package/dist/extensions/server.d.mts.map +1 -1
- package/dist/extensions/server.mjs +233 -119
- package/dist/extensions/server.mjs.map +1 -1
- package/dist/extensions/web.mjs +88 -62
- package/dist/extensions/web.mjs.map +1 -1
- package/dist/{headless-BGYfIlNk.mjs → headless-DOlCixyf.mjs} +5 -5
- package/dist/headless-DOlCixyf.mjs.map +1 -0
- package/dist/{headless-CHUsBGhg.cjs → headless-Dko_yBiy.cjs} +5 -5
- package/dist/headless-Dko_yBiy.cjs.map +1 -0
- package/dist/{index-Dhi8asLH.d.mts → index--xF7DvsE.d.mts} +4 -4
- package/dist/{index-Dhi8asLH.d.mts.map → index--xF7DvsE.d.mts.map} +1 -1
- package/dist/{index-BZL7keVW.d.mts → index-BCCF1sGD.d.mts} +2 -2
- package/dist/{index-BZL7keVW.d.mts.map → index-BCCF1sGD.d.mts.map} +1 -1
- package/dist/{index-BwB_jTI9.d.mts → index-BzeXJk6V.d.mts} +5 -5
- package/dist/index-BzeXJk6V.d.mts.map +1 -0
- package/dist/{index-D9-IXax4.d.mts → index-C-IC35d9.d.mts} +2 -2
- package/dist/{index-D9-IXax4.d.mts.map → index-C-IC35d9.d.mts.map} +1 -1
- package/dist/{index-DBz0DxnL.d.mts → index-CzCF_OP9.d.mts} +3 -4
- package/dist/index-CzCF_OP9.d.mts.map +1 -0
- package/dist/index.cjs +5 -5
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +5 -5
- package/dist/{launcher-BDm6-DiQ.mjs → launcher-CCYsFBM9.mjs} +3 -3
- package/dist/{launcher-BDm6-DiQ.mjs.map → launcher-CCYsFBM9.mjs.map} +1 -1
- package/dist/{launcher-SlyE8R3b.cjs → launcher-ZgDdyXpq.cjs} +8 -2
- package/dist/{launcher-SlyE8R3b.cjs.map → launcher-ZgDdyXpq.cjs.map} +1 -1
- package/dist/launcher.cjs +1 -1
- package/dist/launcher.d.mts +1 -1
- package/dist/launcher.mjs +1 -2
- package/dist/{lifeline-BZaQA0rm.mjs → lifeline-Bm-bHIjS.mjs} +6 -6
- package/dist/lifeline-Bm-bHIjS.mjs.map +1 -0
- package/dist/{lifeline-BuV_erib.cjs → lifeline-m7laIzIP.cjs} +6 -6
- package/dist/lifeline-m7laIzIP.cjs.map +1 -0
- package/dist/lifeline.cjs +1 -1
- package/dist/lifeline.d.mts +1 -1
- package/dist/lifeline.mjs +1 -1
- package/dist/{logFile-CNvepZh0.cjs → logFile-CnPKtxPy.cjs} +2 -2
- package/dist/{logFile-CNvepZh0.cjs.map → logFile-CnPKtxPy.cjs.map} +1 -1
- package/dist/{logFile-KKPbkC-a.mjs → logFile-XcDHBwu1.mjs} +2 -2
- package/dist/{logFile-KKPbkC-a.mjs.map → logFile-XcDHBwu1.mjs.map} +1 -1
- package/dist/logFile.cjs +1 -1
- package/dist/logFile.d.mts +1 -1
- package/dist/logFile.mjs +1 -2
- package/dist/{logReader-B6J7L7Ua.cjs → logReader-DHCK2BEr.cjs} +4 -4
- package/dist/{logReader-B6J7L7Ua.cjs.map → logReader-DHCK2BEr.cjs.map} +1 -1
- package/dist/{logReader-UfbDbwQl.mjs → logReader-mq9uVurh.mjs} +4 -4
- package/dist/{logReader-UfbDbwQl.mjs.map → logReader-mq9uVurh.mjs.map} +1 -1
- package/dist/logReader.cjs +1 -1
- package/dist/logReader.mjs +1 -2
- package/dist/processControl.mjs +1 -2
- package/dist/{ptyHost-DlQtTB8F.mjs → ptyHost-CwbLLr90.mjs} +2 -2
- package/dist/{ptyHost-DlQtTB8F.mjs.map → ptyHost-CwbLLr90.mjs.map} +1 -1
- package/dist/{ptyHost-MI2Z6WTG.cjs → ptyHost-D35hNmtd.cjs} +2 -2
- package/dist/{ptyHost-MI2Z6WTG.cjs.map → ptyHost-D35hNmtd.cjs.map} +1 -1
- package/dist/ptyHost.cjs +1 -1
- package/dist/ptyHost.mjs +1 -2
- package/dist/{ptySpawner-DEi1KOnd.mjs → ptySpawner-C375NJnj.mjs} +2 -2
- package/dist/ptySpawner-C375NJnj.mjs.map +1 -0
- package/dist/{ptySpawner-ijw0g5_T.cjs → ptySpawner-C39IzbRo.cjs} +2 -2
- package/dist/ptySpawner-C39IzbRo.cjs.map +1 -0
- package/dist/ptySpawner.cjs +1 -1
- package/dist/ptySpawner.d.mts +1 -1
- package/dist/ptySpawner.mjs +1 -2
- package/dist/{reconcile-DMeNSxwn.mjs → reconcile-5cZ11jSD.cjs} +12 -42
- package/dist/reconcile-5cZ11jSD.cjs.map +1 -0
- package/dist/{reconcile-BugwYFbV.cjs → reconcile-wNYQJZF-.mjs} +2 -62
- package/dist/reconcile-wNYQJZF-.mjs.map +1 -0
- package/dist/reconcile.cjs +1 -2
- package/dist/reconcile.d.mts +2 -9
- package/dist/reconcile.d.mts.map +1 -1
- package/dist/reconcile.mjs +1 -2
- package/dist/responseEnvelope.cjs +2 -2
- package/dist/responseEnvelope.d.mts +3 -3
- package/dist/responseEnvelope.mjs +2 -2
- package/dist/{rmuxBackend-DlxgqRZ1.cjs → rmuxBackend-Dh0CYVAL.cjs} +5 -5
- package/dist/rmuxBackend-Dh0CYVAL.cjs.map +1 -0
- package/dist/{rmuxBackend-DfyQwJrc.mjs → rmuxBackend-rjrVTG6K.mjs} +4 -4
- package/dist/rmuxBackend-rjrVTG6K.mjs.map +1 -0
- package/dist/rmuxBackend.cjs +1 -1
- package/dist/rmuxBackend.d.mts +1 -1
- package/dist/rmuxBackend.mjs +1 -2
- package/dist/{rtkProcessor-Bc4L4o_8.cjs → rtkProcessor-DSGbM-Cm.cjs} +4 -4
- package/dist/rtkProcessor-DSGbM-Cm.cjs.map +1 -0
- package/dist/{rtkProcessor-B9KPdyzr.mjs → rtkProcessor-Iw9gP5Xp.mjs} +3 -3
- package/dist/rtkProcessor-Iw9gP5Xp.mjs.map +1 -0
- package/dist/rtkProcessor.cjs +1 -1
- package/dist/rtkProcessor.d.mts +1 -1
- package/dist/rtkProcessor.mjs +1 -1
- package/dist/{runnerConfig-D2tGq5ZM.cjs → runnerConfig-BoLMinlx.cjs} +11 -11
- package/dist/runnerConfig-BoLMinlx.cjs.map +1 -0
- package/dist/{runnerConfig-BjtulXBI.d.mts → runnerConfig-DuWL6TJx.d.mts} +10 -10
- package/dist/{runnerConfig-BjtulXBI.d.mts.map → runnerConfig-DuWL6TJx.d.mts.map} +1 -1
- package/dist/{runnerConfig-BQBlVAXn.mjs → runnerConfig-XXMq4VQA.mjs} +11 -11
- package/dist/runnerConfig-XXMq4VQA.mjs.map +1 -0
- package/dist/{runnerDependencies-DruByBGS.mjs → runnerDependencies-7h_cxOva.mjs} +17 -17
- package/dist/runnerDependencies-7h_cxOva.mjs.map +1 -0
- package/dist/{runnerDependencies-KMZigIxB.cjs → runnerDependencies-DSun3xO-.cjs} +17 -17
- package/dist/runnerDependencies-DSun3xO-.cjs.map +1 -0
- package/dist/runnerDependencies.cjs +1 -1
- package/dist/runnerDependencies.d.mts +1 -1
- package/dist/runnerDependencies.mjs +1 -2
- package/dist/runnerNamer.d.mts +1 -1
- package/dist/runnerNamer.mjs +1 -2
- package/dist/{runnerPaths-BTEuzxw0.cjs → runnerPaths-B41rMOY6.cjs} +20 -38
- package/dist/runnerPaths-B41rMOY6.cjs.map +1 -0
- package/dist/{runnerPaths-B_dAAeco.mjs → runnerPaths-Dibbvyx_.mjs} +20 -38
- package/dist/runnerPaths-Dibbvyx_.mjs.map +1 -0
- package/dist/runnerPaths.cjs +1 -1
- package/dist/runnerPaths.d.mts +5 -7
- package/dist/runnerPaths.d.mts.map +1 -1
- package/dist/runnerPaths.mjs +1 -2
- package/dist/{runnerRegistry-CeOHEjBv.mjs → runnerRegistry-BgaR5O86.mjs} +12 -11
- package/dist/runnerRegistry-BgaR5O86.mjs.map +1 -0
- package/dist/{runnerRegistry-CtJiD02R.d.mts → runnerRegistry-V-Ocaf4N.d.mts} +1 -3
- package/dist/{runnerRegistry-CtJiD02R.d.mts.map → runnerRegistry-V-Ocaf4N.d.mts.map} +1 -1
- package/dist/{runnerRegistry-BmkZTJHi.cjs → runnerRegistry-dQYlMSpQ.cjs} +23 -10
- package/dist/runnerRegistry-dQYlMSpQ.cjs.map +1 -0
- package/dist/runnerRegistry.cjs +1 -1
- package/dist/runnerRegistry.d.mts +2 -2
- package/dist/runnerRegistry.mjs +1 -2
- package/dist/services/lifeline/client.cjs +2 -2
- package/dist/services/lifeline/client.cjs.map +1 -1
- package/dist/services/lifeline/client.d.mts +1 -1
- package/dist/services/lifeline/client.mjs +2 -2
- package/dist/services/lifeline/client.mjs.map +1 -1
- package/dist/{session-Chsb_Nh2.mjs → session-BKYnH4R6.mjs} +2 -2
- package/dist/{session-Chsb_Nh2.mjs.map → session-BKYnH4R6.mjs.map} +1 -1
- package/dist/{session-BC43uEyG.cjs → session-BvqzhXZY.cjs} +2 -2
- package/dist/{session-BC43uEyG.cjs.map → session-BvqzhXZY.cjs.map} +1 -1
- package/dist/session.cjs +1 -1
- package/dist/session.mjs +1 -1
- package/dist/spawner.mjs +1 -2
- package/dist/{type-C31e1gla.d.mts → type-Do0YxwVQ.d.mts} +4 -4
- package/dist/{type-C31e1gla.d.mts.map → type-Do0YxwVQ.d.mts.map} +1 -1
- package/dist/{type-BXM03qSw.d.mts → type-DwMZoINK.d.mts} +8 -8
- package/dist/{type-BXM03qSw.d.mts.map → type-DwMZoINK.d.mts.map} +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +31 -34
- package/skills/{doom-runner → po-runner}/SKILL.md +15 -15
- package/src/prompts/po-use-runner/SKILL.md +11 -11
- package/dist/bashResult-DNgtahGR.cjs.map +0 -1
- package/dist/bashResult-bIVSzoj-.mjs.map +0 -1
- package/dist/bashRunService-CJ02XaAq.mjs.map +0 -1
- package/dist/bashRunService-DyqxOSlx.cjs.map +0 -1
- package/dist/cliApp-Dj9nwaOv.cjs.map +0 -1
- package/dist/cliApp-v8Z3rMCi.mjs.map +0 -1
- package/dist/compaction-4QSUsBxq.cjs.map +0 -1
- package/dist/compaction-DCw80VZj.mjs.map +0 -1
- package/dist/headless-BGYfIlNk.mjs.map +0 -1
- package/dist/headless-CHUsBGhg.cjs.map +0 -1
- package/dist/index-BwB_jTI9.d.mts.map +0 -1
- package/dist/index-DBz0DxnL.d.mts.map +0 -1
- package/dist/lifeline-BZaQA0rm.mjs.map +0 -1
- package/dist/lifeline-BuV_erib.cjs.map +0 -1
- package/dist/ptySpawner-DEi1KOnd.mjs.map +0 -1
- package/dist/ptySpawner-ijw0g5_T.cjs.map +0 -1
- package/dist/reconcile-BugwYFbV.cjs.map +0 -1
- package/dist/reconcile-DMeNSxwn.mjs.map +0 -1
- package/dist/rmuxBackend-DfyQwJrc.mjs.map +0 -1
- package/dist/rmuxBackend-DlxgqRZ1.cjs.map +0 -1
- package/dist/rtkProcessor-B9KPdyzr.mjs.map +0 -1
- package/dist/rtkProcessor-Bc4L4o_8.cjs.map +0 -1
- package/dist/runnerConfig-BQBlVAXn.mjs.map +0 -1
- package/dist/runnerConfig-D2tGq5ZM.cjs.map +0 -1
- package/dist/runnerDependencies-DruByBGS.mjs.map +0 -1
- package/dist/runnerDependencies-KMZigIxB.cjs.map +0 -1
- package/dist/runnerPaths-BTEuzxw0.cjs.map +0 -1
- package/dist/runnerPaths-B_dAAeco.mjs.map +0 -1
- package/dist/runnerRegistry-BmkZTJHi.cjs.map +0 -1
- package/dist/runnerRegistry-CeOHEjBv.mjs.map +0 -1
|
@@ -3,21 +3,23 @@ Object.defineProperties(exports, {
|
|
|
3
3
|
[Symbol.toStringTag]: { value: "Module" }
|
|
4
4
|
});
|
|
5
5
|
const require_rolldown_runtime = require("../rolldown-runtime-VH7oDXx4.cjs");
|
|
6
|
-
const require_runnerConfig = require("../runnerConfig-
|
|
7
|
-
const require_logReader = require("../logReader-
|
|
8
|
-
const require_headless = require("../headless-
|
|
9
|
-
const require_reconcile = require("../reconcile-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
6
|
+
const require_runnerConfig = require("../runnerConfig-BoLMinlx.cjs");
|
|
7
|
+
const require_logReader = require("../logReader-DHCK2BEr.cjs");
|
|
8
|
+
const require_headless = require("../headless-Dko_yBiy.cjs");
|
|
9
|
+
const require_reconcile = require("../reconcile-5cZ11jSD.cjs");
|
|
10
|
+
const require_clock = require("../clock-jqnLWziT.cjs");
|
|
11
|
+
const require_compaction = require("../compaction-Cduebib_.cjs");
|
|
12
|
+
const require_rmuxBackend = require("../rmuxBackend-Dh0CYVAL.cjs");
|
|
13
|
+
const require_launcher = require("../launcher-ZgDdyXpq.cjs");
|
|
14
|
+
const require_runnerDependencies = require("../runnerDependencies-DSun3xO-.cjs");
|
|
15
|
+
const require_runnerPaths = require("../runnerPaths-B41rMOY6.cjs");
|
|
16
|
+
const require_runnerRegistry = require("../runnerRegistry-dQYlMSpQ.cjs");
|
|
15
17
|
let node_fs = require("node:fs");
|
|
16
18
|
node_fs = require_rolldown_runtime.__toESM(node_fs, 1);
|
|
17
19
|
let node_path = require("node:path");
|
|
18
20
|
node_path = require_rolldown_runtime.__toESM(node_path, 1);
|
|
19
21
|
let _agimon_ai_po_core_childProcess = require("@agimon-ai/po-core/childProcess");
|
|
20
|
-
let
|
|
22
|
+
let _agimon_ai_po_core_serverPlugin = require("@agimon-ai/po-core/serverPlugin");
|
|
21
23
|
let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
|
|
22
24
|
let _agimon_ai_po_core_backgroundWork = require("@agimon-ai/po-core/backgroundWork");
|
|
23
25
|
let _agimon_ai_po_telemetry = require("@agimon-ai/po-telemetry");
|
|
@@ -25,6 +27,10 @@ let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent")
|
|
|
25
27
|
let hono = require("hono");
|
|
26
28
|
let hono_streaming = require("hono/streaming");
|
|
27
29
|
let _agimon_ai_po_core_help = require("@agimon-ai/po-core/help");
|
|
30
|
+
const RUNNER_STATUS_KEY = "po-runner-runners";
|
|
31
|
+
const BACKGROUND_WORK_PROVIDER = "po-runner";
|
|
32
|
+
const HISTORY_SWEEP_INTERVAL_MS = 6e5;
|
|
33
|
+
//#endregion
|
|
28
34
|
//#region src/constants/runnerSettings.ts
|
|
29
35
|
const RUNNER_SETTINGS_FILE = "po-runner.json";
|
|
30
36
|
const RATIO_KEYS = ["headRatio", "errorBudgetRatio"];
|
|
@@ -32,10 +38,110 @@ const MAX_RESULT_BYTES_CEILING = 262144;
|
|
|
32
38
|
const MAX_RESULT_LINES_CEILING = 5e3;
|
|
33
39
|
const MAX_RESULT_TOKENS_CEILING = 1e5;
|
|
34
40
|
//#endregion
|
|
35
|
-
//#region src/
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
//#region src/services/runnerHost/index.ts
|
|
42
|
+
const describe = (error) => error instanceof Error ? error.message : String(error);
|
|
43
|
+
/** Runs `pass` again `ms` after the previous pass finished, so two passes never overlap. */
|
|
44
|
+
function repeat(clock, ms, pass) {
|
|
45
|
+
let stopped = false;
|
|
46
|
+
let cancel;
|
|
47
|
+
let running;
|
|
48
|
+
const arm = () => {
|
|
49
|
+
cancel = clock.after(ms, () => {
|
|
50
|
+
cancel = void 0;
|
|
51
|
+
running = pass().finally(() => {
|
|
52
|
+
running = void 0;
|
|
53
|
+
if (!stopped) arm();
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
arm();
|
|
58
|
+
return { async stop() {
|
|
59
|
+
stopped = true;
|
|
60
|
+
cancel?.();
|
|
61
|
+
await running;
|
|
62
|
+
} };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* The housekeeping every session running one po-runner build in one hub shares.
|
|
66
|
+
*
|
|
67
|
+
* A session used to open its own registry connection and arm its own status poll and history
|
|
68
|
+
* sweep, and each sweep walked the whole runner store. Here one loop refreshes the attached sessions
|
|
69
|
+
* one at a time, one sweep per store spares every attached session at once, and runners a crashed
|
|
70
|
+
* server left behind are reclaimed once rather than at every session start.
|
|
71
|
+
*/
|
|
72
|
+
function createRunnerHost(options) {
|
|
73
|
+
const sessions = /* @__PURE__ */ new Set();
|
|
74
|
+
let closed = false;
|
|
75
|
+
let reclaiming;
|
|
76
|
+
let sweeping;
|
|
77
|
+
const refreshAll = async () => {
|
|
78
|
+
for (const session of sessions) {
|
|
79
|
+
if (closed) return;
|
|
80
|
+
try {
|
|
81
|
+
await session.refresh();
|
|
82
|
+
} catch (error) {
|
|
83
|
+
options.onWarning(`Could not refresh po-runner session ${session.sessionId}: ${describe(error)}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const sweepAll = () => {
|
|
88
|
+
sweeping ??= (async () => {
|
|
89
|
+
try {
|
|
90
|
+
const byStore = /* @__PURE__ */ new Map();
|
|
91
|
+
for (const session of sessions) {
|
|
92
|
+
const store = session.paths.storeDirectory();
|
|
93
|
+
byStore.set(store, [...byStore.get(store) ?? [], session]);
|
|
94
|
+
}
|
|
95
|
+
for (const group of byStore.values()) {
|
|
96
|
+
const [first] = group;
|
|
97
|
+
if (closed || first === void 0) return;
|
|
98
|
+
const live = new Set(group.map((session) => session.sessionId));
|
|
99
|
+
const now = options.clock.now();
|
|
100
|
+
const result = first.paths.sweepHistoryAsync ? await first.paths.sweepHistoryAsync(first.historyTtlMs, now, live) : first.paths.sweepHistory(first.historyTtlMs, now, live);
|
|
101
|
+
for (const error of result.errors) options.onWarning(error);
|
|
102
|
+
}
|
|
103
|
+
} catch (error) {
|
|
104
|
+
options.onWarning(`Could not sweep po-runner history: ${describe(error)}`);
|
|
105
|
+
}
|
|
106
|
+
})().finally(() => {
|
|
107
|
+
sweeping = void 0;
|
|
108
|
+
});
|
|
109
|
+
return sweeping;
|
|
110
|
+
};
|
|
111
|
+
const polling = repeat(options.clock, options.statusPollMs, refreshAll);
|
|
112
|
+
const sweeper = repeat(options.clock, options.historySweepMs, sweepAll);
|
|
113
|
+
return {
|
|
114
|
+
processRegistry: {
|
|
115
|
+
registerProcess: (...args) => options.processRegistry.registerProcess(...args),
|
|
116
|
+
releaseProcess: (...args) => options.processRegistry.releaseProcess(...args),
|
|
117
|
+
listProcesses: (...args) => options.processRegistry.listProcesses(...args),
|
|
118
|
+
close: () => void 0
|
|
119
|
+
},
|
|
120
|
+
attach(session) {
|
|
121
|
+
if (closed) throw new Error("The po-runner host is disposed.");
|
|
122
|
+
sessions.add(session);
|
|
123
|
+
if (reclaiming === void 0) {
|
|
124
|
+
reclaiming = session.reclaimOrphans().catch((error) => options.onWarning(`Could not reclaim orphaned runners: ${describe(error)}`));
|
|
125
|
+
sweepAll();
|
|
126
|
+
}
|
|
127
|
+
return () => {
|
|
128
|
+
sessions.delete(session);
|
|
129
|
+
};
|
|
130
|
+
},
|
|
131
|
+
async dispose() {
|
|
132
|
+
if (closed) return;
|
|
133
|
+
closed = true;
|
|
134
|
+
sessions.clear();
|
|
135
|
+
await Promise.all([
|
|
136
|
+
polling.stop(),
|
|
137
|
+
sweeper.stop(),
|
|
138
|
+
reclaiming,
|
|
139
|
+
sweeping
|
|
140
|
+
]);
|
|
141
|
+
options.processRegistry.close();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
39
145
|
//#endregion
|
|
40
146
|
//#region src/constants/webRunners.ts
|
|
41
147
|
const RUNNER_RUNS_TYPE = "runner_runs";
|
|
@@ -91,9 +197,9 @@ function presentRunnerRuns(records, now) {
|
|
|
91
197
|
//#endregion
|
|
92
198
|
//#region src/services/runnerServerRuntime/index.ts
|
|
93
199
|
const COMPLETION_RETRY_MS = 1e3;
|
|
94
|
-
function createRunnerServerRuntime(container, directEvents, wakeAgent, execution) {
|
|
95
|
-
const telemetry = execution ? (0, _agimon_ai_po_telemetry.
|
|
96
|
-
serviceName: "
|
|
200
|
+
function createRunnerServerRuntime(container, host, directEvents, wakeAgent, execution) {
|
|
201
|
+
const telemetry = execution ? (0, _agimon_ai_po_telemetry.createPoTelemetry)({
|
|
202
|
+
serviceName: "po-runner",
|
|
97
203
|
packageName: "@agimon-ai/po-runner",
|
|
98
204
|
cwd: execution.cwd,
|
|
99
205
|
env: execution.environment,
|
|
@@ -112,41 +218,31 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
112
218
|
let wakes = Promise.resolve();
|
|
113
219
|
let closing = false;
|
|
114
220
|
let retryTimer;
|
|
115
|
-
|
|
116
|
-
let
|
|
117
|
-
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
221
|
+
/** Stops the shared loop refreshing this session and sweeping around it. */
|
|
222
|
+
let detach;
|
|
223
|
+
/** Every runner of every session the registry knows, reclaimed when its owning process is gone. */
|
|
224
|
+
const reclaimOrphans = async () => {
|
|
225
|
+
const reclaimed = await require_reconcile.reconcileActiveRunners({
|
|
226
|
+
registry: container.runnerRegistry,
|
|
227
|
+
launcher: container.launcher,
|
|
228
|
+
rmuxBackend: container.rmuxBackend,
|
|
229
|
+
processControl: container.processControl,
|
|
230
|
+
currentHostPid: process.pid,
|
|
231
|
+
startup: false
|
|
126
232
|
});
|
|
127
|
-
|
|
233
|
+
for (const error of reclaimed.errors) process.emitWarning(error);
|
|
128
234
|
};
|
|
129
235
|
const ensureSession = (requestedSessionId) => {
|
|
130
236
|
if (closing) return Promise.reject(/* @__PURE__ */ new Error("Runner runtime is closing."));
|
|
131
237
|
if (sessionId !== void 0 && sessionId !== requestedSessionId) throw new Error(`Runner runtime belongs to session ${sessionId}.`);
|
|
132
238
|
sessionId ??= requestedSessionId;
|
|
133
239
|
supervision ??= (async () => {
|
|
134
|
-
|
|
240
|
+
telemetry?.recordEvent("po_runner.session_started", { outcome: "started" }).catch((error) => process.emitWarning(`Could not record runner session telemetry: ${String(error)}`));
|
|
135
241
|
if (closing) return;
|
|
136
242
|
container.paths.setSessionId(requestedSessionId);
|
|
137
243
|
if (await container.lifeline.arm(requestedSessionId) === void 0) throw new Error("Could not arm runner supervision lifeline.");
|
|
138
244
|
if (closing) return;
|
|
139
245
|
const promotedIds = (await container.runnerRegistry.listAll(requestedSessionId)).filter((record) => record.state === "running" && record.promoted).map((record) => record.id);
|
|
140
|
-
const legacy = await require_reconcile.cleanupLegacyRunnerStore({
|
|
141
|
-
registry: container.runnerRegistry,
|
|
142
|
-
launcher: container.launcher,
|
|
143
|
-
rmuxBackend: container.rmuxBackend,
|
|
144
|
-
processControl: container.processControl,
|
|
145
|
-
currentHostPid: process.pid,
|
|
146
|
-
paths: container.paths
|
|
147
|
-
});
|
|
148
|
-
for (const error of legacy.errors) process.emitWarning(error);
|
|
149
|
-
if (closing) return;
|
|
150
246
|
const reconciled = await require_reconcile.reconcileActiveRunners({
|
|
151
247
|
registry: container.runnerRegistry,
|
|
152
248
|
launcher: container.launcher,
|
|
@@ -154,28 +250,26 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
154
250
|
processControl: container.processControl,
|
|
155
251
|
currentHostPid: process.pid,
|
|
156
252
|
startup: true,
|
|
157
|
-
startupSessionId: requestedSessionId
|
|
253
|
+
startupSessionId: requestedSessionId,
|
|
254
|
+
active: await container.runnerRegistry.listBySession(requestedSessionId)
|
|
158
255
|
});
|
|
159
256
|
for (const error of reconciled.errors) process.emitWarning(error);
|
|
160
|
-
|
|
161
|
-
"runner.reclaimed_count":
|
|
162
|
-
"runner.error_count":
|
|
163
|
-
outcome:
|
|
164
|
-
});
|
|
257
|
+
telemetry?.recordEvent("po_runner.reconciled", {
|
|
258
|
+
"runner.reclaimed_count": reconciled.reclaimed.length,
|
|
259
|
+
"runner.error_count": reconciled.errors.length,
|
|
260
|
+
outcome: reconciled.errors.length === 0 ? "completed" : "degraded"
|
|
261
|
+
}).catch((error) => process.emitWarning(`Could not record runner reconcile telemetry: ${String(error)}`));
|
|
165
262
|
if (!closing) {
|
|
166
263
|
unsubscribeRunnerUpdates ??= container.runnerRegistry.subscribe(() => requestPublish(requestedSessionId), requestedSessionId);
|
|
167
264
|
for (const id of promotedIds) watchRunner(id);
|
|
168
265
|
requestPublish(requestedSessionId);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
sweepHistory();
|
|
177
|
-
}, HISTORY_SWEEP_INTERVAL_MS);
|
|
178
|
-
historyTimer.unref?.();
|
|
266
|
+
detach ??= host.attach({
|
|
267
|
+
sessionId: requestedSessionId,
|
|
268
|
+
paths: container.paths,
|
|
269
|
+
historyTtlMs: require_runnerConfig.getLogTtlMs(container.environment),
|
|
270
|
+
refresh: () => refreshSession(requestedSessionId),
|
|
271
|
+
reclaimOrphans
|
|
272
|
+
});
|
|
179
273
|
}
|
|
180
274
|
})().catch((error) => {
|
|
181
275
|
supervision = void 0;
|
|
@@ -188,36 +282,36 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
188
282
|
await supervision?.catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
|
|
189
283
|
const ownedSessionId = sessionId;
|
|
190
284
|
if (ownedSessionId === void 0) return;
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
285
|
+
await (0, _agimon_ai_po_core_extensionFile.runCleanups)([
|
|
286
|
+
async () => {
|
|
287
|
+
const records = await container.runnerRegistry.listBySession(ownedSessionId);
|
|
288
|
+
const errors = (await Promise.allSettled(records.map(async (record) => {
|
|
289
|
+
await require_reconcile.stopRunnerProcess(record, container.launcher, container.rmuxBackend, {
|
|
290
|
+
registry: container.runnerRegistry,
|
|
291
|
+
intent: {
|
|
292
|
+
reason: "stopped",
|
|
293
|
+
terminationReason: "parent_session_cleanup",
|
|
294
|
+
stopReason: "session ended"
|
|
295
|
+
}
|
|
296
|
+
});
|
|
297
|
+
const deadline = container.clock.now() + require_launcher.TERM_GRACE_MS;
|
|
298
|
+
while (container.processControl.isAlive(record.pid)) {
|
|
299
|
+
if (container.clock.now() >= deadline) throw new Error(`Could not stop runner ${record.id} during session shutdown`);
|
|
300
|
+
await new Promise((resolve) => container.clock.after(100, resolve));
|
|
301
|
+
}
|
|
302
|
+
await container.runnerRegistry.complete(record.id, {
|
|
197
303
|
reason: "stopped",
|
|
198
|
-
|
|
304
|
+
code: null,
|
|
305
|
+
signal: null,
|
|
199
306
|
stopReason: "session ended"
|
|
200
|
-
}
|
|
201
|
-
})
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
signal: null,
|
|
209
|
-
stopReason: "session ended"
|
|
210
|
-
}, ownedSessionId);
|
|
211
|
-
} catch (error) {
|
|
212
|
-
process.emitWarning(`Could not clean up runner ${record.id}: ${String(error)}`);
|
|
213
|
-
}
|
|
214
|
-
}));
|
|
215
|
-
try {
|
|
216
|
-
await container.ptyHost.disposeAll();
|
|
217
|
-
} finally {
|
|
218
|
-
container.lifeline.dispose();
|
|
219
|
-
container.runnerRegistry.close();
|
|
220
|
-
}
|
|
307
|
+
}, ownedSessionId);
|
|
308
|
+
}))).filter((result) => result.status === "rejected").map((result) => result.reason);
|
|
309
|
+
if (errors.length) throw new AggregateError(errors, "Runner process cleanup failed.");
|
|
310
|
+
},
|
|
311
|
+
() => container.ptyHost.disposeAll(),
|
|
312
|
+
() => container.lifeline.dispose(),
|
|
313
|
+
() => container.runnerRegistry.close()
|
|
314
|
+
], "Runner runtime cleanup failed.");
|
|
221
315
|
})();
|
|
222
316
|
return runtimeDisposal;
|
|
223
317
|
};
|
|
@@ -247,7 +341,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
247
341
|
wakeForFinished(ownedSessionId);
|
|
248
342
|
}
|
|
249
343
|
} catch (error) {
|
|
250
|
-
process.emitWarning(`Could not refresh
|
|
344
|
+
process.emitWarning(`Could not refresh po-runner: ${String(error)}`);
|
|
251
345
|
}
|
|
252
346
|
};
|
|
253
347
|
const publishRuns = async (ownedSessionId) => {
|
|
@@ -306,8 +400,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
306
400
|
const record = await container.runnerRegistry.get(id, ownedSessionId);
|
|
307
401
|
if (closing) return;
|
|
308
402
|
if (record?.state === "running") continue;
|
|
309
|
-
if (record) await wakeAgent?.(require_runnerRegistry.formatRunnerFinished(record), `runner-finished:${JSON.stringify([ownedSessionId, id])}
|
|
310
|
-
if (record) await telemetry?.recordEvent("
|
|
403
|
+
if (record) await wakeAgent?.(require_runnerRegistry.formatRunnerFinished(record), `runner-finished:${JSON.stringify([ownedSessionId, id])}`, require_runnerRegistry.formatRunnerFinishedNotice(record));
|
|
404
|
+
if (record) await telemetry?.recordEvent("po_runner.process_finished", {
|
|
311
405
|
outcome: "completed",
|
|
312
406
|
"runner.exit_code": record.exit?.code ?? 0,
|
|
313
407
|
"runner.backend": record.backend
|
|
@@ -349,7 +443,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
349
443
|
activity: {
|
|
350
444
|
name: "runner",
|
|
351
445
|
start: async (executionContext) => {
|
|
352
|
-
|
|
446
|
+
ensureSession(executionContext.sessionId).catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
|
|
353
447
|
requestPublish(executionContext.sessionId);
|
|
354
448
|
return () => {};
|
|
355
449
|
}
|
|
@@ -372,7 +466,7 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
372
466
|
const text = require_compaction.activeRunnerRecovery(active);
|
|
373
467
|
if (!text) return;
|
|
374
468
|
await execution.session.appendMessage?.({
|
|
375
|
-
type: "
|
|
469
|
+
type: "po-runner-compaction",
|
|
376
470
|
text,
|
|
377
471
|
display: false,
|
|
378
472
|
details: {
|
|
@@ -383,8 +477,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
383
477
|
if (!closing) recoveredCompactionId = event.entryId;
|
|
384
478
|
},
|
|
385
479
|
backgroundWorkPlugin: (context) => {
|
|
386
|
-
context.inject([_agimon_ai_po_core_backgroundWork.
|
|
387
|
-
const service = (0, _agimon_ai_po_core_backgroundWork.
|
|
480
|
+
context.inject([_agimon_ai_po_core_backgroundWork.PO_BACKGROUND_WORK_SERVICE], (serviceContext) => {
|
|
481
|
+
const service = (0, _agimon_ai_po_core_backgroundWork.readPoBackgroundWorkService)(serviceContext);
|
|
388
482
|
if (!service) return void 0;
|
|
389
483
|
const registration = service.register({
|
|
390
484
|
provider: BACKGROUND_WORK_PROVIDER,
|
|
@@ -402,8 +496,8 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
402
496
|
closing = true;
|
|
403
497
|
disposal = (async () => {
|
|
404
498
|
closing = true;
|
|
405
|
-
|
|
406
|
-
|
|
499
|
+
detach?.();
|
|
500
|
+
detach = void 0;
|
|
407
501
|
clearTimeout(retryTimer);
|
|
408
502
|
retryTimer = void 0;
|
|
409
503
|
watched.clear();
|
|
@@ -413,16 +507,17 @@ function createRunnerServerRuntime(container, directEvents, wakeAgent, execution
|
|
|
413
507
|
unsubscribeRunnerUpdates = void 0;
|
|
414
508
|
await wakes;
|
|
415
509
|
await publishInFlight;
|
|
416
|
-
await historySweep;
|
|
417
510
|
await refreshInFlight;
|
|
418
511
|
try {
|
|
419
512
|
execution?.client.setStatus(RUNNER_STATUS_KEY, void 0);
|
|
420
513
|
} catch (error) {
|
|
421
514
|
process.emitWarning(`Could not clear runner status: ${String(error)}`);
|
|
422
515
|
}
|
|
423
|
-
await
|
|
424
|
-
|
|
425
|
-
|
|
516
|
+
await (0, _agimon_ai_po_core_extensionFile.runCleanups)([
|
|
517
|
+
disposeRuntime,
|
|
518
|
+
() => telemetry?.recordEvent("po_runner.session_finished", { outcome: "stopped" }),
|
|
519
|
+
() => telemetry?.shutdown()
|
|
520
|
+
], "Runner shutdown failed.");
|
|
426
521
|
})();
|
|
427
522
|
return disposal;
|
|
428
523
|
}
|
|
@@ -538,27 +633,41 @@ function validate(parsed) {
|
|
|
538
633
|
}
|
|
539
634
|
//#endregion
|
|
540
635
|
//#region src/extensions/workspaces/sessions/(backend)/_lib/serverRoot.ts
|
|
541
|
-
const RUNNER_SERVER_SCOPE_SERVICE = "
|
|
542
|
-
const createRunnerServerRoot = ({ host, agent, signal }) => {
|
|
543
|
-
if (!host.context.directEvents) throw new Error("Runner
|
|
544
|
-
if (!host.context.cwd || !host.context.environment) throw new Error("Runner
|
|
636
|
+
const RUNNER_SERVER_SCOPE_SERVICE = "po/runner-server-scope";
|
|
637
|
+
const createRunnerServerRoot = async ({ host, agent, signal, resources }) => {
|
|
638
|
+
if (!host.context.directEvents) throw new Error("Runner server plugin requires the session direct event bus.");
|
|
639
|
+
if (!host.context.cwd || !host.context.environment) throw new Error("Runner server plugin requires session cwd and environment.");
|
|
545
640
|
const loaded = new RunnerSettingsLoader().load(host.context.cwd, true);
|
|
546
641
|
const settings = Object.freeze({
|
|
547
642
|
...loaded.settings,
|
|
548
643
|
...loaded.settings.errorPatterns ? { errorPatterns: Object.freeze([...loaded.settings.errorPatterns]) } : {}
|
|
549
644
|
});
|
|
550
645
|
for (const issue of loaded.issues) process.emitWarning(`${RUNNER_SETTINGS_FILE}: ${issue}`);
|
|
646
|
+
const environment = host.context.environment;
|
|
647
|
+
const runnerHost = await resources.acquire(["runner-host", environment["PROCESS_REGISTRY_PATH"] ?? null], () => createRunnerHost({
|
|
648
|
+
processRegistry: require_runnerRegistry.createDefaultProcessRegistry(environment),
|
|
649
|
+
clock: new require_clock.SystemClock(),
|
|
650
|
+
statusPollMs: 500,
|
|
651
|
+
historySweepMs: HISTORY_SWEEP_INTERVAL_MS,
|
|
652
|
+
onWarning: (message) => process.emitWarning(message)
|
|
653
|
+
}), (shared) => shared.dispose());
|
|
551
654
|
const dependencies = require_runnerDependencies.createRunnerDependencies({
|
|
552
655
|
settings,
|
|
553
656
|
cwd: host.context.cwd,
|
|
554
|
-
environment
|
|
657
|
+
environment,
|
|
658
|
+
processRegistry: runnerHost.processRegistry,
|
|
555
659
|
...host.context.executionBudget === void 0 ? {} : { executionBudget: host.context.executionBudget }
|
|
556
660
|
});
|
|
557
661
|
const execution = agent?.context;
|
|
558
|
-
const wakeAgent = execution && (async (content, requestId) => {
|
|
662
|
+
const wakeAgent = execution && (async (content, requestId, notice) => {
|
|
559
663
|
try {
|
|
560
|
-
if (!execution.session.
|
|
561
|
-
await execution.session.
|
|
664
|
+
if (!execution.session.admitMessage) throw new Error("The session cannot admit a runner notification.");
|
|
665
|
+
await execution.session.admitMessage({
|
|
666
|
+
type: "po-runner-finished",
|
|
667
|
+
text: content,
|
|
668
|
+
display: true,
|
|
669
|
+
details: { notice }
|
|
670
|
+
}, "steer", requestId);
|
|
562
671
|
} catch (error) {
|
|
563
672
|
await Promise.resolve().then(() => execution.client.notify({
|
|
564
673
|
body: String(error),
|
|
@@ -567,7 +676,7 @@ const createRunnerServerRoot = ({ host, agent, signal }) => {
|
|
|
567
676
|
throw error;
|
|
568
677
|
}
|
|
569
678
|
});
|
|
570
|
-
const runtime = createRunnerServerRuntime(dependencies, host.context.directEvents, wakeAgent, execution);
|
|
679
|
+
const runtime = createRunnerServerRuntime(dependencies, runnerHost, host.context.directEvents, wakeAgent, execution);
|
|
571
680
|
const bash = (wakeOnExit) => require_headless.createHeadlessBashTool({ run: async (request) => {
|
|
572
681
|
await runtime.ensureSession(request.sessionId);
|
|
573
682
|
const result = await dependencies.bashRunService.run({
|
|
@@ -589,7 +698,9 @@ const createRunnerServerRoot = ({ host, agent, signal }) => {
|
|
|
589
698
|
context.plugin((providerContext) => providerContext.provide(RUNNER_SERVER_SCOPE_SERVICE, value));
|
|
590
699
|
}],
|
|
591
700
|
activities: [runtime.activity],
|
|
592
|
-
onStart: execution ? () =>
|
|
701
|
+
onStart: execution ? () => {
|
|
702
|
+
runtime.ensureSession(execution.sessionId).catch((error) => process.emitWarning(`Could not initialize headless runner supervision: ${String(error)}`));
|
|
703
|
+
} : void 0,
|
|
593
704
|
onStop: runtime.dispose
|
|
594
705
|
};
|
|
595
706
|
};
|
|
@@ -1173,11 +1284,11 @@ var session_compact_server_default = (0, _agimon_ai_po_core_extensionFile.define
|
|
|
1173
1284
|
//#region src/extensions/workspaces/sessions/(backend)/resource/po-use-runner.server.ts
|
|
1174
1285
|
var po_use_runner_server_default = (0, _agimon_ai_po_core_extensionFile.defineResource)({
|
|
1175
1286
|
name: "po-use-runner",
|
|
1176
|
-
description: "Use
|
|
1177
|
-
when: _agimon_ai_po_core_help.
|
|
1287
|
+
description: "Use Po Pi Runner to supervise shell commands, inspect durable logs, provide interactive input, and stop background runs.",
|
|
1288
|
+
when: _agimon_ai_po_core_help.PO_HELP_WHEN,
|
|
1178
1289
|
kind: "skill",
|
|
1179
|
-
path: (0,
|
|
1180
|
-
read: () => (0,
|
|
1290
|
+
path: (0, _agimon_ai_po_core_serverPlugin.packageResourcePath)(require("url").pathToFileURL(__filename).href, "src/prompts/po-use-runner/SKILL.md"),
|
|
1291
|
+
read: () => (0, _agimon_ai_po_core_serverPlugin.readPackageResource)(require("url").pathToFileURL(__filename).href, "src/prompts/po-use-runner/SKILL.md")
|
|
1181
1292
|
});
|
|
1182
1293
|
//#endregion
|
|
1183
1294
|
//#region src/extensions/workspaces/sessions/(backend)/tool/bash.server.ts
|
|
@@ -1185,21 +1296,24 @@ var bash_server_default = (0, _agimon_ai_po_core_extensionFile.defineServerTool)
|
|
|
1185
1296
|
//#endregion
|
|
1186
1297
|
//#region generated/server.ts
|
|
1187
1298
|
const at = (value, context) => typeof value === "function" ? value(context) : value;
|
|
1299
|
+
/* v8 ignore next -- generated normalization branch */
|
|
1300
|
+
const defined = (values) => values.filter((value) => value !== void 0);
|
|
1188
1301
|
const via = (identity, value) => value === void 0 ? void 0 : {
|
|
1189
1302
|
...identity,
|
|
1190
1303
|
...value
|
|
1191
1304
|
};
|
|
1192
|
-
const
|
|
1305
|
+
const serverPlugin = (0, _agimon_ai_po_core_serverPlugin.defineServerPlugin)({
|
|
1193
1306
|
name: "@agimon-ai/po-runner",
|
|
1194
|
-
providerOverrides: (0,
|
|
1307
|
+
providerOverrides: (0, _agimon_ai_po_core_serverPlugin.composeServerProviderOverrides)(root_server_default),
|
|
1308
|
+
injects: (0, _agimon_ai_po_core_extensionFile.composeRootInjects)({ session: [root_server_default] }),
|
|
1195
1309
|
global: () => ({ get channels() {
|
|
1196
1310
|
return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
|
|
1197
1311
|
} }),
|
|
1198
|
-
workspace: () => ({ get channels() {
|
|
1199
|
-
return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
|
|
1312
|
+
workspace: (context) => ({ get channels() {
|
|
1313
|
+
return defined([context.hosted("global") ? void 0 : () => via({ frameType: "runner_runs" }, runnerRuns_server_default())]);
|
|
1200
1314
|
} }),
|
|
1201
1315
|
session: async (context) => {
|
|
1202
|
-
const scopeSession = await root_server_default
|
|
1316
|
+
const scopeSession = await context.scopeRoot("session", root_server_default, context);
|
|
1203
1317
|
const contextSession = {
|
|
1204
1318
|
...context,
|
|
1205
1319
|
root: scopeSession.value
|
|
@@ -1210,7 +1324,7 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
|
1210
1324
|
return [at(route_server_default, contextSession)];
|
|
1211
1325
|
},
|
|
1212
1326
|
get channels() {
|
|
1213
|
-
return [() => via({ frameType: "runner_runs" }, runnerRuns_server_default())];
|
|
1327
|
+
return defined([context.hosted("global") ? void 0 : () => via({ frameType: "runner_runs" }, runnerRuns_server_default())]);
|
|
1214
1328
|
},
|
|
1215
1329
|
get commands() {
|
|
1216
1330
|
return [via({ name: "runners" }, at(runners_server_default, contextSession))];
|
|
@@ -1232,7 +1346,7 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
|
|
|
1232
1346
|
}
|
|
1233
1347
|
});
|
|
1234
1348
|
//#endregion
|
|
1235
|
-
exports.default =
|
|
1236
|
-
exports.
|
|
1349
|
+
exports.default = serverPlugin;
|
|
1350
|
+
exports.serverPlugin = serverPlugin;
|
|
1237
1351
|
|
|
1238
1352
|
//# sourceMappingURL=server.cjs.map
|