@senpi/runtime 3.0.6-dev.runtime-phase-2.20260630134451 → 3.0.6-dev.runtime-phase-2.20260630134511
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/actions/action-events.d.ts.map +1 -1
- package/dist/actions/action-events.js +39 -5
- package/dist/actions/action-events.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +2 -0
- package/dist/actions/event-derivation.d.ts.map +1 -1
- package/dist/actions/event-derivation.js +2 -0
- package/dist/actions/event-derivation.js.map +1 -1
- package/dist/dsl/events/initial-state.d.ts.map +1 -1
- package/dist/dsl/events/initial-state.js +1 -0
- package/dist/dsl/events/initial-state.js.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.d.ts +42 -0
- package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -0
- package/dist/dsl/monitor/dsl-failure-events.js +73 -0
- package/dist/dsl/monitor/dsl-failure-events.js.map +1 -0
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +46 -37
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +37 -5
- package/dist/index.js.map +1 -1
- package/dist/runtime/lifecycle-events.d.ts +43 -0
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +61 -0
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +63 -9
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +8 -1
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +6 -0
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +87 -2
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts +3 -0
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +27 -53
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +44 -0
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
- package/dist/runtime-api/intake/intake-events.js +131 -0
- package/dist/runtime-api/intake/intake-events.js.map +1 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +58 -15
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/supervisor-events.d.ts +61 -0
- package/dist/runtime-api/intake/supervisor-events.d.ts.map +1 -0
- package/dist/runtime-api/intake/supervisor-events.js +173 -0
- package/dist/runtime-api/intake/supervisor-events.js.map +1 -0
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +119 -27
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/server.d.ts.map +1 -1
- package/dist/runtime-api/server.js +10 -1
- package/dist/runtime-api/server.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +3 -0
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +50 -5
- package/dist/senpi/client.js.map +1 -1
- package/dist/state/state-events.d.ts +13 -0
- package/dist/state/state-events.d.ts.map +1 -0
- package/dist/state/state-events.js +22 -0
- package/dist/state/state-events.js.map +1 -0
- package/dist/state/state-manager.d.ts.map +1 -1
- package/dist/state/state-manager.js +14 -1
- package/dist/state/state-manager.js.map +1 -1
- package/dist/telemetry/event-builders.d.ts +0 -2
- package/dist/telemetry/event-builders.d.ts.map +1 -1
- package/dist/telemetry/event-builders.js.map +1 -1
- package/dist/telemetry/identity.d.ts +10 -0
- package/dist/telemetry/identity.d.ts.map +1 -1
- package/dist/telemetry/identity.js +1 -0
- package/dist/telemetry/identity.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +137 -15
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +357 -74
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/otel-sdk.d.ts +1 -1
- package/dist/telemetry/otel-sdk.js +1 -1
- package/dist/telemetry/spans/gen-ai.d.ts +4 -0
- package/dist/telemetry/spans/gen-ai.d.ts.map +1 -1
- package/dist/telemetry/spans/gen-ai.js +9 -0
- package/dist/telemetry/spans/gen-ai.js.map +1 -1
- package/dist/telemetry/spans/redact-pii.d.ts.map +1 -1
- package/dist/telemetry/spans/redact-pii.js +4 -1
- package/dist/telemetry/spans/redact-pii.js.map +1 -1
- package/dist/telemetry/spans/span-hooks.d.ts +7 -0
- package/dist/telemetry/spans/span-hooks.d.ts.map +1 -1
- package/dist/telemetry/spans/span-hooks.js +179 -24
- package/dist/telemetry/spans/span-hooks.js.map +1 -1
- package/dist/telemetry/tool-plane.d.ts +31 -0
- package/dist/telemetry/tool-plane.d.ts.map +1 -0
- package/dist/telemetry/tool-plane.js +70 -0
- package/dist/telemetry/tool-plane.js.map +1 -0
- package/dist/telemetry/trace-identity.d.ts.map +1 -1
- package/dist/telemetry/trace-identity.js +3 -0
- package/dist/telemetry/trace-identity.js.map +1 -1
- package/dist/types/dsl/index.d.ts +6 -0
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +237 -0
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +51 -0
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +18 -8
- package/dist/utils/logger.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner-launcher.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"scanner-launcher.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ import * as fs from "node:fs";
|
|
|
15
15
|
import * as path from "node:path";
|
|
16
16
|
import { LongRunningSupervisor } from "../../runtime/supervisor/long-running-supervisor.js";
|
|
17
17
|
import { makeId } from "../../runtime/supervisor/supervisor-utils.js";
|
|
18
|
+
import { emitEvent } from "../../actions/event-derivation.js";
|
|
19
|
+
import { buildScannerLifecycleEvent, buildScannerLaunchFailedEvent, recordScannerLifecycleMetrics, } from "./supervisor-events.js";
|
|
18
20
|
// ── ScannerLauncher ────────────────────────────────────────────────────────────
|
|
19
21
|
export class ScannerLauncher {
|
|
20
22
|
deps;
|
|
@@ -56,9 +58,12 @@ export class ScannerLauncher {
|
|
|
56
58
|
const onSupervisorEvent = this.deps.onSupervisorEvent;
|
|
57
59
|
// Track ids registered in this call so we can roll back on partial failure.
|
|
58
60
|
const registeredInThisCall = [];
|
|
61
|
+
// The scanner being wired when a failure throws — names it on the launch-failed event.
|
|
62
|
+
let failingScanner;
|
|
59
63
|
try {
|
|
60
64
|
for (let i = 0; i < scanners.length; i++) {
|
|
61
65
|
const scanner = scanners[i];
|
|
66
|
+
failingScanner = scanner.name;
|
|
62
67
|
if (!scanner.path) {
|
|
63
68
|
throw new Error(`ScannerLauncher: scanner "${scanner.name}" is missing required field "path"`);
|
|
64
69
|
}
|
|
@@ -150,26 +155,56 @@ export class ScannerLauncher {
|
|
|
150
155
|
onSupervisorEvent(e);
|
|
151
156
|
});
|
|
152
157
|
}
|
|
158
|
+
// Telemetry bridge: translate each lifecycle event into its `scanner.*` catalog event and its
|
|
159
|
+
// health metric. Read the scanner id fresh from the holder so it reflects the run being
|
|
160
|
+
// reported — this is wired BEFORE the remint listener below, so a `restarting` event still
|
|
161
|
+
// carries the exiting run's id.
|
|
162
|
+
supervisor.on("event", (e) => {
|
|
163
|
+
const evt = e;
|
|
164
|
+
const lifecycleCtx = {
|
|
165
|
+
scannerName: scanner.name,
|
|
166
|
+
scannerId: idHolder.value,
|
|
167
|
+
supervisorId: supervisor.supervisorId,
|
|
168
|
+
wallet,
|
|
169
|
+
};
|
|
170
|
+
emitEvent(logger, () => buildScannerLifecycleEvent(evt, lifecycleCtx));
|
|
171
|
+
recordScannerLifecycleMetrics(evt, lifecycleCtx);
|
|
172
|
+
});
|
|
153
173
|
// 6. Subscribe to restarting for remint.
|
|
154
174
|
supervisor.on("event", (e) => {
|
|
155
175
|
const evt = e;
|
|
156
176
|
if (evt.type === "restarting") {
|
|
157
177
|
const oldId = idHolder.value;
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
178
|
+
try {
|
|
179
|
+
registry.unregister(oldId);
|
|
180
|
+
const newId = mintScannerId();
|
|
181
|
+
idHolder.value = newId;
|
|
182
|
+
registry.register({
|
|
183
|
+
scannerId: newId,
|
|
184
|
+
runtimeId,
|
|
185
|
+
scannerName: scanner.name,
|
|
186
|
+
wallet,
|
|
187
|
+
fields: scanner.fields,
|
|
188
|
+
});
|
|
189
|
+
// Rewrite env so the next spawn carries the new id.
|
|
190
|
+
supervisor.spec.env = {
|
|
191
|
+
...supervisor.spec.env,
|
|
192
|
+
EXTERNAL_SCANNER_ID: newId,
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
// A failed re-mint breaks the zombie fence — the scanner can be left with no registry
|
|
197
|
+
// entry, so its signals are refused (UNKNOWN_SCANNER). Surface it rather than let the
|
|
198
|
+
// supervisor's safeEmit swallow it as a generic listener throw.
|
|
199
|
+
emitEvent(logger, () => buildScannerLaunchFailedEvent({
|
|
200
|
+
scannerName: scanner.name,
|
|
201
|
+
phase: "remint",
|
|
202
|
+
wallet,
|
|
203
|
+
scannerId: oldId,
|
|
204
|
+
supervisorId: supervisor.supervisorId,
|
|
205
|
+
error: err,
|
|
206
|
+
}));
|
|
207
|
+
}
|
|
173
208
|
}
|
|
174
209
|
});
|
|
175
210
|
this.active.push({ currentId: idHolder, supervisor });
|
|
@@ -179,6 +214,14 @@ export class ScannerLauncher {
|
|
|
179
214
|
this._initialized = true;
|
|
180
215
|
}
|
|
181
216
|
catch (err) {
|
|
217
|
+
// First-class record: this runtime's supervised scanner failed to wire up and will produce no
|
|
218
|
+
// signals. Emitted before the rollback/rethrow, inside emitEvent's guard.
|
|
219
|
+
emitEvent(logger, () => buildScannerLaunchFailedEvent({
|
|
220
|
+
scannerName: failingScanner ?? "unknown",
|
|
221
|
+
phase: "wire",
|
|
222
|
+
wallet,
|
|
223
|
+
error: err,
|
|
224
|
+
}));
|
|
182
225
|
// All-or-nothing: roll back every registration made in this call so the
|
|
183
226
|
// registry stays clean and a retry does not see stale or duplicate ids.
|
|
184
227
|
for (const id of registeredInThisCall) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner-launcher.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;
|
|
1
|
+
{"version":3,"file":"scanner-launcher.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The supervised-scanner substrate's telemetry bridge: it translates the vendor-neutral
|
|
3
|
+
* `LongRunningSupervisor "event"` channel into our catalog events and health metrics, the only
|
|
4
|
+
* catalog/metric-aware seam (the supervisor stays vendor-neutral). {@link buildScannerLifecycleEvent}
|
|
5
|
+
* maps the channel into the `scanner.*` catalog family so the boundary — child spawn/exit/crash-loop/
|
|
6
|
+
* silence-kill — is observable (graceful `stopped` is intentionally not catalogued; it is covered by
|
|
7
|
+
* `runtime.stopped`). {@link buildScannerLaunchFailedEvent} covers the launcher-side failures that
|
|
8
|
+
* never reach the supervisor's channel: a scanner that fails to wire up at all, or fails to re-mint
|
|
9
|
+
* its id on relaunch. {@link recordScannerLifecycleMetrics} is the metric side — the restart counter
|
|
10
|
+
* and degraded gauge that page an operator without a trace or log scan.
|
|
11
|
+
*
|
|
12
|
+
* The builders are pure `(input) => EmittableEvent | null`; the launcher emits the result through
|
|
13
|
+
* `emitEvent`'s guard, so a throwing build or a telemetry failure can never disturb the supervisor's
|
|
14
|
+
* run loop or the wiring. The metric recorder is a guarded side-effect (the instruments swallow throws).
|
|
15
|
+
*/
|
|
16
|
+
import type { LongRunningEvent } from "../../runtime/supervisor/long-running-supervisor.js";
|
|
17
|
+
import { EVENT_NAME } from "../../utils/event-catalog.js";
|
|
18
|
+
import type { EmittableEvent } from "../../actions/event-derivation.js";
|
|
19
|
+
/** The catalog names this bridge emits. */
|
|
20
|
+
type ScannerLifecycleName = typeof EVENT_NAME.scannerSpawned | typeof EVENT_NAME.scannerExited | typeof EVENT_NAME.scannerRestarted | typeof EVENT_NAME.scannerDegraded | typeof EVENT_NAME.scannerRecovered | typeof EVENT_NAME.scannerSilenceKilled | typeof EVENT_NAME.scannerOrphanSwept;
|
|
21
|
+
/** The scanner-instance identity the launcher pins onto every lifecycle event. */
|
|
22
|
+
export interface ScannerLifecycleContext {
|
|
23
|
+
/** The recipe-declared scanner name (stable across relaunch). */
|
|
24
|
+
scannerName: string;
|
|
25
|
+
/** The current ephemeral scanner id (re-minted on relaunch — read at emit time). */
|
|
26
|
+
scannerId: string;
|
|
27
|
+
/** The owning supervisor's id — the join key to its free-text logs. */
|
|
28
|
+
supervisorId: string;
|
|
29
|
+
/** Strategy wallet; omitted/empty → not stamped. */
|
|
30
|
+
wallet?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Map one supervisor lifecycle event to its event-log record, or `null` for `stopped` (not
|
|
34
|
+
* catalogued). The switch is exhaustive over {@link LongRunningEvent}: a new transition added to the
|
|
35
|
+
* union without a case here is a compile error.
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildScannerLifecycleEvent(event: LongRunningEvent, ctx: ScannerLifecycleContext): EmittableEvent<ScannerLifecycleName> | null;
|
|
38
|
+
/**
|
|
39
|
+
* Record the metric side of a lifecycle event: the `scanner.restarts` counter on each restart, and
|
|
40
|
+
* the `scanner.degraded` up/down gauge across the crash-loop edge (+1 on `degraded`, −1 on
|
|
41
|
+
* `recovered`). A teardown while degraded never emits `recovered`, so `stopped` carries `wasDegraded`
|
|
42
|
+
* and balances the gauge with its own −1 — otherwise a partial teardown (hot-uninstall, single-scanner
|
|
43
|
+
* stop) would leak a permanent +1 for that name+wallet. Dimensioned by the stable scanner name +
|
|
44
|
+
* wallet, not the ephemeral id. Other transitions carry no metric.
|
|
45
|
+
*/
|
|
46
|
+
export declare function recordScannerLifecycleMetrics(event: LongRunningEvent, ctx: ScannerLifecycleContext): void;
|
|
47
|
+
/** A launcher-side wiring failure — the scanner produces no signals. */
|
|
48
|
+
export interface ScannerLaunchFailure {
|
|
49
|
+
scannerName: string;
|
|
50
|
+
/** `wire` (initial launch) | `remint` (relaunch id rotation). */
|
|
51
|
+
phase: "wire" | "remint";
|
|
52
|
+
wallet?: string;
|
|
53
|
+
/** The old id + owning supervisor — known only on a `remint` failure. */
|
|
54
|
+
scannerId?: string;
|
|
55
|
+
supervisorId?: string;
|
|
56
|
+
error: unknown;
|
|
57
|
+
}
|
|
58
|
+
/** Build the `scanner.launch_failed` event (warn) for a launch/remint failure, with the exception attached. */
|
|
59
|
+
export declare function buildScannerLaunchFailedEvent(failure: ScannerLaunchFailure): EmittableEvent<typeof EVENT_NAME.scannerLaunchFailed>;
|
|
60
|
+
export {};
|
|
61
|
+
//# sourceMappingURL=supervisor-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor-events.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/supervisor-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,UAAU,EAA6B,MAAM,8BAA8B,CAAC;AACrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAGxE,2CAA2C;AAC3C,KAAK,oBAAoB,GACrB,OAAO,UAAU,CAAC,cAAc,GAChC,OAAO,UAAU,CAAC,aAAa,GAC/B,OAAO,UAAU,CAAC,gBAAgB,GAClC,OAAO,UAAU,CAAC,eAAe,GACjC,OAAO,UAAU,CAAC,gBAAgB,GAClC,OAAO,UAAU,CAAC,oBAAoB,GACtC,OAAO,UAAU,CAAC,kBAAkB,CAAC;AAEzC,kFAAkF;AAClF,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,WAAW,EAAE,MAAM,CAAC;IACpB,oFAAoF;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,uBAAuB,GAC3B,cAAc,CAAC,oBAAoB,CAAC,GAAG,IAAI,CA6F7C;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,gBAAgB,EACvB,GAAG,EAAE,uBAAuB,GAC3B,IAAI,CAoBN;AAED,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,iEAAiE;IACjE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,+GAA+G;AAC/G,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,oBAAoB,GAC5B,cAAc,CAAC,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAevD"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The supervised-scanner substrate's telemetry bridge: it translates the vendor-neutral
|
|
3
|
+
* `LongRunningSupervisor "event"` channel into our catalog events and health metrics, the only
|
|
4
|
+
* catalog/metric-aware seam (the supervisor stays vendor-neutral). {@link buildScannerLifecycleEvent}
|
|
5
|
+
* maps the channel into the `scanner.*` catalog family so the boundary — child spawn/exit/crash-loop/
|
|
6
|
+
* silence-kill — is observable (graceful `stopped` is intentionally not catalogued; it is covered by
|
|
7
|
+
* `runtime.stopped`). {@link buildScannerLaunchFailedEvent} covers the launcher-side failures that
|
|
8
|
+
* never reach the supervisor's channel: a scanner that fails to wire up at all, or fails to re-mint
|
|
9
|
+
* its id on relaunch. {@link recordScannerLifecycleMetrics} is the metric side — the restart counter
|
|
10
|
+
* and degraded gauge that page an operator without a trace or log scan.
|
|
11
|
+
*
|
|
12
|
+
* The builders are pure `(input) => EmittableEvent | null`; the launcher emits the result through
|
|
13
|
+
* `emitEvent`'s guard, so a throwing build or a telemetry failure can never disturb the supervisor's
|
|
14
|
+
* run loop or the wiring. The metric recorder is a guarded side-effect (the instruments swallow throws).
|
|
15
|
+
*/
|
|
16
|
+
import { EVENT_NAME, eventAttrs } from "../../utils/event-catalog.js";
|
|
17
|
+
import { recordScannerRestart, recordScannerDegradedDelta } from "../../telemetry/metrics.js";
|
|
18
|
+
/** The id/name/supervisor/wallet attributes every lifecycle event carries. */
|
|
19
|
+
function baseAttrs(ctx) {
|
|
20
|
+
return {
|
|
21
|
+
"senpi.scanner.id": ctx.scannerId,
|
|
22
|
+
"senpi.scanner.name": ctx.scannerName,
|
|
23
|
+
"senpi.supervisor.id": ctx.supervisorId,
|
|
24
|
+
// Addresses are case-insensitive; lowercase to match the identity join key.
|
|
25
|
+
"senpi.strategy.address": ctx.wallet ? ctx.wallet.toLowerCase() : undefined,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Map one supervisor lifecycle event to its event-log record, or `null` for `stopped` (not
|
|
30
|
+
* catalogued). The switch is exhaustive over {@link LongRunningEvent}: a new transition added to the
|
|
31
|
+
* union without a case here is a compile error.
|
|
32
|
+
*/
|
|
33
|
+
export function buildScannerLifecycleEvent(event, ctx) {
|
|
34
|
+
const base = baseAttrs(ctx);
|
|
35
|
+
const { scannerName } = ctx;
|
|
36
|
+
switch (event.type) {
|
|
37
|
+
case "spawned":
|
|
38
|
+
return {
|
|
39
|
+
name: EVENT_NAME.scannerSpawned,
|
|
40
|
+
level: "info",
|
|
41
|
+
body: `Scanner ${scannerName} spawned (pid ${event.pid}, attempt ${event.attempt})`,
|
|
42
|
+
attributes: eventAttrs({
|
|
43
|
+
...base,
|
|
44
|
+
"senpi.supervisor.run_id": event.runId,
|
|
45
|
+
"senpi.scanner.pid": event.pid,
|
|
46
|
+
"senpi.scanner.attempt": event.attempt,
|
|
47
|
+
}),
|
|
48
|
+
};
|
|
49
|
+
case "exited": {
|
|
50
|
+
// A child that never ran (spawn throw / ENOENT) carries the exception — surface it as a warn
|
|
51
|
+
// exit with the stack on the event, rather than a plain info exit.
|
|
52
|
+
const failed = event.error !== undefined;
|
|
53
|
+
const exitDesc = event.exitCode !== null ? `code ${event.exitCode}` : `signal ${event.signal ?? "unknown"}`;
|
|
54
|
+
return {
|
|
55
|
+
name: EVENT_NAME.scannerExited,
|
|
56
|
+
level: failed ? "warn" : "info",
|
|
57
|
+
body: failed
|
|
58
|
+
? `Scanner ${scannerName} failed to start`
|
|
59
|
+
: `Scanner ${scannerName} exited (${exitDesc}) after ${event.durationMs}ms`,
|
|
60
|
+
attributes: eventAttrs({
|
|
61
|
+
...base,
|
|
62
|
+
"senpi.supervisor.run_id": event.runId,
|
|
63
|
+
"senpi.scanner.pid": event.pid,
|
|
64
|
+
"senpi.scanner.exit_code": event.exitCode ?? undefined,
|
|
65
|
+
"senpi.scanner.signal": event.signal,
|
|
66
|
+
"senpi.scanner.duration_ms": event.durationMs,
|
|
67
|
+
}),
|
|
68
|
+
...(failed ? { error: event.error } : {}),
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
case "restarting":
|
|
72
|
+
return {
|
|
73
|
+
name: EVENT_NAME.scannerRestarted,
|
|
74
|
+
level: "info",
|
|
75
|
+
body: `Scanner ${scannerName} restarting in ${event.backoffMs}ms (attempt ${event.attempt})`,
|
|
76
|
+
attributes: eventAttrs({
|
|
77
|
+
...base,
|
|
78
|
+
"senpi.supervisor.run_id": event.runId,
|
|
79
|
+
"senpi.scanner.backoff_ms": event.backoffMs,
|
|
80
|
+
"senpi.scanner.attempt": event.attempt,
|
|
81
|
+
}),
|
|
82
|
+
};
|
|
83
|
+
case "degraded":
|
|
84
|
+
return {
|
|
85
|
+
name: EVENT_NAME.scannerDegraded,
|
|
86
|
+
level: "warn",
|
|
87
|
+
body: `Scanner ${scannerName} degraded — ${event.reason}`,
|
|
88
|
+
attributes: eventAttrs({
|
|
89
|
+
...base,
|
|
90
|
+
"senpi.scanner.rapid_failures": event.rapidFailures,
|
|
91
|
+
}),
|
|
92
|
+
};
|
|
93
|
+
case "recovered":
|
|
94
|
+
return {
|
|
95
|
+
name: EVENT_NAME.scannerRecovered,
|
|
96
|
+
level: "info",
|
|
97
|
+
body: `Scanner ${scannerName} recovered to healthy`,
|
|
98
|
+
attributes: eventAttrs({ ...base }),
|
|
99
|
+
};
|
|
100
|
+
case "silence-killed":
|
|
101
|
+
return {
|
|
102
|
+
name: EVENT_NAME.scannerSilenceKilled,
|
|
103
|
+
level: "warn",
|
|
104
|
+
body: `Scanner ${scannerName} silent for ${event.silenceMs}ms — killed (pid ${event.pid})`,
|
|
105
|
+
attributes: eventAttrs({
|
|
106
|
+
...base,
|
|
107
|
+
"senpi.supervisor.run_id": event.runId,
|
|
108
|
+
"senpi.scanner.pid": event.pid,
|
|
109
|
+
"senpi.scanner.silence_ms": event.silenceMs,
|
|
110
|
+
}),
|
|
111
|
+
};
|
|
112
|
+
case "swept-orphan":
|
|
113
|
+
return {
|
|
114
|
+
name: EVENT_NAME.scannerOrphanSwept,
|
|
115
|
+
level: "info",
|
|
116
|
+
body: `Swept orphaned scanner process (pid ${event.pid})`,
|
|
117
|
+
attributes: eventAttrs({
|
|
118
|
+
...base,
|
|
119
|
+
"senpi.scanner.pid": event.pid,
|
|
120
|
+
}),
|
|
121
|
+
};
|
|
122
|
+
case "stopped":
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Record the metric side of a lifecycle event: the `scanner.restarts` counter on each restart, and
|
|
128
|
+
* the `scanner.degraded` up/down gauge across the crash-loop edge (+1 on `degraded`, −1 on
|
|
129
|
+
* `recovered`). A teardown while degraded never emits `recovered`, so `stopped` carries `wasDegraded`
|
|
130
|
+
* and balances the gauge with its own −1 — otherwise a partial teardown (hot-uninstall, single-scanner
|
|
131
|
+
* stop) would leak a permanent +1 for that name+wallet. Dimensioned by the stable scanner name +
|
|
132
|
+
* wallet, not the ephemeral id. Other transitions carry no metric.
|
|
133
|
+
*/
|
|
134
|
+
export function recordScannerLifecycleMetrics(event, ctx) {
|
|
135
|
+
const dims = {
|
|
136
|
+
scannerName: ctx.scannerName,
|
|
137
|
+
strategyAddress: ctx.wallet ? ctx.wallet.toLowerCase() : undefined,
|
|
138
|
+
};
|
|
139
|
+
switch (event.type) {
|
|
140
|
+
case "restarting":
|
|
141
|
+
recordScannerRestart(dims);
|
|
142
|
+
break;
|
|
143
|
+
case "degraded":
|
|
144
|
+
recordScannerDegradedDelta(1, dims);
|
|
145
|
+
break;
|
|
146
|
+
case "recovered":
|
|
147
|
+
recordScannerDegradedDelta(-1, dims);
|
|
148
|
+
break;
|
|
149
|
+
case "stopped":
|
|
150
|
+
// Balance the gauge on a teardown that happened while degraded (no `recovered` was emitted).
|
|
151
|
+
if (event.wasDegraded)
|
|
152
|
+
recordScannerDegradedDelta(-1, dims);
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Build the `scanner.launch_failed` event (warn) for a launch/remint failure, with the exception attached. */
|
|
157
|
+
export function buildScannerLaunchFailedEvent(failure) {
|
|
158
|
+
const verb = failure.phase === "remint" ? "failed to re-mint on relaunch" : "failed to wire up";
|
|
159
|
+
return {
|
|
160
|
+
name: EVENT_NAME.scannerLaunchFailed,
|
|
161
|
+
level: "warn",
|
|
162
|
+
body: `Scanner ${failure.scannerName} ${verb}`,
|
|
163
|
+
attributes: eventAttrs({
|
|
164
|
+
"senpi.scanner.name": failure.scannerName,
|
|
165
|
+
"senpi.scanner.launch_phase": failure.phase,
|
|
166
|
+
"senpi.strategy.address": failure.wallet ? failure.wallet.toLowerCase() : undefined,
|
|
167
|
+
"senpi.scanner.id": failure.scannerId,
|
|
168
|
+
"senpi.supervisor.id": failure.supervisorId,
|
|
169
|
+
}),
|
|
170
|
+
error: failure.error,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=supervisor-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor-events.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/supervisor-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/routes/signals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/routes/signals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAO7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAahE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7E,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtE;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,wBAAwB,GAC7B,IAAI,CAmON"}
|