@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.
- package/dist/attach-to-running-jvm-process.d.ts +139 -0
- package/dist/attach-to-running-jvm-process.d.ts.map +1 -0
- package/dist/attach-to-running-jvm-process.js +338 -0
- package/dist/attach-to-running-jvm-process.js.map +1 -0
- package/dist/attach-to-running-node-process.d.ts +138 -0
- package/dist/attach-to-running-node-process.d.ts.map +1 -0
- package/dist/attach-to-running-node-process.js +315 -0
- package/dist/attach-to-running-node-process.js.map +1 -0
- package/dist/attach-to-running-process.d.ts +70 -0
- package/dist/attach-to-running-process.d.ts.map +1 -0
- package/dist/attach-to-running-process.js +90 -0
- package/dist/attach-to-running-process.js.map +1 -0
- package/dist/cdp-client.d.ts +37 -0
- package/dist/cdp-client.d.ts.map +1 -0
- package/dist/cdp-client.js +111 -0
- package/dist/cdp-client.js.map +1 -0
- package/dist/cgroup-partial-restriction.d.ts +127 -0
- package/dist/cgroup-partial-restriction.d.ts.map +1 -0
- package/dist/cgroup-partial-restriction.js +236 -0
- package/dist/cgroup-partial-restriction.js.map +1 -0
- package/dist/collector-version.d.ts +12 -0
- package/dist/collector-version.d.ts.map +1 -0
- package/dist/collector-version.js +14 -0
- package/dist/collector-version.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/instrumented-execution.d.ts +111 -0
- package/dist/instrumented-execution.d.ts.map +1 -0
- package/dist/instrumented-execution.js +363 -0
- package/dist/instrumented-execution.js.map +1 -0
- package/dist/jvm-agent/build.d.ts +72 -0
- package/dist/jvm-agent/build.d.ts.map +1 -0
- package/dist/jvm-agent/build.js +156 -0
- package/dist/jvm-agent/build.js.map +1 -0
- package/dist/polling-output-source.d.ts +28 -0
- package/dist/polling-output-source.d.ts.map +1 -0
- package/dist/polling-output-source.js +73 -0
- package/dist/polling-output-source.js.map +1 -0
- package/dist/profile-backend-observation.d.ts +94 -0
- package/dist/profile-backend-observation.d.ts.map +1 -0
- package/dist/profile-backend-observation.js +136 -0
- package/dist/profile-backend-observation.js.map +1 -0
- package/dist/respawn-and-supervise.d.ts +119 -0
- package/dist/respawn-and-supervise.d.ts.map +1 -0
- package/dist/respawn-and-supervise.js +212 -0
- package/dist/respawn-and-supervise.js.map +1 -0
- 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
|
+
}
|