@senpi/runtime 3.0.6-dev.skill-manager-v2.20260629194505 → 3.0.9-dev.20260710204324
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 +67 -0
- package/dist/actions/action-events.d.ts.map +1 -0
- package/dist/actions/action-events.js +164 -0
- package/dist/actions/action-events.js.map +1 -0
- package/dist/actions/close-position/close-position.action.d.ts +1 -1
- package/dist/actions/close-position/close-position.action.d.ts.map +1 -1
- package/dist/actions/close-position/close-position.action.js +108 -86
- package/dist/actions/close-position/close-position.action.js.map +1 -1
- package/dist/actions/decision-engine.d.ts.map +1 -1
- package/dist/actions/decision-engine.js +40 -28
- package/dist/actions/decision-engine.js.map +1 -1
- package/dist/actions/event-derivation.d.ts +61 -0
- package/dist/actions/event-derivation.d.ts.map +1 -0
- package/dist/actions/event-derivation.js +180 -0
- package/dist/actions/event-derivation.js.map +1 -0
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts +5 -9
- package/dist/actions/llm-decision/anthropic-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/anthropic-llm-decision.js +6 -87
- package/dist/actions/llm-decision/anthropic-llm-decision.js.map +1 -1
- package/dist/actions/llm-decision/factory.d.ts +0 -6
- package/dist/actions/llm-decision/factory.d.ts.map +1 -1
- package/dist/actions/llm-decision/factory.js +0 -2
- package/dist/actions/llm-decision/factory.js.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.d.ts.map +1 -1
- package/dist/actions/llm-decision/openclaw-llm-decision.js +26 -7
- package/dist/actions/llm-decision/openclaw-llm-decision.js.map +1 -1
- package/dist/actions/open-position/open-position.action.d.ts +1 -1
- package/dist/actions/open-position/open-position.action.d.ts.map +1 -1
- package/dist/actions/open-position/open-position.action.js +282 -224
- package/dist/actions/open-position/open-position.action.js.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.d.ts.map +1 -1
- package/dist/actions/position-tracker/position-tracker.action.js +3 -6
- package/dist/actions/position-tracker/position-tracker.action.js.map +1 -1
- package/dist/cli/guide-commands.d.ts.map +1 -1
- package/dist/cli/guide-commands.js +61 -0
- package/dist/cli/guide-commands.js.map +1 -1
- package/dist/cli/senpi-commands.d.ts +14 -0
- package/dist/cli/senpi-commands.d.ts.map +1 -1
- package/dist/cli/senpi-commands.js +390 -2
- package/dist/cli/senpi-commands.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 -3
- package/dist/dsl/engine-client/event-mapping.js.map +1 -1
- package/dist/dsl/events/build-closed-event.d.ts.map +1 -1
- package/dist/dsl/events/build-closed-event.js +0 -1
- package/dist/dsl/events/build-closed-event.js.map +1 -1
- package/dist/dsl/events/handlers.d.ts.map +1 -1
- package/dist/dsl/events/handlers.js +2 -4
- package/dist/dsl/events/handlers.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/create-monitor.d.ts +3 -0
- package/dist/dsl/monitor/create-monitor.d.ts.map +1 -1
- package/dist/dsl/monitor/create-monitor.js +76 -58
- package/dist/dsl/monitor/create-monitor.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 +2 -1
- package/dist/dsl/monitor/process-one-position.d.ts.map +1 -1
- package/dist/dsl/monitor/process-one-position.js +130 -196
- package/dist/dsl/monitor/process-one-position.js.map +1 -1
- package/dist/dsl/plugin/index.d.ts +10 -0
- package/dist/dsl/plugin/index.d.ts.map +1 -1
- package/dist/dsl/plugin/index.js +48 -4
- package/dist/dsl/plugin/index.js.map +1 -1
- package/dist/dsl/plugin/options.d.ts +3 -0
- package/dist/dsl/plugin/options.d.ts.map +1 -1
- package/dist/health/types.d.ts +14 -0
- package/dist/health/types.d.ts.map +1 -1
- package/dist/health/types.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +264 -79
- package/dist/index.js.map +1 -1
- package/dist/risk/risk-audit-log.d.ts +7 -0
- package/dist/risk/risk-audit-log.d.ts.map +1 -1
- package/dist/risk/risk-audit-log.js +48 -1
- package/dist/risk/risk-audit-log.js.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts +2 -0
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.d.ts.map +1 -1
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js +24 -3
- package/dist/runtime/__tests__/helpers/runtime-gateway-harness.js.map +1 -1
- package/dist/runtime/auto-update/coordinator.js +2 -2
- package/dist/runtime/auto-update/coordinator.js.map +1 -1
- package/dist/runtime/create-actions.d.ts.map +1 -1
- package/dist/runtime/create-actions.js +40 -15
- package/dist/runtime/create-actions.js.map +1 -1
- package/dist/runtime/create-runtime-context.d.ts +1 -1
- package/dist/runtime/create-runtime-context.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.d.ts +2 -1
- package/dist/runtime/create-scanner-module.d.ts.map +1 -1
- package/dist/runtime/create-scanner-module.js +2 -1
- package/dist/runtime/create-scanner-module.js.map +1 -1
- package/dist/runtime/domain-events.d.ts +43 -0
- package/dist/runtime/domain-events.d.ts.map +1 -0
- package/dist/runtime/domain-events.js +181 -0
- package/dist/runtime/domain-events.js.map +1 -0
- package/dist/runtime/lifecycle-events.d.ts +86 -0
- package/dist/runtime/lifecycle-events.d.ts.map +1 -0
- package/dist/runtime/lifecycle-events.js +200 -0
- package/dist/runtime/lifecycle-events.js.map +1 -0
- package/dist/runtime/notifications.js +2 -2
- package/dist/runtime/notifications.js.map +1 -1
- package/dist/{tracking → runtime}/position-id-registry.d.ts +14 -1
- package/dist/runtime/position-id-registry.d.ts.map +1 -0
- package/dist/{tracking → runtime}/position-id-registry.js +20 -3
- package/dist/runtime/position-id-registry.js.map +1 -0
- package/dist/runtime/run.d.ts +2 -4
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runtime-schema.d.ts +276 -588
- package/dist/runtime/runtime-schema.d.ts.map +1 -1
- package/dist/runtime/runtime-schema.js +8 -28
- package/dist/runtime/runtime-schema.js.map +1 -1
- package/dist/runtime/runtime.d.ts +23 -9
- package/dist/runtime/runtime.d.ts.map +1 -1
- package/dist/runtime/runtime.js +276 -248
- package/dist/runtime/runtime.js.map +1 -1
- package/dist/runtime/strategy-lifecycle.d.ts.map +1 -1
- package/dist/runtime/strategy-lifecycle.js +13 -1
- package/dist/runtime/strategy-lifecycle.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/config.d.ts +2 -2
- package/dist/runtime-api/config.js +4 -4
- package/dist/runtime-api/config.js.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.d.ts +5 -3
- package/dist/runtime-api/handlers/ingest-signals.d.ts.map +1 -1
- package/dist/runtime-api/handlers/ingest-signals.js +14 -5
- package/dist/runtime-api/handlers/ingest-signals.js.map +1 -1
- package/dist/runtime-api/intake/ingest-mutex.d.ts +16 -0
- package/dist/runtime-api/intake/ingest-mutex.d.ts.map +1 -0
- package/dist/runtime-api/intake/ingest-mutex.js +18 -0
- package/dist/runtime-api/intake/ingest-mutex.js.map +1 -0
- 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/intake-mount.d.ts.map +1 -1
- package/dist/runtime-api/intake/intake-mount.js +8 -2
- package/dist/runtime-api/intake/intake-mount.js.map +1 -1
- 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/scanner-registry.d.ts +3 -0
- package/dist/runtime-api/intake/scanner-registry.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-registry.js +3 -0
- package/dist/runtime-api/intake/scanner-registry.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 +1 -1
- package/dist/runtime-api/routes/signals.d.ts.map +1 -1
- package/dist/runtime-api/routes/signals.js +121 -35
- 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/data-providers.d.ts +3 -0
- package/dist/scanners/engine/data-providers.d.ts.map +1 -1
- package/dist/scanners/engine/data-providers.js.map +1 -1
- package/dist/scanners/engine/engine.d.ts +18 -0
- package/dist/scanners/engine/engine.d.ts.map +1 -1
- package/dist/scanners/engine/engine.js +96 -2
- package/dist/scanners/engine/engine.js.map +1 -1
- package/dist/scanners/engine/input-resolver.d.ts.map +1 -1
- package/dist/scanners/engine/input-resolver.js +9 -7
- package/dist/scanners/engine/input-resolver.js.map +1 -1
- package/dist/scanners/runtime-module.d.ts +3 -0
- package/dist/scanners/runtime-module.d.ts.map +1 -1
- package/dist/scanners/runtime-module.js +7 -0
- package/dist/scanners/runtime-module.js.map +1 -1
- package/dist/senpi/client.d.ts +10 -0
- package/dist/senpi/client.d.ts.map +1 -1
- package/dist/senpi/client.js +113 -46
- package/dist/senpi/client.js.map +1 -1
- package/dist/skills-manager/bootstrap.d.ts.map +1 -1
- package/dist/skills-manager/bootstrap.js +22 -33
- package/dist/skills-manager/bootstrap.js.map +1 -1
- package/dist/skills-manager/clone-groups.d.ts +20 -0
- package/dist/skills-manager/clone-groups.d.ts.map +1 -0
- package/dist/skills-manager/clone-groups.js +45 -0
- package/dist/skills-manager/clone-groups.js.map +1 -0
- package/dist/skills-manager/coordinator.d.ts.map +1 -1
- package/dist/skills-manager/coordinator.js +111 -75
- package/dist/skills-manager/coordinator.js.map +1 -1
- package/dist/skills-manager/manifest.d.ts +24 -0
- package/dist/skills-manager/manifest.d.ts.map +1 -1
- package/dist/skills-manager/manifest.js +23 -10
- package/dist/skills-manager/manifest.js.map +1 -1
- package/dist/skills-manager/skills-manifest.json +12 -7
- package/dist/skills-manager/types.d.ts +12 -0
- package/dist/skills-manager/types.d.ts.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/attributes.d.ts +13 -0
- package/dist/telemetry/attributes.d.ts.map +1 -0
- package/dist/telemetry/attributes.js +22 -0
- package/dist/telemetry/attributes.js.map +1 -0
- package/dist/{tracking → telemetry}/context.d.ts +12 -5
- package/dist/telemetry/context.d.ts.map +1 -0
- package/dist/{tracking → telemetry}/context.js +4 -4
- package/dist/telemetry/context.js.map +1 -0
- package/dist/{recording/records.d.ts → telemetry/event-builders.d.ts} +145 -33
- package/dist/telemetry/event-builders.d.ts.map +1 -0
- package/dist/{recording/wiring/record-builders.js → telemetry/event-builders.js} +94 -40
- package/dist/telemetry/event-builders.js.map +1 -0
- package/dist/telemetry/event-store.d.ts +66 -0
- package/dist/telemetry/event-store.d.ts.map +1 -0
- package/dist/telemetry/event-store.js +202 -0
- package/dist/telemetry/event-store.js.map +1 -0
- package/dist/telemetry/identity.d.ts +72 -0
- package/dist/telemetry/identity.d.ts.map +1 -0
- package/dist/{recording/wiring → telemetry}/identity.js +6 -2
- package/dist/telemetry/identity.js.map +1 -0
- package/dist/telemetry/metrics.d.ts +169 -0
- package/dist/telemetry/metrics.d.ts.map +1 -0
- package/dist/telemetry/metrics.js +437 -0
- package/dist/telemetry/metrics.js.map +1 -0
- package/dist/telemetry/otel-sdk.d.ts +93 -0
- package/dist/telemetry/otel-sdk.d.ts.map +1 -0
- package/dist/telemetry/otel-sdk.js +297 -0
- package/dist/telemetry/otel-sdk.js.map +1 -0
- package/dist/telemetry/spans/constants.d.ts +12 -0
- package/dist/telemetry/spans/constants.d.ts.map +1 -0
- package/dist/telemetry/spans/constants.js +12 -0
- package/dist/telemetry/spans/constants.js.map +1 -0
- package/dist/telemetry/spans/gen-ai.d.ts +74 -0
- package/dist/telemetry/spans/gen-ai.d.ts.map +1 -0
- package/dist/telemetry/spans/gen-ai.js +339 -0
- package/dist/telemetry/spans/gen-ai.js.map +1 -0
- package/dist/telemetry/spans/index.d.ts +11 -0
- package/dist/telemetry/spans/index.d.ts.map +1 -0
- package/dist/telemetry/spans/index.js +11 -0
- package/dist/telemetry/spans/index.js.map +1 -0
- package/dist/{tracking → telemetry}/spans/redact-pii.d.ts +19 -21
- package/dist/telemetry/spans/redact-pii.d.ts.map +1 -0
- package/dist/{tracking → telemetry}/spans/redact-pii.js +35 -32
- package/dist/telemetry/spans/redact-pii.js.map +1 -0
- package/dist/telemetry/spans/sanitize-payload.d.ts.map +1 -0
- package/dist/telemetry/spans/sanitize-payload.js.map +1 -0
- package/dist/telemetry/spans/span-hooks.d.ts +18 -0
- package/dist/telemetry/spans/span-hooks.d.ts.map +1 -0
- package/dist/telemetry/spans/span-hooks.js +764 -0
- package/dist/telemetry/spans/span-hooks.js.map +1 -0
- 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 +32 -0
- package/dist/telemetry/trace-identity.d.ts.map +1 -0
- package/dist/telemetry/trace-identity.js +62 -0
- package/dist/telemetry/trace-identity.js.map +1 -0
- package/dist/telemetry/tracing.d.ts +33 -0
- package/dist/telemetry/tracing.d.ts.map +1 -0
- package/dist/telemetry/tracing.js +70 -0
- package/dist/telemetry/tracing.js.map +1 -0
- package/dist/types/dsl/index.d.ts +8 -9
- package/dist/types/dsl/index.d.ts.map +1 -1
- package/dist/types/runtime.d.ts +1 -1
- package/dist/types/runtime.d.ts.map +1 -1
- package/dist/types/scanner.d.ts +2 -0
- package/dist/types/scanner.d.ts.map +1 -1
- package/dist/utils/event-catalog.d.ts +506 -0
- package/dist/utils/event-catalog.d.ts.map +1 -0
- package/dist/utils/event-catalog.js +142 -0
- package/dist/utils/event-catalog.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -5
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +360 -27
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/wallet-address.d.ts +3 -0
- package/dist/utils/wallet-address.d.ts.map +1 -0
- package/dist/utils/wallet-address.js +17 -0
- package/dist/utils/wallet-address.js.map +1 -0
- package/openclaw.plugin.json +20 -6
- package/package.json +10 -2
- package/dist/actions/tracking-helpers.d.ts +0 -28
- package/dist/actions/tracking-helpers.d.ts.map +0 -1
- package/dist/actions/tracking-helpers.js +0 -93
- package/dist/actions/tracking-helpers.js.map +0 -1
- package/dist/recording/emitter.d.ts +0 -27
- package/dist/recording/emitter.d.ts.map +0 -1
- package/dist/recording/emitter.js +0 -2
- package/dist/recording/emitter.js.map +0 -1
- package/dist/recording/identity.d.ts +0 -34
- package/dist/recording/identity.d.ts.map +0 -1
- package/dist/recording/identity.js +0 -2
- package/dist/recording/identity.js.map +0 -1
- package/dist/recording/index.d.ts +0 -11
- package/dist/recording/index.d.ts.map +0 -1
- package/dist/recording/index.js +0 -2
- package/dist/recording/index.js.map +0 -1
- package/dist/recording/noop-emitter.d.ts +0 -23
- package/dist/recording/noop-emitter.d.ts.map +0 -1
- package/dist/recording/noop-emitter.js +0 -22
- package/dist/recording/noop-emitter.js.map +0 -1
- package/dist/recording/otel/attributes.d.ts +0 -35
- package/dist/recording/otel/attributes.d.ts.map +0 -1
- package/dist/recording/otel/attributes.js +0 -131
- package/dist/recording/otel/attributes.js.map +0 -1
- package/dist/recording/otel/constants.d.ts +0 -123
- package/dist/recording/otel/constants.d.ts.map +0 -1
- package/dist/recording/otel/constants.js +0 -172
- package/dist/recording/otel/constants.js.map +0 -1
- package/dist/recording/otel/ids.d.ts +0 -25
- package/dist/recording/otel/ids.d.ts.map +0 -1
- package/dist/recording/otel/ids.js +0 -37
- package/dist/recording/otel/ids.js.map +0 -1
- package/dist/recording/otel/index.d.ts +0 -13
- package/dist/recording/otel/index.d.ts.map +0 -1
- package/dist/recording/otel/index.js +0 -9
- package/dist/recording/otel/index.js.map +0 -1
- package/dist/recording/otel/mappers.d.ts +0 -100
- package/dist/recording/otel/mappers.d.ts.map +0 -1
- package/dist/recording/otel/mappers.js +0 -683
- package/dist/recording/otel/mappers.js.map +0 -1
- package/dist/recording/otel/otel-emitter.d.ts +0 -43
- package/dist/recording/otel/otel-emitter.d.ts.map +0 -1
- package/dist/recording/otel/otel-emitter.js +0 -99
- package/dist/recording/otel/otel-emitter.js.map +0 -1
- package/dist/recording/otel/redaction.d.ts +0 -47
- package/dist/recording/otel/redaction.d.ts.map +0 -1
- package/dist/recording/otel/redaction.js +0 -88
- package/dist/recording/otel/redaction.js.map +0 -1
- package/dist/recording/records.d.ts.map +0 -1
- package/dist/recording/records.js +0 -14
- package/dist/recording/records.js.map +0 -1
- package/dist/recording/transport/batcher.d.ts +0 -59
- package/dist/recording/transport/batcher.d.ts.map +0 -1
- package/dist/recording/transport/batcher.js +0 -234
- package/dist/recording/transport/batcher.js.map +0 -1
- package/dist/recording/transport/client.d.ts +0 -41
- package/dist/recording/transport/client.d.ts.map +0 -1
- package/dist/recording/transport/client.js +0 -69
- package/dist/recording/transport/client.js.map +0 -1
- package/dist/recording/transport/config.d.ts +0 -53
- package/dist/recording/transport/config.d.ts.map +0 -1
- package/dist/recording/transport/config.js +0 -41
- package/dist/recording/transport/config.js.map +0 -1
- package/dist/recording/transport/index.d.ts +0 -16
- package/dist/recording/transport/index.d.ts.map +0 -1
- package/dist/recording/transport/index.js +0 -12
- package/dist/recording/transport/index.js.map +0 -1
- package/dist/recording/transport/rows.d.ts +0 -88
- package/dist/recording/transport/rows.d.ts.map +0 -1
- package/dist/recording/transport/rows.js +0 -15
- package/dist/recording/transport/rows.js.map +0 -1
- package/dist/recording/wiring/emitter-factory.d.ts +0 -39
- package/dist/recording/wiring/emitter-factory.d.ts.map +0 -1
- package/dist/recording/wiring/emitter-factory.js +0 -62
- package/dist/recording/wiring/emitter-factory.js.map +0 -1
- package/dist/recording/wiring/identity.d.ts +0 -27
- package/dist/recording/wiring/identity.d.ts.map +0 -1
- package/dist/recording/wiring/identity.js.map +0 -1
- package/dist/recording/wiring/index.d.ts +0 -12
- package/dist/recording/wiring/index.d.ts.map +0 -1
- package/dist/recording/wiring/index.js +0 -9
- package/dist/recording/wiring/index.js.map +0 -1
- package/dist/recording/wiring/record-builders.d.ts +0 -107
- package/dist/recording/wiring/record-builders.d.ts.map +0 -1
- package/dist/recording/wiring/record-builders.js.map +0 -1
- package/dist/recording/wiring/subscriber.d.ts +0 -28
- package/dist/recording/wiring/subscriber.d.ts.map +0 -1
- package/dist/recording/wiring/subscriber.js +0 -173
- package/dist/recording/wiring/subscriber.js.map +0 -1
- package/dist/recording/wiring/values.d.ts +0 -19
- package/dist/recording/wiring/values.d.ts.map +0 -1
- package/dist/recording/wiring/values.js +0 -49
- package/dist/recording/wiring/values.js.map +0 -1
- package/dist/tracking/build-rehydrate-items.d.ts +0 -15
- package/dist/tracking/build-rehydrate-items.d.ts.map +0 -1
- package/dist/tracking/build-rehydrate-items.js +0 -19
- package/dist/tracking/build-rehydrate-items.js.map +0 -1
- package/dist/tracking/constants.d.ts +0 -24
- package/dist/tracking/constants.d.ts.map +0 -1
- package/dist/tracking/constants.js +0 -52
- package/dist/tracking/constants.js.map +0 -1
- package/dist/tracking/context.d.ts.map +0 -1
- package/dist/tracking/context.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -16
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -11
- package/dist/tracking/index.js.map +0 -1
- package/dist/tracking/plugin-event-tracker.d.ts +0 -13
- package/dist/tracking/plugin-event-tracker.d.ts.map +0 -1
- package/dist/tracking/plugin-event-tracker.js +0 -27
- package/dist/tracking/plugin-event-tracker.js.map +0 -1
- package/dist/tracking/position-id-registry.d.ts.map +0 -1
- package/dist/tracking/position-id-registry.js.map +0 -1
- package/dist/tracking/spans/constants.d.ts +0 -19
- package/dist/tracking/spans/constants.d.ts.map +0 -1
- package/dist/tracking/spans/constants.js +0 -31
- package/dist/tracking/spans/constants.js.map +0 -1
- package/dist/tracking/spans/fan-out-span-transport.d.ts +0 -22
- package/dist/tracking/spans/fan-out-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/fan-out-span-transport.js +0 -49
- package/dist/tracking/spans/fan-out-span-transport.js.map +0 -1
- package/dist/tracking/spans/index.d.ts +0 -13
- package/dist/tracking/spans/index.d.ts.map +0 -1
- package/dist/tracking/spans/index.js +0 -16
- package/dist/tracking/spans/index.js.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.d.ts +0 -22
- package/dist/tracking/spans/otel/fit-row-budget.d.ts.map +0 -1
- package/dist/tracking/spans/otel/fit-row-budget.js +0 -91
- package/dist/tracking/spans/otel/fit-row-budget.js.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts +0 -16
- package/dist/tracking/spans/otel/map-span-to-trace-row.d.ts.map +0 -1
- package/dist/tracking/spans/otel/map-span-to-trace-row.js +0 -227
- package/dist/tracking/spans/otel/map-span-to-trace-row.js.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.d.ts +0 -43
- package/dist/tracking/spans/otel/recording-span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/otel/recording-span-transport.js +0 -67
- package/dist/tracking/spans/otel/recording-span-transport.js.map +0 -1
- package/dist/tracking/spans/otel/span-ids.d.ts +0 -22
- package/dist/tracking/spans/otel/span-ids.d.ts.map +0 -1
- package/dist/tracking/spans/otel/span-ids.js +0 -32
- package/dist/tracking/spans/otel/span-ids.js.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.d.ts +0 -9
- package/dist/tracking/spans/plugin-span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/plugin-span-tracker.js +0 -115
- package/dist/tracking/spans/plugin-span-tracker.js.map +0 -1
- package/dist/tracking/spans/redact-pii.d.ts.map +0 -1
- package/dist/tracking/spans/redact-pii.js.map +0 -1
- package/dist/tracking/spans/sanitize-payload.d.ts.map +0 -1
- package/dist/tracking/spans/sanitize-payload.js.map +0 -1
- package/dist/tracking/spans/span-hooks.d.ts +0 -28
- package/dist/tracking/spans/span-hooks.d.ts.map +0 -1
- package/dist/tracking/spans/span-hooks.js +0 -409
- package/dist/tracking/spans/span-hooks.js.map +0 -1
- package/dist/tracking/spans/span-tracker.d.ts +0 -133
- package/dist/tracking/spans/span-tracker.d.ts.map +0 -1
- package/dist/tracking/spans/span-tracker.js +0 -721
- package/dist/tracking/spans/span-tracker.js.map +0 -1
- package/dist/tracking/spans/span-transport.d.ts +0 -71
- package/dist/tracking/spans/span-transport.d.ts.map +0 -1
- package/dist/tracking/spans/span-transport.js +0 -240
- package/dist/tracking/spans/span-transport.js.map +0 -1
- package/dist/tracking/spans/types.d.ts +0 -101
- package/dist/tracking/spans/types.d.ts.map +0 -1
- package/dist/tracking/spans/types.js +0 -6
- package/dist/tracking/spans/types.js.map +0 -1
- package/dist/tracking/tracker.d.ts +0 -30
- package/dist/tracking/tracker.d.ts.map +0 -1
- package/dist/tracking/tracker.js +0 -66
- package/dist/tracking/tracker.js.map +0 -1
- package/dist/tracking/tracking-handler.d.ts +0 -12
- package/dist/tracking/tracking-handler.d.ts.map +0 -1
- package/dist/tracking/tracking-handler.js +0 -148
- package/dist/tracking/tracking-handler.js.map +0 -1
- package/dist/tracking/transport.d.ts +0 -35
- package/dist/tracking/transport.d.ts.map +0 -1
- package/dist/tracking/transport.js +0 -133
- package/dist/tracking/transport.js.map +0 -1
- package/dist/tracking/types.d.ts +0 -21
- package/dist/tracking/types.d.ts.map +0 -1
- package/dist/tracking/types.js +0 -6
- package/dist/tracking/types.js.map +0 -1
- /package/dist/{tracking → telemetry}/spans/sanitize-payload.d.ts +0 -0
- /package/dist/{tracking → telemetry}/spans/sanitize-payload.js +0 -0
|
@@ -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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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import type { FastifyInstance } from "fastify";
|
|
6
6
|
import type { ScannerRegistry } from "../intake/scanner-registry.js";
|
|
7
7
|
import type { AcceptanceRecord } from "../intake/acceptance-record.js";
|
|
8
|
-
import type
|
|
8
|
+
import { type Logger } from "../../utils/logger.js";
|
|
9
9
|
export interface RegisterSignalsRouteOpts {
|
|
10
10
|
registry: ScannerRegistry;
|
|
11
11
|
record: AcceptanceRecord;
|
|
@@ -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"}
|
|
@@ -2,17 +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
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
warn: () => { },
|
|
14
|
-
error: () => { },
|
|
15
|
-
};
|
|
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";
|
|
16
14
|
/**
|
|
17
15
|
* Register the supervised intake /signals and /errors routes.
|
|
18
16
|
*/
|
|
@@ -26,7 +24,47 @@ export function registerSignalsRoute(fastify, opts) {
|
|
|
26
24
|
const onAccepted = opts.onAccepted ?? (() => { });
|
|
27
25
|
const onError = opts.onError ?? (() => { });
|
|
28
26
|
const maxItems = opts.maxItemsPerSignalsRequest;
|
|
29
|
-
const logger = opts.logger ??
|
|
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
|
+
};
|
|
30
68
|
// POST /signals
|
|
31
69
|
fastify.post("/signals", async (request, reply) => {
|
|
32
70
|
if (!Value.Check(SignalsBodySchema, request.body)) {
|
|
@@ -38,17 +76,36 @@ export function registerSignalsRoute(fastify, opts) {
|
|
|
38
76
|
.slice(0, 10)
|
|
39
77
|
.map((e) => `path=${e.path} msg=${e.message} got=${JSON.stringify(e.value)?.slice(0, 120)}`);
|
|
40
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
|
+
});
|
|
41
86
|
return reply.status(400).send({
|
|
42
87
|
success: false,
|
|
43
88
|
error: { code: "INVALID_SHAPE", message: "Invalid request body" },
|
|
44
89
|
});
|
|
45
90
|
}
|
|
46
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
|
+
};
|
|
47
99
|
// Enforce the configured per-request item cap before any work — matches the
|
|
48
|
-
// legacy address-routed route's 400 / INVALID_REQUEST. Checked before
|
|
49
|
-
//
|
|
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.
|
|
50
102
|
if (maxItems !== undefined && body.signals.length > maxItems) {
|
|
51
|
-
logger
|
|
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
|
+
});
|
|
52
109
|
return reply.status(400).send({
|
|
53
110
|
success: false,
|
|
54
111
|
error: {
|
|
@@ -57,9 +114,6 @@ export function registerSignalsRoute(fastify, opts) {
|
|
|
57
114
|
},
|
|
58
115
|
});
|
|
59
116
|
}
|
|
60
|
-
// Resolve scannerName once for use in log lines.
|
|
61
|
-
const resolved = registry.resolve(body.scanner_id);
|
|
62
|
-
const scannerName = resolved?.scannerName ?? "";
|
|
63
117
|
const result = await processSignalPost(body, {
|
|
64
118
|
registry,
|
|
65
119
|
record,
|
|
@@ -69,41 +123,47 @@ export function registerSignalsRoute(fastify, opts) {
|
|
|
69
123
|
onAccepted,
|
|
70
124
|
});
|
|
71
125
|
if (!result.ok) {
|
|
72
|
-
|
|
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
|
+
});
|
|
73
134
|
return reply.status(404).send({
|
|
74
135
|
success: false,
|
|
75
136
|
error: { code: result.reason, message: result.reason },
|
|
76
137
|
});
|
|
77
138
|
}
|
|
78
|
-
// Empty signals list — no-op
|
|
79
|
-
//
|
|
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.
|
|
80
142
|
if (result.signals.length === 0) {
|
|
81
143
|
logger.debug(`[intake] no-op scanner_id=${body.scanner_id}`);
|
|
144
|
+
enrichIntakeSpan({ "senpi.scanner.id": ctx.scannerId, "senpi.intake.disposition": "noop" });
|
|
82
145
|
return reply.send({
|
|
83
146
|
success: true,
|
|
84
147
|
data: { signals: result.signals },
|
|
85
148
|
});
|
|
86
149
|
}
|
|
87
|
-
//
|
|
150
|
+
// One signal.* event per disposition — the pre-decision acceptance fact at the boundary.
|
|
88
151
|
for (let i = 0; i < result.signals.length; i++) {
|
|
89
152
|
const status = result.signals[i];
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
switch (status.status) {
|
|
93
|
-
case "accepted":
|
|
94
|
-
logger.info(`[intake] accepted asset=${asset} scanner=${scannerName} correlationId=${status.correlationId} scanner_id=${body.scanner_id}`);
|
|
95
|
-
break;
|
|
96
|
-
case "rejected":
|
|
97
|
-
logger.info(`[intake] rejected asset=${asset} scanner_id=${body.scanner_id} reason=${status.reason}`);
|
|
98
|
-
break;
|
|
99
|
-
case "expired":
|
|
100
|
-
logger.info(`[intake] expired asset=${asset} scanner_id=${body.scanner_id}`);
|
|
101
|
-
break;
|
|
102
|
-
case "superseded":
|
|
103
|
-
logger.info(`[intake] superseded asset=${asset} scanner_id=${body.scanner_id}`);
|
|
104
|
-
break;
|
|
105
|
-
}
|
|
153
|
+
const asset = body.signals[i]?.asset ?? "unknown";
|
|
154
|
+
emitEvent(logger, () => buildSignalDispositionEvent(status, asset, ctx));
|
|
106
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
|
+
});
|
|
107
167
|
return reply.send({
|
|
108
168
|
success: true,
|
|
109
169
|
data: { signals: result.signals },
|
|
@@ -112,23 +172,49 @@ export function registerSignalsRoute(fastify, opts) {
|
|
|
112
172
|
// POST /errors
|
|
113
173
|
fastify.post("/errors", async (request, reply) => {
|
|
114
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
|
+
});
|
|
115
182
|
return reply.status(400).send({
|
|
116
183
|
success: false,
|
|
117
184
|
error: { code: "INVALID_SHAPE", message: "Invalid request body" },
|
|
118
185
|
});
|
|
119
186
|
}
|
|
120
|
-
const
|
|
187
|
+
const body = request.body;
|
|
188
|
+
const result = await processErrorPost(body, {
|
|
121
189
|
registry,
|
|
122
190
|
now,
|
|
123
191
|
updateLiveness,
|
|
124
192
|
onError,
|
|
125
193
|
});
|
|
126
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
|
+
});
|
|
127
200
|
return reply.status(404).send({
|
|
128
201
|
success: false,
|
|
129
202
|
error: { code: result.reason, message: result.reason },
|
|
130
203
|
});
|
|
131
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
|
+
});
|
|
132
218
|
return reply.send({ success: true });
|
|
133
219
|
});
|
|
134
220
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.js","sourceRoot":"","sources":["../../../src/runtime-api/routes/signals.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
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;
|
|
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,
|
|
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;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/runtime-api/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ import type { CandlesByAsset, ScannerLogger, SharedArtifactAccessor } from "../p
|
|
|
6
6
|
import type { Instrument, ScannerId, SmMarket } from "../types.js";
|
|
7
7
|
import type { ClearingHouseState } from "../implementations/liquidation-watchdog.js";
|
|
8
8
|
import type { DslState } from "../../types/dsl/index.js";
|
|
9
|
+
import type { IdentityEnvelope } from "../../telemetry/identity.js";
|
|
9
10
|
import type { ScannerEngineLifecycle } from "./lifecycle.js";
|
|
10
11
|
/** Minimal active-position shape consumed by scanner contexts. */
|
|
11
12
|
export type ActivePosition = Record<string, unknown>;
|
|
@@ -42,6 +43,8 @@ export interface ScannerEngineDependencies {
|
|
|
42
43
|
logger?: ScannerLogger;
|
|
43
44
|
lifecycle?: ScannerEngineLifecycle;
|
|
44
45
|
now?: () => number;
|
|
46
|
+
/** Lazy runtime identity builder; used to stamp per-trace identity at the scanner.run seam. */
|
|
47
|
+
identity?: () => IdentityEnvelope;
|
|
45
48
|
}
|
|
46
49
|
/** Shared-artifact store accessors exposed through scanner init/run contexts. */
|
|
47
50
|
export declare function createSharedArtifactAccessor(address: string, scannerId: ScannerId, producedContract: SharedArtifactContract | undefined, sharedArtifactStore: SharedArtifactStore, resolveSourceScannerId: (artifactKey: string) => ScannerId | undefined): SharedArtifactAccessor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-providers.d.ts","sourceRoot":"","sources":["../../../src/scanners/engine/data-providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,sBAAsB,EACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AACrF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,kEAAkE;AAClE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAErD,+EAA+E;AAC/E,MAAM,WAAW,qBAAqB;IACpC,yCAAyC;IACzC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC5D,UAAU,CAAC,EAAE,CACX,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,UAAU,EAAE,EACzB,OAAO,CAAC,EAAE,qBAAqB,KAC5B,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;IAChG,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IACpE,qBAAqB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;IAChF,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACpE;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,mBAAmB,EAAE,mBAAmB,CAAC;CAC1C;AAED,4DAA4D;AAC5D,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,SAAS,CAAC,EAAE,sBAAsB,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"data-providers.d.ts","sourceRoot":"","sources":["../../../src/scanners/engine/data-providers.ts"],"names":[],"mappings":"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"}
|