audit-tools 0.55.9 → 0.55.11
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/audit/cli/auditStep.d.ts +1 -1
- package/dist/audit/cli/dispatch/packetFilter.d.ts +1 -1
- package/dist/audit/cli/functionalPreflight.d.ts +4 -4
- package/dist/audit/cli/sampleRunCommand.d.ts +1 -1
- package/dist/audit/cli/steps.d.ts +2 -2
- package/dist/audit/contracts/workerSchemas.d.ts +14 -14
- package/dist/audit/contracts/wrapperResponse.d.ts +8 -8
- package/dist/audit/extractors/analyzers/css.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/css.js +2 -30
- package/dist/audit/extractors/analyzers/css.js.map +1 -1
- package/dist/audit/extractors/analyzers/html.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/html.js +2 -30
- package/dist/audit/extractors/analyzers/html.js.map +1 -1
- package/dist/audit/extractors/analyzers/python.d.ts.map +1 -1
- package/dist/audit/extractors/analyzers/python.js +9 -34
- package/dist/audit/extractors/analyzers/python.js.map +1 -1
- package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts +6 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.d.ts.map +1 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.js +38 -0
- package/dist/audit/extractors/analyzers/treeSitterBatch.js.map +1 -0
- package/dist/audit/extractors/graph.d.ts.map +1 -1
- package/dist/audit/extractors/graph.js +9 -7
- package/dist/audit/extractors/graph.js.map +1 -1
- package/dist/audit/extractors/graphPathIndex.d.ts +8 -0
- package/dist/audit/extractors/graphPathIndex.d.ts.map +1 -0
- package/dist/audit/extractors/graphPathIndex.js +47 -0
- package/dist/audit/extractors/graphPathIndex.js.map +1 -0
- package/dist/audit/extractors/graphPythonImports.d.ts +5 -4
- package/dist/audit/extractors/graphPythonImports.d.ts.map +1 -1
- package/dist/audit/extractors/graphPythonImports.js +15 -27
- package/dist/audit/extractors/graphPythonImports.js.map +1 -1
- package/dist/audit/extractors/graphRouteSources.d.ts +2 -1
- package/dist/audit/extractors/graphRouteSources.d.ts.map +1 -1
- package/dist/audit/extractors/graphRouteSources.js +5 -4
- package/dist/audit/extractors/graphRouteSources.js.map +1 -1
- package/dist/audit/extractors/graphSuites.d.ts +2 -1
- package/dist/audit/extractors/graphSuites.d.ts.map +1 -1
- package/dist/audit/extractors/graphSuites.js +6 -7
- package/dist/audit/extractors/graphSuites.js.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.d.ts +2 -6
- package/dist/audit/orchestrator/flowPlanning.d.ts.map +1 -1
- package/dist/audit/orchestrator/flowPlanning.js +2 -9
- package/dist/audit/orchestrator/flowPlanning.js.map +1 -1
- package/dist/audit/orchestrator/requeueCommand.d.ts +1 -1
- package/dist/audit/orchestrator/taskBuilder.js +1 -1
- package/dist/audit/orchestrator/taskBuilder.js.map +1 -1
- package/dist/audit/types/auditState.d.ts +2 -2
- package/dist/audit/types/reviewPlanning.d.ts +2 -2
- package/dist/audit/types.d.ts +12 -12
- package/dist/remediate/intake.d.ts +2 -2
- package/dist/shared/decompose/contentCoherence.d.ts.map +1 -1
- package/dist/shared/decompose/contentCoherence.js +25 -9
- package/dist/shared/decompose/contentCoherence.js.map +1 -1
- package/dist/shared/tooling/allowlistedExec.d.ts +10 -7
- package/dist/shared/tooling/allowlistedExec.d.ts.map +1 -1
- package/dist/shared/tooling/allowlistedExec.js +275 -94
- package/dist/shared/tooling/allowlistedExec.js.map +1 -1
- package/dist/shared/tooling/exec.d.ts +4 -1
- package/dist/shared/tooling/exec.d.ts.map +1 -1
- package/dist/shared/tooling/exec.js +76 -71
- package/dist/shared/tooling/exec.js.map +1 -1
- package/dist/shared/tooling/ownedProcessLifecycle.d.ts +30 -0
- package/dist/shared/tooling/ownedProcessLifecycle.d.ts.map +1 -0
- package/dist/shared/tooling/ownedProcessLifecycle.js +99 -0
- package/dist/shared/tooling/ownedProcessLifecycle.js.map +1 -0
- package/dist/shared/tooling/windowsOwnedJob.d.ts +35 -0
- package/dist/shared/tooling/windowsOwnedJob.d.ts.map +1 -0
- package/dist/shared/tooling/windowsOwnedJob.js +145 -0
- package/dist/shared/tooling/windowsOwnedJob.js.map +1 -0
- package/package.json +2 -1
- package/wrapper/audit-code-wrapper-io.mjs +12 -107
- package/wrapper/remediate-code-wrapper-io.mjs +12 -107
- package/wrapper/shared-wrapper-io.mjs +109 -0
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import { spawn, spawnSync } from "node:child_process";
|
|
6
6
|
import { win32 } from "node:path";
|
|
7
7
|
import { StringDecoder } from "node:string_decoder";
|
|
8
|
+
import { beginOwnedProcessTermination, spawnOwnedProcess } from "./ownedProcessLifecycle.js";
|
|
8
9
|
export { resolveExecutableFile } from "./resolveExecutable.js";
|
|
9
10
|
const SHELL_SHIM_COMMANDS = new Set(["npm", "npx", "pnpm", "yarn"]);
|
|
10
11
|
/**
|
|
@@ -51,13 +52,6 @@ function windowsNativeCommand(command, systemRoot) {
|
|
|
51
52
|
const root = systemRoot ?? process.env.SystemRoot ?? "C:\\Windows";
|
|
52
53
|
return win32.join(root, relative);
|
|
53
54
|
}
|
|
54
|
-
/**
|
|
55
|
-
* How long {@link runTrackedAsync} waits after SIGTERM before escalating to an
|
|
56
|
-
* unignorable SIGKILL for a child it killed on its own deadline/overflow bound.
|
|
57
|
-
* Long enough for an ordinary child to flush and exit, short enough that a
|
|
58
|
-
* child which ignores SIGTERM cannot hang the awaiting caller.
|
|
59
|
-
*/
|
|
60
|
-
const KILL_ESCALATION_GRACE_MS = 2_000;
|
|
61
55
|
/**
|
|
62
56
|
* Deadline for one fold-reachable tracked child. These spawns run inside the
|
|
63
57
|
* artifact-tree lock's hold (or the remediation state lock's), always through
|
|
@@ -111,10 +105,10 @@ export function resolveSpawnDeadline(deadline, ...caps) {
|
|
|
111
105
|
*/
|
|
112
106
|
export function describeDeadlineMiss(argv, deadlineMs, miss) {
|
|
113
107
|
const fate = miss.survived_grace
|
|
114
|
-
? "child
|
|
108
|
+
? `${miss.child_exited ? "child exit was already observed; " : ""}owned cleanup did not settle within the SIGTERM grace; SIGKILL requested`
|
|
115
109
|
: miss.child_exited
|
|
116
|
-
? "child had already exited when the deadline fired"
|
|
117
|
-
: "child
|
|
110
|
+
? "child had already exited when the deadline fired; owned cleanup requested (SIGTERM)"
|
|
111
|
+
: "child exit not yet observed; owned cleanup requested (SIGTERM)";
|
|
118
112
|
return (`child exceeded the ${String(deadlineMs)}ms deadline after ${String(miss.elapsed_ms)}ms: ` +
|
|
119
113
|
`${argv.join(" ")} — ${fate}`);
|
|
120
114
|
}
|
|
@@ -508,13 +502,19 @@ export async function runTrackedAsync(argv, options = {}) {
|
|
|
508
502
|
});
|
|
509
503
|
const start = Date.now();
|
|
510
504
|
return await new Promise((resolve) => {
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
505
|
+
let owned;
|
|
506
|
+
try {
|
|
507
|
+
owned = spawnOwnedProcess(resolved, {
|
|
508
|
+
cwd: options.cwd,
|
|
509
|
+
env: stripAuditToolsControlEnv(options.env),
|
|
510
|
+
...(options.timeout !== undefined && options.timeout > 0 ? { deadlineAt: start + options.timeout } : {}),
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
catch (error) {
|
|
514
|
+
resolve({ status: null, stdout: "", stderr: "", argv: resolved, cwd: options.cwd, duration_ms: Date.now() - start, error: error instanceof Error ? error : new Error(String(error)), signal: null });
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
const child = owned.child;
|
|
518
518
|
let stdout = "";
|
|
519
519
|
let stderr = "";
|
|
520
520
|
// Pipe data events can split a UTF-8 character. Keep decoding state separate
|
|
@@ -545,40 +545,49 @@ export async function runTrackedAsync(argv, options = {}) {
|
|
|
545
545
|
// which corrupts the caller where a refusal would have degraded cleanly.
|
|
546
546
|
const MAX_CAPTURE = Math.max(10 * 1024 * 1024, options.maxBuffer ?? 0);
|
|
547
547
|
const overflowLimit = options.maxBuffer;
|
|
548
|
-
let
|
|
548
|
+
let cancelTermination;
|
|
549
|
+
let stdoutEnded = false;
|
|
550
|
+
let stderrEnded = false;
|
|
551
|
+
let stdioIncomplete = false;
|
|
552
|
+
child.stdout.on("end", () => { stdoutEnded = true; });
|
|
553
|
+
child.stderr.on("end", () => { stderrEnded = true; });
|
|
549
554
|
/**
|
|
550
555
|
* Terminate the child for a bound this runner owns, and make the
|
|
551
556
|
* termination ACTUALLY terminal.
|
|
552
557
|
*
|
|
553
|
-
*
|
|
554
|
-
*
|
|
555
|
-
*
|
|
556
|
-
* name only (`spawnSync`'s `timeout` had no such hole — it kills from the
|
|
557
|
-
* runtime). So the SIGTERM is followed by an unignorable SIGKILL after a
|
|
558
|
-
* short grace period. The timer is `unref`d so a settled call never holds
|
|
559
|
-
* the event loop open.
|
|
558
|
+
* The owner can terminate an ordinary descendant even after its root exits.
|
|
559
|
+
* Neither a failed signal nor an escaped descendant may keep capture open
|
|
560
|
+
* forever. Keep both cleanup timers referenced until exactly-once settlement.
|
|
560
561
|
*/
|
|
561
562
|
const killForBound = () => {
|
|
562
|
-
|
|
563
|
-
if (killTimer)
|
|
563
|
+
if (cancelTermination)
|
|
564
564
|
return;
|
|
565
|
-
|
|
565
|
+
cancelTermination = beginOwnedProcessTermination(owned, () => {
|
|
566
566
|
if (!settled) {
|
|
567
|
-
//
|
|
568
|
-
// which "did anything survive the kill?" is answerable.
|
|
567
|
+
// Open pipes do not establish that the direct child ignored TERM.
|
|
569
568
|
if (deadlineMiss)
|
|
570
569
|
deadlineMiss.survived_grace = true;
|
|
571
|
-
child.kill("SIGKILL");
|
|
572
570
|
}
|
|
573
|
-
},
|
|
574
|
-
|
|
571
|
+
}, () => {
|
|
572
|
+
if (settled)
|
|
573
|
+
return;
|
|
574
|
+
stdioIncomplete = !stdoutEnded || !stderrEnded;
|
|
575
|
+
child.stdout.destroy();
|
|
576
|
+
child.stderr.destroy();
|
|
577
|
+
child.stdin.destroy();
|
|
578
|
+
finishResult(owned.rootStatus(), owned.rootSignal());
|
|
579
|
+
});
|
|
580
|
+
if (settled)
|
|
581
|
+
cancelTermination();
|
|
575
582
|
};
|
|
576
583
|
const timer = options.timeout !== undefined && options.timeout > 0
|
|
577
584
|
? setTimeout(() => {
|
|
585
|
+
if (killedBy !== null || settled)
|
|
586
|
+
return;
|
|
578
587
|
killedBy = "timeout";
|
|
579
588
|
deadlineMiss = {
|
|
580
589
|
elapsed_ms: Date.now() - start,
|
|
581
|
-
child_exited:
|
|
590
|
+
child_exited: owned.rootExited(),
|
|
582
591
|
survived_grace: false,
|
|
583
592
|
};
|
|
584
593
|
killForBound();
|
|
@@ -590,14 +599,29 @@ export async function runTrackedAsync(argv, options = {}) {
|
|
|
590
599
|
settled = true;
|
|
591
600
|
if (timer)
|
|
592
601
|
clearTimeout(timer);
|
|
593
|
-
|
|
594
|
-
|
|
602
|
+
cancelTermination?.();
|
|
603
|
+
owned.release();
|
|
595
604
|
// Flush only at terminal settlement (including spawn errors), after the
|
|
596
605
|
// settled guard. Uncaptured chunks must never complete a pending sequence.
|
|
597
606
|
result.stdout += stdoutDecoder?.end() ?? "";
|
|
598
607
|
result.stderr += stderrDecoder?.end() ?? "";
|
|
599
608
|
resolve(result);
|
|
600
609
|
};
|
|
610
|
+
const finishResult = (code, signal, spawnError) => {
|
|
611
|
+
const cleanup = owned.cleanup(stdioIncomplete);
|
|
612
|
+
let error = spawnError;
|
|
613
|
+
if (killedBy !== null) {
|
|
614
|
+
const bound = new Error((killedBy === "timeout"
|
|
615
|
+
? describeDeadlineMiss(resolved, options.timeout, deadlineMiss ?? { elapsed_ms: Date.now() - start, child_exited: owned.rootExited(), survived_grace: false })
|
|
616
|
+
: `child exceeded the ${String(overflowLimit)}-byte output bound`) +
|
|
617
|
+
`; owned ${cleanup.scope} cleanup ${cleanup.cleanup_verified ? "verified" : "unverified"}${cleanup.stdio_incomplete ? "; stdio incomplete" : ""}`);
|
|
618
|
+
bound.code = killedBy === "timeout" ? "ETIMEDOUT" : "ENOBUFS";
|
|
619
|
+
error = bound;
|
|
620
|
+
}
|
|
621
|
+
else if (!error && signal !== null)
|
|
622
|
+
error = new Error(`child terminated by signal ${signal}`);
|
|
623
|
+
finish({ status: code, stdout, stderr, argv: resolved, cwd: options.cwd, duration_ms: Date.now() - start, ...(error ? { error } : {}), signal, ...(killedBy !== null ? { cleanup } : {}) });
|
|
624
|
+
};
|
|
601
625
|
/**
|
|
602
626
|
* Accumulate one chunk and enforce the overflow bound.
|
|
603
627
|
*
|
|
@@ -616,6 +640,8 @@ export async function runTrackedAsync(argv, options = {}) {
|
|
|
616
640
|
* truncate where the contract says it refuses.
|
|
617
641
|
*/
|
|
618
642
|
const capture = (chunk, decoder, append, seen, kept) => {
|
|
643
|
+
if (settled)
|
|
644
|
+
return;
|
|
619
645
|
// Whole-chunk admission uses emitted UTF-16 length, not raw bytes. UTF-8
|
|
620
646
|
// can hold at most three pending bytes, so corrected decoding can admit a
|
|
621
647
|
// chunk the old replacement-character decoding discarded. An admitted
|
|
@@ -658,43 +684,22 @@ export async function runTrackedAsync(argv, options = {}) {
|
|
|
658
684
|
child.stdin?.write(options.input);
|
|
659
685
|
child.stdin?.end();
|
|
660
686
|
child.on("error", (error) => {
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
});
|
|
687
|
+
if (killedBy !== null)
|
|
688
|
+
return;
|
|
689
|
+
if (error.code === "ETIMEDOUT") {
|
|
690
|
+
killedBy = "timeout";
|
|
691
|
+
deadlineMiss = { elapsed_ms: Date.now() - start, child_exited: owned.rootExited(), survived_grace: false };
|
|
692
|
+
killForBound();
|
|
693
|
+
}
|
|
694
|
+
else
|
|
695
|
+
finishResult(null, null, error);
|
|
671
696
|
});
|
|
672
697
|
child.on("close", (code, signal) => {
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
child_exited: code !== null,
|
|
679
|
-
survived_grace: false,
|
|
680
|
-
})
|
|
681
|
-
: `child exceeded the ${String(overflowLimit)}-byte output bound`);
|
|
682
|
-
bound.code = killedBy === "timeout" ? "ETIMEDOUT" : "ENOBUFS";
|
|
683
|
-
error = bound;
|
|
684
|
-
}
|
|
685
|
-
else if (signal !== null && signal !== undefined) {
|
|
686
|
-
error = new Error(`child terminated by signal ${signal}`);
|
|
687
|
-
}
|
|
688
|
-
finish({
|
|
689
|
-
status: code,
|
|
690
|
-
stdout,
|
|
691
|
-
stderr,
|
|
692
|
-
argv: resolved,
|
|
693
|
-
cwd: options.cwd,
|
|
694
|
-
duration_ms: Date.now() - start,
|
|
695
|
-
...(error ? { error } : {}),
|
|
696
|
-
signal: signal ?? null,
|
|
697
|
-
});
|
|
698
|
+
// Capture closure says nothing about descendants which closed their own
|
|
699
|
+
// writers. Do not cancel the remaining owned-group escalation for them.
|
|
700
|
+
if (killedBy !== null && !owned.cleanup(false).cleanup_verified)
|
|
701
|
+
return;
|
|
702
|
+
finishResult(owned.rootExited() ? owned.rootStatus() : code, owned.rootExited() ? owned.rootSignal() : signal ?? null);
|
|
698
703
|
});
|
|
699
704
|
});
|
|
700
705
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/shared/tooling/exec.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/shared/tooling/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type ChildProcessWithoutNullStreams } from "node:child_process";
|
|
2
|
+
export interface OwnedProcessCleanup {
|
|
3
|
+
scope: "process_group" | "windows_job";
|
|
4
|
+
root_exit_observed: boolean;
|
|
5
|
+
stdio_incomplete: boolean;
|
|
6
|
+
cleanup_verified: boolean;
|
|
7
|
+
termination_error?: string;
|
|
8
|
+
}
|
|
9
|
+
/** One bound's TERM grace plus a finite hard-kill/capture-drain window. */
|
|
10
|
+
export declare const OWNED_PROCESS_DRAIN_GRACE_MS = 1000;
|
|
11
|
+
export declare const OWNED_PROCESS_TERM_GRACE_MS = 2000;
|
|
12
|
+
/** Shared referenced cleanup clock; callers retain their own error/capture contract. */
|
|
13
|
+
export declare function beginOwnedProcessTermination(owned: {
|
|
14
|
+
terminate(signal: NodeJS.Signals): void;
|
|
15
|
+
}, onEscalate: () => void, onDrainLimit: () => void): () => void;
|
|
16
|
+
/** Ordinary descendant ownership; neither process groups nor Jobs are a sandbox. */
|
|
17
|
+
export declare function spawnOwnedProcess(argv: string[], options: {
|
|
18
|
+
cwd?: string;
|
|
19
|
+
env: NodeJS.ProcessEnv;
|
|
20
|
+
deadlineAt?: number;
|
|
21
|
+
}): {
|
|
22
|
+
child: ChildProcessWithoutNullStreams;
|
|
23
|
+
terminate: (signal: NodeJS.Signals) => void;
|
|
24
|
+
cleanup: (stdioIncomplete: boolean) => OwnedProcessCleanup;
|
|
25
|
+
release: () => void;
|
|
26
|
+
rootExited: () => boolean;
|
|
27
|
+
rootStatus: () => number | null;
|
|
28
|
+
rootSignal: () => string | null;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=ownedProcessLifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownedProcessLifecycle.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/ownedProcessLifecycle.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAIhF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,eAAe,GAAG,aAAa,CAAC;IACvC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,2EAA2E;AAC3E,eAAO,MAAM,4BAA4B,OAAQ,CAAC;AAClD,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AAEjD,wFAAwF;AACxF,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE;IAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAA;CAAE,EAClD,UAAU,EAAE,MAAM,IAAI,EACtB,YAAY,EAAE,MAAM,IAAI,GACvB,MAAM,IAAI,CAKZ;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;;wBA+B3C,MAAM,CAAC,OAAO,KAAG,IAAI;+BAYd,OAAO,KAAG,mBAAmB;mBAM3C,IAAI;;;;EAOzB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// sites-pinned: tests/shared/exec-owned-bounds.test.ts, tests/shared/exec-utf8-capture.test.ts, tests/shared/allowlisted-exec-runner-internals.test.ts
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { isOwnedJobMessage } from "./windowsOwnedJob.js";
|
|
5
|
+
/** One bound's TERM grace plus a finite hard-kill/capture-drain window. */
|
|
6
|
+
export const OWNED_PROCESS_DRAIN_GRACE_MS = 1_000;
|
|
7
|
+
export const OWNED_PROCESS_TERM_GRACE_MS = 2_000;
|
|
8
|
+
/** Shared referenced cleanup clock; callers retain their own error/capture contract. */
|
|
9
|
+
export function beginOwnedProcessTermination(owned, onEscalate, onDrainLimit) {
|
|
10
|
+
const escalation = setTimeout(() => { onEscalate(); owned.terminate("SIGKILL"); }, OWNED_PROCESS_TERM_GRACE_MS);
|
|
11
|
+
const drain = setTimeout(() => { owned.terminate("SIGKILL"); onDrainLimit(); }, OWNED_PROCESS_TERM_GRACE_MS + OWNED_PROCESS_DRAIN_GRACE_MS);
|
|
12
|
+
owned.terminate("SIGTERM");
|
|
13
|
+
return () => { clearTimeout(escalation); clearTimeout(drain); };
|
|
14
|
+
}
|
|
15
|
+
/** Ordinary descendant ownership; neither process groups nor Jobs are a sandbox. */
|
|
16
|
+
export function spawnOwnedProcess(argv, options) {
|
|
17
|
+
const windows = process.platform === "win32";
|
|
18
|
+
let stopped = false;
|
|
19
|
+
let rootExited = false;
|
|
20
|
+
let rootStatus = null;
|
|
21
|
+
let rootSignal = null;
|
|
22
|
+
let emptyObserved = false;
|
|
23
|
+
let terminationError;
|
|
24
|
+
// Both src and dist tooling live three levels beneath the package root.
|
|
25
|
+
// The normal build publishes this executable helper in dist/**.
|
|
26
|
+
const helper = fileURLToPath(new URL("../../../dist/shared/tooling/windowsOwnedJob.js", import.meta.url));
|
|
27
|
+
const child = (windows
|
|
28
|
+
? spawn(process.execPath, [helper], { cwd: options.cwd, env: { ...options.env, NODE_OPTIONS: undefined }, stdio: ["pipe", "pipe", "pipe", "ipc"], windowsHide: true, shell: false })
|
|
29
|
+
: spawn(argv[0], argv.slice(1), { cwd: options.cwd, env: options.env, stdio: ["pipe", "pipe", "pipe"], windowsHide: true, shell: false, detached: true }));
|
|
30
|
+
if (windows) {
|
|
31
|
+
child.on("message", (message) => {
|
|
32
|
+
if (!isOwnedJobMessage(message))
|
|
33
|
+
return;
|
|
34
|
+
switch (message.type) {
|
|
35
|
+
case "ready":
|
|
36
|
+
if (!stopped && child.connected && (options.deadlineAt === undefined || Date.now() < options.deadlineAt))
|
|
37
|
+
child.send({ argv, env: options.env, deadlineAt: options.deadlineAt }, (error) => { if (error && !stopped)
|
|
38
|
+
child.emit("error", error); });
|
|
39
|
+
break;
|
|
40
|
+
case "root_exit":
|
|
41
|
+
rootExited = true;
|
|
42
|
+
rootStatus = message.code;
|
|
43
|
+
rootSignal = message.signal;
|
|
44
|
+
break;
|
|
45
|
+
case "empty":
|
|
46
|
+
emptyObserved = true;
|
|
47
|
+
break;
|
|
48
|
+
case "error":
|
|
49
|
+
child.emit("error", Object.assign(new Error(message.message), { code: message.code }));
|
|
50
|
+
break;
|
|
51
|
+
case "started": break;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
child.once("exit", (code, signal) => { rootExited = true; rootStatus = code; rootSignal = signal; });
|
|
57
|
+
}
|
|
58
|
+
const terminate = (signal) => {
|
|
59
|
+
stopped = true;
|
|
60
|
+
try {
|
|
61
|
+
if (windows) {
|
|
62
|
+
if (!child.kill(signal) && child.exitCode === null && child.signalCode === null)
|
|
63
|
+
terminationError = "owner termination not confirmed";
|
|
64
|
+
}
|
|
65
|
+
else if (child.pid !== undefined && child.pid > 0 && child.pid !== process.pid)
|
|
66
|
+
process.kill(-child.pid, signal);
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
const code = error.code;
|
|
70
|
+
if (code !== "ESRCH")
|
|
71
|
+
terminationError = code ?? "owned process termination failed";
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const cleanup = (stdioIncomplete) => {
|
|
75
|
+
if (!windows && child.pid !== undefined) {
|
|
76
|
+
try {
|
|
77
|
+
process.kill(-child.pid, 0);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
if (error.code === "ESRCH")
|
|
81
|
+
emptyObserved = true;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return { scope: windows ? "windows_job" : "process_group", root_exit_observed: rootExited, stdio_incomplete: stdioIncomplete, cleanup_verified: emptyObserved, ...(terminationError ? { termination_error: terminationError } : {}) };
|
|
85
|
+
};
|
|
86
|
+
const release = () => {
|
|
87
|
+
stopped = true;
|
|
88
|
+
// A still-live Windows helper must not survive a terminal fallback/error.
|
|
89
|
+
// Its disconnect handler closes the sole Job handle through process exit.
|
|
90
|
+
if (windows && child.connected) {
|
|
91
|
+
try {
|
|
92
|
+
child.disconnect();
|
|
93
|
+
}
|
|
94
|
+
catch { /* already disconnected */ }
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
return { child, terminate, cleanup, release, rootExited: () => rootExited, rootStatus: () => rootStatus, rootSignal: () => rootSignal };
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=ownedProcessLifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ownedProcessLifecycle.js","sourceRoot":"","sources":["../../../src/shared/tooling/ownedProcessLifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type ChildProcess } from "node:child_process";
|
|
2
|
+
export type OwnedJobMessage = {
|
|
3
|
+
type: "ready";
|
|
4
|
+
} | {
|
|
5
|
+
type: "started";
|
|
6
|
+
pid: number;
|
|
7
|
+
} | {
|
|
8
|
+
type: "root_exit";
|
|
9
|
+
code: number | null;
|
|
10
|
+
signal: string | null;
|
|
11
|
+
} | {
|
|
12
|
+
type: "empty";
|
|
13
|
+
} | {
|
|
14
|
+
type: "error";
|
|
15
|
+
message: string;
|
|
16
|
+
code: string;
|
|
17
|
+
};
|
|
18
|
+
/** The inherited IPC channel carries lifecycle metadata, never target output. */
|
|
19
|
+
export declare function isOwnedJobMessage(value: unknown): value is OwnedJobMessage;
|
|
20
|
+
export interface WindowsJobRuntime {
|
|
21
|
+
platform: NodeJS.Platform;
|
|
22
|
+
send(message: OwnedJobMessage, done?: () => void): void;
|
|
23
|
+
onStart(handler: (payload: unknown) => void): void;
|
|
24
|
+
onDisconnect(handler: () => void): void;
|
|
25
|
+
spawn(argv: string[], env: NodeJS.ProcessEnv): ChildProcess;
|
|
26
|
+
closeInheritedStdio(): void;
|
|
27
|
+
exit(code: number): void;
|
|
28
|
+
}
|
|
29
|
+
export interface WindowsJobOwnership {
|
|
30
|
+
activeCount(): number;
|
|
31
|
+
releaseEmpty(): void;
|
|
32
|
+
}
|
|
33
|
+
/** Injectable protocol/ownership seams never send synthetic identities to OS APIs. */
|
|
34
|
+
export declare function runWindowsOwnedJob(runtime: WindowsJobRuntime, createJob?: () => Promise<WindowsJobOwnership>): Promise<void>;
|
|
35
|
+
//# sourceMappingURL=windowsOwnedJob.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"windowsOwnedJob.d.ts","sourceRoot":"","sources":["../../../src/shared/tooling/windowsOwnedJob.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI9D,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,iFAAiF;AACjF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAS1E;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC1B,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxD,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IACnD,YAAY,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACxC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,YAAY,CAAC;IAC5D,mBAAmB,IAAI,IAAI,CAAC;IAC5B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,IAAI,MAAM,CAAC;IACtB,YAAY,IAAI,IAAI,CAAC;CACtB;AAoCD,sFAAsF;AACtF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,GAAE,MAAM,OAAO,CAAC,mBAAmB,CAAmB,GAC9D,OAAO,CAAC,IAAI,CAAC,CAyDf"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
// sites-pinned: tests/shared/windows-owned-job.test.ts, tests/shared/exec-owned-bounds.test.ts
|
|
2
|
+
import { spawn } from "node:child_process";
|
|
3
|
+
import { closeSync } from "node:fs";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
/** The inherited IPC channel carries lifecycle metadata, never target output. */
|
|
6
|
+
export function isOwnedJobMessage(value) {
|
|
7
|
+
if (!value || typeof value !== "object" || !("type" in value))
|
|
8
|
+
return false;
|
|
9
|
+
switch (value.type) {
|
|
10
|
+
case "ready":
|
|
11
|
+
case "empty": return true;
|
|
12
|
+
case "started": return "pid" in value && Number.isSafeInteger(value.pid) && Number(value.pid) > 0;
|
|
13
|
+
case "root_exit": return "code" in value && (value.code === null || Number.isInteger(value.code)) && "signal" in value && (value.signal === null || typeof value.signal === "string");
|
|
14
|
+
case "error": return "message" in value && typeof value.message === "string" && "code" in value && typeof value.code === "string";
|
|
15
|
+
default: return false;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function createNativeJob() {
|
|
19
|
+
const { default: koffi } = await import("koffi");
|
|
20
|
+
const kernel = koffi.load("kernel32.dll");
|
|
21
|
+
// Koffi lays out pointer-sized fields for the running ABI; no x64 offsets.
|
|
22
|
+
const basic = koffi.struct({ user: "int64_t", jobUser: "int64_t", flags: "uint32_t", min: "size_t", max: "size_t", count: "uint32_t", affinity: "uintptr_t", priority: "uint32_t", scheduling: "uint32_t" });
|
|
23
|
+
const limits = koffi.struct({ basic, io: koffi.array("uint64_t", 6), processMemory: "size_t", jobMemory: "size_t", peakProcess: "size_t", peakJob: "size_t" });
|
|
24
|
+
const accounting = koffi.struct({ user: "int64_t", kernel: "int64_t", periodUser: "int64_t", periodKernel: "int64_t", pageFaults: "uint32_t", total: "uint32_t", active: "uint32_t", terminated: "uint32_t" });
|
|
25
|
+
const create = kernel.func("void * __stdcall CreateJobObjectW(void *, str16)");
|
|
26
|
+
const set = kernel.func("__stdcall", "SetInformationJobObject", "int", ["void *", "int", koffi.pointer(limits), "uint32_t"]);
|
|
27
|
+
const assign = kernel.func("int __stdcall AssignProcessToJobObject(void *, void *)");
|
|
28
|
+
const current = kernel.func("void * __stdcall GetCurrentProcess()");
|
|
29
|
+
const query = kernel.func("__stdcall", "QueryInformationJobObject", "int", ["void *", "int", koffi.out(koffi.pointer(accounting)), "uint32_t", "void *"]);
|
|
30
|
+
const close = kernel.func("int __stdcall CloseHandle(void *)");
|
|
31
|
+
const lastError = kernel.func("uint32_t __stdcall GetLastError()");
|
|
32
|
+
const values = { basic: { user: 0, jobUser: 0, flags: 0x2000, min: 0, max: 0, count: 0, affinity: 0, priority: 0, scheduling: 0 }, io: [0, 0, 0, 0, 0, 0], processMemory: 0, jobMemory: 0, peakProcess: 0, peakJob: 0 };
|
|
33
|
+
// Null security attributes make this sole Job handle noninheritable. Assign
|
|
34
|
+
// OURSELVES before launching target code: no create-then-assign fork race.
|
|
35
|
+
const job = create(null, null);
|
|
36
|
+
if (!job || !set(job, 9, values, koffi.sizeof(limits)) || !assign(job, current())) {
|
|
37
|
+
if (job)
|
|
38
|
+
close(job);
|
|
39
|
+
throw new Error(`Windows Job ownership setup failed (${String(lastError())})`);
|
|
40
|
+
}
|
|
41
|
+
const activeCount = () => {
|
|
42
|
+
const info = {};
|
|
43
|
+
if (!query(job, 1, info, koffi.sizeof(accounting), null) || typeof info.active !== "number" || !Number.isInteger(info.active) || info.active < 1)
|
|
44
|
+
throw new Error(`Windows Job accounting failed (${String(lastError())})`);
|
|
45
|
+
return info.active;
|
|
46
|
+
};
|
|
47
|
+
return { activeCount, releaseEmpty() {
|
|
48
|
+
if (activeCount() !== 1)
|
|
49
|
+
throw new Error("Windows Job still owns target processes");
|
|
50
|
+
values.basic.flags = 0;
|
|
51
|
+
if (!set(job, 9, values, koffi.sizeof(limits)) || !close(job))
|
|
52
|
+
throw new Error(`Windows Job release failed (${String(lastError())})`);
|
|
53
|
+
} };
|
|
54
|
+
}
|
|
55
|
+
/** Injectable protocol/ownership seams never send synthetic identities to OS APIs. */
|
|
56
|
+
export async function runWindowsOwnedJob(runtime, createJob = createNativeJob) {
|
|
57
|
+
if (runtime.platform !== "win32")
|
|
58
|
+
throw new Error("owned Job helper requires Windows");
|
|
59
|
+
const job = await createJob();
|
|
60
|
+
let poll;
|
|
61
|
+
const exit = (code) => { clearInterval(poll); runtime.exit(code); };
|
|
62
|
+
// Unexpected owner disappearance closes the last handle and terminates all
|
|
63
|
+
// ordinary Job members. No breakaway flags and no process-name discovery.
|
|
64
|
+
runtime.onDisconnect(() => exit(1));
|
|
65
|
+
const releaseEmptyJob = (code) => {
|
|
66
|
+
try {
|
|
67
|
+
job.releaseEmpty();
|
|
68
|
+
runtime.send({ type: "empty" }, () => exit(code));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job release failed" });
|
|
72
|
+
exit(1);
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
runtime.onStart((payload) => {
|
|
76
|
+
try {
|
|
77
|
+
if (!payload || typeof payload !== "object" || !("argv" in payload) || !Array.isArray(payload.argv) || payload.argv.length === 0 || !payload.argv.every((part) => typeof part === "string"))
|
|
78
|
+
throw new Error("invalid owned Job start message");
|
|
79
|
+
if (!("env" in payload) || !payload.env || typeof payload.env !== "object")
|
|
80
|
+
throw new Error("missing owned Job environment");
|
|
81
|
+
if ("deadlineAt" in payload && typeof payload.deadlineAt === "number" && Date.now() >= payload.deadlineAt) {
|
|
82
|
+
runtime.send({ type: "error", code: "ETIMEDOUT", message: "owned subprocess deadline expired before target start" });
|
|
83
|
+
releaseEmptyJob(1);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const child = runtime.spawn(payload.argv, payload.env);
|
|
87
|
+
child.once("spawn", () => {
|
|
88
|
+
if (child.pid)
|
|
89
|
+
runtime.send({ type: "started", pid: child.pid });
|
|
90
|
+
// The target has inherited its copies. The helper must not itself keep
|
|
91
|
+
// capture writers or the input reader open while descendants run.
|
|
92
|
+
runtime.closeInheritedStdio();
|
|
93
|
+
});
|
|
94
|
+
child.once("error", (error) => {
|
|
95
|
+
runtime.send({ type: "error", code: error.code ?? "EOWNERSHIP", message: error.message });
|
|
96
|
+
releaseEmptyJob(1);
|
|
97
|
+
});
|
|
98
|
+
child.once("exit", (code, signal) => {
|
|
99
|
+
runtime.send({ type: "root_exit", code, signal });
|
|
100
|
+
poll = setInterval(() => {
|
|
101
|
+
try {
|
|
102
|
+
if (job.activeCount() !== 1)
|
|
103
|
+
return;
|
|
104
|
+
clearInterval(poll);
|
|
105
|
+
releaseEmptyJob(code ?? 1);
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
clearInterval(poll);
|
|
109
|
+
runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job accounting failed" });
|
|
110
|
+
exit(1);
|
|
111
|
+
}
|
|
112
|
+
}, 10);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
runtime.send({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job start failed" });
|
|
117
|
+
exit(1);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
runtime.send({ type: "ready" });
|
|
121
|
+
}
|
|
122
|
+
if (process.argv[1] === fileURLToPath(import.meta.url)) {
|
|
123
|
+
if (!process.send)
|
|
124
|
+
process.exit(1);
|
|
125
|
+
runWindowsOwnedJob({
|
|
126
|
+
platform: process.platform,
|
|
127
|
+
send: (message, done) => { if (done)
|
|
128
|
+
process.send?.(message, done);
|
|
129
|
+
else
|
|
130
|
+
process.send?.(message); },
|
|
131
|
+
onStart: (handler) => { process.once("message", handler); },
|
|
132
|
+
onDisconnect: (handler) => { process.once("disconnect", handler); },
|
|
133
|
+
spawn: (argv, env) => spawn(argv[0], argv.slice(1), { env, stdio: "inherit", windowsHide: true, shell: false }),
|
|
134
|
+
closeInheritedStdio: () => { for (const fd of [0, 1, 2]) {
|
|
135
|
+
try {
|
|
136
|
+
closeSync(fd);
|
|
137
|
+
}
|
|
138
|
+
catch { /* already closed */ }
|
|
139
|
+
} },
|
|
140
|
+
exit: (code) => { process.exit(code); },
|
|
141
|
+
}).catch((error) => {
|
|
142
|
+
process.send?.({ type: "error", code: "EOWNERSHIP", message: error instanceof Error ? error.message : "Windows Job setup failed" }, () => process.exit(1));
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=windowsOwnedJob.js.map
|