@senpi/runtime 3.0.6-dev.skill-manager-v2.20260629194505 → 3.0.9-dev.runtime-phase-2.20260707070820
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 +255 -77
- 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/intake/intake-events.d.ts +44 -0
- package/dist/runtime-api/intake/intake-events.d.ts.map +1 -0
- package/dist/runtime-api/intake/intake-events.js +131 -0
- package/dist/runtime-api/intake/intake-events.js.map +1 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts +2 -0
- package/dist/runtime-api/intake/scanner-launcher.d.ts.map +1 -1
- package/dist/runtime-api/intake/scanner-launcher.js +58 -15
- package/dist/runtime-api/intake/scanner-launcher.js.map +1 -1
- package/dist/runtime-api/intake/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
|
@@ -659,6 +659,236 @@ export function registerSenpiCli(program) {
|
|
|
659
659
|
console.log("");
|
|
660
660
|
}
|
|
661
661
|
});
|
|
662
|
+
senpi
|
|
663
|
+
.command("scanner")
|
|
664
|
+
.description("Per-scanner supervisor health: runs, errors, liveness, barren detection")
|
|
665
|
+
.option("-r, --runtime <id>", "Filter by runtime id")
|
|
666
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
667
|
+
.action(async (opts) => {
|
|
668
|
+
const params = {};
|
|
669
|
+
if (typeof opts.runtime === "string" && opts.runtime.length > 0)
|
|
670
|
+
params.runtimeId = opts.runtime;
|
|
671
|
+
const data = callGatewayJson("senpi.getSystemState", params);
|
|
672
|
+
if (!data) {
|
|
673
|
+
return;
|
|
674
|
+
}
|
|
675
|
+
if (data.ok === false) {
|
|
676
|
+
const err = data.error;
|
|
677
|
+
console.error(err?.message ?? "Request failed.");
|
|
678
|
+
process.exitCode = 1;
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
681
|
+
const payload = (data.payload ?? data);
|
|
682
|
+
const states = selectMany(payload.state, payload.states ?? []);
|
|
683
|
+
if (opts.json) {
|
|
684
|
+
const scanners = states.map((s) => ({
|
|
685
|
+
runtimeId: s.runtimeId ?? s.runtimeName,
|
|
686
|
+
scanners: s.components?.scanners?.state?.scanners ?? [],
|
|
687
|
+
}));
|
|
688
|
+
console.log(JSON.stringify({ ok: true, scanners }, null, 2));
|
|
689
|
+
return;
|
|
690
|
+
}
|
|
691
|
+
if (states.length === 0) {
|
|
692
|
+
console.log("No running runtime scanners.");
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
for (const state of states) {
|
|
696
|
+
printScanners(state);
|
|
697
|
+
if (states.length > 1)
|
|
698
|
+
console.log("");
|
|
699
|
+
}
|
|
700
|
+
});
|
|
701
|
+
const riskCmd = senpi.command("risk");
|
|
702
|
+
riskCmd
|
|
703
|
+
.description("Risk eligibility + per-gate status — am I allowed to trade, and why not")
|
|
704
|
+
.option("-r, --runtime <id>", "Filter by runtime id")
|
|
705
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
706
|
+
.action(async (opts) => {
|
|
707
|
+
const params = {};
|
|
708
|
+
if (typeof opts.runtime === "string" && opts.runtime.length > 0)
|
|
709
|
+
params.runtimeId = opts.runtime;
|
|
710
|
+
const data = callGatewayJson("senpi.getHealthStatus", params);
|
|
711
|
+
if (!data) {
|
|
712
|
+
return;
|
|
713
|
+
}
|
|
714
|
+
if (data.ok === false) {
|
|
715
|
+
const err = data.error;
|
|
716
|
+
console.error(err?.message ?? "Request failed.");
|
|
717
|
+
process.exitCode = 1;
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
const payload = (data.payload ?? data);
|
|
721
|
+
const statuses = selectMany(payload.status, payload.statuses ?? []);
|
|
722
|
+
if (opts.json) {
|
|
723
|
+
const risk = statuses.map((s) => ({
|
|
724
|
+
runtimeId: s.runtimeId ?? s.runtimeName,
|
|
725
|
+
risk: s.components?.risk ?? null,
|
|
726
|
+
}));
|
|
727
|
+
console.log(JSON.stringify({ ok: true, risk }, null, 2));
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
if (statuses.length === 0) {
|
|
731
|
+
console.log("No running runtime risk status.");
|
|
732
|
+
return;
|
|
733
|
+
}
|
|
734
|
+
for (const status of statuses) {
|
|
735
|
+
printRisk(status);
|
|
736
|
+
if (statuses.length > 1)
|
|
737
|
+
console.log("");
|
|
738
|
+
}
|
|
739
|
+
});
|
|
740
|
+
riskCmd
|
|
741
|
+
.command("audit")
|
|
742
|
+
.description("Risk gate-check audit log — per-evaluation pass/CLOSED/COOLDOWN history")
|
|
743
|
+
.option("-r, --runtime <id>", "Runtime id (required)")
|
|
744
|
+
.option("-a, --address <addr>", "Strategy address (defaults to runtime wallet)")
|
|
745
|
+
.option("--since <iso>", "ISO 8601 lower bound on entry time")
|
|
746
|
+
.option("-l, --limit <n>", "Max entries (default 100)")
|
|
747
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
748
|
+
.action(async (opts) => {
|
|
749
|
+
if (!opts.runtime) {
|
|
750
|
+
console.error("--runtime <id> is required.");
|
|
751
|
+
process.exitCode = 1;
|
|
752
|
+
return;
|
|
753
|
+
}
|
|
754
|
+
const params = { runtimeId: opts.runtime };
|
|
755
|
+
if (opts.address)
|
|
756
|
+
params.address = opts.address;
|
|
757
|
+
const limit = opts.limit ? Number.parseInt(opts.limit, 10) : 100;
|
|
758
|
+
if (Number.isFinite(limit))
|
|
759
|
+
params.limit = limit;
|
|
760
|
+
const data = callGatewayJson("senpi.getRiskAudit", params);
|
|
761
|
+
if (!data) {
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
if (data.ok === false) {
|
|
765
|
+
const err = data.error;
|
|
766
|
+
console.error(err?.message ?? "Request failed.");
|
|
767
|
+
process.exitCode = 1;
|
|
768
|
+
return;
|
|
769
|
+
}
|
|
770
|
+
const inner = (data.payload ?? data);
|
|
771
|
+
let entries = inner.entries ?? [];
|
|
772
|
+
// ISO 8601 UTC timestamps sort lexicographically, so a string compare
|
|
773
|
+
// is a correct lower-bound filter.
|
|
774
|
+
if (opts.since)
|
|
775
|
+
entries = entries.filter((e) => e.ts >= opts.since);
|
|
776
|
+
if (opts.json) {
|
|
777
|
+
console.log(JSON.stringify({ ok: true, entries }, null, 2));
|
|
778
|
+
return;
|
|
779
|
+
}
|
|
780
|
+
console.log(renderRiskAuditDigest(entries));
|
|
781
|
+
});
|
|
782
|
+
senpi
|
|
783
|
+
.command("audit")
|
|
784
|
+
.description("Backend trade-audit trail (MCP tool calls + AI reasoning)")
|
|
785
|
+
.option("-r, --runtime <id>", "Runtime id (required)")
|
|
786
|
+
.option("--tool <name>", "Filter by exact tool name")
|
|
787
|
+
.option("--action-type <type>", "Filter by action type (read|create|update|delete)")
|
|
788
|
+
.option("--success <bool>", "Filter by success (true|false)")
|
|
789
|
+
.option("--since <iso>", "ISO 8601 lower bound on request time")
|
|
790
|
+
.option("--until <iso>", "ISO 8601 upper bound on request time")
|
|
791
|
+
.option("-l, --limit <n>", "Max rows (default 50)")
|
|
792
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
793
|
+
.action(async (opts) => {
|
|
794
|
+
if (!opts.runtime) {
|
|
795
|
+
console.error("--runtime <id> is required.");
|
|
796
|
+
process.exitCode = 1;
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
const params = { runtimeId: opts.runtime };
|
|
800
|
+
if (opts.tool)
|
|
801
|
+
params.tool_name = opts.tool;
|
|
802
|
+
if (opts.actionType)
|
|
803
|
+
params.action_type = opts.actionType;
|
|
804
|
+
if (opts.success === "true")
|
|
805
|
+
params.success = true;
|
|
806
|
+
else if (opts.success === "false")
|
|
807
|
+
params.success = false;
|
|
808
|
+
if (opts.since)
|
|
809
|
+
params.start_time = opts.since;
|
|
810
|
+
if (opts.until)
|
|
811
|
+
params.end_time = opts.until;
|
|
812
|
+
const limit = opts.limit ? Number.parseInt(opts.limit, 10) : 50;
|
|
813
|
+
if (Number.isFinite(limit))
|
|
814
|
+
params.limit = limit;
|
|
815
|
+
const data = callGatewayJson("senpi.auditQuery", params);
|
|
816
|
+
if (!data) {
|
|
817
|
+
return;
|
|
818
|
+
}
|
|
819
|
+
if (data.ok === false) {
|
|
820
|
+
const err = data.error;
|
|
821
|
+
console.error(err?.message ?? "Request failed.");
|
|
822
|
+
process.exitCode = 1;
|
|
823
|
+
return;
|
|
824
|
+
}
|
|
825
|
+
const inner = (data.payload ?? data);
|
|
826
|
+
const result = inner.result ?? { entries: [], count: 0, total: 0, has_more: false };
|
|
827
|
+
if (opts.json) {
|
|
828
|
+
console.log(JSON.stringify({ ok: true, result }, null, 2));
|
|
829
|
+
return;
|
|
830
|
+
}
|
|
831
|
+
if (result.entries.length === 0) {
|
|
832
|
+
console.log("No audit entries.");
|
|
833
|
+
return;
|
|
834
|
+
}
|
|
835
|
+
console.log("Time\tTool\tType\tOK\tDur(ms)\tReasoning");
|
|
836
|
+
for (const e of result.entries) {
|
|
837
|
+
// A malformed backend timestamp makes toISOString() throw RangeError; show a placeholder.
|
|
838
|
+
const parsed = new Date(e.timestamp);
|
|
839
|
+
const t = Number.isNaN(parsed.getTime()) ? "—" : parsed.toISOString().slice(11, 19);
|
|
840
|
+
const dur = e.duration_ms == null ? "—" : String(e.duration_ms);
|
|
841
|
+
const reason = (e.ai_reasoning ?? "").replace(/\s+/g, " ").slice(0, 60);
|
|
842
|
+
console.log([t, e.tool, e.action_type, e.success ? "ok" : "FAIL", dur, reason].join("\t"));
|
|
843
|
+
}
|
|
844
|
+
if (result.has_more) {
|
|
845
|
+
console.log(`… more (showing ${result.count} of ~${result.total}; raise -l or use --json)`);
|
|
846
|
+
}
|
|
847
|
+
});
|
|
848
|
+
senpi
|
|
849
|
+
.command("events")
|
|
850
|
+
.description("Local domain-event log — the trade narrative (position/dsl/order/signal events)")
|
|
851
|
+
.option("-r, --runtime <id>", "Runtime id (required)")
|
|
852
|
+
.option("-a, --address <addr>", "Strategy address (defaults to runtime wallet)")
|
|
853
|
+
.option("--name <event>", "Filter by exact event name (e.g. position.opened)")
|
|
854
|
+
.option("--asset <symbol>", "Filter by asset (e.g. BTC)")
|
|
855
|
+
.option("--level <level>", "Filter by severity (debug|info|warn|error)")
|
|
856
|
+
.option("--since <iso>", "ISO 8601 lower bound on event time")
|
|
857
|
+
.option("--until <iso>", "ISO 8601 upper bound on event time")
|
|
858
|
+
.option("-l, --limit <n>", "Max events (default 200)")
|
|
859
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
860
|
+
.action(async (opts) => {
|
|
861
|
+
const entries = await fetchEvents(opts);
|
|
862
|
+
if (entries === null)
|
|
863
|
+
return;
|
|
864
|
+
if (opts.json) {
|
|
865
|
+
console.log(JSON.stringify({ ok: true, entries }, null, 2));
|
|
866
|
+
return;
|
|
867
|
+
}
|
|
868
|
+
console.log(renderEventsDigest(entries));
|
|
869
|
+
});
|
|
870
|
+
senpi
|
|
871
|
+
.command("explain <asset>")
|
|
872
|
+
.description("Stitch one asset's position lifecycle from the local event log (opened → dsl → closed)")
|
|
873
|
+
.option("-r, --runtime <id>", "Runtime id (required)")
|
|
874
|
+
.option("-a, --address <addr>", "Strategy address (defaults to runtime wallet)")
|
|
875
|
+
.option("-l, --limit <n>", "Max events to scan (default 500)")
|
|
876
|
+
.option("--json", "Print raw JSON from the gateway")
|
|
877
|
+
.action(async (asset, opts) => {
|
|
878
|
+
const entries = await fetchEvents({
|
|
879
|
+
runtime: opts.runtime,
|
|
880
|
+
address: opts.address,
|
|
881
|
+
asset,
|
|
882
|
+
limit: opts.limit ?? "500",
|
|
883
|
+
});
|
|
884
|
+
if (entries === null)
|
|
885
|
+
return;
|
|
886
|
+
if (opts.json) {
|
|
887
|
+
console.log(JSON.stringify({ ok: true, asset, entries }, null, 2));
|
|
888
|
+
return;
|
|
889
|
+
}
|
|
890
|
+
console.log(renderExplain(asset, entries));
|
|
891
|
+
});
|
|
662
892
|
// ── Skills subcommand ────────────────────────────────────────────────────────
|
|
663
893
|
const skills = senpi.command("skills");
|
|
664
894
|
skills.description("Manage Senpi skills (status, update)");
|
|
@@ -702,15 +932,18 @@ export function registerSenpiCli(program) {
|
|
|
702
932
|
: "0";
|
|
703
933
|
const installedCell = (s) => s.installedVersion ?? "—";
|
|
704
934
|
const latestCell = (s) => s.latestVersion ?? "—";
|
|
935
|
+
const majorCell = (s) => (s.majorPending ? "available" : "—");
|
|
705
936
|
// Column widths: at least as wide as the header label, otherwise the
|
|
706
937
|
// header would visually run into the next column on short-data rows.
|
|
707
938
|
const nameW = Math.max("name".length, ...rows.map((r) => r.name.length));
|
|
708
939
|
const instW = Math.max("installed".length, ...rows.map((r) => installedCell(r).length));
|
|
709
940
|
const lateW = Math.max("latest".length, ...rows.map((r) => latestCell(r).length));
|
|
941
|
+
const majorW = Math.max("major".length, ...rows.map((r) => majorCell(r).length));
|
|
710
942
|
const headerCols = [
|
|
711
943
|
"name".padEnd(nameW),
|
|
712
944
|
"installed".padEnd(instW),
|
|
713
945
|
"latest".padEnd(lateW),
|
|
946
|
+
"major".padEnd(majorW),
|
|
714
947
|
"failures",
|
|
715
948
|
];
|
|
716
949
|
console.log(`\n${headerCols.join(" ")}`);
|
|
@@ -719,6 +952,7 @@ export function registerSenpiCli(program) {
|
|
|
719
952
|
s.name.padEnd(nameW),
|
|
720
953
|
installedCell(s).padEnd(instW),
|
|
721
954
|
latestCell(s).padEnd(lateW),
|
|
955
|
+
majorCell(s).padEnd(majorW),
|
|
722
956
|
failuresCell(s),
|
|
723
957
|
];
|
|
724
958
|
console.log(cols.join(" "));
|
|
@@ -891,12 +1125,23 @@ function printHealthStatus(status) {
|
|
|
891
1125
|
const scannerSummary = scanners?.summary ?? "Scanner summary unavailable.";
|
|
892
1126
|
const enabled = typeof scanners?.totals?.enabled === "number" ? scanners.totals.enabled : "?";
|
|
893
1127
|
const registered = typeof scanners?.totals?.registered === "number" ? scanners.totals.registered : "?";
|
|
1128
|
+
const degraded = typeof scanners?.totals?.degraded === "number" ? scanners.totals.degraded : 0;
|
|
1129
|
+
const degradedSuffix = degraded > 0 ? `, ${degraded} degraded` : "";
|
|
894
1130
|
console.log(`Runtime: ${status.runtimeId ?? status.runtimeName ?? "unknown"}`);
|
|
895
1131
|
console.log(`Overall Health: ${status.health ?? "unknown"}`);
|
|
896
1132
|
console.log(`Log Level: ${status.logLevel ?? "unknown"}`);
|
|
897
|
-
console.log(`Scanners: ${scannerSummary} (enabled ${enabled}/${registered})`);
|
|
1133
|
+
console.log(`Scanners: ${scannerSummary} (enabled ${enabled}/${registered}${degradedSuffix})`);
|
|
898
1134
|
if (dsl?.summary) {
|
|
899
1135
|
console.log(`DSL: ${dsl.summary}`);
|
|
1136
|
+
const monitor = dsl.monitor;
|
|
1137
|
+
if (monitor) {
|
|
1138
|
+
const flight = monitor.inFlight ? " (tick in flight)" : "";
|
|
1139
|
+
const next = monitor.nextTickAt
|
|
1140
|
+
? `, next tick ${new Date(monitor.nextTickAt).toISOString().slice(11, 19)}`
|
|
1141
|
+
: "";
|
|
1142
|
+
const err = monitor.lastTickError ? ` — last tick error: ${monitor.lastTickError}` : "";
|
|
1143
|
+
console.log(` Monitor: ${monitor.running ? "running" : "stopped"}${flight}${next}${err}`);
|
|
1144
|
+
}
|
|
900
1145
|
}
|
|
901
1146
|
if (actions?.summary) {
|
|
902
1147
|
const ar = typeof actions.totals?.registered === "number" ? actions.totals.registered : "?";
|
|
@@ -904,7 +1149,7 @@ function printHealthStatus(status) {
|
|
|
904
1149
|
console.log(`Actions: ${actions.summary} (registered ${ar}, ${ae} enabled)`);
|
|
905
1150
|
}
|
|
906
1151
|
if (risk && risk.enabled) {
|
|
907
|
-
console.log(`Risk Health: ${risk.health}`);
|
|
1152
|
+
console.log(`Risk Eligibility: ${risk.eligibility} | Health: ${risk.health}`);
|
|
908
1153
|
console.log("Risk Gates:");
|
|
909
1154
|
for (const gate of risk.gates) {
|
|
910
1155
|
const label = gate.gateName.padEnd(22);
|
|
@@ -913,6 +1158,117 @@ function printHealthStatus(status) {
|
|
|
913
1158
|
}
|
|
914
1159
|
}
|
|
915
1160
|
}
|
|
1161
|
+
function printRisk(status) {
|
|
1162
|
+
const risk = status.components?.risk;
|
|
1163
|
+
console.log(`Runtime: ${status.runtimeId ?? status.runtimeName ?? "unknown"}`);
|
|
1164
|
+
if (!risk || !risk.enabled) {
|
|
1165
|
+
console.log("Risk guardrails: disabled.");
|
|
1166
|
+
return;
|
|
1167
|
+
}
|
|
1168
|
+
console.log(`Eligibility: ${risk.eligibility} | Health: ${risk.health}`);
|
|
1169
|
+
const t = risk.totals;
|
|
1170
|
+
console.log(`Gates: ${t.open} open, ${t.cooldown} cooldown, ${t.closed} closed (${t.fallbackCount} fallback, ${t.failedCount} failed)`);
|
|
1171
|
+
for (const g of risk.gates) {
|
|
1172
|
+
const label = g.gateName.padEnd(22);
|
|
1173
|
+
const reason = g.reason && g.status !== "OPEN" ? ` — ${g.reason}` : "";
|
|
1174
|
+
// Surface evaluation faults the status summary hides: a gate that errored
|
|
1175
|
+
// and the fallback it fell back to.
|
|
1176
|
+
const flag = !g.evaluationOk ? ` [${g.failureKind}${g.fallbackApplied ? ",fallback" : ""}]` : "";
|
|
1177
|
+
console.log(` ${label}${g.status}${reason}${flag}`);
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
/**
|
|
1181
|
+
* Render the risk audit log as a tab-separated digest (newest entries last,
|
|
1182
|
+
* as returned). Each row: time, source, then `guardrail=result` per
|
|
1183
|
+
* evaluation (with the reason appended for non-pass results).
|
|
1184
|
+
*/
|
|
1185
|
+
export function renderRiskAuditDigest(entries) {
|
|
1186
|
+
if (entries.length === 0)
|
|
1187
|
+
return "No risk audit.";
|
|
1188
|
+
const lines = ["Time\tSource\tEvaluations"];
|
|
1189
|
+
for (const e of entries) {
|
|
1190
|
+
const t = new Date(e.ts).toISOString().slice(11, 19);
|
|
1191
|
+
const evals = (e.evaluations ?? [])
|
|
1192
|
+
.map((ev) => `${ev.guardrail}=${ev.result}${ev.reason && ev.result !== "pass" ? `(${ev.reason})` : ""}`)
|
|
1193
|
+
.join(" ");
|
|
1194
|
+
lines.push([t, e.source, evals || "—"].join("\t"));
|
|
1195
|
+
}
|
|
1196
|
+
return lines.join("\n");
|
|
1197
|
+
}
|
|
1198
|
+
/**
|
|
1199
|
+
* Shared fetch for `senpi events` / `senpi explain`: validate --runtime, call senpi.getEvents, and
|
|
1200
|
+
* return the entries. Returns `null` (and sets exitCode/prints) on a missing runtime, transport
|
|
1201
|
+
* failure, or a gateway error — the caller stops.
|
|
1202
|
+
*/
|
|
1203
|
+
function fetchEvents(opts) {
|
|
1204
|
+
if (!opts.runtime) {
|
|
1205
|
+
console.error("--runtime <id> is required.");
|
|
1206
|
+
process.exitCode = 1;
|
|
1207
|
+
return null;
|
|
1208
|
+
}
|
|
1209
|
+
const params = { runtimeId: opts.runtime };
|
|
1210
|
+
if (opts.address)
|
|
1211
|
+
params.address = opts.address;
|
|
1212
|
+
if (opts.name)
|
|
1213
|
+
params.name = opts.name;
|
|
1214
|
+
if (opts.asset)
|
|
1215
|
+
params.asset = opts.asset;
|
|
1216
|
+
if (opts.level)
|
|
1217
|
+
params.level = opts.level;
|
|
1218
|
+
if (opts.since)
|
|
1219
|
+
params.since = opts.since;
|
|
1220
|
+
if (opts.until)
|
|
1221
|
+
params.until = opts.until;
|
|
1222
|
+
if (opts.limit) {
|
|
1223
|
+
const limit = Number.parseInt(opts.limit, 10);
|
|
1224
|
+
if (Number.isFinite(limit))
|
|
1225
|
+
params.limit = limit;
|
|
1226
|
+
}
|
|
1227
|
+
const data = callGatewayJson("senpi.getEvents", params);
|
|
1228
|
+
if (!data)
|
|
1229
|
+
return null;
|
|
1230
|
+
if (data.ok === false) {
|
|
1231
|
+
const err = data.error;
|
|
1232
|
+
console.error(err?.message ?? "Request failed.");
|
|
1233
|
+
process.exitCode = 1;
|
|
1234
|
+
return null;
|
|
1235
|
+
}
|
|
1236
|
+
const inner = (data.payload ?? data);
|
|
1237
|
+
return inner.entries ?? [];
|
|
1238
|
+
}
|
|
1239
|
+
/** The asset an event concerns, if any (position/dsl carry `senpi.asset`; signals carry `senpi.signal.asset`). */
|
|
1240
|
+
function eventAsset(e) {
|
|
1241
|
+
const a = e.attrs?.["senpi.asset"] ?? e.attrs?.["senpi.signal.asset"];
|
|
1242
|
+
return typeof a === "string" ? a : undefined;
|
|
1243
|
+
}
|
|
1244
|
+
export function renderEventsDigest(entries) {
|
|
1245
|
+
if (entries.length === 0)
|
|
1246
|
+
return "No events.";
|
|
1247
|
+
const lines = ["Time\tLevel\tEvent\tAsset\tDetail"];
|
|
1248
|
+
for (const e of entries) {
|
|
1249
|
+
const t = new Date(e.ts).toISOString().slice(11, 19);
|
|
1250
|
+
const detail = (e.body ?? "").replace(/\s+/g, " ").slice(0, 60);
|
|
1251
|
+
lines.push([t, e.level, e.name, eventAsset(e) ?? "—", detail].join("\t"));
|
|
1252
|
+
}
|
|
1253
|
+
return lines.join("\n");
|
|
1254
|
+
}
|
|
1255
|
+
/**
|
|
1256
|
+
* Stitch an asset's lifecycle: events oldest-first, each line tagged with its position id where one is
|
|
1257
|
+
* present, so a reader can follow opened → dsl transitions → close across one or more positions.
|
|
1258
|
+
*/
|
|
1259
|
+
export function renderExplain(asset, entries) {
|
|
1260
|
+
if (entries.length === 0)
|
|
1261
|
+
return `No events for ${asset}.`;
|
|
1262
|
+
const lines = [`${asset} — ${entries.length} event(s)`];
|
|
1263
|
+
for (const e of entries) {
|
|
1264
|
+
const t = new Date(e.ts).toISOString().slice(11, 19);
|
|
1265
|
+
const pos = typeof e.attrs?.["senpi.position.id"] === "string" ? e.attrs["senpi.position.id"] : undefined;
|
|
1266
|
+
const tag = pos ? ` [pos ${truncateAddr(String(pos))}]` : "";
|
|
1267
|
+
const detail = (e.body ?? "").replace(/\s+/g, " ");
|
|
1268
|
+
lines.push(` ${t} ${e.name}\t${detail}${tag}`);
|
|
1269
|
+
}
|
|
1270
|
+
return lines.join("\n");
|
|
1271
|
+
}
|
|
916
1272
|
function printSystemState(state) {
|
|
917
1273
|
const scanners = state.components?.scanners?.state;
|
|
918
1274
|
const dsl = state.components?.dsl;
|
|
@@ -983,4 +1339,36 @@ function printSystemState(state) {
|
|
|
983
1339
|
}
|
|
984
1340
|
}
|
|
985
1341
|
}
|
|
1342
|
+
function printScanners(state) {
|
|
1343
|
+
const rows = state.components?.scanners?.state?.scanners ?? [];
|
|
1344
|
+
console.log(`Runtime: ${state.runtimeId ?? state.runtimeName ?? "unknown"}`);
|
|
1345
|
+
console.log(`Scanners: ${rows.length}`);
|
|
1346
|
+
for (const s of rows) {
|
|
1347
|
+
// Barren = wired and running but never emitted a signal — a real "alive but producing nothing" gap.
|
|
1348
|
+
const barren = s.health !== "disabled" && (s.runCount ?? 0) > 0 && (s.signalsProduced ?? 0) === 0;
|
|
1349
|
+
// Liveness clock is external-only: n/a for interval scanners, — for an external one not yet heard from.
|
|
1350
|
+
const alive = s.lastAliveAt != null
|
|
1351
|
+
? String(s.lastAliveAt)
|
|
1352
|
+
: s.scheduleMode === "external"
|
|
1353
|
+
? "—"
|
|
1354
|
+
: "n/a";
|
|
1355
|
+
console.log([
|
|
1356
|
+
" scanner",
|
|
1357
|
+
s.scannerId ?? "—",
|
|
1358
|
+
`mode=${s.scheduleMode ?? "—"}`,
|
|
1359
|
+
`health=${s.health ?? "unknown"}`,
|
|
1360
|
+
`enabled=${String(s.enabled ?? false)}`,
|
|
1361
|
+
`inFlight=${String(s.inFlight ?? false)}`,
|
|
1362
|
+
`runs=${s.runCount ?? 0}`,
|
|
1363
|
+
`errors=${s.errorCount ?? 0}`,
|
|
1364
|
+
`consec_errors=${s.consecutiveErrorCount ?? 0}`,
|
|
1365
|
+
`signals=${s.signalsProduced ?? 0}`,
|
|
1366
|
+
`alive=${alive}`,
|
|
1367
|
+
`next=${s.nextRunAt == null ? "—" : String(s.nextRunAt)}`,
|
|
1368
|
+
`last=${s.lastRunStatus ?? "—"}`,
|
|
1369
|
+
...(s.lastRunReason ? [`reason=${s.lastRunReason}`] : []),
|
|
1370
|
+
...(barren ? ["BARREN"] : []),
|
|
1371
|
+
].join(" "));
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
986
1374
|
//# sourceMappingURL=senpi-commands.js.map
|