@melra/terminal-runtime 0.3.0-alpha.12 → 0.3.0-alpha.13
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/index.d.ts +37 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +233 -16
- package/dist/index.js.map +1 -1
- package/dist/resolve-command.d.ts +6 -0
- package/dist/resolve-command.d.ts.map +1 -1
- package/dist/resolve-command.js +7 -1
- package/dist/resolve-command.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -1,20 +1,56 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type TerminalOperation } from "@melra/protocol";
|
|
2
2
|
export { quoteForCmd, resolveCommand } from "./resolve-command.js";
|
|
3
3
|
export type { ResolvedCommand } from "./resolve-command.js";
|
|
4
4
|
export interface TerminalRuntimeOptions {
|
|
5
5
|
root: string;
|
|
6
6
|
allowedEnvironment?: string[];
|
|
7
7
|
baseEnvironment?: NodeJS.ProcessEnv;
|
|
8
|
+
/** Whether a path is, or is inside, one of MELRA's own files, which no argument may reach in any mode. Absent, nothing is. */
|
|
9
|
+
reserved?: (path: string) => Promise<boolean>;
|
|
10
|
+
/** Whether a path is a directory holding one of them, which a recursive reader given it reaches unnamed. Absent, none is. */
|
|
11
|
+
holdsReserved?: (path: string) => Promise<boolean>;
|
|
12
|
+
/** Refuse an argument spelled inside the root that leads out: policy asked approval only for ones spelled outside. */
|
|
13
|
+
confineArguments?: boolean;
|
|
8
14
|
}
|
|
9
15
|
export declare function redactTerminalOutput(value: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Policy classifies several `git` subcommands (diff, show, log, status, ...) as
|
|
18
|
+
* approval-free reads, but git runs programs the repository's own config and
|
|
19
|
+
* attributes name while serving one. Those live in the git directory, not in
|
|
20
|
+
* the terminal arguments, so `checkArguments` never sees them, and policy
|
|
21
|
+
* cannot either.
|
|
22
|
+
*
|
|
23
|
+
* The guarantee is that nothing MELRA writes lands in a git directory: the
|
|
24
|
+
* file runtime refuses it (`path_git_metadata`), so only a person approving a
|
|
25
|
+
* command that does so can change what git's config makes it run. This is
|
|
26
|
+
* defence in depth on top: a read-shaped call (subcommand first, as policy
|
|
27
|
+
* requires for a read) spawns with system and global config nulled, the
|
|
28
|
+
* switches above, and external diff and textconv off on the subcommands that
|
|
29
|
+
* emit diffs (the only ones that accept the flags). Mutations — commit, push,
|
|
30
|
+
* or a global option before the subcommand — are left untouched, so a
|
|
31
|
+
* committer's identity and credentials from global config still apply.
|
|
32
|
+
*
|
|
33
|
+
* Pure and exported for unit testing. The caller's `operation.args` are never
|
|
34
|
+
* touched, only the spawned argv, so receipts still quote what was asked.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hardenGitRead(command: string, args: readonly string[]): {
|
|
37
|
+
args: string[];
|
|
38
|
+
env: Record<string, string>;
|
|
39
|
+
} | undefined;
|
|
10
40
|
export declare class TerminalRuntime {
|
|
11
41
|
readonly root: string;
|
|
12
42
|
readonly allowedEnvironment: Set<string>;
|
|
13
43
|
readonly baseEnvironment: NodeJS.ProcessEnv;
|
|
44
|
+
/** The root as policy spelled it, which is what "spelled inside" is measured against. */
|
|
45
|
+
private readonly lexicalRoot;
|
|
46
|
+
private readonly reserved;
|
|
47
|
+
private readonly holdsReserved;
|
|
48
|
+
private readonly confineArguments;
|
|
14
49
|
private readonly jobs;
|
|
15
50
|
private constructor();
|
|
16
51
|
static create(options: TerminalRuntimeOptions): Promise<TerminalRuntime>;
|
|
17
52
|
private resolveCwd;
|
|
53
|
+
private checkArguments;
|
|
18
54
|
private prepare;
|
|
19
55
|
private runForeground;
|
|
20
56
|
private startBackground;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAyC,KAAK,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAIhG,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACnE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACpC,8HAA8H;IAC9H,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,6HAA6H;IAC7H,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,sHAAsH;IACtH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAgBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AA+CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,GACtB;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,SAAS,CAW7D;AAuGD,qBAAa,eAAe;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC;IAC5C,yFAAyF;IACzF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqC;IACnE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAU;IAC3C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoC;IAEzD,OAAO;WAeM,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,eAAe,CAAC;YAIhE,UAAU;YAQV,cAAc;YAwBd,OAAO;YAwDP,aAAa;YA8Fb,eAAe;IA6F7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,GAAG;IASX,OAAO,CAAC,SAAS;IAuBX,OAAO,CACX,SAAS,EAAE,iBAAiB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAoBnC;;;;;OAKG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B"}
|
package/dist/index.js
CHANGED
|
@@ -3,10 +3,17 @@
|
|
|
3
3
|
import { spawn } from "node:child_process";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import { realpath } from "node:fs/promises";
|
|
6
|
-
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
6
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
7
|
+
import { outcomeUnknown, terminalArgumentPaths } from "@melra/protocol";
|
|
7
8
|
import { redactSecrets } from "@melra/receipt-schema";
|
|
8
9
|
import { resolveCommand } from "./resolve-command.js";
|
|
9
10
|
export { quoteForCmd, resolveCommand } from "./resolve-command.js";
|
|
11
|
+
/**
|
|
12
|
+
* Programs that print names, never contents, so a directory holding MELRA's
|
|
13
|
+
* files is safe to give them: `ls ..` from a project under home keeps working.
|
|
14
|
+
* Naming the files themselves is still refused.
|
|
15
|
+
*/
|
|
16
|
+
const NAME_LISTERS = new Set(["ls", "pwd", "where"]);
|
|
10
17
|
function inside(root, candidate) {
|
|
11
18
|
const rel = relative(root, candidate);
|
|
12
19
|
return rel === "" || (!rel.startsWith(`..${sep}`) && rel !== ".." && !isAbsolute(rel));
|
|
@@ -16,6 +23,77 @@ function inside(root, candidate) {
|
|
|
16
23
|
export function redactTerminalOutput(value) {
|
|
17
24
|
return redactSecrets(value).value;
|
|
18
25
|
}
|
|
26
|
+
/** Where a path leads: through every link, or for one not there yet, through its directory's. */
|
|
27
|
+
async function leadsTo(spelled) {
|
|
28
|
+
return await realpath(spelled).catch(async () => join(await realpath(dirname(spelled)).catch(() => resolve(dirname(spelled))), basename(spelled)));
|
|
29
|
+
}
|
|
30
|
+
/** The null device, so git's system/global config files resolve to nothing. */
|
|
31
|
+
const GIT_NULL_CONFIG = process.platform === "win32" ? "NUL" : "/dev/null";
|
|
32
|
+
/**
|
|
33
|
+
* git subcommands policy classifies as approval-free reads (the same set as
|
|
34
|
+
* `READ_ONLY_GIT_ACTIONS` in policy-core). Kept here, not imported, because this
|
|
35
|
+
* is the spawn boundary and it has to decide for itself what git it is about to
|
|
36
|
+
* run — policy cannot see what the .git/config of the repo will do.
|
|
37
|
+
*/
|
|
38
|
+
const GIT_READ_SUBCOMMANDS = new Set(["branch", "diff", "log", "rev-parse", "show", "status", "tag"]);
|
|
39
|
+
/** The read subcommands that emit diffs — the only ones that accept the diff flags below. */
|
|
40
|
+
const GIT_DIFF_SUBCOMMANDS = new Set(["diff", "log", "show"]);
|
|
41
|
+
/** Whether a command, path-qualified or not, is the git program by name. */
|
|
42
|
+
function isGitCommand(command) {
|
|
43
|
+
return (basename(command.replaceAll("\\", "/")).toLowerCase().replace(/\.(exe|cmd|bat|com|ps1)$/, "") ===
|
|
44
|
+
"git");
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Settings that each turn off a whole family of programs git can run while
|
|
48
|
+
* serving a read: hooks (every hook, through one hooks path), signature
|
|
49
|
+
* verifiers (every format's program), and fetching objects a partial clone is
|
|
50
|
+
* missing (every transport, proxy and credential program behind it). Each is a
|
|
51
|
+
* `-c` or an environment variable, so it also reaches any git a read starts in
|
|
52
|
+
* turn, such as a submodule's.
|
|
53
|
+
*
|
|
54
|
+
* ponytail: GIT_NO_LAZY_FETCH needs git 2.45; an older git ignores it.
|
|
55
|
+
*/
|
|
56
|
+
const GIT_READ_SWITCHES = [
|
|
57
|
+
"-c", "core.fsmonitor=false",
|
|
58
|
+
"-c", `core.hooksPath=${GIT_NULL_CONFIG}`,
|
|
59
|
+
"-c", `gpg.program=${GIT_NULL_CONFIG}`,
|
|
60
|
+
"-c", `gpg.ssh.program=${GIT_NULL_CONFIG}`,
|
|
61
|
+
"-c", `gpg.x509.program=${GIT_NULL_CONFIG}`,
|
|
62
|
+
];
|
|
63
|
+
/**
|
|
64
|
+
* Policy classifies several `git` subcommands (diff, show, log, status, ...) as
|
|
65
|
+
* approval-free reads, but git runs programs the repository's own config and
|
|
66
|
+
* attributes name while serving one. Those live in the git directory, not in
|
|
67
|
+
* the terminal arguments, so `checkArguments` never sees them, and policy
|
|
68
|
+
* cannot either.
|
|
69
|
+
*
|
|
70
|
+
* The guarantee is that nothing MELRA writes lands in a git directory: the
|
|
71
|
+
* file runtime refuses it (`path_git_metadata`), so only a person approving a
|
|
72
|
+
* command that does so can change what git's config makes it run. This is
|
|
73
|
+
* defence in depth on top: a read-shaped call (subcommand first, as policy
|
|
74
|
+
* requires for a read) spawns with system and global config nulled, the
|
|
75
|
+
* switches above, and external diff and textconv off on the subcommands that
|
|
76
|
+
* emit diffs (the only ones that accept the flags). Mutations — commit, push,
|
|
77
|
+
* or a global option before the subcommand — are left untouched, so a
|
|
78
|
+
* committer's identity and credentials from global config still apply.
|
|
79
|
+
*
|
|
80
|
+
* Pure and exported for unit testing. The caller's `operation.args` are never
|
|
81
|
+
* touched, only the spawned argv, so receipts still quote what was asked.
|
|
82
|
+
*/
|
|
83
|
+
export function hardenGitRead(command, args) {
|
|
84
|
+
if (!isGitCommand(command))
|
|
85
|
+
return undefined;
|
|
86
|
+
const first = args[0];
|
|
87
|
+
if (first === undefined || !GIT_READ_SUBCOMMANDS.has(first.toLowerCase()))
|
|
88
|
+
return undefined;
|
|
89
|
+
const diffFlags = GIT_DIFF_SUBCOMMANDS.has(first.toLowerCase())
|
|
90
|
+
? ["--no-ext-diff", "--no-textconv"]
|
|
91
|
+
: [];
|
|
92
|
+
return {
|
|
93
|
+
args: [...GIT_READ_SWITCHES, first, ...diffFlags, ...args.slice(1)],
|
|
94
|
+
env: { GIT_CONFIG_SYSTEM: GIT_NULL_CONFIG, GIT_CONFIG_GLOBAL: GIT_NULL_CONFIG, GIT_NO_LAZY_FETCH: "1" },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
19
97
|
/**
|
|
20
98
|
* `spawn` reports a missing program as a bare `ENOENT` naming only the syscall,
|
|
21
99
|
* which reads as an internal fault rather than "that program is not installed".
|
|
@@ -30,15 +108,73 @@ function describeSpawnError(error, command) {
|
|
|
30
108
|
}
|
|
31
109
|
/** How long a signalled child gets to exit on its own before SIGKILL. */
|
|
32
110
|
const CLOSE_GRACE_MS = 2_000;
|
|
111
|
+
/** How long a SIGTERM gets before SIGKILL when a run times out or is cancelled. */
|
|
112
|
+
const KILL_GRACE_MS = 1_000;
|
|
113
|
+
/**
|
|
114
|
+
* How long after the command exits its output pipes may stay open. A process
|
|
115
|
+
* it started can inherit them and keep them open for as long as it lives,
|
|
116
|
+
* which held a run, its timeout and its cancel, until that process ended.
|
|
117
|
+
*/
|
|
118
|
+
const EXIT_DRAIN_MS = 250;
|
|
119
|
+
/** Jobs kept at once, running or finished; the oldest finished one makes room. */
|
|
120
|
+
const MAX_JOBS = 64;
|
|
121
|
+
/**
|
|
122
|
+
* Each command leads its own process group on POSIX, so a timeout, a cancel
|
|
123
|
+
* or `stop` reaches what it started too, not only the program itself. Windows
|
|
124
|
+
* has no process groups to signal; `taskkill /T` walks the tree instead.
|
|
125
|
+
*/
|
|
126
|
+
const OWN_GROUP = process.platform !== "win32";
|
|
127
|
+
function signalTree(child, signal) {
|
|
128
|
+
if (child.pid === undefined)
|
|
129
|
+
return;
|
|
130
|
+
if (!OWN_GROUP) {
|
|
131
|
+
// `/F` because Windows has no SIGTERM to trap: TerminateProcess is all
|
|
132
|
+
// `child.kill` did there too.
|
|
133
|
+
spawn("taskkill", ["/pid", String(child.pid), "/T", "/F"], { stdio: "ignore", windowsHide: true })
|
|
134
|
+
.on("error", () => child.kill(signal));
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
process.kill(-child.pid, signal);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// The group is already gone.
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** SIGTERM to the tree now and SIGKILL shortly after, unless it has all exited. */
|
|
145
|
+
function stopTree(child, graceMs) {
|
|
146
|
+
signalTree(child, "SIGTERM");
|
|
147
|
+
const escalation = setTimeout(() => signalTree(child, "SIGKILL"), graceMs);
|
|
148
|
+
escalation.unref();
|
|
149
|
+
return escalation;
|
|
150
|
+
}
|
|
151
|
+
/** Once the command exits, its pipes get a moment to drain and are then closed. */
|
|
152
|
+
function closePipesAfterExit(child) {
|
|
153
|
+
child.once("exit", () => {
|
|
154
|
+
setTimeout(() => {
|
|
155
|
+
child.stdout?.destroy();
|
|
156
|
+
child.stderr?.destroy();
|
|
157
|
+
}, EXIT_DRAIN_MS).unref();
|
|
158
|
+
});
|
|
159
|
+
}
|
|
33
160
|
export class TerminalRuntime {
|
|
34
161
|
root;
|
|
35
162
|
allowedEnvironment;
|
|
36
163
|
baseEnvironment;
|
|
164
|
+
/** The root as policy spelled it, which is what "spelled inside" is measured against. */
|
|
165
|
+
lexicalRoot;
|
|
166
|
+
reserved;
|
|
167
|
+
holdsReserved;
|
|
168
|
+
confineArguments;
|
|
37
169
|
jobs = new Map();
|
|
38
170
|
constructor(options, root) {
|
|
39
171
|
this.root = root;
|
|
40
172
|
this.allowedEnvironment = new Set(options.allowedEnvironment ?? ["CI", "LANG", "LC_ALL", "NO_COLOR", "TERM"]);
|
|
41
173
|
this.baseEnvironment = options.baseEnvironment ?? process.env;
|
|
174
|
+
this.lexicalRoot = resolve(options.root);
|
|
175
|
+
this.reserved = options.reserved ?? (async () => false);
|
|
176
|
+
this.holdsReserved = options.holdsReserved ?? (async () => false);
|
|
177
|
+
this.confineArguments = options.confineArguments ?? false;
|
|
42
178
|
}
|
|
43
179
|
static async create(options) {
|
|
44
180
|
return new TerminalRuntime(options, await realpath(options.root));
|
|
@@ -52,6 +188,28 @@ export class TerminalRuntime {
|
|
|
52
188
|
throw new Error("cwd_outside_workspace");
|
|
53
189
|
return actual;
|
|
54
190
|
}
|
|
191
|
+
async checkArguments(operation, cwd) {
|
|
192
|
+
const lexicalCwd = resolve(this.lexicalRoot, operation.cwd ?? ".");
|
|
193
|
+
// A path-qualified program is whatever file sits at that path, so only a
|
|
194
|
+
// bare name is taken at its word.
|
|
195
|
+
const command = operation.command ?? "";
|
|
196
|
+
const listsNames = !/[\\/]/.test(command) &&
|
|
197
|
+
NAME_LISTERS.has(command.toLowerCase().replace(/\.(exe|cmd|bat|com|ps1)$/, ""));
|
|
198
|
+
for (const path of [".", ...terminalArgumentPaths(operation.args)]) {
|
|
199
|
+
// Unnormalised: the program resolves `link/..` through the link.
|
|
200
|
+
const real = await leadsTo(isAbsolute(path) ? path : `${cwd}${sep}${path}`);
|
|
201
|
+
// findstr and where expand their own wildcards, reading the directory.
|
|
202
|
+
for (const probe of /[*?]/.test(path) ? [real, dirname(real)] : [real]) {
|
|
203
|
+
if ((await this.reserved(probe)) || (!listsNames && (await this.holdsReserved(probe)))) {
|
|
204
|
+
throw new Error("terminal_path_reserved");
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
const spelledInside = inside(this.lexicalRoot, resolve(lexicalCwd, path));
|
|
208
|
+
if (this.confineArguments && spelledInside && !inside(this.root, real)) {
|
|
209
|
+
throw new Error("terminal_path_outside_workspace");
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
55
213
|
async prepare(operation) {
|
|
56
214
|
if (operation.command === undefined) {
|
|
57
215
|
throw new Error(`terminal_${operation.action}_requires_command`);
|
|
@@ -60,6 +218,9 @@ export class TerminalRuntime {
|
|
|
60
218
|
throw new Error("terminal_input_contains_null");
|
|
61
219
|
}
|
|
62
220
|
const cwd = await this.resolveCwd(operation.cwd);
|
|
221
|
+
// Before the program is looked up, so a refusal never depends on whether
|
|
222
|
+
// it is installed.
|
|
223
|
+
await this.checkArguments(operation, cwd);
|
|
63
224
|
const environment = {};
|
|
64
225
|
for (const name of ["PATH", "PATHEXT", "SYSTEMROOT", "WINDIR", "COMSPEC"]) {
|
|
65
226
|
if (this.baseEnvironment[name] !== undefined) {
|
|
@@ -83,37 +244,50 @@ export class TerminalRuntime {
|
|
|
83
244
|
pathExt: environment["PATHEXT"],
|
|
84
245
|
comspec: this.baseEnvironment["COMSPEC"],
|
|
85
246
|
});
|
|
247
|
+
// Disable git's config-defined program channels on a read at the spawn
|
|
248
|
+
// boundary, since policy cannot see .git/config (see hardenGitRead).
|
|
249
|
+
// Skipped when resolveCommand wrapped the call in cmd.exe, where `args` is an
|
|
250
|
+
// already-quoted command line rather than git's own arguments.
|
|
251
|
+
const hardened = resolved.windowsVerbatimArguments
|
|
252
|
+
? undefined
|
|
253
|
+
: hardenGitRead(resolved.executable, resolved.args);
|
|
86
254
|
return {
|
|
87
255
|
command: operation.command,
|
|
88
256
|
args: operation.args,
|
|
89
257
|
file: resolved.file,
|
|
90
|
-
spawnArgs: resolved.args,
|
|
258
|
+
spawnArgs: hardened?.args ?? resolved.args,
|
|
91
259
|
windowsVerbatimArguments: resolved.windowsVerbatimArguments,
|
|
92
260
|
executable: resolved.executable,
|
|
93
261
|
cwd,
|
|
94
|
-
environment,
|
|
262
|
+
environment: hardened === undefined ? environment : { ...environment, ...hardened.env },
|
|
95
263
|
timeoutMs: operation.timeoutMs,
|
|
96
264
|
maxOutputChars: operation.maxOutputChars,
|
|
97
265
|
interactive: operation.interactive,
|
|
98
266
|
};
|
|
99
267
|
}
|
|
100
268
|
async runForeground(prepared, signal) {
|
|
269
|
+
if (signal?.aborted === true)
|
|
270
|
+
throw new Error("task_cancelled");
|
|
101
271
|
return await new Promise((resolvePromise, reject) => {
|
|
102
272
|
const child = spawn(prepared.file, prepared.spawnArgs, {
|
|
103
273
|
cwd: prepared.cwd,
|
|
104
274
|
env: prepared.environment,
|
|
105
275
|
shell: false,
|
|
276
|
+
detached: OWN_GROUP,
|
|
106
277
|
windowsHide: true,
|
|
107
278
|
windowsVerbatimArguments: prepared.windowsVerbatimArguments,
|
|
108
279
|
stdio: ["ignore", "pipe", "pipe"],
|
|
109
|
-
signal,
|
|
110
280
|
});
|
|
111
281
|
let stdout = "";
|
|
112
282
|
let stderr = "";
|
|
113
283
|
let truncated = false;
|
|
114
284
|
let timedOut = false;
|
|
285
|
+
let settled = false;
|
|
286
|
+
// Decoded across chunks, so a character split between two reads stays one.
|
|
287
|
+
child.stdout.setEncoding("utf8");
|
|
288
|
+
child.stderr.setEncoding("utf8");
|
|
115
289
|
const append = (current, chunk) => {
|
|
116
|
-
const next = current + chunk
|
|
290
|
+
const next = current + chunk;
|
|
117
291
|
if (next.length > prepared.maxOutputChars) {
|
|
118
292
|
truncated = true;
|
|
119
293
|
return next.slice(0, prepared.maxOutputChars);
|
|
@@ -128,16 +302,45 @@ export class TerminalRuntime {
|
|
|
128
302
|
});
|
|
129
303
|
const timer = setTimeout(() => {
|
|
130
304
|
timedOut = true;
|
|
131
|
-
child
|
|
132
|
-
setTimeout(() => child.kill("SIGKILL"), 1_000).unref();
|
|
305
|
+
stopTree(child, KILL_GRACE_MS);
|
|
133
306
|
}, prepared.timeoutMs);
|
|
134
307
|
timer.unref();
|
|
308
|
+
// Not spawn's own `signal` option: that sends SIGTERM to the program
|
|
309
|
+
// alone, and its listener is gone once the program exits, so a program
|
|
310
|
+
// that traps SIGTERM, or anything it started, outlived the cancel.
|
|
311
|
+
const onAbort = () => {
|
|
312
|
+
if (settled)
|
|
313
|
+
return;
|
|
314
|
+
settled = true;
|
|
315
|
+
clearTimeout(timer);
|
|
316
|
+
stopTree(child, KILL_GRACE_MS);
|
|
317
|
+
// It may well have done its work (written the file, pushed the
|
|
318
|
+
// branch) before it was stopped, so this is not "it did not happen".
|
|
319
|
+
const reason = signal?.reason instanceof Error ? signal.reason.message : "task_cancelled";
|
|
320
|
+
reject(outcomeUnknown(reason));
|
|
321
|
+
};
|
|
322
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
323
|
+
closePipesAfterExit(child);
|
|
324
|
+
// A foreground run is over when its program is; whatever it left behind
|
|
325
|
+
// in its group goes with it.
|
|
326
|
+
child.once("exit", () => {
|
|
327
|
+
if (OWN_GROUP)
|
|
328
|
+
signalTree(child, "SIGTERM");
|
|
329
|
+
});
|
|
135
330
|
child.once("error", (error) => {
|
|
136
331
|
clearTimeout(timer);
|
|
332
|
+
signal?.removeEventListener("abort", onAbort);
|
|
333
|
+
if (settled)
|
|
334
|
+
return;
|
|
335
|
+
settled = true;
|
|
137
336
|
reject(describeSpawnError(error, prepared.command));
|
|
138
337
|
});
|
|
139
338
|
child.once("close", (code, terminationSignal) => {
|
|
140
339
|
clearTimeout(timer);
|
|
340
|
+
signal?.removeEventListener("abort", onAbort);
|
|
341
|
+
if (settled)
|
|
342
|
+
return;
|
|
343
|
+
settled = true;
|
|
141
344
|
resolvePromise({
|
|
142
345
|
command: prepared.command,
|
|
143
346
|
args: prepared.args,
|
|
@@ -154,19 +357,25 @@ export class TerminalRuntime {
|
|
|
154
357
|
});
|
|
155
358
|
}
|
|
156
359
|
async startBackground(prepared) {
|
|
360
|
+
// Jobs are kept for their output after they end, so a caller looping
|
|
361
|
+
// `start` grew memory and processes for the life of the server.
|
|
362
|
+
if (this.jobs.size >= MAX_JOBS) {
|
|
363
|
+
const finished = [...this.jobs.values()].find((candidate) => candidate.endedAt !== undefined);
|
|
364
|
+
if (finished === undefined)
|
|
365
|
+
throw new Error("terminal_too_many_jobs");
|
|
366
|
+
this.jobs.delete(finished.id);
|
|
367
|
+
}
|
|
157
368
|
const id = randomUUID();
|
|
158
369
|
const child = spawn(prepared.file, prepared.spawnArgs, {
|
|
159
370
|
cwd: prepared.cwd,
|
|
160
371
|
env: prepared.environment,
|
|
161
372
|
shell: false,
|
|
373
|
+
detached: OWN_GROUP,
|
|
162
374
|
windowsHide: true,
|
|
163
375
|
windowsVerbatimArguments: prepared.windowsVerbatimArguments,
|
|
164
376
|
stdio: [prepared.interactive ? "pipe" : "ignore", "pipe", "pipe"],
|
|
165
377
|
});
|
|
166
|
-
const timer = setTimeout(() =>
|
|
167
|
-
child.kill("SIGTERM");
|
|
168
|
-
setTimeout(() => child.kill("SIGKILL"), 1_000).unref();
|
|
169
|
-
}, prepared.timeoutMs);
|
|
378
|
+
const timer = setTimeout(() => stopTree(child, KILL_GRACE_MS), prepared.timeoutMs);
|
|
170
379
|
timer.unref();
|
|
171
380
|
const job = {
|
|
172
381
|
id,
|
|
@@ -181,19 +390,27 @@ export class TerminalRuntime {
|
|
|
181
390
|
timer,
|
|
182
391
|
};
|
|
183
392
|
const append = (current, chunk) => {
|
|
184
|
-
const next = current + chunk
|
|
393
|
+
const next = current + chunk;
|
|
185
394
|
if (next.length > prepared.maxOutputChars) {
|
|
186
395
|
job.truncated = true;
|
|
187
396
|
return next.slice(0, prepared.maxOutputChars);
|
|
188
397
|
}
|
|
189
398
|
return next;
|
|
190
399
|
};
|
|
400
|
+
child.stdout?.setEncoding("utf8");
|
|
401
|
+
child.stderr?.setEncoding("utf8");
|
|
191
402
|
child.stdout?.on("data", (chunk) => {
|
|
192
403
|
job.stdout = append(job.stdout, chunk);
|
|
193
404
|
});
|
|
194
405
|
child.stderr?.on("data", (chunk) => {
|
|
195
406
|
job.stderr = append(job.stderr, chunk);
|
|
196
407
|
});
|
|
408
|
+
// A write to a reader that has gone fails later, as an error event on the
|
|
409
|
+
// pipe. Unheard, that event took the whole server down.
|
|
410
|
+
child.stdin?.on("error", (error) => {
|
|
411
|
+
job.stdinError = error.message;
|
|
412
|
+
});
|
|
413
|
+
closePipesAfterExit(child);
|
|
197
414
|
child.once("error", (error) => {
|
|
198
415
|
job.error = error.message;
|
|
199
416
|
job.endedAt = new Date().toISOString();
|
|
@@ -256,6 +473,8 @@ export class TerminalRuntime {
|
|
|
256
473
|
if (stdin === null || stdin.destroyed || !stdin.writable) {
|
|
257
474
|
throw new Error("terminal_job_not_interactive");
|
|
258
475
|
}
|
|
476
|
+
if (job.stdinError !== undefined)
|
|
477
|
+
throw new Error("terminal_job_stdin_closed");
|
|
259
478
|
const payload = operation.appendNewline && !operation.input.endsWith("\n")
|
|
260
479
|
? `${operation.input}\n`
|
|
261
480
|
: operation.input;
|
|
@@ -313,7 +532,7 @@ export class TerminalRuntime {
|
|
|
313
532
|
case "stop": {
|
|
314
533
|
const job = this.job(operation);
|
|
315
534
|
if (job.endedAt === undefined)
|
|
316
|
-
job.child
|
|
535
|
+
stopTree(job.child, CLOSE_GRACE_MS);
|
|
317
536
|
return { stopped: true, ...this.jobResult(job, true) };
|
|
318
537
|
}
|
|
319
538
|
}
|
|
@@ -330,11 +549,9 @@ export class TerminalRuntime {
|
|
|
330
549
|
if (job.endedAt !== undefined)
|
|
331
550
|
return;
|
|
332
551
|
const exited = new Promise((done) => job.child.once("close", () => done()));
|
|
333
|
-
job.child.kill("SIGTERM");
|
|
334
552
|
// A child is free to trap SIGTERM, and shutdown blocking forever on one
|
|
335
553
|
// that does is worse than the race this replaced.
|
|
336
|
-
const escalation =
|
|
337
|
-
escalation.unref();
|
|
554
|
+
const escalation = stopTree(job.child, CLOSE_GRACE_MS);
|
|
338
555
|
await exited;
|
|
339
556
|
clearTimeout(escalation);
|
|
340
557
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,12 @@ export interface ResolveCommandOptions {
|
|
|
30
30
|
* the allowlist would otherwise be bypassable by `npm install "%FOO%"`.
|
|
31
31
|
* Newlines are refused for the same reason: a command line cannot carry one.
|
|
32
32
|
*
|
|
33
|
+
* So is `"`. `CommandLineToArgvW` reads `\"` as a literal quote, but `cmd.exe`
|
|
34
|
+
* does not: to it every `"` toggles quoting, so `a" & calc & "` closed the
|
|
35
|
+
* quotes and ran `calc` as cmd syntax (BatBadBut). There is no escape both
|
|
36
|
+
* layers agree on, and a quote inside an argument to a batch shim is rare
|
|
37
|
+
* enough that refusing it costs little.
|
|
38
|
+
*
|
|
33
39
|
* Written as a scan rather than `/(\\*)"/g` + `/(\\*)$/`: both of those
|
|
34
40
|
* backtrack quadratically, and an argument of 40k backslashes took 11s to quote
|
|
35
41
|
* before this. An attacker-supplied argument is exactly the input this sees.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-command.d.ts","sourceRoot":"","sources":["../src/resolve-command.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kEAAkE;IAClE,wBAAwB,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAoBD
|
|
1
|
+
{"version":3,"file":"resolve-command.d.ts","sourceRoot":"","sources":["../src/resolve-command.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,kEAAkE;IAClE,wBAAwB,EAAE,OAAO,CAAC;IAClC,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2EAA2E;IAC3E,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAClD;AAoBD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAqBjD;AAgDD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAiC1B"}
|
package/dist/resolve-command.js
CHANGED
|
@@ -33,12 +33,18 @@ async function isFile(candidate) {
|
|
|
33
33
|
* the allowlist would otherwise be bypassable by `npm install "%FOO%"`.
|
|
34
34
|
* Newlines are refused for the same reason: a command line cannot carry one.
|
|
35
35
|
*
|
|
36
|
+
* So is `"`. `CommandLineToArgvW` reads `\"` as a literal quote, but `cmd.exe`
|
|
37
|
+
* does not: to it every `"` toggles quoting, so `a" & calc & "` closed the
|
|
38
|
+
* quotes and ran `calc` as cmd syntax (BatBadBut). There is no escape both
|
|
39
|
+
* layers agree on, and a quote inside an argument to a batch shim is rare
|
|
40
|
+
* enough that refusing it costs little.
|
|
41
|
+
*
|
|
36
42
|
* Written as a scan rather than `/(\\*)"/g` + `/(\\*)$/`: both of those
|
|
37
43
|
* backtrack quadratically, and an argument of 40k backslashes took 11s to quote
|
|
38
44
|
* before this. An attacker-supplied argument is exactly the input this sees.
|
|
39
45
|
*/
|
|
40
46
|
export function quoteForCmd(value) {
|
|
41
|
-
if (/[
|
|
47
|
+
if (/[%!"\r\n]/.test(value)) {
|
|
42
48
|
throw new Error("terminal_windows_argument_not_quotable");
|
|
43
49
|
}
|
|
44
50
|
let escaped = "";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-command.js","sourceRoot":"","sources":["../src/resolve-command.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,sCAAsC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAsBlC,2DAA2D;AAC3D,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C;;;GAGG;AACH,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAExC,KAAK,UAAU,MAAM,CAAC,SAAiB;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"resolve-command.js","sourceRoot":"","sources":["../src/resolve-command.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@melra/terminal-runtime",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.13",
|
|
4
4
|
"description": "Shell-free supervised terminal reference effect adapter for the MELRA kernel.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@melra/protocol": "0.3.0-alpha.
|
|
25
|
-
"@melra/receipt-schema": "0.3.0-alpha.
|
|
24
|
+
"@melra/protocol": "0.3.0-alpha.13",
|
|
25
|
+
"@melra/receipt-schema": "0.3.0-alpha.13"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"build": "tsc -p tsconfig.json",
|