@descryy/runtime-controller 0.2.1 → 0.3.1

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.
Files changed (66) hide show
  1. package/LICENSE +6 -0
  2. package/dist/attach-fencing.d.ts +109 -0
  3. package/dist/attach-fencing.d.ts.map +1 -0
  4. package/dist/attach-fencing.js +215 -0
  5. package/dist/attach-fencing.js.map +1 -0
  6. package/dist/capability-registry.d.ts +0 -15
  7. package/dist/capability-registry.d.ts.map +1 -1
  8. package/dist/capability-registry.js +9 -19
  9. package/dist/capability-registry.js.map +1 -1
  10. package/dist/collector-version.d.ts +1 -8
  11. package/dist/collector-version.d.ts.map +1 -1
  12. package/dist/collector-version.js +1 -8
  13. package/dist/collector-version.js.map +1 -1
  14. package/dist/container-sandbox.d.ts +66 -150
  15. package/dist/container-sandbox.d.ts.map +1 -1
  16. package/dist/container-sandbox.js +62 -143
  17. package/dist/container-sandbox.js.map +1 -1
  18. package/dist/controller.d.ts +49 -106
  19. package/dist/controller.d.ts.map +1 -1
  20. package/dist/controller.js +65 -123
  21. package/dist/controller.js.map +1 -1
  22. package/dist/dependency-version-check.d.ts +19 -73
  23. package/dist/dependency-version-check.d.ts.map +1 -1
  24. package/dist/dependency-version-check.js +18 -67
  25. package/dist/dependency-version-check.js.map +1 -1
  26. package/dist/env.d.ts +4 -10
  27. package/dist/env.d.ts.map +1 -1
  28. package/dist/env.js +4 -10
  29. package/dist/env.js.map +1 -1
  30. package/dist/environment-metadata.d.ts +9 -17
  31. package/dist/environment-metadata.d.ts.map +1 -1
  32. package/dist/environment-metadata.js +12 -29
  33. package/dist/environment-metadata.js.map +1 -1
  34. package/dist/environment-version-check.d.ts +22 -65
  35. package/dist/environment-version-check.d.ts.map +1 -1
  36. package/dist/environment-version-check.js +24 -66
  37. package/dist/environment-version-check.js.map +1 -1
  38. package/dist/execution-safety.d.ts +54 -112
  39. package/dist/execution-safety.d.ts.map +1 -1
  40. package/dist/execution-safety.js +48 -102
  41. package/dist/execution-safety.js.map +1 -1
  42. package/dist/index.d.ts +2 -10
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +1 -0
  45. package/dist/index.js.map +1 -1
  46. package/dist/orchestration.d.ts +24 -39
  47. package/dist/orchestration.d.ts.map +1 -1
  48. package/dist/orchestration.js +39 -75
  49. package/dist/orchestration.js.map +1 -1
  50. package/dist/process-collector.d.ts +8 -22
  51. package/dist/process-collector.d.ts.map +1 -1
  52. package/dist/process-collector.js +23 -55
  53. package/dist/process-collector.js.map +1 -1
  54. package/dist/process-manager.d.ts +65 -80
  55. package/dist/process-manager.d.ts.map +1 -1
  56. package/dist/process-manager.js +80 -103
  57. package/dist/process-manager.js.map +1 -1
  58. package/dist/readiness.d.ts +28 -70
  59. package/dist/readiness.d.ts.map +1 -1
  60. package/dist/readiness.js +73 -95
  61. package/dist/readiness.js.map +1 -1
  62. package/dist/sandbox.d.ts +60 -105
  63. package/dist/sandbox.d.ts.map +1 -1
  64. package/dist/sandbox.js +78 -121
  65. package/dist/sandbox.js.map +1 -1
  66. package/package.json +8 -3
package/dist/sandbox.js CHANGED
@@ -1,71 +1,57 @@
1
1
  /**
2
- * §21's execution boundary, real isolation half (the sandbox-isolation
3
- * lane, superseding the "sandbox platform is a separate architectural
4
- * decision, not built here" deferral). RT-070 and RT-193 gave this runtime
5
- * a *named* boundary (trusted-local, resource limits, privilege reporting)
6
- * but not an *isolating* one -- nothing stopped a spawned process from
7
- * reading any file the invoking user could read, or reaching any host the
8
- * invoking user's network could reach. This module closes that gap for
9
- * real, on Linux, for processes this runtime SPAWNS.
2
+ * §21's execution boundary, real isolation half. RT-070/RT-193 gave this runtime a
3
+ * *named* boundary (trusted-local, resource limits, privilege reporting) but not an
4
+ * *isolating* one -- nothing stopped a spawned process from reading any file, or
5
+ * reaching any host, the invoking user could. This module closes that gap for real,
6
+ * on Linux, for processes this runtime SPAWNS.
10
7
  *
11
- * **The architectural constraint this module does not try to solve
12
- * around:** isolation can only wrap a process Descry itself launches.
13
- * Attach-mode (`attach-to-running-process.ts`, `attach-to-running-node-
14
- * process.ts`, `attach-to-running-jvm-process.ts`) reaches a process that
15
- * was already running, unconfined, before Descry touched it -- there is no
16
- * honest way to retroactively contain it (ptrace-based interception was
17
- * investigated and rejected elsewhere in this repo as "not honestly
18
- * generalizable"). Spawn-mode gets real isolation via this module.
19
- * Attach-mode stays permanently and explicitly unsandboxed --
20
- * `SANDBOX_BOUNDARY_DISCLOSURE` in `execution-safety.ts` says so in-product,
21
- * and this module does not (and structurally cannot) change that.
8
+ * **Architectural constraint this module cannot solve around:** isolation can only
9
+ * wrap a process Descry itself launches. Attach-mode reaches a process already
10
+ * running, unconfined, before Descry touched it -- there is no honest way to
11
+ * retroactively contain it (ptrace-based interception was investigated and rejected
12
+ * elsewhere as not honestly generalizable). Attach-mode stays permanently and
13
+ * explicitly unsandboxed -- `SANDBOX_BOUNDARY_DISCLOSURE` in `execution-safety.ts`
14
+ * discloses this in-product; this module does not and structurally cannot change it.
22
15
  *
23
- * **Mechanism: bubblewrap (bwrap), not raw `unshare`/`clone`.** bwrap is
24
- * the unprivileged sandboxing helper behind Flatpak and used by many
25
- * developer tools directly -- a small (tens of KB), auditable, actively
26
- * maintained binary, not a bespoke native module this repo would need to
27
- * build and ship per-platform. It runs setuid-free on any kernel with
28
- * unprivileged user namespaces enabled (checked below, not assumed) and
29
- * gives one process a new mount namespace (real filesystem visibility
30
- * control) and network namespace (real network denial) in one exec,
31
- * composing cleanly with `applyResourceLimits`'s `prlimit` wrap and with
32
- * this package's existing process-group kill mechanism (`detached: true` +
33
- * `process.kill(-pid, …)`) -- verified directly: bwrap does not create a
34
- * new process group unless asked to, so the group-kill in
35
- * `process-manager.ts` reaches it and everything it started, unchanged.
36
- * The one dependency this buys: `bwrap` must be on `PATH`. Reported as a
37
- * capability, exactly like `prlimit` -- refused, never silently
38
- * unconstrained, when requested and absent.
16
+ * **Mechanism: bubblewrap (bwrap), not raw `unshare`/`clone`.** bwrap is the
17
+ * unprivileged sandboxing helper behind Flatpak -- small, auditable, actively
18
+ * maintained, not a bespoke native module this repo builds per-platform. Runs
19
+ * setuid-free on any kernel with unprivileged user namespaces enabled (checked
20
+ * below, never assumed) and gives one process a new mount namespace (real
21
+ * filesystem visibility control) and network namespace (real network denial) in one
22
+ * exec. Composes with `applyResourceLimits`'s `prlimit` wrap and with
23
+ * `process-manager.ts`'s process-group kill -- verified directly: bwrap does not
24
+ * create a new process group unless asked, so the existing group-kill reaches it
25
+ * unchanged. The one dependency this buys: `bwrap` must be on PATH, reported as a
26
+ * capability exactly like `prlimit` -- refused, never silently unconstrained, when
27
+ * requested and absent.
39
28
  *
40
- * **What this module does NOT attempt, and where that gap actually closes:**
41
- * a *native* macOS or Windows sandbox for this mechanism (`sandbox-exec`/
42
- * Seatbelt -- deprecated public API; the Endpoint Security Framework --
43
- * needs a special Apple entitlement this project does not have; Windows Job
44
- * Objects + restricted tokens/AppContainer + WFP network enforcement -- a
45
- * second and third bespoke native sandbox to build and maintain). That is
46
- * not "researched but not built here, someday" -- it is an explicit
47
- * architecture decision NOT to build native sandboxes for those two
48
- * platforms at all. `../container-sandbox.ts` closes the gap instead, by
49
- * routing macOS and Windows through a real Docker container that reuses
50
- * THIS module's own proven Linux mechanism underneath (Docker Desktop's
51
- * Linux VM on macOS, WSL2/Docker Desktop's Windows backend on Windows) --
52
- * see that module's own doc comment for exactly what is real-tested there
53
- * versus unverified on real macOS/Windows hardware. `filesystemIsolationCapability`/
54
- * `networkIsolationCapability` below still report `unavailable` with a
55
- * reason on non-Linux platforms -- this module never silently claims to
56
- * cover them; `container-sandbox.ts` is the module a non-Linux caller
57
- * actually wants.
29
+ * **NOT attempted, deliberately: a native macOS or Windows sandbox.** `sandbox-exec`/
30
+ * Seatbelt is deprecated with no public API replacement; the Endpoint Security
31
+ * Framework needs an Apple entitlement this project doesn't have; Windows Job
32
+ * Objects + AppContainer + WFP would be a second and third bespoke native sandbox.
33
+ * This is an explicit decision not to build native sandboxes for those platforms at
34
+ * all -- `../container-sandbox.ts` closes the gap instead, routing macOS/Windows
35
+ * through a real Docker container that reuses this module's proven Linux mechanism
36
+ * (see that module's doc for what's real-tested there vs unverified on real
37
+ * hardware). `filesystemIsolationCapability`/`networkIsolationCapability` below
38
+ * still report `unavailable` with a reason on non-Linux -- never silently claimed
39
+ * as covered.
58
40
  */
59
41
  import { execFileSync } from "node:child_process";
60
42
  import { accessSync, constants as fsConstants, readFileSync, realpathSync } from "node:fs";
61
43
  import { dirname, isAbsolute, join, relative } from "node:path";
62
44
  /**
63
- * Whether unprivileged user namespaces -- the kernel feature bwrap needs to
64
- * build a mount/network namespace without running setuid-root -- are
65
- * actually enabled on this host, not merely assumed from "the kernel
66
- * supports namespaces in general." Two independent sysctls can each
67
- * disable it; neither file existing at all is itself evidence of a
68
- * restriction (most non-Debian-derived distros never gate this at all).
45
+ * Whether unprivileged user namespaces -- the kernel feature bwrap needs to build a
46
+ * mount/network namespace without running setuid-root -- are actually enabled on
47
+ * this host, never merely assumed from "the kernel supports namespaces in general."
48
+ * Two independent sysctls can each disable it. IMPORTANT: a sysctl file not existing
49
+ * is NOT evidence it's unrestricted -- only Debian/Ubuntu-derived kernels gate it
50
+ * through `unprivileged_userns_clone` at all, so a missing file proves nothing
51
+ * either way. We can't tell from absence, so we don't read it as a positive signal:
52
+ * `ok: true` here means "neither sysctl was found to explicitly disable it," not
53
+ * "isolation is confirmed available" -- it only rules out these two specific,
54
+ * explicit-disable signals.
69
55
  */
70
56
  function unprivilegedUserNamespaceStatus() {
71
57
  try {
@@ -75,8 +61,7 @@ function unprivilegedUserNamespaceStatus() {
75
61
  }
76
62
  }
77
63
  catch {
78
- // Sysctl doesn't exist on this kernel -- not evidence of a restriction,
79
- // only Debian/Ubuntu-derived kernels gate it through this specific file.
64
+ // Sysctl absent -- not evidence either way, not just non-Debian kernels.
80
65
  }
81
66
  try {
82
67
  const max = readFileSync("/proc/sys/user/max_user_namespaces", "utf8").trim();
@@ -85,17 +70,11 @@ function unprivilegedUserNamespaceStatus() {
85
70
  }
86
71
  }
87
72
  catch {
88
- // Same reasoning.
73
+ // Same reasoning: absent is not evidence of a restriction.
89
74
  }
90
75
  return { ok: true, reason: null };
91
76
  }
92
- /**
93
- * Real capability check, matching `resourceLimitCapability`'s own shape and
94
- * precedent exactly: existence on `PATH` first (fast, matches
95
- * `prlimit --version`'s pattern), then the one Linux-specific precondition
96
- * that existence alone doesn't prove -- unprivileged user namespaces
97
- * actually being usable, not just bwrap being installed.
98
- */
77
+ /** Real capability check, same shape as `resourceLimitCapability`: PATH existence first, then the Linux-specific precondition existence alone doesn't prove -- unprivileged user namespaces actually usable, not just bwrap installed. */
99
78
  export function filesystemIsolationCapability(env = process.env, platform = process.platform) {
100
79
  if (platform !== "linux") {
101
80
  return {
@@ -118,27 +97,16 @@ export function filesystemIsolationCapability(env = process.env, platform = proc
118
97
  }
119
98
  return { availability: "available", reason: null };
120
99
  }
121
- /**
122
- * The same underlying mechanism as `filesystemIsolationCapability` --
123
- * bwrap building one namespace set covers both a restricted mount view and
124
- * a network namespace in the same exec -- so this delegates rather than
125
- * duplicating the check. Kept as its own named function because the two
126
- * policies are declared, refused, and reasoned about independently
127
- * (`NetworkPolicy` only supports one shape; see `unsupportedNetworkPolicyReason`),
128
- * even though today they share one mechanism underneath.
129
- */
100
+ /** Same underlying mechanism as `filesystemIsolationCapability` (one bwrap namespace set covers both) -- delegates rather than duplicating. Kept as its own function because the two policies are declared and reasoned about independently. */
130
101
  export function networkIsolationCapability(env = process.env, platform = process.platform) {
131
102
  return filesystemIsolationCapability(env, platform);
132
103
  }
133
104
  /**
134
- * `NetworkPolicy`'s general shape (arbitrary allow/deny host lists) is not
135
- * what this iteration's mechanism enforces -- only full denial. Returns the
136
- * reason a given policy cannot be applied, or `null` if it is the one
137
- * shape that can. Checked independently of `networkIsolationCapability`:
138
- * a policy can be shape-unsupported on a platform where the mechanism
139
- * itself is otherwise available, and the two refusals are different
140
- * claims ("nothing here can enforce any network policy" vs. "this specific
141
- * policy asks for something the real mechanism doesn't do yet").
105
+ * `NetworkPolicy`'s general shape (arbitrary allow/deny host lists) is not what
106
+ * this mechanism enforces -- only full denial. Returns the reason a policy can't be
107
+ * applied, or `null` if it's the one shape that can. Checked independently of
108
+ * `networkIsolationCapability`: "nothing here can enforce any policy" and "this
109
+ * specific policy asks for something not built yet" are different claims.
142
110
  */
143
111
  export function unsupportedNetworkPolicyReason(policy) {
144
112
  if (policy.mode === "allow" && policy.hosts.length === 0)
@@ -153,17 +121,12 @@ function isWithin(root, target) {
153
121
  }
154
122
  /**
155
123
  * Resolves the real, symlink-followed directory containing the executable
156
- * `command` would run as -- the one piece of host filesystem a sandboxed
157
- * process needs beyond the standard OS directories and whatever the caller
158
- * declared, and the one this function computes generically rather than by
159
- * naming a language: an interpreter installed outside `/usr` (nvm, rbenv,
160
- * pyenv, sdkman -- all common, all under a user's home directory) would
161
- * otherwise be invisible inside the sandbox no matter which language it
162
- * is, which is exactly the kind of per-language special case §IR-boundary
163
- * rules out. Returns `null` when `command` cannot be resolved (already
164
- * absolute-looking and missing, or not found on `PATH`) -- the caller
165
- * proceeds without an extra bind in that case; the exec itself will fail
166
- * inside the sandbox the same honest way it would outside one.
124
+ * `command` would run as -- the one extra host path a sandboxed process needs
125
+ * beyond standard OS dirs and whatever the caller declared. Computed generically,
126
+ * not per-language: an interpreter installed outside `/usr` (nvm, rbenv, pyenv,
127
+ * sdkman) would otherwise be invisible inside the sandbox regardless of language.
128
+ * Returns `null` when unresolvable -- the caller proceeds without an extra bind;
129
+ * the exec fails inside the sandbox the same honest way it would outside one.
167
130
  */
168
131
  export function resolveExecutableDirectory(command, cwd, env) {
169
132
  let candidate = null;
@@ -196,23 +159,18 @@ export function resolveExecutableDirectory(command, cwd, env) {
196
159
  }
197
160
  }
198
161
  /**
199
- * Wraps `command`/`args` with `bwrap` so the OS enforces `filesystemPolicy`
200
- * and/or `networkPolicy`. Neither declared returns `command`/`args`
201
- * unchanged -- every execution before this lane keeps behaving exactly as
202
- * before unless it opts in, the same non-regression contract
203
- * `applyResourceLimits` already established for resource limits.
162
+ * Wraps `command`/`args` with `bwrap` so the OS enforces `filesystemPolicy`/
163
+ * `networkPolicy`. Neither declared returns them unchanged -- same non-regression
164
+ * contract as `applyResourceLimits`.
204
165
  *
205
- * **Throws rather than silently spawning unconstrained** -- same
206
- * `tokenizeCommand`/`applyResourceLimits` precedent -- when a policy is
207
- * requested and the real mechanism cannot back it, whether because the
208
- * platform has no mechanism at all or because the declared shape is one
209
- * this mechanism doesn't implement (`unsupportedNetworkPolicyReason`).
166
+ * **Throws rather than silently spawning unconstrained** when a policy is
167
+ * requested and the real mechanism can't back it -- no mechanism on this platform,
168
+ * or a declared shape this mechanism doesn't implement.
210
169
  *
211
- * Composes with `applyResourceLimits`: this function wraps *outside* it
212
- * (`bwrap … -- prlimit … -- realCommand`), because the mount namespace must
213
- * exist before `prlimit` or the real command run inside it, and `prlimit`
214
- * itself (in `/usr/bin`) is reachable through the same base OS binding
215
- * every sandboxed process gets.
170
+ * Composes with `applyResourceLimits` by wrapping *outside* it (`bwrap … --
171
+ * prlimit … -- realCommand`) -- the mount namespace must exist before `prlimit` or
172
+ * the real command run inside it; `prlimit` (in `/usr/bin`) is reachable through
173
+ * the same base OS binding every sandboxed process gets.
216
174
  */
217
175
  export function applySandbox(options) {
218
176
  const { filesystemPolicy, networkPolicy } = options;
@@ -250,21 +208,20 @@ export function applySandbox(options) {
250
208
  }
251
209
  }
252
210
  else {
253
- // No filesystem restriction declared -- mirror the host root exactly,
254
- // matching FilesystemPolicy's own "absent means unconstrained" default.
255
- // A mount namespace is still created here (bwrap always builds one, and
256
- // --unshare-net below needs it), so /proc, /dev and /tmp are remounted
257
- // explicitly rather than inherited: a plain `--bind / /` is not
258
- // recursive and would otherwise leave them looking empty inside.
211
+ // No filesystem restriction declared -- mirror the host root exactly (matches
212
+ // FilesystemPolicy's "absent means unconstrained" default). A mount namespace
213
+ // is still created (bwrap always builds one; --unshare-net below needs it), so
214
+ // /proc, /dev, /tmp are remounted explicitly -- a plain `--bind / /` is not
215
+ // recursive and would leave them looking empty inside otherwise.
259
216
  bwrapArgs.push("--bind", "/", "/", "--dev", "/dev", "--proc", "/proc", "--bind", "/tmp", "/tmp");
260
217
  }
261
218
  bwrapArgs.push("--chdir", options.cwd);
262
219
  if (networkPolicy !== undefined) {
263
220
  bwrapArgs.push("--unshare-net");
264
221
  }
265
- // Kills the sandboxed tree with the sandbox itself if bwrap's own parent
266
- // (this Node process) dies unexpectedly -- a second, independent backstop
267
- // alongside process-manager.ts's own group-kill, not a replacement for it.
222
+ // Kills the sandboxed tree if bwrap's parent (this Node process) dies
223
+ // unexpectedly -- a second, independent backstop alongside process-manager.ts's
224
+ // group-kill, not a replacement for it.
268
225
  bwrapArgs.push("--die-with-parent", "--", options.command, ...options.args);
269
226
  return { command: "bwrap", args: bwrapArgs };
270
227
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../src/sandbox.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@descryy/runtime-controller",
3
- "version": "0.2.1",
3
+ "version": "0.3.1",
4
4
  "type": "module",
5
- "description": "Runtime controller: process manager, readiness, timeout/cancellation, execution IDs, cleanup. Deliverable 2 of the runtime phase \u2014 depends on @descryy/runtime-contracts, builds no collectors.",
5
+ "description": "Runtime controller: process manager, readiness, timeout/cancellation, execution IDs, cleanup. Deliverable 2 of the runtime phase — depends on @descryy/runtime-contracts, builds no collectors.",
6
6
  "license": "UNLICENSED",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/descryhq-wq/descry-runtime.git",
10
+ "directory": "packages/controller"
11
+ },
7
12
  "engines": {
8
13
  "node": ">=22.5"
9
14
  },
@@ -24,6 +29,6 @@
24
29
  "build": "tsc -b"
25
30
  },
26
31
  "dependencies": {
27
- "@descryy/runtime-contracts": "0.2.0"
32
+ "@descryy/runtime-contracts": "0.3.1"
28
33
  }
29
34
  }