fix(interactive-subagents): avoid Orca polling fan-out

This commit is contained in:
jb
2026-09-02 20:50:21 -04:00
parent 3b5a11c815
commit bd378960b2
7 changed files with 110 additions and 21 deletions
+65 -1
View File
@@ -1,6 +1,14 @@
import { describe, it, before, after, beforeEach } from "node:test";
import assert from "node:assert/strict";
import { mkdtempSync, writeFileSync, readFileSync, mkdirSync, rmSync, existsSync } from "node:fs";
import {
chmodSync,
existsSync,
mkdirSync,
mkdtempSync,
readFileSync,
rmSync,
writeFileSync,
} from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { fileURLToPath } from "node:url";
@@ -32,11 +40,13 @@ import {
import {
__pollForExitTest__,
pollForExit,
selectMuxBackend,
shellEscape,
} from "../pi-extension/subagents/surface.ts";
import { parseCreatedPane, parseCreatedTab } from "../pi-extension/subagents/herdr.ts";
import {
__orcaTest__,
parseCreatedSplit,
parseCreatedTerminal,
parseReadTail,
@@ -1812,6 +1822,60 @@ describe("subagent-done.ts", () => {
describe("surface exit signals", () => {
const { interpretExitSidecar, readCompletionFile } = __pollForExitTest__;
it("does not poll the terminal while waiting for a filesystem completion signal", async () => {
const dir = createTestDir();
const completionFile = join(dir, "child.exit-code");
let surfaceReads = 0;
try {
const result = await pollForExit(
"unused-surface",
new AbortController().signal,
{
interval: 1,
completionFile,
onTick() {
writeFileSync(completionFile, "7\n");
},
},
async () => {
surfaceReads += 1;
return "__SUBAGENT_DONE_0__";
},
);
assert.deepEqual(result, { reason: "sentinel", exitCode: 7 });
assert.equal(surfaceReads, 0);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
it("bounds an asynchronous Orca screen read and kills its CLI process", async () => {
const dir = createTestDir();
const pidFile = join(dir, "reader.pid");
const cli = join(dir, "fake-orca");
writeFileSync(
cli,
`#!/usr/bin/env node\nrequire("node:fs").writeFileSync(${JSON.stringify(pidFile)}, String(process.pid));\nsetInterval(() => {}, 1000);\n`,
);
chmodSync(cli, 0o755);
try {
await assert.rejects(__orcaTest__.readScreenWithCli(cli, "unused-surface", 5, 500));
const pid = Number.parseInt(readFileSync(pidFile, "utf8"), 10);
let running = true;
try {
process.kill(pid, 0);
} catch {
running = false;
}
assert.equal(running, false);
} finally {
rmSync(dir, { recursive: true, force: true });
}
});
it("reads and removes a shell completion file", () => {
withTempDir((dir) => {
const completionFile = join(dir, "child.exit-code");