@agimon-ai/doompi-runner 0.0.1-alpha.78 → 0.0.1-alpha.79
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/dist/bin/cli.cjs +2 -1
- package/dist/bin/cli.cjs.map +1 -1
- package/dist/bin/cli.d.cts.map +1 -1
- package/dist/bin/cli.d.mts.map +1 -1
- package/dist/bin/cli.mjs +3 -2
- package/dist/bin/cli.mjs.map +1 -1
- package/package.json +15 -15
- package/skills/doom-runner/SKILL.md +6 -5
- package/src/prompts/doompi-use-runner/SKILL.md +10 -3
package/dist/bin/cli.cjs
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require_index = require("../src/services/cliApp/index.cjs");
|
|
4
4
|
const require_index$1 = require("../src/services/runnerDependencies/index.cjs");
|
|
5
|
+
let node_fs = require("node:fs");
|
|
5
6
|
let node_url = require("node:url");
|
|
6
7
|
let _agimon_ai_doompi_telemetry = require("@agimon-ai/doompi-telemetry");
|
|
7
8
|
//#region src/bin/cli.ts
|
|
@@ -65,7 +66,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
65
66
|
await telemetry.shutdown();
|
|
66
67
|
}
|
|
67
68
|
}
|
|
68
|
-
if (process.argv[1] && require("url").pathToFileURL(__filename).href === (0,
|
|
69
|
+
if (process.argv[1] && (0, node_fs.existsSync)(process.argv[1]) && (0, node_fs.realpathSync)((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href)) === (0, node_fs.realpathSync)(process.argv[1])) main().then((code) => {
|
|
69
70
|
process.exitCode = code;
|
|
70
71
|
}, (error) => {
|
|
71
72
|
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
package/dist/bin/cli.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerDependencies","runCli","
|
|
1
|
+
{"version":3,"file":"cli.cjs","names":["createDoomTelemetry","createRunnerDependencies","runCli","existsSync","realpathSync","fileURLToPath"],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { existsSync, realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\n\nimport { runCli } from '../services/cliApp';\nimport { createRunnerDependencies } from '../services/runnerDependencies';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const environment = Object.freeze({ ...process.env });\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: environment,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerDependencies({ environment });\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: environment,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (\n process.argv[1] &&\n existsSync(process.argv[1]) &&\n realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])\n) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";;;;;;;;AAUA,eAAe,YAA6B;CAC1C,MAAM,SAAmB,CAAC;CAC1B,WAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;CACxG,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC9C;AAEA,eAAsB,KAAK,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAoB;CAC3F,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpD,MAAM,aAAA,GAAYA,4BAAAA,oBAAAA,CAAoB;EACpC,aAAa;EACb,aAAa;EACb,KAAK;EACL,YAAY;EACZ,cAAc;CAChB,CAAC;CACD,MAAM,YAAYC,gBAAAA,yBAAyB,EAAE,YAAY,CAAC;CAC1D,MAAM,WAAW,UAAU;CAC3B,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,IAAI;EACF,MAAM,WAAW,MAAMC,cAAAA,OAAO,MAAM;GAClC;GACA,UAAU,UAAU;GACpB,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB,KAAK;GACL,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA;EACF,CAAC;EACD,MAAM,UAAU,YAAY,4BAA4B;GACtD,SAAS,aAAa,IAAI,cAAc;GACxC,oBAAoB;GACpB,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,0BAA0B,OAAO;GAC3D,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,MAAM;CACR,UAAU;EACR,SAAS,MAAM;EACf,MAAM,UAAU,SAAS;CAC3B;AACF;AAEA,IACE,QAAQ,KAAK,OAAA,GACbC,QAAAA,WAAAA,CAAW,QAAQ,KAAK,EAAE,MAAA,GAC1BC,QAAAA,aAAAA,EAAAA,GAAaC,SAAAA,cAAAA,CAAAA,QAAAA,KAAAA,CAAAA,CAAAA,cAAAA,UAAAA,CAAAA,CAAAA,IAA6B,CAAC,OAAA,GAAMD,QAAAA,aAAAA,CAAa,QAAQ,KAAK,EAAE,GAE7E,KAAK,CAAC,CAAC,MACJ,SAAS;CACR,QAAQ,WAAW;AACrB,IACC,UAAmB;CAClB,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;CAClF,QAAQ,WAAW;AACrB,CACF"}
|
package/dist/bin/cli.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.cts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";wBAgBsB,KAAK,2BAAkD"}
|
package/dist/bin/cli.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.mts","names":[],"sources":["../../src/bin/cli.ts"],"mappings":";wBAgBsB,KAAK,2BAAkD"}
|
package/dist/bin/cli.mjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runCli } from "../src/services/cliApp/index.mjs";
|
|
3
3
|
import { createRunnerDependencies } from "../src/services/runnerDependencies/index.mjs";
|
|
4
|
-
import {
|
|
4
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
5
|
+
import { fileURLToPath } from "node:url";
|
|
5
6
|
import { createDoomTelemetry } from "@agimon-ai/doompi-telemetry";
|
|
6
7
|
//#region src/bin/cli.ts
|
|
7
8
|
async function readStdin() {
|
|
@@ -64,7 +65,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
64
65
|
await telemetry.shutdown();
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
|
-
if (process.argv[1] && import.meta.url ===
|
|
68
|
+
if (process.argv[1] && existsSync(process.argv[1]) && realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])) main().then((code) => {
|
|
68
69
|
process.exitCode = code;
|
|
69
70
|
}, (error) => {
|
|
70
71
|
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
|
package/dist/bin/cli.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport {
|
|
1
|
+
{"version":3,"file":"cli.mjs","names":[],"sources":["../../src/bin/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { existsSync, realpathSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\n\nimport { createDoomTelemetry } from '@agimon-ai/doompi-telemetry';\n\nimport { runCli } from '../services/cliApp';\nimport { createRunnerDependencies } from '../services/runnerDependencies';\n\nasync function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n return Buffer.concat(chunks).toString('utf8');\n}\n\nexport async function main(argv: readonly string[] = process.argv.slice(2)): Promise<number> {\n const startedAt = Date.now();\n const environment = Object.freeze({ ...process.env });\n const telemetry = createDoomTelemetry({\n serviceName: 'doom-runner-cli',\n packageName: '@agimon-ai/doompi-runner',\n env: environment,\n enableLogs: true,\n enableTraces: true,\n });\n const container = createRunnerDependencies({ environment });\n const registry = container.runnerRegistry;\n let stdoutBytes = 0;\n let stderrBytes = 0;\n try {\n const exitCode = await runCli(argv, {\n registry,\n launcher: container.launcher,\n rmuxBackend: container.rmuxBackend,\n logReader: container.logReader,\n env: environment,\n stdout: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stdoutBytes += Buffer.byteLength(output, 'utf8');\n process.stdout.write(output);\n },\n stderr: (text) => {\n const output = text.endsWith('\\n') ? text : `${text}\\n`;\n stderrBytes += Buffer.byteLength(output, 'utf8');\n process.stderr.write(output);\n },\n readStdin,\n });\n await telemetry.recordEvent('doom_runner.cli_finished', {\n outcome: exitCode === 0 ? 'completed' : 'failed',\n 'runner.exit_code': exitCode,\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n return exitCode;\n } catch (error) {\n await telemetry.recordError('doom_runner.cli_failed', error, {\n duration_ms: Date.now() - startedAt,\n 'runner.argument_count': argv.length,\n 'runner.stdout_bytes': stdoutBytes,\n 'runner.stderr_bytes': stderrBytes,\n });\n throw error;\n } finally {\n registry.close();\n await telemetry.shutdown();\n }\n}\n\nif (\n process.argv[1] &&\n existsSync(process.argv[1]) &&\n realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1])\n) {\n main().then(\n (code) => {\n process.exitCode = code;\n },\n (error: unknown) => {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n },\n );\n}\n"],"mappings":";;;;;;;AAUA,eAAe,YAA6B;CAC1C,MAAM,SAAmB,CAAC;CAC1B,WAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,KAAK,KAAK,CAAC;CACxG,OAAO,OAAO,OAAO,MAAM,CAAC,CAAC,SAAS,MAAM;AAC9C;AAEA,eAAsB,KAAK,OAA0B,QAAQ,KAAK,MAAM,CAAC,GAAoB;CAC3F,MAAM,YAAY,KAAK,IAAI;CAC3B,MAAM,cAAc,OAAO,OAAO,EAAE,GAAG,QAAQ,IAAI,CAAC;CACpD,MAAM,YAAY,oBAAoB;EACpC,aAAa;EACb,aAAa;EACb,KAAK;EACL,YAAY;EACZ,cAAc;CAChB,CAAC;CACD,MAAM,YAAY,yBAAyB,EAAE,YAAY,CAAC;CAC1D,MAAM,WAAW,UAAU;CAC3B,IAAI,cAAc;CAClB,IAAI,cAAc;CAClB,IAAI;EACF,MAAM,WAAW,MAAM,OAAO,MAAM;GAClC;GACA,UAAU,UAAU;GACpB,aAAa,UAAU;GACvB,WAAW,UAAU;GACrB,KAAK;GACL,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA,SAAS,SAAS;IAChB,MAAM,SAAS,KAAK,SAAS,IAAI,IAAI,OAAO,GAAG,KAAK;IACpD,eAAe,OAAO,WAAW,QAAQ,MAAM;IAC/C,QAAQ,OAAO,MAAM,MAAM;GAC7B;GACA;EACF,CAAC;EACD,MAAM,UAAU,YAAY,4BAA4B;GACtD,SAAS,aAAa,IAAI,cAAc;GACxC,oBAAoB;GACpB,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,OAAO;CACT,SAAS,OAAO;EACd,MAAM,UAAU,YAAY,0BAA0B,OAAO;GAC3D,aAAa,KAAK,IAAI,IAAI;GAC1B,yBAAyB,KAAK;GAC9B,uBAAuB;GACvB,uBAAuB;EACzB,CAAC;EACD,MAAM;CACR,UAAU;EACR,SAAS,MAAM;EACf,MAAM,UAAU,SAAS;CAC3B;AACF;AAEA,IACE,QAAQ,KAAK,MACb,WAAW,QAAQ,KAAK,EAAE,KAC1B,aAAa,cAAc,YAAY,GAAG,CAAC,MAAM,aAAa,QAAQ,KAAK,EAAE,GAE7E,KAAK,CAAC,CAAC,MACJ,SAAS;CACR,QAAQ,WAAW;AACrB,IACC,UAAmB;CAClB,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;CAClF,QAAQ,WAAW;AACrB,CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/doompi-runner",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.79",
|
|
4
4
|
"description": "Supervised shell execution, background process control, and run logs for Pi coding agents.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -233,11 +233,11 @@
|
|
|
233
233
|
"registry": "https://registry.npmjs.org/"
|
|
234
234
|
},
|
|
235
235
|
"dependencies": {
|
|
236
|
-
"@agimon-ai/doompi-core": "0.0.1-alpha.
|
|
237
|
-
"@agimon-ai/doompi-telemetry": "0.0.1-alpha.
|
|
238
|
-
"@agimon-ai/doompi-ui": "0.0.1-alpha.
|
|
239
|
-
"@agimon-ai/doompi-web-components": "0.0.1-alpha.
|
|
240
|
-
"@agimon-ai/doompi-web-security": "0.0.1-alpha.
|
|
236
|
+
"@agimon-ai/doompi-core": "0.0.1-alpha.79",
|
|
237
|
+
"@agimon-ai/doompi-telemetry": "0.0.1-alpha.76",
|
|
238
|
+
"@agimon-ai/doompi-ui": "0.0.1-alpha.79",
|
|
239
|
+
"@agimon-ai/doompi-web-components": "0.0.1-alpha.37",
|
|
240
|
+
"@agimon-ai/doompi-web-security": "0.0.1-alpha.39",
|
|
241
241
|
"@agimon-ai/foundation-process-registry": "0.29.25",
|
|
242
242
|
"@deepseek-ai/cordis": "4.0.2",
|
|
243
243
|
"@rmux/sdk": "0.6.5",
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
"typebox": "1.3.30"
|
|
247
247
|
},
|
|
248
248
|
"devDependencies": {
|
|
249
|
-
"@agimon-ai/doompi-build": "0.0.1-alpha.
|
|
249
|
+
"@agimon-ai/doompi-build": "0.0.1-alpha.8",
|
|
250
250
|
"@earendil-works/pi-coding-agent": "0.86.0",
|
|
251
251
|
"@earendil-works/pi-tui": "0.86.0",
|
|
252
252
|
"@tanstack/react-store": "0.11.1",
|
|
@@ -273,14 +273,14 @@
|
|
|
273
273
|
}
|
|
274
274
|
},
|
|
275
275
|
"optionalDependencies": {
|
|
276
|
-
"@agimon-ai/doompi-runner-rmux-darwin-arm64": "0.0.1-alpha.
|
|
277
|
-
"@agimon-ai/doompi-runner-rmux-darwin-x64": "0.0.1-alpha.
|
|
278
|
-
"@agimon-ai/doompi-runner-rmux-linux-arm64": "0.0.1-alpha.
|
|
279
|
-
"@agimon-ai/doompi-runner-rmux-linux-x64": "0.0.1-alpha.
|
|
280
|
-
"@agimon-ai/doompi-runner-rtk-darwin-arm64": "0.0.1-alpha.
|
|
281
|
-
"@agimon-ai/doompi-runner-rtk-darwin-x64": "0.0.1-alpha.
|
|
282
|
-
"@agimon-ai/doompi-runner-rtk-linux-arm64": "0.0.1-alpha.
|
|
283
|
-
"@agimon-ai/doompi-runner-rtk-linux-x64": "0.0.1-alpha.
|
|
276
|
+
"@agimon-ai/doompi-runner-rmux-darwin-arm64": "0.0.1-alpha.74",
|
|
277
|
+
"@agimon-ai/doompi-runner-rmux-darwin-x64": "0.0.1-alpha.74",
|
|
278
|
+
"@agimon-ai/doompi-runner-rmux-linux-arm64": "0.0.1-alpha.74",
|
|
279
|
+
"@agimon-ai/doompi-runner-rmux-linux-x64": "0.0.1-alpha.74",
|
|
280
|
+
"@agimon-ai/doompi-runner-rtk-darwin-arm64": "0.0.1-alpha.74",
|
|
281
|
+
"@agimon-ai/doompi-runner-rtk-darwin-x64": "0.0.1-alpha.74",
|
|
282
|
+
"@agimon-ai/doompi-runner-rtk-linux-arm64": "0.0.1-alpha.74",
|
|
283
|
+
"@agimon-ai/doompi-runner-rtk-linux-x64": "0.0.1-alpha.74"
|
|
284
284
|
},
|
|
285
285
|
"engines": {
|
|
286
286
|
"node": ">=22.19.0"
|
|
@@ -27,8 +27,8 @@ CLI to manage it without adding another model tool.
|
|
|
27
27
|
|
|
28
28
|
## CLI
|
|
29
29
|
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
Invoke the CLI through the available Bash tool to inspect or control an existing
|
|
31
|
+
runner. Do not relaunch its original command to recover output. The CLI inherits `PI_SESSION_ID` from the active Pi session and only accesses that
|
|
32
32
|
session's runners. A manual shell without `PI_SESSION_ID` fails closed.
|
|
33
33
|
|
|
34
34
|
Use the unique runner ID returned by `bash`:
|
|
@@ -54,9 +54,10 @@ Use the unique runner ID returned by `bash`:
|
|
|
54
54
|
- **`input` needs `interactive: true`.** A normal runner does not expose stdin.
|
|
55
55
|
- **Stop what you no longer need.** Everything still running is stopped when
|
|
56
56
|
the session ends, but a forgotten dev server holds a port until then.
|
|
57
|
-
- **
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
- **Completion delivery depends on the client.** Local DoomPi can notify its
|
|
58
|
+
agent, but remote MCP callers must not assume that this wakes their chat.
|
|
59
|
+
Use a bounded status or log read when needed. Do not sleep or poll in a loop,
|
|
60
|
+
promise automatic continuation, or report a running command as completed.
|
|
60
61
|
- **Do not pipe to head or tail.** Results are already bounded and the full log
|
|
61
62
|
is on disk. A tail pipe also leaves the live log empty until the command
|
|
62
63
|
exits, which blanks the log pane in Runner Space.
|
|
@@ -13,16 +13,18 @@ Use Runner for shell work that may outlive one tool call, needs durable logs, or
|
|
|
13
13
|
- Let short commands return inline.
|
|
14
14
|
- Set `background: true` when the command should detach immediately.
|
|
15
15
|
- Set `interactive: true` only when the process genuinely needs terminal input.
|
|
16
|
-
-
|
|
16
|
+
- `timeout` only governs the foreground wait. A command promoted to the background can continue past it; do not treat it as a background deadline.
|
|
17
17
|
|
|
18
18
|
## Inspect and control work
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
For remote MCP, run the following commands through `bash`. They inherit the
|
|
21
|
+
bound session; do not supply another session ID. `/runners` and `SPC r l` are
|
|
22
|
+
local TUI interfaces, not shell commands or remote tools. For direct control, use:
|
|
21
23
|
|
|
22
24
|
```bash
|
|
23
25
|
doom-runner list
|
|
24
26
|
doom-runner status <runner-id>
|
|
25
|
-
doom-runner logs <runner-id>
|
|
27
|
+
doom-runner logs <runner-id> --lines 100
|
|
26
28
|
doom-runner input <runner-id> --text "y" --enter
|
|
27
29
|
doom-runner stop <runner-id>
|
|
28
30
|
doom-runner stop-all
|
|
@@ -32,6 +34,11 @@ Input requires a running interactive process backed by RMUX. Preserve the return
|
|
|
32
34
|
|
|
33
35
|
## Close the lifecycle
|
|
34
36
|
|
|
37
|
+
Remote MCP does not guarantee that completion notifications resume a ChatGPT
|
|
38
|
+
conversation. Retrieve a bounded status or log result during the current turn
|
|
39
|
+
when needed. Otherwise report that the run is still active with its identifier.
|
|
40
|
+
Do not promise automatic follow-up, continuously poll, or relaunch uncertain work.
|
|
41
|
+
|
|
35
42
|
- Inspect logs instead of relaunching a command whose status is uncertain.
|
|
36
43
|
- Stop watchers, servers, and failed interactive processes when they are no longer needed.
|
|
37
44
|
- Treat commands as running with the Doom Pi process environment and the operating-system user's privileges.
|