@senpi/runtime 3.0.103 → 3.0.107
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 +7 -21
- package/dist/actions/action-events.d.ts.map +1 -1
- package/dist/actions/action-events.js +25 -56
- package/dist/actions/action-events.js.map +1 -1
- package/dist/actions/action-runtime-module.d.ts.map +1 -1
- package/dist/actions/action-runtime-module.js +1 -18
- package/dist/actions/action-runtime-module.js.map +1 -1
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +17 -89
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +2 -40
- package/dist/actions/event-derivation.d.ts.map +1 -1
- package/dist/actions/event-derivation.js +9 -189
- package/dist/actions/event-derivation.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts +33 -0
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +223 -170
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts +1 -2
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +15 -50
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/dsl/engine-client/event-mapping.d.ts.map +1 -1
- package/dist/dsl/engine-client/event-mapping.js +0 -15
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts +1 -16
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +0 -5
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts +0 -7
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +7 -49
- package/dist/dsl/events/handlers.js.map +1 -1
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +0 -7
- package/dist/dsl/monitor/create-monitor.js.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.d.ts +0 -2
- package/dist/dsl/monitor/dsl-failure-events.d.ts.map +1 -1
- package/dist/dsl/monitor/dsl-failure-events.js +1 -2
- package/dist/dsl/monitor/dsl-failure-events.js.map +1 -1
- package/dist/dsl/monitor/process-one-position.d.ts +0 -6
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +21 -55
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/health/types.d.ts +0 -6
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +4 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -245
- package/dist/index.js.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +6 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +25 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -1
- package/dist/runtime/create-runtime-context.d.ts.map +1 -1
- package/dist/runtime/create-runtime-context.js +5 -0
- package/dist/runtime/create-runtime-context.js.map +1 -1
- package/dist/runtime/domain-events.d.ts.map +1 -1
- package/dist/runtime/domain-events.js +0 -7
- package/dist/runtime/domain-events.js.map +1 -1
- package/dist/runtime/lifecycle-events.d.ts +1 -9
- package/dist/runtime/lifecycle-events.d.ts.map +1 -1
- package/dist/runtime/lifecycle-events.js +2 -11
- package/dist/runtime/lifecycle-events.js.map +1 -1
- package/dist/runtime/pending-opens-ledger.d.ts +93 -0
- package/dist/runtime/pending-opens-ledger.d.ts.map +1 -0
- package/dist/runtime/pending-opens-ledger.js +118 -0
- package/dist/runtime/pending-opens-ledger.js.map +1 -0
- package/dist/runtime/reconcile-run.d.ts +0 -2
- package/dist/runtime/reconcile-run.d.ts.map +1 -1
- package/dist/runtime/reconcile-run.js +1 -2
- package/dist/runtime/reconcile-run.js.map +1 -1
- package/dist/runtime/reconcile-state.d.ts +0 -8
- package/dist/runtime/reconcile-state.d.ts.map +1 -1
- package/dist/runtime/reconcile-state.js +1 -3
- package/dist/runtime/reconcile-state.js.map +1 -1
- package/dist/runtime/runtime.d.ts +5 -5
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +20 -44
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/strategy-registry.d.ts +1 -0
- package/dist/runtime/strategy-registry.d.ts.map +1 -1
- package/dist/runtime/strategy-registry.js +19 -0
- package/dist/runtime/strategy-registry.js.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.d.ts +0 -8
- package/dist/runtime/supervisor/long-running-supervisor.d.ts.map +1 -1
- package/dist/runtime/supervisor/long-running-supervisor.js +0 -1
- package/dist/runtime/supervisor/long-running-supervisor.js.map +1 -1
- package/dist/runtime/update-apply-deps.d.ts +6 -0
- package/dist/runtime/update-apply-deps.d.ts.map +1 -1
- package/dist/runtime/update-apply-deps.js +8 -19
- package/dist/runtime/update-apply-deps.js.map +1 -1
- package/dist/runtime-api/intake/intake-events.d.ts +3 -3
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-events.js +3 -21
- package/dist/runtime-api/intake/intake-events.js.map +1 -1
- package/dist/runtime-api/intake/intake-mount.d.ts +2 -0
- package/dist/runtime-api/intake/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +10 -57
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.d.ts +0 -11
- package/dist/runtime-api/intake/process-signal-post.d.ts.map +1 -1
- package/dist/runtime-api/intake/process-signal-post.js +8 -39
- package/dist/runtime-api/intake/process-signal-post.js.map +1 -1
- package/dist/runtime-api/intake/scaffold-error-router.d.ts +43 -0
- package/dist/runtime-api/intake/scaffold-error-router.d.ts.map +1 -0
- package/dist/runtime-api/intake/scaffold-error-router.js +63 -0
- package/dist/runtime-api/intake/scaffold-error-router.js.map +1 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +0 -12
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/types.d.ts +1 -22
- package/dist/runtime-api/intake/types.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +1 -7
- package/dist/runtime-api/routes/signals.js.map +1 -1
- package/dist/runtime-api/routes/signals.schema.d.ts +0 -1
- package/dist/runtime-api/routes/signals.schema.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.schema.js +0 -6
- package/dist/runtime-api/routes/signals.schema.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +0 -5
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +2 -30
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/external/scaffold/delivery.py +12 -79
- package/dist/scanners/external/scaffold/scaffold.py +9 -63
- package/dist/scanners/external-scanner-receiver.d.ts +0 -11
- package/dist/scanners/external-scanner-receiver.d.ts.map +1 -1
- package/dist/scanners/external-scanner-receiver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +0 -5
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +4 -12
- package/dist/senpi/client.js.map +1 -1
- package/dist/senpi/types.d.ts +0 -5
- package/dist/senpi/types.d.ts.map +1 -1
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +3 -12
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +3 -3
- package/dist/strategy/strategy-state.d.ts +26 -0
- package/dist/strategy/strategy-state.d.ts.map +1 -1
- package/dist/strategy/strategy-state.js +48 -20
- package/dist/strategy/strategy-state.js.map +1 -1
- package/dist/telemetry/event-builders.d.ts +6 -74
- package/dist/telemetry/event-builders.d.ts.map +1 -1
- package/dist/telemetry/event-builders.js +11 -108
- package/dist/telemetry/event-builders.js.map +1 -1
- package/dist/telemetry/event-store.d.ts +0 -6
- package/dist/telemetry/event-store.d.ts.map +1 -1
- package/dist/telemetry/event-store.js +6 -6
- package/dist/telemetry/event-store.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +2 -14
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +4 -19
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/telemetry/tracing.d.ts +0 -9
- package/dist/telemetry/tracing.d.ts.map +1 -1
- package/dist/telemetry/tracing.js +0 -36
- package/dist/telemetry/tracing.js.map +1 -1
- package/dist/types/dsl/index.d.ts +0 -11
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +9 -0
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +0 -9
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/types/strategy.d.ts +6 -0
- package/dist/types/strategy.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +0 -81
- package/dist/utils/event-catalog.d.ts.map +1 -1
- package/dist/utils/event-catalog.js +0 -1
- package/dist/utils/event-catalog.js.map +1 -1
- package/dist/utils/keyed-mutex.d.ts +1 -3
- package/dist/utils/keyed-mutex.d.ts.map +1 -1
- package/dist/utils/keyed-mutex.js +1 -3
- package/dist/utils/keyed-mutex.js.map +1 -1
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/dist/actions/skipped-signal-results.d.ts +0 -16
- package/dist/actions/skipped-signal-results.d.ts.map +0 -1
- package/dist/actions/skipped-signal-results.js +0 -47
- package/dist/actions/skipped-signal-results.js.map +0 -1
- package/dist/scanners/external/scaffold/ulid.py +0 -58
- package/dist/telemetry/live-telemetry.d.ts +0 -158
- package/dist/telemetry/live-telemetry.d.ts.map +0 -1
- package/dist/telemetry/live-telemetry.js +0 -581
- package/dist/telemetry/live-telemetry.js.map +0 -1
- package/dist/telemetry/scanner-stats.d.ts +0 -136
- package/dist/telemetry/scanner-stats.d.ts.map +0 -1
- package/dist/telemetry/scanner-stats.js +0 -304
- package/dist/telemetry/scanner-stats.js.map +0 -1
- package/dist/telemetry/strategy-topology.d.ts +0 -99
- package/dist/telemetry/strategy-topology.d.ts.map +0 -1
- package/dist/telemetry/strategy-topology.js +0 -93
- package/dist/telemetry/strategy-topology.js.map +0 -1
- package/dist/telemetry/telemetry-publisher.d.ts +0 -63
- package/dist/telemetry/telemetry-publisher.d.ts.map +0 -1
- package/dist/telemetry/telemetry-publisher.js +0 -229
- package/dist/telemetry/telemetry-publisher.js.map +0 -1
- package/dist/telemetry/timeline-buffer.d.ts +0 -95
- package/dist/telemetry/timeline-buffer.d.ts.map +0 -1
- package/dist/telemetry/timeline-buffer.js +0 -237
- package/dist/telemetry/timeline-buffer.js.map +0 -1
- package/dist/utils/ulid.d.ts +0 -9
- package/dist/utils/ulid.d.ts.map +0 -1
- package/dist/utils/ulid.js +0 -43
- package/dist/utils/ulid.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-apply-deps.js","sourceRoot":"","sources":["../../src/runtime/update-apply-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"update-apply-deps.js","sourceRoot":"","sources":["../../src/runtime/update-apply-deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
import { EVENT_NAME } from "../../utils/event-catalog.js";
|
|
15
15
|
import type { EmittableEvent } from "../../actions/event-derivation.js";
|
|
16
16
|
import type { PerSignalStatus } from "./types.js";
|
|
17
|
-
/** The
|
|
18
|
-
type SignalDispositionName = typeof EVENT_NAME.signalAccepted | typeof EVENT_NAME.signalRejected | typeof EVENT_NAME.signalExpired | typeof EVENT_NAME.signalSuperseded
|
|
17
|
+
/** The four per-signal disposition catalog names this bridge emits. */
|
|
18
|
+
type SignalDispositionName = typeof EVENT_NAME.signalAccepted | typeof EVENT_NAME.signalRejected | typeof EVENT_NAME.signalExpired | typeof EVENT_NAME.signalSuperseded;
|
|
19
19
|
/** The scanner identity the route pins onto every intake event. */
|
|
20
20
|
export interface IntakeEventContext {
|
|
21
21
|
/** The `scanner_id` from the POST body — present even when it resolves to no registry entry. */
|
|
@@ -26,7 +26,7 @@ export interface IntakeEventContext {
|
|
|
26
26
|
wallet?: string;
|
|
27
27
|
}
|
|
28
28
|
/** Map one per-signal disposition to its `signal.*` event-log record. */
|
|
29
|
-
export declare function buildSignalDispositionEvent(status: PerSignalStatus, asset: string, ctx: IntakeEventContext
|
|
29
|
+
export declare function buildSignalDispositionEvent(status: PerSignalStatus, asset: string, ctx: IntakeEventContext): EmittableEvent<SignalDispositionName>;
|
|
30
30
|
/**
|
|
31
31
|
* Build the request-level `signal.rejected` event — the whole POST was refused before any per-signal
|
|
32
32
|
* work (an unknown `scanner_id` or an oversized batch), so it carries a coded reason and no asset.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-events.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAA+C,MAAM,8BAA8B,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,uEAAuE;AACvE,KAAK,qBAAqB,GACtB,OAAO,UAAU,CAAC,cAAc,GAChC,OAAO,UAAU,CAAC,cAAc,GAChC,OAAO,UAAU,CAAC,aAAa,GAC/B,OAAO,UAAU,CAAC,gBAAgB,
|
|
1
|
+
{"version":3,"file":"intake-events.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAA+C,MAAM,8BAA8B,CAAC;AACvG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,uEAAuE;AACvE,KAAK,qBAAqB,GACtB,OAAO,UAAU,CAAC,cAAc,GAChC,OAAO,UAAU,CAAC,cAAc,GAChC,OAAO,UAAU,CAAC,aAAa,GAC/B,OAAO,UAAU,CAAC,gBAAgB,CAAC;AAEvC,mEAAmE;AACnE,MAAM,WAAW,kBAAkB;IACjC,gGAAgG;IAChG,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAqBD,yEAAyE;AACzE,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,kBAAkB,GACtB,cAAc,CAAC,qBAAqB,CAAC,CA+CvC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,kBAAkB,GACtB,cAAc,CAAC,OAAO,UAAU,CAAC,cAAc,CAAC,CAUlD;AAED,mGAAmG;AACnG,KAAK,iBAAiB,GAClB,OAAO,UAAU,CAAC,iBAAiB,GACnC,OAAO,UAAU,CAAC,mBAAmB,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,kBAAkB,GACtB,cAAc,CAAC,iBAAiB,CAAC,CAwCnC"}
|
|
@@ -26,11 +26,8 @@ function scannerLabel(ctx) {
|
|
|
26
26
|
return ctx.scannerName ?? ctx.scannerId;
|
|
27
27
|
}
|
|
28
28
|
/** Map one per-signal disposition to its `signal.*` event-log record. */
|
|
29
|
-
export function buildSignalDispositionEvent(status, asset, ctx
|
|
30
|
-
|
|
31
|
-
// scan's id, which is why it is read per signal and not per POST. Absent for a producer that
|
|
32
|
-
// stamps nothing.
|
|
33
|
-
const base = { ...baseAttrs(ctx), "senpi.tick.id": tickId };
|
|
29
|
+
export function buildSignalDispositionEvent(status, asset, ctx) {
|
|
30
|
+
const base = baseAttrs(ctx);
|
|
34
31
|
const label = scannerLabel(ctx);
|
|
35
32
|
switch (status.status) {
|
|
36
33
|
case "accepted":
|
|
@@ -75,18 +72,6 @@ export function buildSignalDispositionEvent(status, asset, ctx, tickId) {
|
|
|
75
72
|
"senpi.signal.asset": asset,
|
|
76
73
|
}),
|
|
77
74
|
};
|
|
78
|
-
case "busy":
|
|
79
|
-
// Retriable backpressure, not a decision: the runtime was mid-ingest for
|
|
80
|
-
// this scanner and no acceptance mark advanced — the producer re-delivers.
|
|
81
|
-
return {
|
|
82
|
-
name: EVENT_NAME.signalBusy,
|
|
83
|
-
level: "info",
|
|
84
|
-
body: `Signal busy (retriable): ${asset} from ${label}`,
|
|
85
|
-
attributes: eventAttrs({
|
|
86
|
-
...base,
|
|
87
|
-
"senpi.signal.asset": asset,
|
|
88
|
-
}),
|
|
89
|
-
};
|
|
90
75
|
}
|
|
91
76
|
}
|
|
92
77
|
/**
|
|
@@ -112,10 +97,7 @@ export function buildSignalRejectedEvent(reasonCode, ctx) {
|
|
|
112
97
|
* rides `redact`.
|
|
113
98
|
*/
|
|
114
99
|
export function buildScaffoldErrorEvent(error, ctx) {
|
|
115
|
-
|
|
116
|
-
// schema change to carry it. Absent for an older scaffold that sends the record without one.
|
|
117
|
-
const tickId = typeof error.tick_id === "string" && error.tick_id.length > 0 ? error.tick_id : undefined;
|
|
118
|
-
const base = { ...baseAttrs(ctx), "senpi.tick.id": tickId };
|
|
100
|
+
const base = baseAttrs(ctx);
|
|
119
101
|
const label = scannerLabel(ctx);
|
|
120
102
|
const message = typeof error.message === "string" ? error.message : undefined;
|
|
121
103
|
const isTimeout = error.type === "timeout";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-events.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAiB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"intake-events.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-events.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exports:
|
|
5
5
|
* buildIntakeMount(ctx, runtimeHandles, cfg) → { launcher, onAccepted, onScaffoldError }
|
|
6
|
+
* (onScaffoldError comes from scaffold-error-router.ts — the same closure the
|
|
7
|
+
* production /errors route installs, not a copy of it)
|
|
6
8
|
* selectScanners(config) → ExternalScannerSpec[]
|
|
7
9
|
*
|
|
8
10
|
* This module is the unit-testable seam that index.ts calls; it keeps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-mount.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-mount.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"intake-mount.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-mount.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Exports:
|
|
5
5
|
* buildIntakeMount(ctx, runtimeHandles, cfg) → { launcher, onAccepted, onScaffoldError }
|
|
6
|
+
* (onScaffoldError comes from scaffold-error-router.ts — the same closure the
|
|
7
|
+
* production /errors route installs, not a copy of it)
|
|
6
8
|
* selectScanners(config) → ExternalScannerSpec[]
|
|
7
9
|
*
|
|
8
10
|
* This module is the unit-testable seam that index.ts calls; it keeps
|
|
@@ -14,26 +16,7 @@ import { join } from "node:path";
|
|
|
14
16
|
import { ingestDispatchMutex, ingestDispatchKey } from "./ingest-mutex.js";
|
|
15
17
|
import { ScannerLauncher } from "./scanner-launcher.js";
|
|
16
18
|
import { sweepOrphans } from "../../runtime/supervisor/orphan-sweep.js";
|
|
17
|
-
import {
|
|
18
|
-
// ── scaffold tick failure types ──────────────────────────────────────────────
|
|
19
|
-
/**
|
|
20
|
-
* The `/errors` body types that mean "this tick failed" and are recorded as an
|
|
21
|
-
* error-outcome run. Everything else the scaffold POSTs (`candidate_rejected`) is a
|
|
22
|
-
* per-candidate note on an otherwise-OK tick and must not degrade the scanner.
|
|
23
|
-
*
|
|
24
|
-
* - `error` / `timeout` / `state_persist_failed` — scan() threw, overran, or its
|
|
25
|
-
* state could not be committed (scaffold.py).
|
|
26
|
-
* - `mcp_error` — scan() returned cleanly but EVERY MCP tool call failed and it
|
|
27
|
-
* produced no candidates: the scaffold's own tally reclassifies the tick, because
|
|
28
|
-
* authored code swallows the exception and would otherwise report `ok` forever
|
|
29
|
-
* while blind. The body carries `error_type` (dominant) and `error_count`.
|
|
30
|
-
*/
|
|
31
|
-
const TICK_FAILURE_TYPES = new Set([
|
|
32
|
-
"error",
|
|
33
|
-
"timeout",
|
|
34
|
-
"state_persist_failed",
|
|
35
|
-
"mcp_error",
|
|
36
|
-
]);
|
|
19
|
+
import { buildScaffoldErrorRouter } from "./scaffold-error-router.js";
|
|
37
20
|
// ── intake URL ───────────────────────────────────────────────────────────────
|
|
38
21
|
/**
|
|
39
22
|
* The base URL the scaffold child POSTs to. The child always reaches the
|
|
@@ -62,7 +45,7 @@ export function intakeUrlFor(host, port) {
|
|
|
62
45
|
export function buildIntakeMount(ctx, runtimeHandles, cfg) {
|
|
63
46
|
const { logger } = cfg;
|
|
64
47
|
// The production onAccepted closure — maps an intake signal → ingest request.
|
|
65
|
-
const onAccepted = (signal,
|
|
48
|
+
const onAccepted = (signal, _correlationId, scannerId) => {
|
|
66
49
|
const entry = ctx.registry.resolve(scannerId);
|
|
67
50
|
if (!entry)
|
|
68
51
|
return; // zombie fence — should not happen post-accept
|
|
@@ -81,12 +64,6 @@ export function buildIntakeMount(ctx, runtimeHandles, cfg) {
|
|
|
81
64
|
// signal's sizing is lost ("no margin source resolved").
|
|
82
65
|
...(signal.marginPct !== undefined && { marginPct: signal.marginPct }),
|
|
83
66
|
...(signal.leverage !== undefined && { leverage: signal.leverage }),
|
|
84
|
-
// The producing scan and the admitting acceptance row. Spread rather than
|
|
85
|
-
// assigned so a signal without a tick id yields no key at all — an
|
|
86
|
-
// undefined-valued key would ride on to an event attribute that exists and
|
|
87
|
-
// says nothing.
|
|
88
|
-
...(signal.tick_id !== undefined && { tick_id: signal.tick_id }),
|
|
89
|
-
...(correlationId !== undefined && { correlationId }),
|
|
90
67
|
// Intentionally omitted: score (intake has none, defaults to 0 downstream),
|
|
91
68
|
// valid_until/produced_at (acceptance-pipeline concerns, not ingest fields),
|
|
92
69
|
// signals[] (single-signal shape: data, not signals[]).
|
|
@@ -104,37 +81,13 @@ export function buildIntakeMount(ctx, runtimeHandles, cfg) {
|
|
|
104
81
|
.then(() => {
|
|
105
82
|
logger.info(`[intake] ingest ok signal_id=${signal.signal_id} scanner=${entry.scannerName} asset=${signal.asset} scanner_id=${scannerId}`);
|
|
106
83
|
})
|
|
107
|
-
.catch((err) => {
|
|
108
|
-
// Post-acceptance failure: the scaffold journaled this signal delivered
|
|
109
|
-
// and will NOT retry (the high-water-mark already advanced — a retry
|
|
110
|
-
// would double-trade). The one remaining silent-drop path: be loud.
|
|
111
|
-
logger.error(`[intake] ingest failed AFTER acceptance — signal dropped (signal_id=${signal.signal_id} scanner=${entry.scannerName} asset=${signal.asset})`, { scannerId, err });
|
|
112
|
-
recordSignalIntake({
|
|
113
|
-
scannerName: entry.scannerName,
|
|
114
|
-
disposition: "dropped_after_accept",
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
};
|
|
118
|
-
// The production onScaffoldError closure — the `/errors` counterpart of onAccepted.
|
|
119
|
-
// Instead of an ingest, it records the failed tick into scanner run telemetry so a
|
|
120
|
-
// scanner that fails every tick stops rendering "healthy". Filter: only tick-level
|
|
121
|
-
// failure types count. A `candidate_rejected` body is a per-candidate validation
|
|
122
|
-
// reject on an otherwise-OK tick (scaffold delivery.py), NOT a failed run, so it must
|
|
123
|
-
// NOT mark the run errored.
|
|
124
|
-
const onScaffoldError = (scannerId, error) => {
|
|
125
|
-
const type = typeof error.type === "string" ? error.type : undefined;
|
|
126
|
-
if (type === undefined || !TICK_FAILURE_TYPES.has(type)) {
|
|
127
|
-
return; // candidate_rejected (or any non-tick-level body) is not a failed run
|
|
128
|
-
}
|
|
129
|
-
const entry = ctx.registry.resolve(scannerId);
|
|
130
|
-
if (!entry)
|
|
131
|
-
return; // zombie fence — should not happen post-accept
|
|
132
|
-
const handle = runtimeHandles.get(entry.runtimeId);
|
|
133
|
-
if (!handle)
|
|
134
|
-
return;
|
|
135
|
-
handle.recordExternalScannerError(entry.scannerName, // configured NAME from registry, not scanner_id
|
|
136
|
-
error);
|
|
84
|
+
.catch((err) => logger.error("[intake] ingest failed", { scannerId, err }));
|
|
137
85
|
};
|
|
86
|
+
// The `/errors` counterpart of onAccepted. This is the SAME implementation the
|
|
87
|
+
// production route installs (index.ts wires it as the server-level `onError`) —
|
|
88
|
+
// shared, not mirrored, because the two hand-written copies drifted once already:
|
|
89
|
+
// `mcp_error` reached this list and never reached the live route.
|
|
90
|
+
const onScaffoldError = buildScaffoldErrorRouter(ctx, runtimeHandles);
|
|
138
91
|
// Build the launcher over the SHARED registry/record/liveness so the route
|
|
139
92
|
// and the launcher resolve against the same in-process Map.
|
|
140
93
|
const launcher = new ScannerLauncher({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intake-mount.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-mount.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"intake-mount.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/intake-mount.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,17 +28,6 @@ export interface ProcessSignalPostDeps {
|
|
|
28
28
|
mintCorrelationId: () => string;
|
|
29
29
|
updateLiveness: (scannerId: string, now: number) => void;
|
|
30
30
|
onAccepted: (signal: IntakeSignal, correlationId: string, scannerId: string) => void;
|
|
31
|
-
/**
|
|
32
|
-
* True when an ingest dispatch for this scanner's engine guard key is in
|
|
33
|
-
* flight or queued. Snapshotted ONCE at POST arrival (never re-probed per
|
|
34
|
-
* signal — a batch's own first dispatch must not mark its mates busy) and
|
|
35
|
-
* checked BEFORE any acceptance mark is written, so a busy signal can be
|
|
36
|
-
* retried by the producer without being deduped as superseded.
|
|
37
|
-
*/
|
|
38
|
-
isDispatchBusy?: (entry: {
|
|
39
|
-
runtimeId: string;
|
|
40
|
-
scannerName: string;
|
|
41
|
-
}) => boolean;
|
|
42
31
|
}
|
|
43
32
|
export type ProcessSignalPostResult = {
|
|
44
33
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-signal-post.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/process-signal-post.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"process-signal-post.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/process-signal-post.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7E,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACtF;AAED,MAAM,MAAM,uBAAuB,GAC/B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,GACxC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElC;;;GAGG;AACH;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAET;AAED;;;;;;;;;;;GAWG;AACH;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAE/C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,uBAAuB,CAAC,CA0BlC"}
|
|
@@ -67,20 +67,10 @@ export async function processSignalPost(body, deps) {
|
|
|
67
67
|
if (signals.length === 0) {
|
|
68
68
|
return { ok: true, signals: [] };
|
|
69
69
|
}
|
|
70
|
-
// Dispatch-seam busyness is a POST-ARRIVAL snapshot, taken once for the
|
|
71
|
-
// whole batch. Probing per signal would starve multi-signal batches: the
|
|
72
|
-
// first accepted signal's fire-and-forget dispatch registers the mutex key
|
|
73
|
-
// synchronously, so its own batch mates would read busy — and since the
|
|
74
|
-
// producer re-posts the same batch order next tick, the same asset would
|
|
75
|
-
// win forever. Free at arrival → the whole batch is
|
|
76
|
-
// accepted and the dispatches queue serially on the mutex, exactly as
|
|
77
|
-
// before busy existed. Busy at arrival → a PREVIOUS post's ingest is still
|
|
78
|
-
// running: the genuine backpressure case, retriable for the whole batch.
|
|
79
|
-
const dispatchBusyAtArrival = deps.isDispatchBusy?.(entry) ?? false;
|
|
80
70
|
// Per-signal pipeline.
|
|
81
71
|
const results = [];
|
|
82
72
|
for (const signal of signals) {
|
|
83
|
-
const status = processOneSignal(signal, entry, deps, now
|
|
73
|
+
const status = processOneSignal(signal, entry, deps, now);
|
|
84
74
|
results.push(status);
|
|
85
75
|
}
|
|
86
76
|
return { ok: true, signals: results };
|
|
@@ -89,30 +79,20 @@ export async function processSignalPost(body, deps) {
|
|
|
89
79
|
* Process one signal through the acceptance pipeline.
|
|
90
80
|
* Each step is independent; errors become rejected statuses, not thrown.
|
|
91
81
|
*/
|
|
92
|
-
function processOneSignal(signal, entry, deps, now
|
|
82
|
+
function processOneSignal(signal, entry, deps, now) {
|
|
93
83
|
// The acceptance high-water-mark is keyed by the scanner's STABLE identity
|
|
94
84
|
// (runtime + scanner name), NOT the ephemeral scanner_id. A relaunch mints a
|
|
95
85
|
// new scanner_id; keying on it would reset the high-water-mark and let a
|
|
96
86
|
// replayed/already-accepted signal be accepted again under the new id.
|
|
97
87
|
const acceptanceKey = acceptanceKeyFor(entry);
|
|
98
|
-
// Echo the wire signal_id on EVERY status: the scaffold journal matches
|
|
99
|
-
// outcomes by signal_id (never by array position), so an un-echoed status
|
|
100
|
-
// is unmatchable — the entry stays pending and retries until expiry.
|
|
101
|
-
// Usable is the same trimmed test isWellFormed applies — an id the pipeline
|
|
102
|
-
// rejects as no-identity is never echoed back as one (a bogus key could
|
|
103
|
-
// match the wrong journal entry). The echoed VALUE stays verbatim: trimming
|
|
104
|
-
// decides usability only, a padded id is the producer's journal key as-is.
|
|
105
|
-
const echo = typeof signal.signal_id === "string" && signal.signal_id.trim().length > 0
|
|
106
|
-
? { signal_id: signal.signal_id }
|
|
107
|
-
: {};
|
|
108
88
|
// Step 5: Well-formed?
|
|
109
89
|
const wellFormed = isWellFormed(signal, now);
|
|
110
90
|
if (!wellFormed.ok) {
|
|
111
|
-
return {
|
|
91
|
+
return { status: "rejected", reason: wellFormed.reason };
|
|
112
92
|
}
|
|
113
93
|
// Step 6: Still valid in time? (Check this BEFORE the superseded checks below.)
|
|
114
94
|
if (now >= signal.valid_until) {
|
|
115
|
-
return {
|
|
95
|
+
return { status: "expired" };
|
|
116
96
|
}
|
|
117
97
|
// Step 6b: signal_id dedup — the ADDITIVE layer (sits ALONGSIDE the high-water
|
|
118
98
|
// mark below, never replaces it). If this exact producer id was already
|
|
@@ -122,13 +102,13 @@ function processOneSignal(signal, entry, deps, now, dispatchBusyAtArrival) {
|
|
|
122
102
|
// mark and double-trade. A FRESH signal_id (e.g. a recompute after state loss)
|
|
123
103
|
// is NOT caught here and correctly falls through to the high-water-mark.
|
|
124
104
|
if (deps.record.get(acceptanceKey, signalIdSlot(signal.signal_id)) !== undefined) {
|
|
125
|
-
return {
|
|
105
|
+
return { status: "superseded" };
|
|
126
106
|
}
|
|
127
107
|
// Step 7: Newer than the acceptance record? (the per-(scanner,asset,produced_at)
|
|
128
108
|
// high-water-mark — UNCHANGED, still fires under a fresh signal_id.)
|
|
129
109
|
const prev = deps.record.get(acceptanceKey, signal.asset);
|
|
130
110
|
if (prev !== undefined && signal.produced_at <= prev) {
|
|
131
|
-
return {
|
|
111
|
+
return { status: "superseded" };
|
|
132
112
|
}
|
|
133
113
|
// Step 8: Data matches config.fields?
|
|
134
114
|
try {
|
|
@@ -136,18 +116,7 @@ function processOneSignal(signal, entry, deps, now, dispatchBusyAtArrival) {
|
|
|
136
116
|
}
|
|
137
117
|
catch (err) {
|
|
138
118
|
const message = err instanceof ExternalScannerIngestError ? err.message : String(err);
|
|
139
|
-
return {
|
|
140
|
-
}
|
|
141
|
-
// Step 8b: was the dispatch seam busy when this POST ARRIVED? (Snapshot —
|
|
142
|
-
// see processSignalPost; a per-signal probe would starve batch mates.)
|
|
143
|
-
// Return RETRIABLE busy WITHOUT advancing the high-water-mark or the
|
|
144
|
-
// signal_id slot: the scaffold journal keeps the entry pending and
|
|
145
|
-
// re-delivers next tick, and because no mark advanced the retry is
|
|
146
|
-
// re-evaluated fresh instead of deduped as superseded. (Advancing the mark
|
|
147
|
-
// here would convert every collision into a permanent drop — the fleet-wide
|
|
148
|
-
// accepted-then-dropped class this exists to fix.)
|
|
149
|
-
if (dispatchBusyAtArrival) {
|
|
150
|
-
return { ...echo, status: "busy" };
|
|
119
|
+
return { status: "rejected", reason: message };
|
|
151
120
|
}
|
|
152
121
|
// Step 9: Accepted. Persist-before-act: advance the
|
|
153
122
|
// high-water-mark FIRST, then dispatch the trade. record.set() can throw on a
|
|
@@ -179,7 +148,7 @@ function processOneSignal(signal, entry, deps, now, dispatchBusyAtArrival) {
|
|
|
179
148
|
// own expiry (step 6b only existence-checks it, never compares the value).
|
|
180
149
|
deps.record.set(acceptanceKey, signalIdSlot(signal.signal_id), signal.valid_until);
|
|
181
150
|
deps.onAccepted(signal, correlationId, entry.scannerId);
|
|
182
|
-
return {
|
|
151
|
+
return { status: "accepted", correlationId };
|
|
183
152
|
}
|
|
184
153
|
/**
|
|
185
154
|
* Check if a signal is well-formed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-signal-post.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/process-signal-post.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"process-signal-post.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/process-signal-post.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/errors` route's `onError` — ONE implementation, used by both call sites.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* TICK_FAILURE_TYPES — the body types that mean "tick failed"
|
|
6
|
+
* buildScaffoldErrorRouter(ctx, runtimeHandles) → (scannerId, error) => void
|
|
7
|
+
*
|
|
8
|
+
* WHY THIS MODULE EXISTS: this routing decision used to be written twice — once
|
|
9
|
+
* as `buildIntakeMount`'s `onScaffoldError` (which the only production caller
|
|
10
|
+
* destructures away, so it ran in tests only) and once hand-copied into a closure
|
|
11
|
+
* inside `initCore`, which is what the route actually installs. The copies drifted
|
|
12
|
+
* the moment `mcp_error` was added to the list: the tested one counted it, the
|
|
13
|
+
* live one dropped it, and the failure was self-concealing because the signal that
|
|
14
|
+
* would have surfaced it IS the signal that was broken. Both sites now call this.
|
|
15
|
+
*/
|
|
16
|
+
import type { RuntimeHandle } from "../../runtime/run.js";
|
|
17
|
+
import type { IntakeContext } from "./intake-context.js";
|
|
18
|
+
/**
|
|
19
|
+
* The `/errors` body types that mean "this tick failed" and are recorded as an
|
|
20
|
+
* error-outcome run. Everything else the scaffold POSTs (`candidate_rejected`) is a
|
|
21
|
+
* per-candidate note on an otherwise-OK tick and must not degrade the scanner.
|
|
22
|
+
*
|
|
23
|
+
* - `error` / `timeout` / `state_persist_failed` — scan() threw, overran, or its
|
|
24
|
+
* state could not be committed (scaffold.py).
|
|
25
|
+
* - `mcp_error` — an otherwise-`ok` tick in which one or more MCP tool calls failed
|
|
26
|
+
* AND scan() produced no candidates (`scaffold.py:_classify_mcp_errors`): the
|
|
27
|
+
* scaffold's own tally reclassifies the tick, because authored code swallows the
|
|
28
|
+
* exception and would otherwise report `ok` forever while blind. MCP errors WITH
|
|
29
|
+
* candidates stay `ok` — a partial read still produced work. The body carries
|
|
30
|
+
* `error_type` (dominant) and `error_count`.
|
|
31
|
+
*/
|
|
32
|
+
export declare const TICK_FAILURE_TYPES: ReadonlySet<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Builds the `/errors` counterpart of `onAccepted`. Instead of an ingest it records
|
|
35
|
+
* the failed tick into the owning runtime's scanner telemetry, so a scanner that
|
|
36
|
+
* fails every tick stops rendering "healthy" — `consecutiveErrorCount` and
|
|
37
|
+
* `lastRunStatus` move, and `scanner.runs{outcome=error}` becomes a real series.
|
|
38
|
+
*
|
|
39
|
+
* Resolves against the SHARED IntakeContext registry, so the route and the launcher
|
|
40
|
+
* see the same in-process Map.
|
|
41
|
+
*/
|
|
42
|
+
export declare function buildScaffoldErrorRouter(ctx: IntakeContext, runtimeHandles: Map<string, RuntimeHandle>): (scannerId: string, error: Record<string, unknown>) => void;
|
|
43
|
+
//# sourceMappingURL=scaffold-error-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-error-router.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/scaffold-error-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,kBAAkB,EAAE,WAAW,CAAC,MAAM,CAKjD,CAAC;AAIH;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,aAAa,EAClB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GACzC,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAe7D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `/errors` route's `onError` — ONE implementation, used by both call sites.
|
|
3
|
+
*
|
|
4
|
+
* Exports:
|
|
5
|
+
* TICK_FAILURE_TYPES — the body types that mean "tick failed"
|
|
6
|
+
* buildScaffoldErrorRouter(ctx, runtimeHandles) → (scannerId, error) => void
|
|
7
|
+
*
|
|
8
|
+
* WHY THIS MODULE EXISTS: this routing decision used to be written twice — once
|
|
9
|
+
* as `buildIntakeMount`'s `onScaffoldError` (which the only production caller
|
|
10
|
+
* destructures away, so it ran in tests only) and once hand-copied into a closure
|
|
11
|
+
* inside `initCore`, which is what the route actually installs. The copies drifted
|
|
12
|
+
* the moment `mcp_error` was added to the list: the tested one counted it, the
|
|
13
|
+
* live one dropped it, and the failure was self-concealing because the signal that
|
|
14
|
+
* would have surfaced it IS the signal that was broken. Both sites now call this.
|
|
15
|
+
*/
|
|
16
|
+
// ── scaffold tick failure types ──────────────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* The `/errors` body types that mean "this tick failed" and are recorded as an
|
|
19
|
+
* error-outcome run. Everything else the scaffold POSTs (`candidate_rejected`) is a
|
|
20
|
+
* per-candidate note on an otherwise-OK tick and must not degrade the scanner.
|
|
21
|
+
*
|
|
22
|
+
* - `error` / `timeout` / `state_persist_failed` — scan() threw, overran, or its
|
|
23
|
+
* state could not be committed (scaffold.py).
|
|
24
|
+
* - `mcp_error` — an otherwise-`ok` tick in which one or more MCP tool calls failed
|
|
25
|
+
* AND scan() produced no candidates (`scaffold.py:_classify_mcp_errors`): the
|
|
26
|
+
* scaffold's own tally reclassifies the tick, because authored code swallows the
|
|
27
|
+
* exception and would otherwise report `ok` forever while blind. MCP errors WITH
|
|
28
|
+
* candidates stay `ok` — a partial read still produced work. The body carries
|
|
29
|
+
* `error_type` (dominant) and `error_count`.
|
|
30
|
+
*/
|
|
31
|
+
export const TICK_FAILURE_TYPES = new Set([
|
|
32
|
+
"error",
|
|
33
|
+
"timeout",
|
|
34
|
+
"state_persist_failed",
|
|
35
|
+
"mcp_error",
|
|
36
|
+
]);
|
|
37
|
+
// ── buildScaffoldErrorRouter ─────────────────────────────────────────────────
|
|
38
|
+
/**
|
|
39
|
+
* Builds the `/errors` counterpart of `onAccepted`. Instead of an ingest it records
|
|
40
|
+
* the failed tick into the owning runtime's scanner telemetry, so a scanner that
|
|
41
|
+
* fails every tick stops rendering "healthy" — `consecutiveErrorCount` and
|
|
42
|
+
* `lastRunStatus` move, and `scanner.runs{outcome=error}` becomes a real series.
|
|
43
|
+
*
|
|
44
|
+
* Resolves against the SHARED IntakeContext registry, so the route and the launcher
|
|
45
|
+
* see the same in-process Map.
|
|
46
|
+
*/
|
|
47
|
+
export function buildScaffoldErrorRouter(ctx, runtimeHandles) {
|
|
48
|
+
return (scannerId, error) => {
|
|
49
|
+
const type = typeof error.type === "string" ? error.type : undefined;
|
|
50
|
+
if (type === undefined || !TICK_FAILURE_TYPES.has(type)) {
|
|
51
|
+
return; // candidate_rejected (or any non-tick-level body) is not a failed run
|
|
52
|
+
}
|
|
53
|
+
const entry = ctx.registry.resolve(scannerId);
|
|
54
|
+
if (!entry)
|
|
55
|
+
return; // zombie fence — should not happen post-accept
|
|
56
|
+
const handle = runtimeHandles.get(entry.runtimeId);
|
|
57
|
+
if (!handle)
|
|
58
|
+
return;
|
|
59
|
+
handle.recordExternalScannerError(entry.scannerName, // configured NAME from registry, not scanner_id
|
|
60
|
+
error);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=scaffold-error-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-error-router.js","sourceRoot":"","sources":["../../../src/runtime-api/intake/scaffold-error-router.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,gFAAgF;AAEhF;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAwB,IAAI,GAAG,CAAC;IAC7D,OAAO;IACP,SAAS;IACT,sBAAsB;IACtB,WAAW;CACZ,CAAC,CAAC;AAEH,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAkB,EAClB,cAA0C;IAE1C,OAAO,CAAC,SAAiB,EAAE,KAA8B,EAAQ,EAAE;QACjE,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,sEAAsE;QAChF,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO,CAAC,+CAA+C;QACnE,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,CAAC,0BAA0B,CAC/B,KAAK,CAAC,WAAW,EAAE,gDAAgD;QACnE,KAAgE,CACjE,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner-launcher.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scanner-launcher.d.ts","sourceRoot":"","sources":["../../../src/runtime-api/intake/scanner-launcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,17 +129,6 @@ export class ScannerLauncher {
|
|
|
129
129
|
? `${scaffoldPackageDir}:${existingPythonPath}`
|
|
130
130
|
: scaffoldPackageDir;
|
|
131
131
|
const maxSilenceMs = Math.max(scanner.intervalSeconds * 2, 30) * 1000;
|
|
132
|
-
// Identity stamped on forwarded scaffold lines, which are logged outside the
|
|
133
|
-
// async tracking context that normally supplies it. One runtime supervises
|
|
134
|
-
// several scanners on one wallet, so the scanner name is what separates them —
|
|
135
|
-
// the NAME, not the id, because the id is re-minted on relaunch. The address is
|
|
136
|
-
// lowercased to match the join key and omitted (never "") when absent.
|
|
137
|
-
const logAttributes = {
|
|
138
|
-
"senpi.scanner.name": scanner.name,
|
|
139
|
-
};
|
|
140
|
-
if (wallet) {
|
|
141
|
-
logAttributes["senpi.strategy.address"] = wallet.toLowerCase();
|
|
142
|
-
}
|
|
143
132
|
const spec = {
|
|
144
133
|
command: pythonBin,
|
|
145
134
|
args: ["-m", "scaffold", cfgPath],
|
|
@@ -156,7 +145,6 @@ export class ScannerLauncher {
|
|
|
156
145
|
initialDelayMs: i * 250,
|
|
157
146
|
lastAliveAt: () => liveness.lastAliveAt(idHolder.value),
|
|
158
147
|
maxSilenceMs,
|
|
159
|
-
logAttributes,
|
|
160
148
|
...supervisorOptions,
|
|
161
149
|
};
|
|
162
150
|
// 5. Construct supervisor (NOT started yet — start() calls supervisor.start()).
|