@bluewombat/isolator 0.2.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/child/process-tree.d.ts +19 -0
- package/dist/child/process-tree.d.ts.map +1 -0
- package/dist/child/process-tree.js +137 -0
- package/dist/child/process-tree.js.map +1 -0
- package/dist/child/run-child.d.ts.map +1 -1
- package/dist/child/run-child.js +7 -12
- package/dist/child/run-child.js.map +1 -1
- package/dist/run/run-isolator.d.ts +1 -1
- package/dist/run/run-isolator.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ChildProcess } from "node:child_process";
|
|
2
|
+
/** Spread into the options of `spawn`: the child leads its own group. */
|
|
3
|
+
export declare function ownGroup(): {
|
|
4
|
+
detached: boolean;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Remember a running child so it does not outlive this process: a group of its
|
|
8
|
+
* own no longer shares the terminal's Ctrl-C, nor dies by accident with us.
|
|
9
|
+
* Forgotten on its own once it closes.
|
|
10
|
+
*/
|
|
11
|
+
export declare function track(child: ChildProcess): void;
|
|
12
|
+
/**
|
|
13
|
+
* SIGKILL to the child's whole group and to every descendant, wherever its
|
|
14
|
+
* group; to the child alone where there are no groups. Once per child.
|
|
15
|
+
*/
|
|
16
|
+
export declare function killTree(child: ChildProcess): void;
|
|
17
|
+
/** `killTree`, then the pipes are cut after the grace period. Once per child. */
|
|
18
|
+
export declare function killAndCut(child: ChildProcess): void;
|
|
19
|
+
//# sourceMappingURL=process-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tree.d.ts","sourceRoot":"","sources":["../../src/child/process-tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAoCrE,yEAAyE;AACzE,wBAAgB,QAAQ,IAAI;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAEhD;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAe/C;AAiCD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CA8BlD;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CASpD"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { execFileSync } from "node:child_process";
|
|
2
|
+
// Canonical source of every `process-tree.ts` in this repository. Edit it here,
|
|
3
|
+
// then run `node scripts/check-process-tree.mjs --write`; `npm run lint` fails
|
|
4
|
+
// when a copy differs. A package stands alone, so each carries its own copy.
|
|
5
|
+
//
|
|
6
|
+
// The rule it keeps: whoever starts a child and owns its deadline — a
|
|
7
|
+
// supervisor — starts it as the leader of its own process group, and ends it by
|
|
8
|
+
// signalling that group. A child is rarely alone: a producer is `node producer`
|
|
9
|
+
// → `node agent` → the vendor CLI → its shells. Killing only the first leaves
|
|
10
|
+
// the rest running, holding the pipes open, until they end on their own; the
|
|
11
|
+
// deadline then means nothing and a finished job is reported as lost.
|
|
12
|
+
//
|
|
13
|
+
// A layer in the middle of such a chain (a producer, an agent runner) is not a
|
|
14
|
+
// supervisor: it starts its child in its own group, so the supervisor's signal
|
|
15
|
+
// reaches it too.
|
|
16
|
+
//
|
|
17
|
+
// The group is not the whole tree. A vendor CLI may start each shell command
|
|
18
|
+
// in a group of its own (cursor-agent does), out of the group's reach. So the
|
|
19
|
+
// descendants are read from `ps` first — once their parent dies they are
|
|
20
|
+
// re-parented and the link is lost — and each is killed too.
|
|
21
|
+
/** Windows has no process groups: there a child is killed alone. */
|
|
22
|
+
const OWN_GROUP = process.platform !== "win32";
|
|
23
|
+
/**
|
|
24
|
+
* After a kill the pipes are cut this long afterwards, so a grandchild that
|
|
25
|
+
* left the group (setsid) and still holds one cannot hold the outcome back.
|
|
26
|
+
*/
|
|
27
|
+
const PIPE_GRACE_MS = 2_000;
|
|
28
|
+
const live = new Set();
|
|
29
|
+
/** Already killed: a supervisor polling its interrupt asks again every tick. */
|
|
30
|
+
const ended = new WeakSet();
|
|
31
|
+
let exitHookInstalled = false;
|
|
32
|
+
/** Spread into the options of `spawn`: the child leads its own group. */
|
|
33
|
+
export function ownGroup() {
|
|
34
|
+
return { detached: OWN_GROUP };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Remember a running child so it does not outlive this process: a group of its
|
|
38
|
+
* own no longer shares the terminal's Ctrl-C, nor dies by accident with us.
|
|
39
|
+
* Forgotten on its own once it closes.
|
|
40
|
+
*/
|
|
41
|
+
export function track(child) {
|
|
42
|
+
if (OWN_GROUP && !exitHookInstalled) {
|
|
43
|
+
exitHookInstalled = true;
|
|
44
|
+
process.on("exit", () => {
|
|
45
|
+
for (const running of live) {
|
|
46
|
+
killTree(running);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
live.add(child);
|
|
51
|
+
const forget = () => {
|
|
52
|
+
live.delete(child);
|
|
53
|
+
};
|
|
54
|
+
child.once("close", forget);
|
|
55
|
+
child.once("error", forget);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Every process below `pid`, as `ps` lists them now. Empty where `ps` cannot be
|
|
59
|
+
* read: the group kill still stands.
|
|
60
|
+
*/
|
|
61
|
+
function descendants(pid) {
|
|
62
|
+
let table;
|
|
63
|
+
try {
|
|
64
|
+
table = execFileSync("ps", ["-A", "-o", "pid=,ppid="], {
|
|
65
|
+
encoding: "utf8",
|
|
66
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
const childrenOf = new Map();
|
|
73
|
+
for (const line of table.split("\n")) {
|
|
74
|
+
const match = /^\s*(\d+)\s+(\d+)\s*$/.exec(line);
|
|
75
|
+
if (match !== null) {
|
|
76
|
+
const parent = Number(match[2]);
|
|
77
|
+
childrenOf.set(parent, [...(childrenOf.get(parent) ?? []), Number(match[1])]);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
const found = [];
|
|
81
|
+
let frontier = [pid];
|
|
82
|
+
while (frontier.length > 0) {
|
|
83
|
+
frontier = frontier.flatMap((each) => childrenOf.get(each) ?? []);
|
|
84
|
+
found.push(...frontier);
|
|
85
|
+
}
|
|
86
|
+
return found;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* SIGKILL to the child's whole group and to every descendant, wherever its
|
|
90
|
+
* group; to the child alone where there are no groups. Once per child.
|
|
91
|
+
*/
|
|
92
|
+
export function killTree(child) {
|
|
93
|
+
if (ended.has(child)) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
ended.add(child);
|
|
97
|
+
if (OWN_GROUP && child.pid !== undefined) {
|
|
98
|
+
const below = descendants(child.pid);
|
|
99
|
+
let grouped = true;
|
|
100
|
+
try {
|
|
101
|
+
process.kill(-child.pid, "SIGKILL");
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// no such group: the child itself, below
|
|
105
|
+
grouped = false;
|
|
106
|
+
}
|
|
107
|
+
for (const pid of below) {
|
|
108
|
+
try {
|
|
109
|
+
process.kill(pid, "SIGKILL");
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// already gone, with the group
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (grouped) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
child.kill("SIGKILL");
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// already gone
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/** `killTree`, then the pipes are cut after the grace period. Once per child. */
|
|
127
|
+
export function killAndCut(child) {
|
|
128
|
+
if (ended.has(child)) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
killTree(child);
|
|
132
|
+
setTimeout(() => {
|
|
133
|
+
child.stdout?.destroy();
|
|
134
|
+
child.stderr?.destroy();
|
|
135
|
+
}, PIPE_GRACE_MS).unref();
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=process-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../src/child/process-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-child.d.ts","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run-child.d.ts","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAM7C,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+DAA+D;IAC/D,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,YAAY,EAAE,SAAS,CAAC;IACxB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,OAAO,CAAC;IAC/B,iEAAiE;IACjE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AASN;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAyHrE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGrE"}
|
package/dist/child/run-child.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
+
import { killAndCut, ownGroup, track } from "./process-tree.js";
|
|
2
3
|
const OUTPUT_TRUNCATE = 8_192;
|
|
3
4
|
const OUTPUT_LIMIT_CHARS = 8 * 1024 * 1024;
|
|
4
5
|
function truncate(text) {
|
|
@@ -7,14 +8,6 @@ function truncate(text) {
|
|
|
7
8
|
}
|
|
8
9
|
return `[…${text.length - OUTPUT_TRUNCATE} characters cut]${text.slice(-OUTPUT_TRUNCATE)}`;
|
|
9
10
|
}
|
|
10
|
-
function killProcessTree(child) {
|
|
11
|
-
try {
|
|
12
|
-
child.kill("SIGKILL");
|
|
13
|
-
}
|
|
14
|
-
catch {
|
|
15
|
-
// already gone
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
11
|
/**
|
|
19
12
|
* Run one child with a wall-clock timeout. Does not inherit Isolator stdin.
|
|
20
13
|
*/
|
|
@@ -51,6 +44,7 @@ export function runChild(request) {
|
|
|
51
44
|
cwd: request.cwd,
|
|
52
45
|
env: request.env,
|
|
53
46
|
stdio: ["ignore", "pipe", "pipe"],
|
|
47
|
+
...ownGroup(),
|
|
54
48
|
});
|
|
55
49
|
}
|
|
56
50
|
catch (error) {
|
|
@@ -58,6 +52,7 @@ export function runChild(request) {
|
|
|
58
52
|
finish({ kind: "spawn_error", detail });
|
|
59
53
|
return;
|
|
60
54
|
}
|
|
55
|
+
track(child);
|
|
61
56
|
if (!child.stdout || !child.stderr) {
|
|
62
57
|
finish({ kind: "spawn_error", detail: "Child stdout/stderr pipes unavailable." });
|
|
63
58
|
return;
|
|
@@ -71,7 +66,7 @@ export function runChild(request) {
|
|
|
71
66
|
}
|
|
72
67
|
if (stdout.length + stderr.length + chunk.length > OUTPUT_LIMIT_CHARS) {
|
|
73
68
|
overflowed = true;
|
|
74
|
-
|
|
69
|
+
killAndCut(child);
|
|
75
70
|
return false;
|
|
76
71
|
}
|
|
77
72
|
return true;
|
|
@@ -91,17 +86,17 @@ export function runChild(request) {
|
|
|
91
86
|
});
|
|
92
87
|
timer = setTimeout(() => {
|
|
93
88
|
timedOut = true;
|
|
94
|
-
|
|
89
|
+
killAndCut(child);
|
|
95
90
|
}, Math.max(1, request.timeoutMs));
|
|
96
91
|
interruptPoll = setInterval(() => {
|
|
97
92
|
if (request.shouldInterrupt()) {
|
|
98
93
|
interrupted = true;
|
|
99
|
-
|
|
94
|
+
killAndCut(child);
|
|
100
95
|
}
|
|
101
96
|
}, 20);
|
|
102
97
|
if (request.shouldInterrupt()) {
|
|
103
98
|
interrupted = true;
|
|
104
|
-
|
|
99
|
+
killAndCut(child);
|
|
105
100
|
}
|
|
106
101
|
child.on("close", (exitCode, signal) => {
|
|
107
102
|
const out = truncate(stdout);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-child.js","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"run-child.js","sourceRoot":"","sources":["../../src/child/run-child.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,7 @@ export type RunOptions = {
|
|
|
14
14
|
write?: ProgressWriter;
|
|
15
15
|
/** Injectable clock for tests. */
|
|
16
16
|
now?: () => number;
|
|
17
|
-
/**
|
|
17
|
+
/** Polled for interrupt; absent, never interrupted. Its owner — the CLI or a Host — flips it. */
|
|
18
18
|
interruptFlag?: {
|
|
19
19
|
interrupted: boolean;
|
|
20
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-isolator.d.ts","sourceRoot":"","sources":["../../src/run/run-isolator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,iFAAiF;IACjF,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"run-isolator.d.ts","sourceRoot":"","sources":["../../src/run/run-isolator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,iFAAiF;IACjF,OAAO,EAAE,gBAAgB,CAAC;IAC1B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,kCAAkC;IAClC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,iGAAiG;IACjG,aAAa,CAAC,EAAE;QAAE,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC;IACzC,8EAA8E;IAC9E,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAsBF;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBzE;AAgID,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,EAAE,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC1B,GAAG,OAAO,CAAC,SAAS,CAAC,CA0BrB"}
|