@descryy/runtime-orchestrator 0.4.9 → 0.4.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.
Files changed (49) hide show
  1. package/dist/attach-to-running-jvm-process.d.ts +86 -0
  2. package/dist/attach-to-running-jvm-process.d.ts.map +1 -0
  3. package/dist/attach-to-running-jvm-process.js +408 -0
  4. package/dist/attach-to-running-jvm-process.js.map +1 -0
  5. package/dist/attach-to-running-node-process.d.ts +80 -0
  6. package/dist/attach-to-running-node-process.d.ts.map +1 -0
  7. package/dist/attach-to-running-node-process.js +290 -0
  8. package/dist/attach-to-running-node-process.js.map +1 -0
  9. package/dist/attach-to-running-process.d.ts +83 -0
  10. package/dist/attach-to-running-process.d.ts.map +1 -0
  11. package/dist/attach-to-running-process.js +86 -0
  12. package/dist/attach-to-running-process.js.map +1 -0
  13. package/dist/cdp-client.d.ts +27 -0
  14. package/dist/cdp-client.d.ts.map +1 -0
  15. package/dist/cdp-client.js +98 -0
  16. package/dist/cdp-client.js.map +1 -0
  17. package/dist/cgroup-partial-restriction.d.ts +80 -0
  18. package/dist/cgroup-partial-restriction.d.ts.map +1 -0
  19. package/dist/cgroup-partial-restriction.js +189 -0
  20. package/dist/cgroup-partial-restriction.js.map +1 -0
  21. package/dist/collector-version.d.ts +7 -0
  22. package/dist/collector-version.d.ts.map +1 -0
  23. package/dist/collector-version.js +9 -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 +136 -0
  30. package/dist/instrumented-execution.d.ts.map +1 -0
  31. package/dist/instrumented-execution.js +696 -0
  32. package/dist/instrumented-execution.js.map +1 -0
  33. package/dist/jvm-agent/build.d.ts +48 -0
  34. package/dist/jvm-agent/build.d.ts.map +1 -0
  35. package/dist/jvm-agent/build.js +129 -0
  36. package/dist/jvm-agent/build.js.map +1 -0
  37. package/dist/polling-output-source.d.ts +43 -0
  38. package/dist/polling-output-source.d.ts.map +1 -0
  39. package/dist/polling-output-source.js +64 -0
  40. package/dist/polling-output-source.js.map +1 -0
  41. package/dist/profile-backend-observation.d.ts +67 -0
  42. package/dist/profile-backend-observation.d.ts.map +1 -0
  43. package/dist/profile-backend-observation.js +107 -0
  44. package/dist/profile-backend-observation.js.map +1 -0
  45. package/dist/respawn-and-supervise.d.ts +86 -0
  46. package/dist/respawn-and-supervise.d.ts.map +1 -0
  47. package/dist/respawn-and-supervise.js +171 -0
  48. package/dist/respawn-and-supervise.js.map +1 -0
  49. package/package.json +3 -3
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Partial going-forward resource restriction for an already-running, attached-to
3
+ * process, via cgroups v2 — narrower alternative to `respawn-and-supervise.ts`.
4
+ *
5
+ * Moving a live pid into a delegated cgroup applies real kernel-enforced limits
6
+ * (`memory.max`, `cpu.max`, `pids.max`) without killing/restarting it. **It does
7
+ * NOT and cannot give filesystem or network isolation** — that needs `setns()`
8
+ * against a live pid, out of scope here. `CGROUP_PARTIAL_RESTRICTION_SCOPE` is the
9
+ * literal string every result carries so nothing downstream rounds this up to
10
+ * "sandboxed"/"isolated" (which would misrepresent it as `sandbox.ts`'s real
11
+ * spawn-time bwrap isolation).
12
+ *
13
+ * Finding the delegated ancestor: a non-root user can only write under
14
+ * `/sys/fs/cgroup` where a systemd user session delegates it (`Delegate=yes`).
15
+ * Delegation isn't uniform all the way down — a leaf cgroup already holding a
16
+ * process (e.g. this Node process's own scope) generally can't extend
17
+ * `subtree_control` further; writing fails `EBUSY` (measured on this repo's dev
18
+ * host). So `findDelegatedCgroupAncestor` doesn't trust subtree_control text or
19
+ * permission bits — it walks up from `/proc/self/cgroup` and, at each ancestor,
20
+ * creates a real temporary probe child and checks whether the kernel actually gave
21
+ * it a `memory.max` file.
22
+ */
23
+ import type { CapabilityStatus } from "@descryy/runtime-contracts";
24
+ /** Literal scope string every `CgroupMoveResult` carries under `scope` — never restated by hand, so quotes of it can't drift. */
25
+ export declare const CGROUP_PARTIAL_RESTRICTION_SCOPE: "partial -- resource limits only, no filesystem or network isolation";
26
+ /**
27
+ * Walks up from this process's cgroup toward `/sys/fs/cgroup`, returning the
28
+ * deepest ancestor whose children genuinely get a real `memory.max` — the actual
29
+ * delegation boundary. `null` if cgroups v2 isn't mounted, own path can't be
30
+ * determined, or no ancestor passes the probe.
31
+ */
32
+ export declare function findDelegatedCgroupAncestor(): string | null;
33
+ export declare function cgroupV2Capability(): CapabilityStatus;
34
+ export interface CgroupResourceLimits {
35
+ /**
36
+ * Maps to cgroups v2 `memory.max`, in bytes. Also writes `memory.swap.max=0` for
37
+ * the same cgroup — measured: with swap available, `memory.max` alone doesn't
38
+ * kill anything, it just pushes pages to swap under pressure. Disabling swap is
39
+ * what makes it a hard, OOM-killer-enforced limit rather than a soft one. Not
40
+ * independently toggleable — "cap it but let it swap" would be a separate field.
41
+ */
42
+ readonly memoryMaxBytes?: number;
43
+ /** Maps to cgroups v2 `pids.max` -- caps tasks (processes/threads) this cgroup may hold. */
44
+ readonly maxProcesses?: number;
45
+ /**
46
+ * Raw cgroups v2 `cpu.max` value (`"$MAX $PERIOD"`, e.g. `"50000 100000"` for
47
+ * 50% of one CPU). Throws rather than silently dropping if the delegated
48
+ * ancestor has no writable `cpu.max` — measured on this repo's dev host: `cpu`
49
+ * was NOT delegated at the same level `memory`/`pids` were.
50
+ */
51
+ readonly cpuMax?: string;
52
+ }
53
+ export interface CgroupMoveResult {
54
+ readonly applied: true;
55
+ readonly cgroupPath: string;
56
+ /** Always the literal `CGROUP_PARTIAL_RESTRICTION_SCOPE` string. */
57
+ readonly scope: typeof CGROUP_PARTIAL_RESTRICTION_SCOPE;
58
+ readonly appliedLimits: CgroupResourceLimits;
59
+ /**
60
+ * Best-effort removal of the cgroup this call created. Succeeds only once
61
+ * `cgroup.procs` is empty (pid exited or moved elsewhere) -- cgroups v2 refuses
62
+ * to remove a non-empty cgroup. Returns whether removal happened; never throws.
63
+ */
64
+ readonly release: () => boolean;
65
+ }
66
+ /**
67
+ * Moves `options.pid` (a process this runtime did not spawn) into a newly created,
68
+ * resource-limited cgroup. Throws if the target isn't alive, `cgroupV2Capability()`
69
+ * is unavailable, or a declared limit's controller file doesn't exist.
70
+ *
71
+ * Limits are written before the pid is moved in, so a process is never observed
72
+ * with a half-applied limit set; on any write failure the still-empty cgroup is
73
+ * removed and the error rethrown, never left orphaned.
74
+ */
75
+ export declare function moveProcessIntoRestrictedCgroup(options: {
76
+ readonly pid: number;
77
+ readonly limits: CgroupResourceLimits;
78
+ readonly nameHint?: string;
79
+ }): CgroupMoveResult;
80
+ //# sourceMappingURL=cgroup-partial-restriction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cgroup-partial-restriction.d.ts","sourceRoot":"","sources":["../src/cgroup-partial-restriction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAKnE,iIAAiI;AACjI,eAAO,MAAM,gCAAgC,EAAG,qEAA8E,CAAC;AA2C/H;;;;;GAKG;AACH,wBAAgB,2BAA2B,IAAI,MAAM,GAAG,IAAI,CAc3D;AAED,wBAAgB,kBAAkB,IAAI,gBAAgB,CAkBrD;AAED,MAAM,WAAW,oBAAoB;IACnC;;;;;;OAMG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,OAAO,gCAAgC,CAAC;IACxD,QAAQ,CAAC,aAAa,EAAE,oBAAoB,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE;IACvD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,gBAAgB,CAsEnB"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Partial going-forward resource restriction for an already-running, attached-to
3
+ * process, via cgroups v2 — narrower alternative to `respawn-and-supervise.ts`.
4
+ *
5
+ * Moving a live pid into a delegated cgroup applies real kernel-enforced limits
6
+ * (`memory.max`, `cpu.max`, `pids.max`) without killing/restarting it. **It does
7
+ * NOT and cannot give filesystem or network isolation** — that needs `setns()`
8
+ * against a live pid, out of scope here. `CGROUP_PARTIAL_RESTRICTION_SCOPE` is the
9
+ * literal string every result carries so nothing downstream rounds this up to
10
+ * "sandboxed"/"isolated" (which would misrepresent it as `sandbox.ts`'s real
11
+ * spawn-time bwrap isolation).
12
+ *
13
+ * Finding the delegated ancestor: a non-root user can only write under
14
+ * `/sys/fs/cgroup` where a systemd user session delegates it (`Delegate=yes`).
15
+ * Delegation isn't uniform all the way down — a leaf cgroup already holding a
16
+ * process (e.g. this Node process's own scope) generally can't extend
17
+ * `subtree_control` further; writing fails `EBUSY` (measured on this repo's dev
18
+ * host). So `findDelegatedCgroupAncestor` doesn't trust subtree_control text or
19
+ * permission bits — it walks up from `/proc/self/cgroup` and, at each ancestor,
20
+ * creates a real temporary probe child and checks whether the kernel actually gave
21
+ * it a `memory.max` file.
22
+ */
23
+ import { existsSync, mkdirSync, readFileSync, rmdirSync, writeFileSync } from "node:fs";
24
+ import { dirname, join } from "node:path";
25
+ import { isProcessAlive } from "./attach-to-running-process.js";
26
+ const CGROUP_ROOT = "/sys/fs/cgroup";
27
+ /** Literal scope string every `CgroupMoveResult` carries under `scope` — never restated by hand, so quotes of it can't drift. */
28
+ export const CGROUP_PARTIAL_RESTRICTION_SCOPE = "partial -- resource limits only, no filesystem or network isolation";
29
+ function ownUnifiedCgroupPath() {
30
+ let content;
31
+ try {
32
+ content = readFileSync("/proc/self/cgroup", "utf8");
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ for (const line of content.trim().split("\n")) {
38
+ // unified-hierarchy lines read "0::<path>"; only the "0::" line matters here
39
+ const firstColon = line.indexOf(":");
40
+ const secondColon = line.indexOf(":", firstColon + 1);
41
+ if (firstColon === -1 || secondColon === -1)
42
+ continue;
43
+ if (line.slice(0, firstColon) === "0" && firstColon + 1 === secondColon) {
44
+ return line.slice(secondColon + 1);
45
+ }
46
+ }
47
+ return null;
48
+ }
49
+ /**
50
+ * Real empirical probe, not a permission-bit read — a directory can be
51
+ * `mkdir`-able yet its child still lack `memory.max` if the controller was never
52
+ * enabled in `subtree_control` (this process's own leaf scope is exactly this
53
+ * shape, measured directly).
54
+ */
55
+ function probeControllableChild(candidateDir) {
56
+ const probe = join(candidateDir, `.descry-cgroup-probe-${String(process.pid)}-${String(Date.now())}-${String(Math.random()).slice(2, 8)}`);
57
+ try {
58
+ mkdirSync(probe);
59
+ }
60
+ catch {
61
+ return false;
62
+ }
63
+ const controllable = existsSync(join(probe, "memory.max"));
64
+ try {
65
+ rmdirSync(probe);
66
+ }
67
+ catch {
68
+ // best-effort cleanup; not our problem if something raced to touch it first
69
+ }
70
+ return controllable;
71
+ }
72
+ /**
73
+ * Walks up from this process's cgroup toward `/sys/fs/cgroup`, returning the
74
+ * deepest ancestor whose children genuinely get a real `memory.max` — the actual
75
+ * delegation boundary. `null` if cgroups v2 isn't mounted, own path can't be
76
+ * determined, or no ancestor passes the probe.
77
+ */
78
+ export function findDelegatedCgroupAncestor() {
79
+ if (process.platform !== "linux")
80
+ return null;
81
+ if (!existsSync(join(CGROUP_ROOT, "cgroup.controllers")))
82
+ return null;
83
+ const ownPath = ownUnifiedCgroupPath();
84
+ if (ownPath === null)
85
+ return null;
86
+ let dir = join(CGROUP_ROOT, ownPath.replace(/^\/+/, ""));
87
+ // never test CGROUP_ROOT itself: root-wide limits are root-only anyway
88
+ while (dir !== CGROUP_ROOT && dirname(dir) !== dir) {
89
+ if (existsSync(dir) && probeControllableChild(dir))
90
+ return dir;
91
+ dir = dirname(dir);
92
+ }
93
+ return null;
94
+ }
95
+ export function cgroupV2Capability() {
96
+ if (process.platform !== "linux") {
97
+ return { availability: "unavailable", reason: `cgroups v2 resource-limit move is Linux-only; not available on "${process.platform}"` };
98
+ }
99
+ if (!existsSync(join(CGROUP_ROOT, "cgroup.controllers"))) {
100
+ return { availability: "unavailable", reason: `${CGROUP_ROOT} has no cgroup.controllers file -- this host is not using the cgroups v2 unified hierarchy` };
101
+ }
102
+ const ancestor = findDelegatedCgroupAncestor();
103
+ if (ancestor === null) {
104
+ return {
105
+ availability: "unavailable",
106
+ reason: "cgroups v2 is mounted, but no writable, controller-delegated cgroup ancestor was found for this process -- commonly means this " +
107
+ "process is not running under a systemd user session with delegation (Delegate=yes on user@<uid>.service), or is running as a " +
108
+ "user with no cgroup delegation anywhere in its own ancestry. Refusing rather than silently doing nothing.",
109
+ };
110
+ }
111
+ return { availability: "available", reason: null };
112
+ }
113
+ /**
114
+ * Moves `options.pid` (a process this runtime did not spawn) into a newly created,
115
+ * resource-limited cgroup. Throws if the target isn't alive, `cgroupV2Capability()`
116
+ * is unavailable, or a declared limit's controller file doesn't exist.
117
+ *
118
+ * Limits are written before the pid is moved in, so a process is never observed
119
+ * with a half-applied limit set; on any write failure the still-empty cgroup is
120
+ * removed and the error rethrown, never left orphaned.
121
+ */
122
+ export function moveProcessIntoRestrictedCgroup(options) {
123
+ if (!isProcessAlive(options.pid)) {
124
+ throw new Error(`moveProcessIntoRestrictedCgroup: pid ${String(options.pid)} is not running -- cannot move a target that does not exist.`);
125
+ }
126
+ const capability = cgroupV2Capability();
127
+ if (capability.availability !== "available") {
128
+ throw new Error(`moveProcessIntoRestrictedCgroup: cannot apply -- ${capability.reason}`);
129
+ }
130
+ const ancestor = findDelegatedCgroupAncestor();
131
+ if (ancestor === null) {
132
+ // unreachable given availability check above; narrows the type honestly
133
+ throw new Error("moveProcessIntoRestrictedCgroup: no delegated cgroup ancestor found despite capability reporting available -- internal inconsistency.");
134
+ }
135
+ const cgroupPath = join(ancestor, `descry-restrict-${options.nameHint ?? String(options.pid)}-${String(Date.now())}`);
136
+ mkdirSync(cgroupPath);
137
+ try {
138
+ if (options.limits.cpuMax !== undefined && !existsSync(join(cgroupPath, "cpu.max"))) {
139
+ throw new Error(`cpuMax was requested but the delegated cgroup ancestor (${ancestor}) does not expose a writable cpu.max to its children on this host -- ` +
140
+ "refusing rather than silently ignoring the limit.");
141
+ }
142
+ if (options.limits.memoryMaxBytes !== undefined) {
143
+ writeFileSync(join(cgroupPath, "memory.max"), String(options.limits.memoryMaxBytes));
144
+ // see memoryMaxBytes doc: without this, swap makes memory.max a soft limit.
145
+ // best-effort -- no memory.swap.max file (swap accounting disabled/not
146
+ // delegated) still gets a real memory.max, just without this hardening
147
+ try {
148
+ writeFileSync(join(cgroupPath, "memory.swap.max"), "0");
149
+ }
150
+ catch {
151
+ // disclosed above, not pretended to have succeeded
152
+ }
153
+ }
154
+ if (options.limits.maxProcesses !== undefined) {
155
+ writeFileSync(join(cgroupPath, "pids.max"), String(options.limits.maxProcesses));
156
+ }
157
+ if (options.limits.cpuMax !== undefined) {
158
+ writeFileSync(join(cgroupPath, "cpu.max"), options.limits.cpuMax);
159
+ }
160
+ // moved last, only once every requested limit is confirmed written
161
+ writeFileSync(join(cgroupPath, "cgroup.procs"), String(options.pid));
162
+ }
163
+ catch (error) {
164
+ try {
165
+ rmdirSync(cgroupPath);
166
+ }
167
+ catch {
168
+ // best-effort: if the pid was already moved in, the dir is non-empty
169
+ // and can't be removed
170
+ }
171
+ throw new Error(`moveProcessIntoRestrictedCgroup: failed to apply limits or move pid ${String(options.pid)} into ${cgroupPath}: ${error instanceof Error ? error.message : String(error)}`);
172
+ }
173
+ return {
174
+ applied: true,
175
+ cgroupPath,
176
+ scope: CGROUP_PARTIAL_RESTRICTION_SCOPE,
177
+ appliedLimits: options.limits,
178
+ release: () => {
179
+ try {
180
+ rmdirSync(cgroupPath);
181
+ return true;
182
+ }
183
+ catch {
184
+ return false;
185
+ }
186
+ },
187
+ };
188
+ }
189
+ //# sourceMappingURL=cgroup-partial-restriction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cgroup-partial-restriction.js","sourceRoot":"","sources":["../src/cgroup-partial-restriction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * `Evidence.collectorVersion` for orchestrator-emitted evidence (e.g. `COLLECTOR_ERROR`
3
+ * before any collector ran). Reads `package.json` directly so it can't drift from
4
+ * what shipped, same approach as `nodeVersion`'s use of `process.version`.
5
+ */
6
+ export declare const COLLECTOR_VERSION: string;
7
+ //# sourceMappingURL=collector-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector-version.d.ts","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,eAAO,MAAM,iBAAiB,EAAE,MAA6E,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `Evidence.collectorVersion` for orchestrator-emitted evidence (e.g. `COLLECTOR_ERROR`
3
+ * before any collector ran). Reads `package.json` directly so it can't drift from
4
+ * what shipped, same approach as `nodeVersion`'s use of `process.version`.
5
+ */
6
+ import { createRequire } from "node:module";
7
+ const require = createRequire(import.meta.url);
8
+ export const COLLECTOR_VERSION = require("../package.json").version;
9
+ //# sourceMappingURL=collector-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collector-version.js","sourceRoot":"","sources":["../src/collector-version.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,iBAAiB,GAAY,OAAO,CAAC,iBAAiB,CAAkC,CAAC,OAAO,CAAC"}
@@ -0,0 +1,19 @@
1
+ export type { PollingProcessOutputSourceOptions } from "./polling-output-source.ts";
2
+ export { createPollingProcessOutputSource } from "./polling-output-source.ts";
3
+ export type { AttachToRunningProcessOptions, AttachedProcessOutputSource } from "./attach-to-running-process.ts";
4
+ export { attachToRunningProcess, isProcessAlive } from "./attach-to-running-process.ts";
5
+ export type { AttachToRunningNodeProcessOptions } from "./attach-to-running-node-process.ts";
6
+ export { attachToRunningNodeProcess, discoverNodeInspectorUrl } from "./attach-to-running-node-process.ts";
7
+ export type { CdpSession } from "./cdp-client.ts";
8
+ export { connectCdp } from "./cdp-client.ts";
9
+ export type { AttachToRunningJvmProcessOptions } from "./attach-to-running-jvm-process.ts";
10
+ export { attachToRunningJvmProcess } from "./attach-to-running-jvm-process.ts";
11
+ export type { RespawnCommand, RespawnCommandSource, RespawnAndSuperviseOptions, RespawnAndSuperviseResult, } from "./respawn-and-supervise.ts";
12
+ export { respawnAndSupervise, inferRespawnCommandFromProc } from "./respawn-and-supervise.ts";
13
+ export type { CgroupResourceLimits, CgroupMoveResult, } from "./cgroup-partial-restriction.ts";
14
+ export { CGROUP_PARTIAL_RESTRICTION_SCOPE, cgroupV2Capability, findDelegatedCgroupAncestor, moveProcessIntoRestrictedCgroup, } from "./cgroup-partial-restriction.ts";
15
+ export type { InstrumentedExecutionInput, InstrumentedExecutionResult, ExecutionBudgetOutcome } from "./instrumented-execution.ts";
16
+ export { runInstrumentedExecution, createSourceRootResolver, applyOutboundLaunch } from "./instrumented-execution.ts";
17
+ export type { BackendObservationMechanism, RunRemoteLogObservationInput, RunRemoteLogObservationResult, } from "./profile-backend-observation.ts";
18
+ export { backendObservationMechanismFor, runRemoteLogObservation } from "./profile-backend-observation.ts";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AACpF,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAC9E,YAAY,EAAE,6BAA6B,EAAE,2BAA2B,EAAE,MAAM,gCAAgC,CAAC;AACjH,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACxF,YAAY,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAC7F,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAC3G,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,YAAY,EAAE,gCAAgC,EAAE,MAAM,oCAAoC,CAAC;AAC3F,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,YAAY,EACV,cAAc,EACd,oBAAoB,EACpB,0BAA0B,EAC1B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAC9F,YAAY,EACV,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACnI,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACtH,YAAY,EACV,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export { createPollingProcessOutputSource } from "./polling-output-source.js";
2
+ export { attachToRunningProcess, isProcessAlive } from "./attach-to-running-process.js";
3
+ export { attachToRunningNodeProcess, discoverNodeInspectorUrl } from "./attach-to-running-node-process.js";
4
+ export { connectCdp } from "./cdp-client.js";
5
+ export { attachToRunningJvmProcess } from "./attach-to-running-jvm-process.js";
6
+ export { respawnAndSupervise, inferRespawnCommandFromProc } from "./respawn-and-supervise.js";
7
+ export { CGROUP_PARTIAL_RESTRICTION_SCOPE, cgroupV2Capability, findDelegatedCgroupAncestor, moveProcessIntoRestrictedCgroup, } from "./cgroup-partial-restriction.js";
8
+ export { runInstrumentedExecution, createSourceRootResolver, applyOutboundLaunch } from "./instrumented-execution.js";
9
+ export { backendObservationMechanismFor, runRemoteLogObservation } from "./profile-backend-observation.js";
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAE9E,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAExF,OAAO,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,qCAAqC,CAAC;AAE3G,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAO/E,OAAO,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAK9F,OAAO,EACL,gCAAgC,EAChC,kBAAkB,EAClB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMtH,OAAO,EAAE,8BAA8B,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * The assembly wiring the runtime's pieces together in production code (previously
3
+ * only connected ad hoc by tests). Runs an `ExecutionController` over a `services`
4
+ * configuration; wraps each spawned process in a live `ProcessOutputSource`
5
+ * (polls the buffer, yields each line once); builds a `CollectorContext` with a
6
+ * real `resolveSourceRoot` closed over the execution's own processes; starts,
7
+ * drains and stops the adapter's collectors; writes every emitted item through
8
+ * `EvidenceStore` so redaction runs (plan §28).
9
+ *
10
+ * Deliberately does not decide whether a finding exists, correlate to graph
11
+ * nodes, or drive a browser — separate stages, separate contracts.
12
+ */
13
+ import type { Evidence, Execution, ExecutionConfiguration, ProcessHandle, ServiceRootLookup } from "@descryy/runtime-contracts";
14
+ import type { RuntimeAdapter, OutboundHttpLaunch } from "@descryy/runtime-backend-observation";
15
+ import { type CreateExecutionInput, type RunOptions, type PreflightCheckSpec } from "@descryy/runtime-controller";
16
+ import { EvidenceStore } from "@descryy/runtime-evidence-store";
17
+ export interface InstrumentedExecutionInput {
18
+ /** Carries the `ExecutionConfiguration` itself — the controller's own input shape, not a parallel copy that could drift from it. */
19
+ readonly execution: CreateExecutionInput;
20
+ readonly runOptions: RunOptions;
21
+ /** Supplies the collectors. One adapter per execution: a run observes one backend runtime. */
22
+ readonly adapter: RuntimeAdapter;
23
+ /** Where evidence is written. Provided rather than constructed so a caller owns the database's lifetime and its redaction policy. */
24
+ readonly store: EvidenceStore;
25
+ /**
26
+ * How long to keep draining collector output after the services are up.
27
+ * There is no "the application is done" signal at this layer — a server
28
+ * runs until stopped — so the caller states how long the observation
29
+ * window is rather than this module guessing.
30
+ */
31
+ readonly observeForMs: number;
32
+ /**
33
+ * Opt-in, per service name: front that service with `InboundProxy` (RT-192,
34
+ * DEC-271) once its own readiness has already succeeded — reads the answer
35
+ * `controller.run()` already produced (`serviceStartResults`), never re-asks.
36
+ * Absent or unnamed service: unchanged behaviour, no proxy.
37
+ *
38
+ * Does not close any per-language "HTTP observation" checklist row — those use
39
+ * self-initiated fixtures with no separate public port for a proxy to front.
40
+ * This only makes `InboundProxy` available for a future externally-driven
41
+ * scenario.
42
+ */
43
+ readonly frontWithInboundProxy?: Readonly<Record<string, boolean>>;
44
+ /**
45
+ * Fires once every collector (including any fronting proxy) has started, before
46
+ * the observation window's sleep. Lets a caller drive real traffic through a
47
+ * just-started proxy while it's still alive — `InstrumentedExecutionResult` is
48
+ * only returned after the run has stopped everything, too late for that. A
49
+ * throwing callback is not caught here.
50
+ */
51
+ readonly onReady?: (info: {
52
+ readonly execution: Execution;
53
+ /** Service name → the proxy's own bound port, for every service that was both flagged AND successfully fronted. */
54
+ readonly proxyPorts: Readonly<Record<string, number>>;
55
+ }) => void | Promise<void>;
56
+ readonly extraPreflightChecks?: readonly PreflightCheckSpec[];
57
+ }
58
+ export interface InstrumentedExecutionResult {
59
+ readonly execution: Execution;
60
+ readonly evidence: readonly Evidence[];
61
+ /** Every collector's own report of what it could do, after the run — not what it claimed at construction. */
62
+ readonly collectorCapabilities: readonly {
63
+ readonly collectorId: string;
64
+ readonly capabilities: ReturnType<import("@descryy/runtime-contracts").Collector["capabilities"]>;
65
+ }[];
66
+ /** Set when `run()` refused before spawning anything. Evidence is empty and that is a refusal, not an absence of failures. */
67
+ readonly validationError: string | null;
68
+ /**
69
+ * What the declared whole-execution budget actually did to this run.
70
+ *
71
+ * `timeoutMs` used to bound only the service, not the observation window: a
72
+ * 1500ms budget with a 12000ms window measurably returned after 12288ms with
73
+ * zero evidence, since services had been dead for the last 10.8s. Reported as a
74
+ * struct so a caller can tell a full window that found nothing from one cut
75
+ * short before it could.
76
+ */
77
+ readonly budget: ExecutionBudgetOutcome;
78
+ /**
79
+ * Service name → the combined stdout+stderr that service produced.
80
+ *
81
+ * The controller has always captured this and exposed it
82
+ * (`ExecutionController.readProcessOutput`); it was used only for readiness
83
+ * polling and never left this function, so a caller got
84
+ * `processes[].exitCode` and nothing about *why*. An exit code alone can
85
+ * actively mislead — `prlimit`, which wraps every sandboxed spawn, exits 126
86
+ * for "found but not executable" and writes the reason to stderr, and 126 has
87
+ * already been misread once as a nested-sandbox failure (bwrap exits 1 for
88
+ * every namespace failure, so it never means that).
89
+ *
90
+ * **A missing key and an empty string are different claims.** Present-and-
91
+ * empty is "this ran and said nothing"; absent is "no process was attributed
92
+ * to this service at all". Collapsing them loses the distinction for good.
93
+ *
94
+ * **RT-261 update — no longer whole.** Backed by `ManagedProcess.readOutput()`,
95
+ * which now holds head+tail per service (`OUTPUT_HEAD_BYTES`/`OUTPUT_TAIL_BYTES`
96
+ * in `@descryy/runtime-controller`'s `process-manager.ts`), not the full
97
+ * accumulated buffer -- a chatty service no longer grows Descry's own memory
98
+ * without bound. When a service's real output exceeded that bound, the
99
+ * string itself carries one inline marker naming how many bytes were
100
+ * dropped and the real total, so the cut is visible in the text a reader
101
+ * already has, not only in a structured field alongside it.
102
+ */
103
+ readonly serviceOutput: Readonly<Record<string, string>>;
104
+ }
105
+ /** See `InstrumentedExecutionResult.budget`. */
106
+ export interface ExecutionBudgetOutcome {
107
+ /** `ExecutionConfiguration.timeoutMs`, verbatim. */
108
+ readonly declaredMs: number;
109
+ /** Wall-clock time this function actually took. */
110
+ readonly elapsedMs: number;
111
+ /** What `observeForMs` asked for. */
112
+ readonly requestedObservationMs: number;
113
+ /** What the budget left for it. Less than `requestedObservationMs` means the window was cut short. */
114
+ readonly observedForMs: number;
115
+ /** True when the run finished past its own deadline — teardown of real processes can overshoot even a bounded window. */
116
+ readonly exceeded: boolean;
117
+ }
118
+ /**
119
+ * Builds the origin → source-root lookup a collector reads through
120
+ * `CollectorContext.resolveSourceRoot`. Closes over the execution's own
121
+ * processes, which is what makes the port→service join possible at all — under
122
+ * ephemeral ports only the running process knows its own port.
123
+ */
124
+ export declare function createSourceRootResolver(processes: readonly ProcessHandle[], configuration: ExecutionConfiguration): (origin: string) => ServiceRootLookup;
125
+ /**
126
+ * Rewrites every spawnable service so it launches with outbound
127
+ * instrumentation in place.
128
+ *
129
+ * The declaration comes from the adapter and names no language; this function
130
+ * applies it and also names none. `attach`-mode services are skipped: their
131
+ * process is already running, so there is no launch left to influence, and
132
+ * pretending otherwise would claim instrumentation that is not there.
133
+ */
134
+ export declare function applyOutboundLaunch(execution: CreateExecutionInput, launch: OutboundHttpLaunch): CreateExecutionInput;
135
+ export declare function runInstrumentedExecution(input: InstrumentedExecutionInput): Promise<InstrumentedExecutionResult>;
136
+ //# sourceMappingURL=instrumented-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumented-execution.d.ts","sourceRoot":"","sources":["../src/instrumented-execution.ts"],"names":[],"mappings":"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"}