@senpi/runtime 3.0.6-dev.runtime-phase-2.20260630134451 → 3.0.6-dev.runtime-phase-2.20260630134536

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 (141) hide show
  1. package/dist/actions/action-events.d.ts.map +1 -1
  2. package/dist/actions/action-events.js +39 -5
  3. package/dist/actions/action-events.js.map +1 -1
  4. package/dist/actions/event-derivation.d.ts +2 -0
  5. package/dist/actions/event-derivation.d.ts.map +1 -1
  6. package/dist/actions/event-derivation.js +2 -0
  7. package/dist/actions/event-derivation.js.map +1 -1
  8. package/dist/cli/guide-commands.d.ts.map +1 -1
  9. package/dist/cli/guide-commands.js +61 -0
  10. package/dist/cli/guide-commands.js.map +1 -1
  11. package/dist/cli/senpi-commands.d.ts +14 -0
  12. package/dist/cli/senpi-commands.d.ts.map +1 -1
  13. package/dist/cli/senpi-commands.js +386 -2
  14. package/dist/cli/senpi-commands.js.map +1 -1
  15. package/dist/dsl/events/initial-state.d.ts.map +1 -1
  16. package/dist/dsl/events/initial-state.js +1 -0
  17. package/dist/dsl/events/initial-state.js.map +1 -1
  18. package/dist/dsl/monitor/dsl-failure-events.d.ts +42 -0
  19. package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -0
  20. package/dist/dsl/monitor/dsl-failure-events.js +73 -0
  21. package/dist/dsl/monitor/dsl-failure-events.js.map +1 -0
  22. package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
  23. package/dist/dsl/monitor/process-one-position.js +46 -37
  24. package/dist/dsl/monitor/process-one-position.js.map +1 -1
  25. package/dist/dsl/plugin/index.d.ts.map +1 -1
  26. package/dist/dsl/plugin/index.js +6 -0
  27. package/dist/dsl/plugin/index.js.map +1 -1
  28. package/dist/health/types.d.ts +14 -0
  29. package/dist/health/types.d.ts.map +1 -1
  30. package/dist/health/types.js.map +1 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +220 -7
  33. package/dist/index.js.map +1 -1
  34. package/dist/risk/risk-audit-log.d.ts +7 -0
  35. package/dist/risk/risk-audit-log.d.ts.map +1 -1
  36. package/dist/risk/risk-audit-log.js +48 -1
  37. package/dist/risk/risk-audit-log.js.map +1 -1
  38. package/dist/runtime/lifecycle-events.d.ts +43 -0
  39. package/dist/runtime/lifecycle-events.d.ts.map +1 -1
  40. package/dist/runtime/lifecycle-events.js +61 -0
  41. package/dist/runtime/lifecycle-events.js.map +1 -1
  42. package/dist/runtime/runtime-schema.d.ts +63 -9
  43. package/dist/runtime/runtime-schema.d.ts.map +1 -1
  44. package/dist/runtime/runtime-schema.js +8 -1
  45. package/dist/runtime/runtime-schema.js.map +1 -1
  46. package/dist/runtime/runtime.d.ts +8 -0
  47. package/dist/runtime/runtime.d.ts.map +1 -1
  48. package/dist/runtime/runtime.js +104 -5
  49. package/dist/runtime/runtime.js.map +1 -1
  50. package/dist/runtime/supervisor/long-running-supervisor.d.ts +3 -0
  51. package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
  52. package/dist/runtime/supervisor/long-running-supervisor.js +27 -53
  53. package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
  54. package/dist/runtime-api/intake/intake-events.d.ts +44 -0
  55. package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
  56. package/dist/runtime-api/intake/intake-events.js +131 -0
  57. package/dist/runtime-api/intake/intake-events.js.map +1 -0
  58. package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
  59. package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
  60. package/dist/runtime-api/intake/scanner-launcher.js +58 -15
  61. package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
  62. package/dist/runtime-api/intake/scanner-registry.d.ts +3 -0
  63. package/dist/runtime-api/intake/scanner-registry.d.ts.map +1 -1
  64. package/dist/runtime-api/intake/scanner-registry.js +3 -0
  65. package/dist/runtime-api/intake/scanner-registry.js.map +1 -1
  66. package/dist/runtime-api/intake/supervisor-events.d.ts +61 -0
  67. package/dist/runtime-api/intake/supervisor-events.d.ts.map +1 -0
  68. package/dist/runtime-api/intake/supervisor-events.js +173 -0
  69. package/dist/runtime-api/intake/supervisor-events.js.map +1 -0
  70. package/dist/runtime-api/routes/signals.d.ts.map +1 -1
  71. package/dist/runtime-api/routes/signals.js +119 -27
  72. package/dist/runtime-api/routes/signals.js.map +1 -1
  73. package/dist/runtime-api/server.d.ts.map +1 -1
  74. package/dist/runtime-api/server.js +10 -1
  75. package/dist/runtime-api/server.js.map +1 -1
  76. package/dist/scanners/engine/engine.d.ts.map +1 -1
  77. package/dist/scanners/engine/engine.js +3 -0
  78. package/dist/scanners/engine/engine.js.map +1 -1
  79. package/dist/scanners/runtime-module.d.ts.map +1 -1
  80. package/dist/scanners/runtime-module.js +6 -0
  81. package/dist/scanners/runtime-module.js.map +1 -1
  82. package/dist/senpi/client.d.ts.map +1 -1
  83. package/dist/senpi/client.js +50 -5
  84. package/dist/senpi/client.js.map +1 -1
  85. package/dist/state/state-events.d.ts +13 -0
  86. package/dist/state/state-events.d.ts.map +1 -0
  87. package/dist/state/state-events.js +22 -0
  88. package/dist/state/state-events.js.map +1 -0
  89. package/dist/state/state-manager.d.ts.map +1 -1
  90. package/dist/state/state-manager.js +14 -1
  91. package/dist/state/state-manager.js.map +1 -1
  92. package/dist/telemetry/event-builders.d.ts +0 -2
  93. package/dist/telemetry/event-builders.d.ts.map +1 -1
  94. package/dist/telemetry/event-builders.js.map +1 -1
  95. package/dist/telemetry/event-store.d.ts +66 -0
  96. package/dist/telemetry/event-store.d.ts.map +1 -0
  97. package/dist/telemetry/event-store.js +202 -0
  98. package/dist/telemetry/event-store.js.map +1 -0
  99. package/dist/telemetry/identity.d.ts +10 -0
  100. package/dist/telemetry/identity.d.ts.map +1 -1
  101. package/dist/telemetry/identity.js +1 -0
  102. package/dist/telemetry/identity.js.map +1 -1
  103. package/dist/telemetry/metrics.d.ts +137 -15
  104. package/dist/telemetry/metrics.d.ts.map +1 -1
  105. package/dist/telemetry/metrics.js +357 -74
  106. package/dist/telemetry/metrics.js.map +1 -1
  107. package/dist/telemetry/otel-sdk.d.ts +1 -1
  108. package/dist/telemetry/otel-sdk.js +1 -1
  109. package/dist/telemetry/spans/gen-ai.d.ts +4 -0
  110. package/dist/telemetry/spans/gen-ai.d.ts.map +1 -1
  111. package/dist/telemetry/spans/gen-ai.js +9 -0
  112. package/dist/telemetry/spans/gen-ai.js.map +1 -1
  113. package/dist/telemetry/spans/redact-pii.d.ts.map +1 -1
  114. package/dist/telemetry/spans/redact-pii.js +4 -1
  115. package/dist/telemetry/spans/redact-pii.js.map +1 -1
  116. package/dist/telemetry/spans/span-hooks.d.ts +7 -0
  117. package/dist/telemetry/spans/span-hooks.d.ts.map +1 -1
  118. package/dist/telemetry/spans/span-hooks.js +179 -24
  119. package/dist/telemetry/spans/span-hooks.js.map +1 -1
  120. package/dist/telemetry/tool-plane.d.ts +31 -0
  121. package/dist/telemetry/tool-plane.d.ts.map +1 -0
  122. package/dist/telemetry/tool-plane.js +70 -0
  123. package/dist/telemetry/tool-plane.js.map +1 -0
  124. package/dist/telemetry/trace-identity.d.ts.map +1 -1
  125. package/dist/telemetry/trace-identity.js +3 -0
  126. package/dist/telemetry/trace-identity.js.map +1 -1
  127. package/dist/types/dsl/index.d.ts +6 -0
  128. package/dist/types/dsl/index.d.ts.map +1 -1
  129. package/dist/utils/event-catalog.d.ts +237 -0
  130. package/dist/utils/event-catalog.d.ts.map +1 -1
  131. package/dist/utils/event-catalog.js +51 -0
  132. package/dist/utils/event-catalog.js.map +1 -1
  133. package/dist/utils/logger.d.ts +5 -0
  134. package/dist/utils/logger.d.ts.map +1 -1
  135. package/dist/utils/logger.js +24 -22
  136. package/dist/utils/logger.js.map +1 -1
  137. package/dist/utils/wallet-address.d.ts +3 -0
  138. package/dist/utils/wallet-address.d.ts.map +1 -0
  139. package/dist/utils/wallet-address.js +17 -0
  140. package/dist/utils/wallet-address.js.map +1 -0
  141. package/package.json +1 -1
@@ -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;AAM7E,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;AAKhE,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,CAwJN"}
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"}
@@ -2,11 +2,15 @@
2
2
  * Fastify route wiring for the supervised intake /signals and /errors routes.
3
3
  * The route IS mounted via createApi when intakeContext is present.
4
4
  */
5
+ import { trace } from "@opentelemetry/api";
5
6
  import { Value } from "@sinclair/typebox/value";
6
7
  import { SignalsBodySchema, ErrorsBodySchema } from "./signals.schema.js";
7
8
  import { processSignalPost } from "../intake/process-signal-post.js";
8
9
  import { processErrorPost } from "../intake/process-error-post.js";
9
10
  import { noopLogger } from "../../utils/logger.js";
11
+ import { emitEvent } from "../../actions/event-derivation.js";
12
+ import { recordSignalIntake } from "../../telemetry/metrics.js";
13
+ import { buildSignalDispositionEvent, buildSignalRejectedEvent, buildScaffoldErrorEvent, } from "../intake/intake-events.js";
10
14
  /**
11
15
  * Register the supervised intake /signals and /errors routes.
12
16
  */
@@ -21,6 +25,46 @@ export function registerSignalsRoute(fastify, opts) {
21
25
  const onError = opts.onError ?? (() => { });
22
26
  const maxItems = opts.maxItemsPerSignalsRequest;
23
27
  const logger = opts.logger ?? noopLogger;
28
+ // Enrich the inbound HTTP server span (created by `http` auto-instrumentation) with the intake
29
+ // disposition. A rejected/expired/superseded signal returns a structured 2xx/4xx that auto-instr
30
+ // can't flag as notable, so without this the span is silent on what the boundary decided. Guarded:
31
+ // span enrichment must never break request handling. No new span is created.
32
+ const enrichIntakeSpan = (attrs) => {
33
+ // Metric plane: count the disposition at request grain, riding the same disposition the span
34
+ // enrichment carries (a heterogeneous batch counts once as `mixed`). Per-signal granularity lives
35
+ // on the `signal.*` event log; this counter is the alertable per-request trend.
36
+ const disposition = attrs["senpi.intake.disposition"];
37
+ if (disposition !== undefined) {
38
+ // Dimension by the stable registry name, not the ephemeral reminted id on the span — a
39
+ // crash-looping scanner rotates its id every relaunch and would explode counter cardinality.
40
+ recordSignalIntake({
41
+ scannerName: registry.resolve(attrs["senpi.scanner.id"] ?? "")?.scannerName ?? "unknown",
42
+ disposition,
43
+ reasonCode: attrs["senpi.intake.reason_code"],
44
+ });
45
+ }
46
+ try {
47
+ const span = trace.getActiveSpan();
48
+ if (!span)
49
+ return;
50
+ const defined = {};
51
+ for (const [k, v] of Object.entries(attrs))
52
+ if (v !== undefined)
53
+ defined[k] = v;
54
+ span.setAttributes(defined);
55
+ }
56
+ catch {
57
+ /* never break request handling */
58
+ }
59
+ };
60
+ // Best-effort scanner context from an unvalidated body: the envelope schema failed, but a usable
61
+ // scanner_id may still let the reject be grouped by scanner.
62
+ const bestEffortCtx = (body) => {
63
+ const id = body?.scanner_id;
64
+ const scannerId = typeof id === "string" && id ? id : "unknown";
65
+ const resolved = registry.resolve(scannerId);
66
+ return { scannerId, scannerName: resolved?.scannerName, wallet: resolved?.wallet };
67
+ };
24
68
  // POST /signals
25
69
  fastify.post("/signals", async (request, reply) => {
26
70
  if (!Value.Check(SignalsBodySchema, request.body)) {
@@ -32,17 +76,36 @@ export function registerSignalsRoute(fastify, opts) {
32
76
  .slice(0, 10)
33
77
  .map((e) => `path=${e.path} msg=${e.message} got=${JSON.stringify(e.value)?.slice(0, 120)}`);
34
78
  logger.warn(`[intake] INVALID_SHAPE scanner_id=${String(body?.scanner_id ?? "?")} errors=${JSON.stringify(errors)}`);
79
+ const ctx = bestEffortCtx(request.body);
80
+ emitEvent(logger, () => buildSignalRejectedEvent("invalid_shape", ctx));
81
+ enrichIntakeSpan({
82
+ "senpi.scanner.id": ctx.scannerId,
83
+ "senpi.intake.disposition": "rejected",
84
+ "senpi.intake.reason_code": "invalid_shape",
85
+ });
35
86
  return reply.status(400).send({
36
87
  success: false,
37
88
  error: { code: "INVALID_SHAPE", message: "Invalid request body" },
38
89
  });
39
90
  }
40
91
  const body = request.body;
92
+ // Resolve the scanner once so every disposition event carries its name + wallet.
93
+ const resolved = registry.resolve(body.scanner_id);
94
+ const ctx = {
95
+ scannerId: body.scanner_id,
96
+ scannerName: resolved?.scannerName,
97
+ wallet: resolved?.wallet,
98
+ };
41
99
  // Enforce the configured per-request item cap before any work — matches the
42
- // legacy address-routed route's 400 / INVALID_REQUEST. Checked before
43
- // scanner resolution so an oversized batch is a request-level reject.
100
+ // legacy address-routed route's 400 / INVALID_REQUEST. Checked before the
101
+ // per-signal pipeline so an oversized batch is one request-level reject.
44
102
  if (maxItems !== undefined && body.signals.length > maxItems) {
45
- logger.info(`[intake] error scanner_id=${body.scanner_id} reason=MAX_ITEMS_EXCEEDED`);
103
+ emitEvent(logger, () => buildSignalRejectedEvent("max_items_exceeded", ctx));
104
+ enrichIntakeSpan({
105
+ "senpi.scanner.id": ctx.scannerId,
106
+ "senpi.intake.disposition": "rejected",
107
+ "senpi.intake.reason_code": "max_items_exceeded",
108
+ });
46
109
  return reply.status(400).send({
47
110
  success: false,
48
111
  error: {
@@ -51,9 +114,6 @@ export function registerSignalsRoute(fastify, opts) {
51
114
  },
52
115
  });
53
116
  }
54
- // Resolve scannerName once for use in log lines.
55
- const resolved = registry.resolve(body.scanner_id);
56
- const scannerName = resolved?.scannerName ?? "";
57
117
  const result = await processSignalPost(body, {
58
118
  registry,
59
119
  record,
@@ -63,41 +123,47 @@ export function registerSignalsRoute(fastify, opts) {
63
123
  onAccepted,
64
124
  });
65
125
  if (!result.ok) {
66
- logger.info(`[intake] error scanner_id=${body.scanner_id} reason=${result.reason}`);
126
+ // The sole POST-level reject from processSignalPost is an unknown scanner_id (an oversized
127
+ // batch already returned above). Emit it as a coded request-level signal.rejected.
128
+ emitEvent(logger, () => buildSignalRejectedEvent("unknown_scanner", ctx));
129
+ enrichIntakeSpan({
130
+ "senpi.scanner.id": ctx.scannerId,
131
+ "senpi.intake.disposition": "rejected",
132
+ "senpi.intake.reason_code": "unknown_scanner",
133
+ });
67
134
  return reply.status(404).send({
68
135
  success: false,
69
136
  error: { code: result.reason, message: result.reason },
70
137
  });
71
138
  }
72
- // Empty signals list — no-op. A watch-only scanner POSTs empty every tick,
73
- // so log at debug to keep real per-signal outcomes from being drowned.
139
+ // Empty signals list — a no-op liveness ping (a watch-only scanner POSTs empty
140
+ // every tick), not a catalogued disposition. Log at debug so it doesn't drown
141
+ // the real per-signal outcome events emitted below.
74
142
  if (result.signals.length === 0) {
75
143
  logger.debug(`[intake] no-op scanner_id=${body.scanner_id}`);
144
+ enrichIntakeSpan({ "senpi.scanner.id": ctx.scannerId, "senpi.intake.disposition": "noop" });
76
145
  return reply.send({
77
146
  success: true,
78
147
  data: { signals: result.signals },
79
148
  });
80
149
  }
81
- // Per-signal outcome logging.
150
+ // One signal.* event per disposition — the pre-decision acceptance fact at the boundary.
82
151
  for (let i = 0; i < result.signals.length; i++) {
83
152
  const status = result.signals[i];
84
- const signal = body.signals[i];
85
- const asset = signal?.asset ?? "unknown";
86
- switch (status.status) {
87
- case "accepted":
88
- logger.info(`[intake] accepted asset=${asset} scanner=${scannerName} correlationId=${status.correlationId} scanner_id=${body.scanner_id}`);
89
- break;
90
- case "rejected":
91
- logger.info(`[intake] rejected asset=${asset} scanner_id=${body.scanner_id} reason=${status.reason}`);
92
- break;
93
- case "expired":
94
- logger.info(`[intake] expired asset=${asset} scanner_id=${body.scanner_id}`);
95
- break;
96
- case "superseded":
97
- logger.info(`[intake] superseded asset=${asset} scanner_id=${body.scanner_id}`);
98
- break;
99
- }
153
+ const asset = body.signals[i]?.asset ?? "unknown";
154
+ emitEvent(logger, () => buildSignalDispositionEvent(status, asset, ctx));
100
155
  }
156
+ // Summarize the batch onto the server span (signal-bearing POSTs are effectively single-signal):
157
+ // the disposition, plus the minted correlation id when exactly one was accepted.
158
+ const statuses = result.signals;
159
+ const acceptedIds = statuses.flatMap((s) => (s.status === "accepted" ? [s.correlationId] : []));
160
+ enrichIntakeSpan({
161
+ "senpi.scanner.id": ctx.scannerId,
162
+ "senpi.intake.disposition": statuses.every((s) => s.status === statuses[0].status)
163
+ ? statuses[0].status
164
+ : "mixed",
165
+ "senpi.signal.correlation_id": acceptedIds.length === 1 ? acceptedIds[0] : undefined,
166
+ });
101
167
  return reply.send({
102
168
  success: true,
103
169
  data: { signals: result.signals },
@@ -106,23 +172,49 @@ export function registerSignalsRoute(fastify, opts) {
106
172
  // POST /errors
107
173
  fastify.post("/errors", async (request, reply) => {
108
174
  if (!Value.Check(ErrorsBodySchema, request.body)) {
175
+ const ctx = bestEffortCtx(request.body);
176
+ emitEvent(logger, () => buildSignalRejectedEvent("invalid_shape", ctx));
177
+ enrichIntakeSpan({
178
+ "senpi.scanner.id": ctx.scannerId,
179
+ "senpi.intake.disposition": "rejected",
180
+ "senpi.intake.reason_code": "invalid_shape",
181
+ });
109
182
  return reply.status(400).send({
110
183
  success: false,
111
184
  error: { code: "INVALID_SHAPE", message: "Invalid request body" },
112
185
  });
113
186
  }
114
- const result = await processErrorPost(request.body, {
187
+ const body = request.body;
188
+ const result = await processErrorPost(body, {
115
189
  registry,
116
190
  now,
117
191
  updateLiveness,
118
192
  onError,
119
193
  });
120
194
  if (!result.ok) {
195
+ enrichIntakeSpan({
196
+ "senpi.scanner.id": body.scanner_id,
197
+ "senpi.intake.disposition": "rejected",
198
+ "senpi.intake.reason_code": "unknown_scanner",
199
+ });
121
200
  return reply.status(404).send({
122
201
  success: false,
123
202
  error: { code: result.reason, message: result.reason },
124
203
  });
125
204
  }
205
+ // A scanner tick that errored or timed out — it produced no signal this tick. The /errors
206
+ // boundary is otherwise untelemetered (onError is a no-op in production).
207
+ const resolved = registry.resolve(body.scanner_id);
208
+ const ctx = {
209
+ scannerId: body.scanner_id,
210
+ scannerName: resolved?.scannerName,
211
+ wallet: resolved?.wallet,
212
+ };
213
+ emitEvent(logger, () => buildScaffoldErrorEvent(body.error, ctx));
214
+ enrichIntakeSpan({
215
+ "senpi.scanner.id": body.scanner_id,
216
+ "senpi.intake.disposition": "scaffold_error",
217
+ });
126
218
  return reply.send({ success: true });
127
219
  });
128
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/runtime-api/routes/signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/runtime-api/routes/signals.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/runtime-api/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,SAAS,EAAE,SAAS,CAAC;IACrB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACvF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CA8E3D"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/runtime-api/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAKxD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC3C,4EAA4E;IAC5E,SAAS,EAAE,SAAS,CAAC;IACrB,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACvF;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IAC9C,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAqF3D"}
@@ -19,6 +19,8 @@ import { registerAuditRoute } from "./routes/audit.js";
19
19
  import { registerHealthRoute } from "./routes/health.js";
20
20
  import { registerStateRoute } from "./routes/state.js";
21
21
  import { createReadiness } from "./readiness.js";
22
+ import { emitEvent } from "../actions/event-derivation.js";
23
+ import { buildSignalRejectedEvent } from "./intake/intake-events.js";
22
24
  /**
23
25
  * Create and configure the Fastify HTTP server.
24
26
  *
@@ -58,13 +60,20 @@ export function createApi(deps) {
58
60
  });
59
61
  // Custom error handler — normalises Fastify validation / payload errors into
60
62
  // the senpi-stack envelope `{ success: false, error: { code, message } }`.
61
- fastify.setErrorHandler((error, _req, reply) => {
63
+ fastify.setErrorHandler((error, req, reply) => {
62
64
  // Fastify v5 types setErrorHandler with `unknown`; cast once for the handler.
63
65
  const err = error;
64
66
  const statusCode = err.statusCode;
65
67
  if (statusCode === 400 ||
66
68
  statusCode === 413 ||
67
69
  statusCode === 415) {
70
+ // A malformed-JSON / oversized / wrong-content-type body throws before the intake handler runs,
71
+ // so the envelope reject is otherwise untelemetered. Emit it at request grain (scanner unknown —
72
+ // the body never parsed), scoped to the intake routes. Strip any query string before matching.
73
+ const path = req.url.split("?")[0];
74
+ if (deps.intakeContext && (path === "/signals" || path === "/errors")) {
75
+ emitEvent(deps.logger, () => buildSignalRejectedEvent("invalid_request", { scannerId: "unknown" }));
76
+ }
68
77
  return reply.status(statusCode).send({
69
78
  success: false,
70
79
  error: {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/runtime-api/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,OAAiC,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAmDjD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,SAAS,CAAC,IAAmB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC5B,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IAEpC,MAAM,OAAO,GAAG,OAAO,CAAC;QACtB,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;QACzB,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,2DAA2D;QAClF,qBAAqB,EAAE,KAAK;QAC5B;;;;;WAKG;QACH,cAAc,EAAE,MAAM;KACvB,CAAC,CAAC;IAEH,6EAA6E;IAC7E,2EAA2E;IAC3E,OAAO,CAAC,eAAe,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QAC7C,8EAA8E;QAC9E,MAAM,GAAG,GAAG,KAAwC,CAAC;QACrD,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QAClC,IACE,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG;YAClB,UAAU,KAAK,GAAG,EAClB,CAAC;YACD,OAAO,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gBACnC,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,iBAAiB;oBACvB,OAAO,EAAE,GAAG,CAAC,OAAO;iBACrB;aACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE;YAC7D,GAAG;SACJ,CAAC,CAAC;QACH,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC5B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,aAAa;gBACnB,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;QACvB,oBAAoB,CAAC,OAAO,EAAE;YAC5B,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;YACrC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;YACjC,cAAc,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,aAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC;YACxE,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YACzC,yBAAyB,EAAE,IAAI,CAAC,SAAS,CAAC,yBAAyB;YACnE,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IAED,kBAAkB,CAAC,OAAO,EAAE;QAC1B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,mBAAmB,CAAC,OAAO,EAAE;QAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACnE,SAAS;QACT,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,QAAQ;KACT,CAAC,CAAC;IAEH,kBAAkB,CAAC,OAAO,EAAE;QAC1B,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/runtime-api/server.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/scanners/engine/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../../src/scanners/engine/engine.ts"],"names":[],"mappings":"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"}
@@ -205,6 +205,8 @@ export class ScannerEngine {
205
205
  const runId = randomUUID();
206
206
  try {
207
207
  span.setAttribute("senpi.run.id", runId);
208
+ // The scanner kind (signal type), so a trace shows which scanner ran, not just its instance id.
209
+ span.setAttribute("senpi.scanner.type", entry.scanner.definition.signalType);
208
210
  const id = this.resolveIdentity();
209
211
  if (id)
210
212
  await setTraceIdentityAttributes(id);
@@ -286,6 +288,7 @@ export class ScannerEngine {
286
288
  try {
287
289
  span.setAttribute("senpi.run.id", runId);
288
290
  span.setAttribute("senpi.scanner.id", request.scanner);
291
+ span.setAttribute("senpi.scanner.type", entry.scanner.definition.signalType);
289
292
  span.setAttribute("senpi.scanner.origin", "external");
290
293
  const id = this.resolveIdentity();
291
294
  if (id)