@descryy/runtime-orchestrator 0.0.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.
Files changed (49) hide show
  1. package/dist/attach-to-running-jvm-process.d.ts +139 -0
  2. package/dist/attach-to-running-jvm-process.d.ts.map +1 -0
  3. package/dist/attach-to-running-jvm-process.js +338 -0
  4. package/dist/attach-to-running-jvm-process.js.map +1 -0
  5. package/dist/attach-to-running-node-process.d.ts +138 -0
  6. package/dist/attach-to-running-node-process.d.ts.map +1 -0
  7. package/dist/attach-to-running-node-process.js +315 -0
  8. package/dist/attach-to-running-node-process.js.map +1 -0
  9. package/dist/attach-to-running-process.d.ts +70 -0
  10. package/dist/attach-to-running-process.d.ts.map +1 -0
  11. package/dist/attach-to-running-process.js +90 -0
  12. package/dist/attach-to-running-process.js.map +1 -0
  13. package/dist/cdp-client.d.ts +37 -0
  14. package/dist/cdp-client.d.ts.map +1 -0
  15. package/dist/cdp-client.js +111 -0
  16. package/dist/cdp-client.js.map +1 -0
  17. package/dist/cgroup-partial-restriction.d.ts +127 -0
  18. package/dist/cgroup-partial-restriction.d.ts.map +1 -0
  19. package/dist/cgroup-partial-restriction.js +236 -0
  20. package/dist/cgroup-partial-restriction.js.map +1 -0
  21. package/dist/collector-version.d.ts +12 -0
  22. package/dist/collector-version.d.ts.map +1 -0
  23. package/dist/collector-version.js +14 -0
  24. package/dist/collector-version.js.map +1 -0
  25. package/dist/index.d.ts +19 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +10 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/instrumented-execution.d.ts +111 -0
  30. package/dist/instrumented-execution.d.ts.map +1 -0
  31. package/dist/instrumented-execution.js +363 -0
  32. package/dist/instrumented-execution.js.map +1 -0
  33. package/dist/jvm-agent/build.d.ts +72 -0
  34. package/dist/jvm-agent/build.d.ts.map +1 -0
  35. package/dist/jvm-agent/build.js +156 -0
  36. package/dist/jvm-agent/build.js.map +1 -0
  37. package/dist/polling-output-source.d.ts +28 -0
  38. package/dist/polling-output-source.d.ts.map +1 -0
  39. package/dist/polling-output-source.js +73 -0
  40. package/dist/polling-output-source.js.map +1 -0
  41. package/dist/profile-backend-observation.d.ts +94 -0
  42. package/dist/profile-backend-observation.d.ts.map +1 -0
  43. package/dist/profile-backend-observation.js +136 -0
  44. package/dist/profile-backend-observation.js.map +1 -0
  45. package/dist/respawn-and-supervise.d.ts +119 -0
  46. package/dist/respawn-and-supervise.d.ts.map +1 -0
  47. package/dist/respawn-and-supervise.js +212 -0
  48. package/dist/respawn-and-supervise.js.map +1 -0
  49. package/package.json +45 -0
@@ -0,0 +1,212 @@
1
+ /**
2
+ * Respawn-and-supervise: a real, separate execution mode next to attach
3
+ * mode, not a change to attach mode itself.
4
+ *
5
+ * **The tradeoff this makes, stated up front, because it must never be
6
+ * applied silently.** Attach mode (`attach-to-running-process.ts` and its
7
+ * siblings) reaches a process that was already running, unconfined, before
8
+ * Descry touched it -- `sandbox.ts`'s own module doc (`@descryhq-wq/runtime-
9
+ * controller`) says plainly there is no honest way to retroactively contain
10
+ * that process. This module does not try. It kills the attached target and
11
+ * spawns a fresh, equivalent process through the EXISTING `spawnProcess()`
12
+ * (`@descryy/runtime-controller`), which already gets full sandboxing
13
+ * (`applySandbox`, `applyResourceLimits`) for anything it spawns -- the same
14
+ * mechanism `ExecutionController.run()` uses, not a parallel one. The price
15
+ * is real: in-memory state, open connections, anything the old process held
16
+ * that was never persisted is gone the moment it is killed. A caller must
17
+ * choose this explicitly; nothing in this repo switches a running attach
18
+ * into a respawn on its own.
19
+ *
20
+ * **How this module learns what to respawn -- the design question this
21
+ * lane was told not to guess past.** This repo has a standing, named
22
+ * precedent for exactly this shape of question: RT-032 ("declared, never
23
+ * inferred" -- `ServiceConfiguration.dependsOn`, `substitutePortPlaceholders`,
24
+ * `discoverRunner`'s refusal to sniff a test framework from `package.json`).
25
+ * The caller-declared path (`RespawnCommand` with `source: "caller-declared"`)
26
+ * is the one this module recommends and the only one its own convenience
27
+ * default reaches for. A `/proc/<pid>/cmdline` readback (Linux-only, and
28
+ * genuinely insufficient on its own -- it cannot recover env vars set
29
+ * programmatically before `exec`, file descriptors already open and handed
30
+ * off, or a cwd that changed after launch) is real, but explicitly a
31
+ * best-effort convenience, never the default: `inferRespawnCommandFromProc`
32
+ * exists, is opt-in, and labels its own output `source: "proc-cmdline-
33
+ * inferred"` so nothing downstream can mistake an inference for a
34
+ * declaration. The two are never blurred into one shape.
35
+ *
36
+ * **Killing the old process.** `respawnAndSupervise` does not assume it owns
37
+ * the target's process group -- an attached-to process was not spawned by
38
+ * this runtime and may not even be its own group leader, so this signals
39
+ * the individual pid only (SIGTERM, then SIGKILL after `gracePeriodMs` if
40
+ * still alive), mirroring `process-manager.ts`'s own two-stage `kill()`
41
+ * without reusing its group-kill (`signalGroup`), which is `spawnProcess`'s
42
+ * own escape hatch for a group *it* created.
43
+ */
44
+ import { spawnProcess } from "@descryy/runtime-controller";
45
+ import { readFileSync, readlinkSync } from "node:fs";
46
+ import { isProcessAlive } from "./attach-to-running-process.js";
47
+ const DEFAULT_GRACE_PERIOD_MS = 5000;
48
+ function sleep(ms) {
49
+ return new Promise((resolve) => setTimeout(resolve, ms));
50
+ }
51
+ /**
52
+ * Waits until `isProcessAlive(pid)` is false or `deadlineMs` elapses.
53
+ * Returns whether the process was confirmed dead.
54
+ */
55
+ async function waitForDeath(pid, deadlineMs) {
56
+ const deadline = Date.now() + deadlineMs;
57
+ while (Date.now() < deadline) {
58
+ if (!isProcessAlive(pid))
59
+ return true;
60
+ await sleep(20);
61
+ }
62
+ return !isProcessAlive(pid);
63
+ }
64
+ /**
65
+ * Kills `pid` directly (not its process group -- see this module's own doc
66
+ * for why), escalating from SIGTERM to SIGKILL after `gracePeriodMs`.
67
+ * Resolves once the pid is confirmed dead, or throws if it survives even
68
+ * SIGKILL (a defunct-but-unreapable zombie owned by another process tree,
69
+ * or a permission boundary this caller's uid cannot cross) -- refusing to
70
+ * report success it did not actually observe, the same discipline
71
+ * `ManagedProcess.kill()` already holds for processes this runtime spawned
72
+ * itself.
73
+ */
74
+ async function killTarget(pid, gracePeriodMs) {
75
+ if (!isProcessAlive(pid))
76
+ return { killedViaSigkill: false };
77
+ try {
78
+ process.kill(pid, "SIGTERM");
79
+ }
80
+ catch {
81
+ // Already gone between the isProcessAlive check and this signal -- a
82
+ // real, if narrow, race; fall through to the death check below rather
83
+ // than treating a caught error here as failure.
84
+ }
85
+ if (await waitForDeath(pid, gracePeriodMs))
86
+ return { killedViaSigkill: false };
87
+ try {
88
+ process.kill(pid, "SIGKILL");
89
+ }
90
+ catch {
91
+ // Same race, at the SIGKILL stage.
92
+ }
93
+ const dead = await waitForDeath(pid, Math.max(gracePeriodMs, 2000));
94
+ if (!dead) {
95
+ throw new Error(`respawnAndSupervise: pid ${String(pid)} did not exit even after SIGKILL -- refusing to report a kill that was not observed. ` +
96
+ "This can happen for a zombie this process cannot reap (owned by a different parent) or a permission boundary this caller's uid cannot cross.");
97
+ }
98
+ return { killedViaSigkill: true };
99
+ }
100
+ /**
101
+ * Kills the process at `options.targetPid` and spawns a fresh, supervised,
102
+ * (optionally) sandboxed replacement via `spawnProcess()`.
103
+ *
104
+ * **Not a silent behavior change to attach mode.** A caller reaches this
105
+ * function by name, explicitly, instead of one of the `attachToRunning*`
106
+ * functions -- there is no code path in this repo that upgrades an attach
107
+ * into a respawn on its own. `ATTACH_MODE_SCOPE_DISCLOSURE`
108
+ * (`@descryy/runtime-controller`) still governs attach mode itself,
109
+ * unconditionally, whether or not a caller ever reaches for this
110
+ * alternative.
111
+ *
112
+ * Throws (does not silently proceed) if `targetPid` is not alive at call
113
+ * time, matching `attachToRunningProcess`'s own "refuse rather than operate
114
+ * on a target that does not exist" contract.
115
+ */
116
+ export async function respawnAndSupervise(options) {
117
+ if (!isProcessAlive(options.targetPid)) {
118
+ throw new Error(`respawnAndSupervise: pid ${String(options.targetPid)} for "${options.processId}" is not running -- ` +
119
+ "respawn-and-supervise requires a target that already exists, the same as attach mode does.");
120
+ }
121
+ const { killedViaSigkill } = await killTarget(options.targetPid, options.gracePeriodMs ?? DEFAULT_GRACE_PERIOD_MS);
122
+ const managedProcess = spawnProcess({
123
+ processId: options.processId,
124
+ command: options.respawn.command,
125
+ args: options.respawn.args ?? [],
126
+ cwd: options.respawn.cwd,
127
+ ...(options.respawn.env === undefined ? {} : { env: options.respawn.env }),
128
+ ...(options.serviceName === undefined ? {} : { serviceName: options.serviceName }),
129
+ ...(options.port === undefined ? {} : { port: options.port }),
130
+ ...(options.resourceLimits === undefined ? {} : { resourceLimits: options.resourceLimits }),
131
+ ...(options.filesystemPolicy === undefined ? {} : { filesystemPolicy: options.filesystemPolicy }),
132
+ ...(options.networkPolicy === undefined ? {} : { networkPolicy: options.networkPolicy }),
133
+ });
134
+ return {
135
+ managedProcess,
136
+ killedPid: options.targetPid,
137
+ killedViaSigkill,
138
+ respawnSource: options.respawn.source,
139
+ };
140
+ }
141
+ /**
142
+ * The opt-in, disclosed, BEST-EFFORT convenience this module's own doc
143
+ * names -- never the default `respawnAndSupervise` reaches for on its own.
144
+ * Reads `/proc/<pid>/cmdline`, `/proc/<pid>/cwd` and `/proc/<pid>/environ`
145
+ * to reconstruct a `RespawnCommand`, labelling it `source:
146
+ * "proc-cmdline-inferred"` so it can never be mistaken for a caller
147
+ * declaration downstream.
148
+ *
149
+ * **Real, disclosed limitations, not hypothetical ones:** Linux-only (no
150
+ * `/proc` on macOS/Windows); env vars a process set on itself
151
+ * programmatically after `exec` (as opposed to what it was launched with)
152
+ * are invisible here, because `/proc/<pid>/environ` only ever reflects the
153
+ * environment at `execve()` time; already-open file descriptors handed to
154
+ * the original process (an inherited socket, a pipe from its own parent)
155
+ * have no representation in a command line at all and cannot be recovered
156
+ * by any means this function has. Returns `null` -- never throws, never
157
+ * guesses a partial answer -- when `/proc/<pid>/cmdline` cannot be read
158
+ * (platform mismatch, pid gone, permission denied) or is empty.
159
+ */
160
+ export function inferRespawnCommandFromProc(pid, platform = process.platform) {
161
+ if (platform !== "linux")
162
+ return null;
163
+ let cmdlineRaw;
164
+ try {
165
+ cmdlineRaw = readFileSync(`/proc/${String(pid)}/cmdline`, "utf8");
166
+ }
167
+ catch {
168
+ return null;
169
+ }
170
+ // /proc/<pid>/cmdline is NUL-separated, with a trailing NUL -- split and
171
+ // drop the empty tail entry it always produces.
172
+ const parts = cmdlineRaw.split("\0").filter((part) => part !== "");
173
+ if (parts.length === 0)
174
+ return null;
175
+ const [command, ...args] = parts;
176
+ if (command === undefined)
177
+ return null;
178
+ let cwd;
179
+ try {
180
+ cwd = readlinkSync(`/proc/${String(pid)}/cwd`);
181
+ }
182
+ catch {
183
+ return null;
184
+ }
185
+ let env;
186
+ try {
187
+ const environRaw = readFileSync(`/proc/${String(pid)}/environ`, "utf8");
188
+ env = {};
189
+ for (const entry of environRaw.split("\0").filter((part) => part !== "")) {
190
+ const eq = entry.indexOf("=");
191
+ if (eq === -1)
192
+ continue;
193
+ env[entry.slice(0, eq)] = entry.slice(eq + 1);
194
+ }
195
+ }
196
+ catch {
197
+ // /proc/<pid>/environ is real but commonly permission-denied for a
198
+ // process owned by a different uid, even when cmdline/cwd were
199
+ // readable -- degrades to no env recovered rather than failing the
200
+ // whole inference, since command/args/cwd alone are still a real,
201
+ // usable (if incomplete) answer.
202
+ env = undefined;
203
+ }
204
+ return {
205
+ command,
206
+ args,
207
+ cwd,
208
+ ...(env === undefined ? {} : { env }),
209
+ source: "proc-cmdline-inferred",
210
+ };
211
+ }
212
+ //# sourceMappingURL=respawn-and-supervise.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"respawn-and-supervise.js","sourceRoot":"","sources":["../src/respawn-and-supervise.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@descryy/runtime-orchestrator",
3
+ "version": "0.0.0",
4
+ "type": "module",
5
+ "description": "Assembles the runtime: controller-spawned services, live process output, collectors from a RuntimeAdapter, and a CollectorContext that can resolve script origins to source roots.",
6
+ "license": "UNLICENSED",
7
+ "engines": {
8
+ "node": ">=22.5"
9
+ },
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "publishConfig": {
20
+ "registry": "https://registry.npmjs.org",
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc -b"
25
+ },
26
+ "dependencies": {
27
+ "@descryy/runtime-contracts": "0.0.0",
28
+ "@descryy/runtime-backend-observation": "0.0.0",
29
+ "@descryy/runtime-controller": "0.0.0",
30
+ "@descryy/runtime-evidence-store": "0.0.0",
31
+ "@descryy/runtime-adapter-typescript": "0.0.0",
32
+ "@descryy/runtime-environment-profile": "0.0.0",
33
+ "@descryhq-wq/runtime-remote-log-ingestion": "0.0.0"
34
+ },
35
+ "devDependencies": {
36
+ "@descryhq-wq/runtime-adapter-csharp": "*",
37
+ "@descryhq-wq/runtime-adapter-go": "*",
38
+ "@descryhq-wq/runtime-adapter-jvm": "*",
39
+ "@descryhq-wq/runtime-adapter-php": "*",
40
+ "@descryhq-wq/runtime-adapter-python": "*",
41
+ "@descryhq-wq/runtime-adapter-ruby": "*",
42
+ "@descryhq-wq/runtime-adapter-rust": "*",
43
+ "@descryhq-wq/runtime-adapter-swift": "*"
44
+ }
45
+ }