@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
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gen_ai / MCP span mapping — the one place that turns extracted hook content (or on-site
|
|
3
|
+
* MCP call data) into OpenTelemetry GenAI/MCP semantic-convention span attributes (the
|
|
4
|
+
* `GEN_AI` keys below). Standard keys only — no OpenClaw `openclaw.content.*` mirror, no
|
|
5
|
+
* OpenInference `input.value`/`output.value` aliases; `gen_ai.system_instructions` is the
|
|
6
|
+
* spec's underscore form.
|
|
7
|
+
*
|
|
8
|
+
* Content (messages, system instructions, tool args/result) is the highest-PII surface, so
|
|
9
|
+
* it is always redacted *before* stamping and capped *after* (sanitize → redact → cap) so a
|
|
10
|
+
* truncated value can't re-expose a partial secret. If the redactor fails to load, content is
|
|
11
|
+
* dropped rather than emitted unredacted.
|
|
12
|
+
*/
|
|
13
|
+
import { SpanStatusCode } from "@opentelemetry/api";
|
|
14
|
+
import { createLogger } from "../../utils/logger.js";
|
|
15
|
+
import { createOpenRedactionAdapter, redactStringsDeep, } from "./redact-pii.js";
|
|
16
|
+
import { sanitizePayloadValue } from "./sanitize-payload.js";
|
|
17
|
+
const logger = createLogger("[senpi-core][gen-ai]");
|
|
18
|
+
// ─── Caps ─────────────────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* Max chars per content attribute value, applied after redaction. A transport-safety
|
|
21
|
+
* cap that sits far under the OTLP/HTTP request-body limit (~20 MiB), not a backend
|
|
22
|
+
* storage limit — content this size is rare and we'd rather truncate than risk a
|
|
23
|
+
* rejected export.
|
|
24
|
+
*/
|
|
25
|
+
export const MAX_OTEL_CONTENT_ATTRIBUTE_CHARS = 256 * 1024;
|
|
26
|
+
/** Max items per message / tool-definition array, applied after redaction. */
|
|
27
|
+
export const MAX_OTEL_CONTENT_ARRAY_ITEMS = 200;
|
|
28
|
+
/** Suffix appended when a non-array (string/object) value is tail-truncated to fit the cap. */
|
|
29
|
+
const TRUNCATION_SUFFIX = "…[truncated]";
|
|
30
|
+
// ─── GenAI semantic-convention attribute keys ────────────────────────────────
|
|
31
|
+
export const GEN_AI = {
|
|
32
|
+
OPERATION_NAME: "gen_ai.operation.name",
|
|
33
|
+
CONVERSATION_ID: "gen_ai.conversation.id",
|
|
34
|
+
PROVIDER_NAME: "gen_ai.provider.name",
|
|
35
|
+
REQUEST_MODEL: "gen_ai.request.model",
|
|
36
|
+
REQUEST_TEMPERATURE: "gen_ai.request.temperature",
|
|
37
|
+
REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens",
|
|
38
|
+
RESPONSE_MODEL: "gen_ai.response.model",
|
|
39
|
+
RESPONSE_FINISH_REASONS: "gen_ai.response.finish_reasons",
|
|
40
|
+
USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens",
|
|
41
|
+
USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens",
|
|
42
|
+
USAGE_CACHE_READ_TOKENS: "gen_ai.usage.cache_read_tokens",
|
|
43
|
+
USAGE_CACHE_WRITE_TOKENS: "gen_ai.usage.cache_write_tokens",
|
|
44
|
+
USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens",
|
|
45
|
+
SYSTEM_INSTRUCTIONS: "gen_ai.system_instructions",
|
|
46
|
+
INPUT_MESSAGES: "gen_ai.input.messages",
|
|
47
|
+
OUTPUT_MESSAGES: "gen_ai.output.messages",
|
|
48
|
+
TOOL_DEFINITIONS: "gen_ai.tool.definitions",
|
|
49
|
+
AGENT_NAME: "gen_ai.agent.name",
|
|
50
|
+
TOOL_NAME: "gen_ai.tool.name",
|
|
51
|
+
TOOL_CALL_ID: "gen_ai.tool.call.id",
|
|
52
|
+
TOOL_CALL_ARGUMENTS: "gen_ai.tool.call.arguments",
|
|
53
|
+
TOOL_CALL_RESULT: "gen_ai.tool.call.result",
|
|
54
|
+
};
|
|
55
|
+
// ─── Content redactor (always on) ────────────────────────────────────────────
|
|
56
|
+
let redactorPromise = null;
|
|
57
|
+
/**
|
|
58
|
+
* Lazily build (once) the shared content redactor. Cached after first call so the
|
|
59
|
+
* OpenRedaction `enableCache` amortises multi-turn runs. Returns null only if the
|
|
60
|
+
* adapter fails to load (logged once) — callers then drop the content rather than
|
|
61
|
+
* emit it unredacted.
|
|
62
|
+
*/
|
|
63
|
+
async function getContentRedactor() {
|
|
64
|
+
if (redactorPromise === null) {
|
|
65
|
+
redactorPromise = createOpenRedactionAdapter().catch((err) => {
|
|
66
|
+
logger.warn("content redactor init failed; gen_ai content will be dropped until restart", err instanceof Error ? err : new Error(String(err)));
|
|
67
|
+
return null;
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
return redactorPromise;
|
|
71
|
+
}
|
|
72
|
+
/** Reset the cached redactor (tests only). */
|
|
73
|
+
export function __resetContentRedactorForTest() {
|
|
74
|
+
redactorPromise = null;
|
|
75
|
+
}
|
|
76
|
+
// ─── Redact → cap → serialize ────────────────────────────────────────────────
|
|
77
|
+
/** Build the elision marker prepended when older array elements are dropped. */
|
|
78
|
+
function elisionMarker(droppedCount) {
|
|
79
|
+
return {
|
|
80
|
+
role: "system",
|
|
81
|
+
parts: [{ type: "text", content: `[${droppedCount} earlier messages elided]` }],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Cap an array (e.g. message history) keeping the NEWEST content. Trims the item count
|
|
86
|
+
* to the last {@link MAX_OTEL_CONTENT_ARRAY_ITEMS}, then — when the serialized JSON still
|
|
87
|
+
* exceeds the char cap — drops whole elements from the front (oldest) until it fits,
|
|
88
|
+
* prepending a single elision marker so the gap is visible. Returns the serialized string.
|
|
89
|
+
*/
|
|
90
|
+
function serializeArrayWithCap(value) {
|
|
91
|
+
let items = value.length > MAX_OTEL_CONTENT_ARRAY_ITEMS
|
|
92
|
+
? value.slice(value.length - MAX_OTEL_CONTENT_ARRAY_ITEMS)
|
|
93
|
+
: value.slice();
|
|
94
|
+
const itemsTrimmed = value.length - items.length;
|
|
95
|
+
let dropped = 0;
|
|
96
|
+
let serialized = JSON.stringify(items);
|
|
97
|
+
while (serialized.length > MAX_OTEL_CONTENT_ATTRIBUTE_CHARS && items.length > 0) {
|
|
98
|
+
items.shift();
|
|
99
|
+
dropped += 1;
|
|
100
|
+
serialized = JSON.stringify([elisionMarker(itemsTrimmed + dropped), ...items]);
|
|
101
|
+
}
|
|
102
|
+
if (dropped > 0)
|
|
103
|
+
return serialized;
|
|
104
|
+
if (itemsTrimmed > 0)
|
|
105
|
+
return JSON.stringify([elisionMarker(itemsTrimmed), ...items]);
|
|
106
|
+
return serialized;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Tail-truncate a non-array serialized string to the char cap and append a compact
|
|
110
|
+
* suffix. Acceptable for non-cumulative values (system instructions, tool args/result)
|
|
111
|
+
* where the attribute is a plain string, not history we need to keep parseable.
|
|
112
|
+
*/
|
|
113
|
+
function capString(serialized) {
|
|
114
|
+
if (serialized.length <= MAX_OTEL_CONTENT_ATTRIBUTE_CHARS)
|
|
115
|
+
return serialized;
|
|
116
|
+
const keep = MAX_OTEL_CONTENT_ATTRIBUTE_CHARS - TRUNCATION_SUFFIX.length;
|
|
117
|
+
return serialized.slice(0, Math.max(0, keep)) + TRUNCATION_SUFFIX;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Turn a content value into a capped JSON string with PII redacted: sanitize framework
|
|
121
|
+
* metadata, redact (when a redactor is available), then serialize within the caps.
|
|
122
|
+
* Array content keeps the newest items (dropping oldest with a visible elision marker,
|
|
123
|
+
* so the result stays valid JSON); non-array content is tail-truncated with a suffix.
|
|
124
|
+
* Returns `undefined` when the value is empty. Never throws — a failure drops the value.
|
|
125
|
+
*/
|
|
126
|
+
export async function redactAndCapContent(value) {
|
|
127
|
+
if (value === undefined || value === null)
|
|
128
|
+
return undefined;
|
|
129
|
+
try {
|
|
130
|
+
const sanitized = sanitizePayloadValue(value);
|
|
131
|
+
const redactor = await getContentRedactor();
|
|
132
|
+
// Fail closed: if the redactor didn't load, drop the content rather than emit it
|
|
133
|
+
// unredacted — it is the highest-PII surface.
|
|
134
|
+
if (!redactor)
|
|
135
|
+
return undefined;
|
|
136
|
+
const redacted = await redactStringsDeep(sanitized, redactor);
|
|
137
|
+
if (typeof redacted === "string") {
|
|
138
|
+
return redacted.length === 0 ? undefined : capString(redacted);
|
|
139
|
+
}
|
|
140
|
+
if (Array.isArray(redacted)) {
|
|
141
|
+
const serialized = serializeArrayWithCap(redacted);
|
|
142
|
+
return serialized.length === 0 ? undefined : serialized;
|
|
143
|
+
}
|
|
144
|
+
const serialized = JSON.stringify(redacted);
|
|
145
|
+
if (serialized === undefined || serialized.length === 0)
|
|
146
|
+
return undefined;
|
|
147
|
+
return capString(serialized);
|
|
148
|
+
}
|
|
149
|
+
catch (err) {
|
|
150
|
+
logger.warn("failed to redact/serialize gen_ai content; dropping value", {
|
|
151
|
+
err: err instanceof Error ? err.message : String(err),
|
|
152
|
+
});
|
|
153
|
+
return undefined;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/** Redact + cap a content value and stamp it onto the span (when capture is on and non-empty). */
|
|
157
|
+
export async function setGenAiContentAttribute(span, key, value) {
|
|
158
|
+
// Skip the whole redact/serialize pass when the span won't keep the result — telemetry
|
|
159
|
+
// off (no-op span) or sampled out. This keeps the cost off the hot path for callers that
|
|
160
|
+
// stamp content around a live call (e.g. MCP tool args/result on every trade).
|
|
161
|
+
if (!span.isRecording())
|
|
162
|
+
return;
|
|
163
|
+
const out = await redactAndCapContent(value);
|
|
164
|
+
if (out !== undefined) {
|
|
165
|
+
try {
|
|
166
|
+
span.setAttribute(key, out);
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Tracing must never break the caller.
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ─── Metadata helpers ────────────────────────────────────────────────────────
|
|
174
|
+
/** Set every defined value in `attrs` on the span, skipping undefined/null. Never throws. */
|
|
175
|
+
export function setDefinedAttributes(span, attrs) {
|
|
176
|
+
try {
|
|
177
|
+
for (const [k, v] of Object.entries(attrs)) {
|
|
178
|
+
if (v !== undefined && v !== null)
|
|
179
|
+
span.setAttribute(k, v);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
// Tracing must never break the caller.
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/** Low-cardinality `error.type` for the spec: error.name, the string itself, else "_OTHER". */
|
|
187
|
+
export function errorTypeOf(error) {
|
|
188
|
+
if (error instanceof Error)
|
|
189
|
+
return error.name;
|
|
190
|
+
if (typeof error === "string")
|
|
191
|
+
return error;
|
|
192
|
+
return "_OTHER";
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Mark a span as failed: record the exception, set ERROR status, and stamp the spec's
|
|
196
|
+
* low-cardinality `error.type`. Never throws.
|
|
197
|
+
*/
|
|
198
|
+
export function recordSpanError(span, error) {
|
|
199
|
+
try {
|
|
200
|
+
span.recordException(error instanceof Error ? error : { message: String(error) });
|
|
201
|
+
span.setStatus({
|
|
202
|
+
code: SpanStatusCode.ERROR,
|
|
203
|
+
message: error instanceof Error ? error.message : String(error),
|
|
204
|
+
});
|
|
205
|
+
span.setAttribute("error.type", errorTypeOf(error));
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// Tracing must never break the caller.
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// ─── Value coercion ──────────────────────────────────────────────────────────
|
|
212
|
+
/** First finite number among the candidates, else undefined. */
|
|
213
|
+
export function firstNumber(...values) {
|
|
214
|
+
for (const v of values) {
|
|
215
|
+
if (typeof v === "number" && Number.isFinite(v))
|
|
216
|
+
return v;
|
|
217
|
+
}
|
|
218
|
+
return undefined;
|
|
219
|
+
}
|
|
220
|
+
/** Normalize a finish-reason value to a string array (gen_ai.response.finish_reasons is an array). */
|
|
221
|
+
export function toFinishReasons(value) {
|
|
222
|
+
if (value === undefined || value === null)
|
|
223
|
+
return undefined;
|
|
224
|
+
if (Array.isArray(value)) {
|
|
225
|
+
const out = value.filter((v) => typeof v === "string");
|
|
226
|
+
return out.length > 0 ? out : undefined;
|
|
227
|
+
}
|
|
228
|
+
if (typeof value === "string" && value.length > 0)
|
|
229
|
+
return [value];
|
|
230
|
+
return undefined;
|
|
231
|
+
}
|
|
232
|
+
// ─── gen_ai message normalization ─────────────────────────────────────────────
|
|
233
|
+
// Shape input/output messages into the spec's `{ role, parts: [...] }` structure
|
|
234
|
+
// (parts are typed: text / tool_call / tool_call_response), matching the native
|
|
235
|
+
// gateway mapping so the gen_ai views render identically. Unknown content is kept
|
|
236
|
+
// as a native nested object (not stringified) rather than dropped, so the single
|
|
237
|
+
// outer serialize escapes it exactly once.
|
|
238
|
+
function isRecord(v) {
|
|
239
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
240
|
+
}
|
|
241
|
+
function textPart(content) {
|
|
242
|
+
return { type: "text", content };
|
|
243
|
+
}
|
|
244
|
+
function toolCallResponsePart(part) {
|
|
245
|
+
return {
|
|
246
|
+
type: "tool_call_response",
|
|
247
|
+
...(typeof part.id === "string" ? { id: part.id } : {}),
|
|
248
|
+
result: part.result ?? part.response ?? part.content ?? "",
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/** Turn a message's `content` (string, array of blocks, or object) into typed parts. */
|
|
252
|
+
function contentParts(value) {
|
|
253
|
+
if (typeof value === "string")
|
|
254
|
+
return value.length > 0 ? [textPart(value)] : [];
|
|
255
|
+
if (!Array.isArray(value)) {
|
|
256
|
+
if (value === undefined || value === null)
|
|
257
|
+
return [];
|
|
258
|
+
// Keep an unknown object as a native nested part — the single outer
|
|
259
|
+
// JSON.stringify in redactAndCapContent serializes it exactly once
|
|
260
|
+
// (pre-stringifying here would double-escape its sub-structures).
|
|
261
|
+
if (isRecord(value))
|
|
262
|
+
return [value];
|
|
263
|
+
return [textPart(String(value))];
|
|
264
|
+
}
|
|
265
|
+
const parts = [];
|
|
266
|
+
for (const part of value) {
|
|
267
|
+
if (typeof part === "string") {
|
|
268
|
+
if (part.length > 0)
|
|
269
|
+
parts.push(textPart(part));
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
if (!isRecord(part))
|
|
273
|
+
continue;
|
|
274
|
+
if (typeof part.text === "string") {
|
|
275
|
+
parts.push(textPart(part.text));
|
|
276
|
+
}
|
|
277
|
+
else if (part.type === "text" && typeof part.content === "string") {
|
|
278
|
+
parts.push(textPart(part.content));
|
|
279
|
+
}
|
|
280
|
+
else if ((part.type === "tool_call" || part.type === "toolCall") && typeof part.name === "string") {
|
|
281
|
+
parts.push({
|
|
282
|
+
type: "tool_call",
|
|
283
|
+
name: part.name,
|
|
284
|
+
...(typeof part.id === "string" ? { id: part.id } : {}),
|
|
285
|
+
...(part.arguments !== undefined ? { arguments: part.arguments } : {}),
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
else if (part.type === "tool_call_response") {
|
|
289
|
+
parts.push(toolCallResponsePart(part));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// Unknown part kept as a native nested object (not stringified) so the
|
|
293
|
+
// single outer JSON.stringify serializes it once — preserving its real
|
|
294
|
+
// fields rather than escaping them into a text blob.
|
|
295
|
+
parts.push(part);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
return parts;
|
|
299
|
+
}
|
|
300
|
+
function normalizeGenAiMessage(value, fallbackRole) {
|
|
301
|
+
if (typeof value === "string") {
|
|
302
|
+
return value.length > 0 ? { role: fallbackRole, parts: [textPart(value)] } : undefined;
|
|
303
|
+
}
|
|
304
|
+
if (!isRecord(value))
|
|
305
|
+
return undefined;
|
|
306
|
+
const rawRole = typeof value.role === "string" ? value.role : fallbackRole;
|
|
307
|
+
const role = rawRole === "toolResult" ? "tool" : rawRole;
|
|
308
|
+
let parts;
|
|
309
|
+
if (role === "tool") {
|
|
310
|
+
const explicit = contentParts(value.parts);
|
|
311
|
+
parts =
|
|
312
|
+
explicit.length > 0
|
|
313
|
+
? explicit
|
|
314
|
+
: [toolCallResponsePart({ id: value.toolCallId, result: value.content ?? "" })];
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
parts = contentParts(value.parts ?? value.content);
|
|
318
|
+
}
|
|
319
|
+
if (parts.length === 0)
|
|
320
|
+
return undefined;
|
|
321
|
+
const finish = typeof value.finish_reason === "string"
|
|
322
|
+
? value.finish_reason
|
|
323
|
+
: typeof value.stopReason === "string"
|
|
324
|
+
? value.stopReason
|
|
325
|
+
: undefined;
|
|
326
|
+
return { role, parts, ...(finish ? { finish_reason: finish } : {}) };
|
|
327
|
+
}
|
|
328
|
+
/** Normalize a list of raw provider messages into spec `{ role, parts }` objects. */
|
|
329
|
+
export function normalizeGenAiMessages(value, fallbackRole) {
|
|
330
|
+
const source = Array.isArray(value) ? value : value === undefined || value === null ? [] : [value];
|
|
331
|
+
const out = [];
|
|
332
|
+
for (const item of source) {
|
|
333
|
+
const msg = normalizeGenAiMessage(item, fallbackRole);
|
|
334
|
+
if (msg)
|
|
335
|
+
out.push(msg);
|
|
336
|
+
}
|
|
337
|
+
return out.length > 0 ? out : undefined;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=gen-ai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-ai.js","sourceRoot":"","sources":["../../../src/telemetry/spans/gen-ai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Span telemetry — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Agent telemetry (LLM / tool / subagent / MCP) is emitted as real OTel gen_ai spans
|
|
5
|
+
* through the shared tracer: the gateway hooks via {@link registerSpanHooks}, on-site
|
|
6
|
+
* MCP calls via `SenpiClient.callTool` (both using the {@link module:gen-ai} mapping).
|
|
7
|
+
*/
|
|
8
|
+
export { HEADER_CORRELATION_ID, HEADER_ADDRESS, HEADER_RECIPE_NAME, HEADER_RUNTIME_ID, HEADER_RUNTIME_VERSION, } from "./constants.js";
|
|
9
|
+
export { registerSpanHooks, type RegisterSpanHooksOptions, type SpanHooksPluginApi, } from "./span-hooks.js";
|
|
10
|
+
export { GEN_AI, setGenAiContentAttribute, redactAndCapContent, } from "./gen-ai.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,GACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Span telemetry — barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Agent telemetry (LLM / tool / subagent / MCP) is emitted as real OTel gen_ai spans
|
|
5
|
+
* through the shared tracer: the gateway hooks via {@link registerSpanHooks}, on-site
|
|
6
|
+
* MCP calls via `SenpiClient.callTool` (both using the {@link module:gen-ai} mapping).
|
|
7
|
+
*/
|
|
8
|
+
export { HEADER_CORRELATION_ID, HEADER_ADDRESS, HEADER_RECIPE_NAME, HEADER_RUNTIME_ID, HEADER_RUNTIME_VERSION, } from "./constants.js";
|
|
9
|
+
export { registerSpanHooks, } from "./span-hooks.js";
|
|
10
|
+
export { GEN_AI, setGenAiContentAttribute, redactAndCapContent, } from "./gen-ai.js";
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/telemetry/spans/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,GAGlB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,aAAa,CAAC"}
|
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PII + secret redaction for span
|
|
2
|
+
* PII + secret redaction for span content.
|
|
3
3
|
*
|
|
4
|
-
* Walks
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* latency on the network-bound path rather than on the caller's enqueue call.
|
|
4
|
+
* Walks a JSON-shaped value and replaces matches in string values. Reused by the
|
|
5
|
+
* gen_ai content path (`gen-ai.ts`), which redacts conversation/tool content inline
|
|
6
|
+
* before stamping it onto a span (awaited per call).
|
|
8
7
|
*
|
|
9
8
|
* Scope (see createOpenRedactionAdapter): emails, phones (US, international,
|
|
10
9
|
* India, China, South Korea, Japan, UK mobile, Brazil), ~28 vendor API keys
|
|
11
10
|
* / tokens (AWS, GitHub, Stripe, OpenAI, etc.), EVM private keys, Anthropic
|
|
12
11
|
* `sk-ant-*` keys, generic `sk-*` keys, and BIP39 mnemonic phrases.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* and stay as-is.
|
|
18
|
-
*
|
|
19
|
-
* Off by default. Enable with `SENPI_PII_REDACTION_ENABLED=true`.
|
|
13
|
+
* The process-wide default redactor is registered unconditionally at plugin
|
|
14
|
+
* boot (see initDefaultPiiRedactor), so the event-log redact-field path
|
|
15
|
+
* (`logger.event()`) is scrubbed without an env gate.
|
|
20
16
|
*/
|
|
21
|
-
import type { TrackingSpan } from "./types.js";
|
|
22
17
|
/** Minimal interface so tests can inject a synchronous stub. */
|
|
23
18
|
export interface PiiRedactor {
|
|
24
19
|
redact(text: string): Promise<string>;
|
|
@@ -30,18 +25,21 @@ export interface PiiRedactor {
|
|
|
30
25
|
* when nothing changes — useful for short-circuit downstream comparisons.
|
|
31
26
|
*/
|
|
32
27
|
export declare function redactStringsDeep(value: unknown, redactor: PiiRedactor): Promise<unknown>;
|
|
28
|
+
export declare function setDefaultPiiRedactor(r: PiiRedactor | null): void;
|
|
29
|
+
export declare function getDefaultPiiRedactor(): PiiRedactor | null;
|
|
33
30
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
31
|
+
* Register the process-wide default PII redactor at plugin boot. Always on, no
|
|
32
|
+
* env gate: `logger.event()` redact fields (free-text LLM reasoning, venue
|
|
33
|
+
* errors, raw signals) are scrubbed on the live path.
|
|
36
34
|
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
35
|
+
* Fire-and-forget and never awaited, so it adds no boot latency and can't
|
|
36
|
+
* introduce a boot failure mode. The OpenRedaction + bip39 imports are dynamic,
|
|
37
|
+
* so they cold-start here; until the promise resolves `getDefaultPiiRedactor()`
|
|
38
|
+
* is null and the event path fails safe (drops the fields rather than emitting
|
|
39
|
+
* them raw). On install failure the redactor stays null — the fields keep being
|
|
40
|
+
* dropped, never leaked.
|
|
39
41
|
*/
|
|
40
|
-
export declare function
|
|
41
|
-
export declare function setDefaultPiiRedactor(r: PiiRedactor | null): void;
|
|
42
|
-
export declare function getDefaultPiiRedactor(): PiiRedactor | null;
|
|
43
|
-
/** Reads SENPI_PII_REDACTION_ENABLED. Truthy only on exact "true". */
|
|
44
|
-
export declare function isPiiRedactionEnabled(): boolean;
|
|
42
|
+
export declare function initDefaultPiiRedactor(): void;
|
|
45
43
|
/**
|
|
46
44
|
* Find BIP39-mnemonic spans in `text` using a true sliding window — not
|
|
47
45
|
* a greedy regex with a post-hoc validator.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact-pii.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/redact-pii.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAMH,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvC;AAQD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,OAAO,CAAC,CAgClB;AAUD,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAEjE;AAED,wBAAgB,qBAAqB,IAAI,WAAW,GAAG,IAAI,CAE1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAc7C;AAwOD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GACjB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA0CvC;AAsBD;;;;GAIG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,WAAW,CAAC,CAkCvE"}
|
|
@@ -1,22 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PII + secret redaction for span
|
|
2
|
+
* PII + secret redaction for span content.
|
|
3
3
|
*
|
|
4
|
-
* Walks
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* latency on the network-bound path rather than on the caller's enqueue call.
|
|
4
|
+
* Walks a JSON-shaped value and replaces matches in string values. Reused by the
|
|
5
|
+
* gen_ai content path (`gen-ai.ts`), which redacts conversation/tool content inline
|
|
6
|
+
* before stamping it onto a span (awaited per call).
|
|
8
7
|
*
|
|
9
8
|
* Scope (see createOpenRedactionAdapter): emails, phones (US, international,
|
|
10
9
|
* India, China, South Korea, Japan, UK mobile, Brazil), ~28 vendor API keys
|
|
11
10
|
* / tokens (AWS, GitHub, Stripe, OpenAI, etc.), EVM private keys, Anthropic
|
|
12
11
|
* `sk-ant-*` keys, generic `sk-*` keys, and BIP39 mnemonic phrases.
|
|
13
12
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* and stay as-is.
|
|
18
|
-
*
|
|
19
|
-
* Off by default. Enable with `SENPI_PII_REDACTION_ENABLED=true`.
|
|
13
|
+
* The process-wide default redactor is registered unconditionally at plugin
|
|
14
|
+
* boot (see initDefaultPiiRedactor), so the event-log redact-field path
|
|
15
|
+
* (`logger.event()`) is scrubbed without an env gate.
|
|
20
16
|
*/
|
|
21
17
|
import { createLogger } from "../../utils/logger.js";
|
|
22
18
|
const logger = createLogger("[senpi-core][redact-pii]");
|
|
@@ -64,25 +60,11 @@ export async function redactStringsDeep(value, redactor) {
|
|
|
64
60
|
}
|
|
65
61
|
return value;
|
|
66
62
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Redact PII inside `span.data` only. Top-level structural fields (address,
|
|
69
|
-
* correlationId, runId, etc.) are non-PII identifiers and skipped.
|
|
70
|
-
*
|
|
71
|
-
* Returns the same span if nothing changed (avoids object allocation when no
|
|
72
|
-
* PII was found).
|
|
73
|
-
*/
|
|
74
|
-
export async function redactSpanData(span, redactor) {
|
|
75
|
-
if (!span.data || typeof span.data !== "object")
|
|
76
|
-
return span;
|
|
77
|
-
const next = await redactStringsDeep(span.data, redactor);
|
|
78
|
-
if (next === span.data)
|
|
79
|
-
return span;
|
|
80
|
-
return { ...span, data: next };
|
|
81
|
-
}
|
|
82
63
|
// ─── Default redactor lifecycle ────────────────────────────────────────────
|
|
83
64
|
//
|
|
84
|
-
// The
|
|
85
|
-
//
|
|
65
|
+
// The plugin registers a default redactor at boot (always on); the event-log
|
|
66
|
+
// redact-field path (`logger.event()`) looks it up via getDefaultPiiRedactor().
|
|
67
|
+
// Tests can override.
|
|
86
68
|
let defaultRedactor = null;
|
|
87
69
|
export function setDefaultPiiRedactor(r) {
|
|
88
70
|
defaultRedactor = r;
|
|
@@ -90,9 +72,27 @@ export function setDefaultPiiRedactor(r) {
|
|
|
90
72
|
export function getDefaultPiiRedactor() {
|
|
91
73
|
return defaultRedactor;
|
|
92
74
|
}
|
|
93
|
-
/**
|
|
94
|
-
|
|
95
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Register the process-wide default PII redactor at plugin boot. Always on, no
|
|
77
|
+
* env gate: `logger.event()` redact fields (free-text LLM reasoning, venue
|
|
78
|
+
* errors, raw signals) are scrubbed on the live path.
|
|
79
|
+
*
|
|
80
|
+
* Fire-and-forget and never awaited, so it adds no boot latency and can't
|
|
81
|
+
* introduce a boot failure mode. The OpenRedaction + bip39 imports are dynamic,
|
|
82
|
+
* so they cold-start here; until the promise resolves `getDefaultPiiRedactor()`
|
|
83
|
+
* is null and the event path fails safe (drops the fields rather than emitting
|
|
84
|
+
* them raw). On install failure the redactor stays null — the fields keep being
|
|
85
|
+
* dropped, never leaked.
|
|
86
|
+
*/
|
|
87
|
+
export function initDefaultPiiRedactor() {
|
|
88
|
+
createOpenRedactionAdapter()
|
|
89
|
+
.then((redactor) => {
|
|
90
|
+
setDefaultPiiRedactor(redactor);
|
|
91
|
+
logger.info("PII redaction ready — event redact fields scrubbed for emails, international phones (US/IN/CN/KR/JP/UK/BR/+intl), vendor API keys, EVM private keys, and BIP39 mnemonics before emit");
|
|
92
|
+
})
|
|
93
|
+
.catch((err) => {
|
|
94
|
+
logger.warn("PII redaction init failed — event evidence will be DROPPED (never emitted raw); check openredaction install", { err: err instanceof Error ? err.message : String(err) });
|
|
95
|
+
});
|
|
96
96
|
}
|
|
97
97
|
/**
|
|
98
98
|
* Built-in OpenRedaction pattern types we allowlist for span redaction.
|
|
@@ -118,6 +118,10 @@ export function isPiiRedactionEnabled() {
|
|
|
118
118
|
* in some contexts via undocumented filters; replacing it with our own
|
|
119
119
|
* custom version gives us deterministic behavior.
|
|
120
120
|
* - `TURKEY_ID` — personal national ID, not a credential.
|
|
121
|
+
* - `CARD_AUTH_CODE` — over-broad: emits the `[AUTH_*]` label on ordinary
|
|
122
|
+
* auth vocabulary ("authenticate", "sensitive", "command", "credentials"),
|
|
123
|
+
* which made captured prompts/content unreadable. Card CVV/CVC codes are
|
|
124
|
+
* near-zero-likelihood in this runtime's content, so it's dropped entirely.
|
|
121
125
|
*/
|
|
122
126
|
const ALLOWLISTED_PATTERN_TYPES = [
|
|
123
127
|
// Contact PII (phones come from custom patterns below)
|
|
@@ -127,7 +131,6 @@ const ALLOWLISTED_PATTERN_TYPES = [
|
|
|
127
131
|
"AWS_SECRET_KEY",
|
|
128
132
|
"AZURE_STORAGE_KEY",
|
|
129
133
|
"BEARER_TOKEN",
|
|
130
|
-
"CARD_AUTH_CODE",
|
|
131
134
|
"DOCKER_AUTH",
|
|
132
135
|
"FIREBASE_API_KEY",
|
|
133
136
|
"GENERIC_API_KEY",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact-pii.js","sourceRoot":"","sources":["../../../src/telemetry/spans/redact-pii.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-payload.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/sanitize-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAWH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY3D;AAQD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAwB5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize-payload.js","sourceRoot":"","sources":["../../../src/telemetry/spans/sanitize-payload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,wBAAwB,GAC5B,+GAA+G,CAAC;AAClH,MAAM,2BAA2B,GAAG,6BAA6B,CAAC;AAClE,MAAM,0BAA0B,GAC9B,uEAAuE,CAAC;AAC1E,MAAM,oBAAoB,GAAG,4DAA4D,CAAC;AAC1F,MAAM,0BAA0B,GAC9B,yKAAyK,CAAC;AAE5K,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,kBAAkB,GAAG,KAAK;SAC7B,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC;SACxB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC;SACrB,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,MAAM,sBAAsB,GAAG,kBAAkB;SAC9C,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;SACxC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,sBAAsB,CAAC,OAAO,CAAC,wBAAwB,EAAE,mBAAmB,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,SAAS,KAAK,IAAI;gBAAE,OAAO,GAAG,IAAI,CAAC;YACvC,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,MAAM,SAAS,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YACtB,IAAI,SAAS,KAAK,KAAK;gBAAE,OAAO,GAAG,IAAI,CAAC;QAC1C,CAAC;QACD,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Minimal shape of the OpenClaw plugin API surface we need. */
|
|
2
|
+
export interface SpanHooksPluginApi {
|
|
3
|
+
on(hookName: string, handler: (...args: unknown[]) => void | Promise<void>, opts?: {
|
|
4
|
+
priority?: number;
|
|
5
|
+
}): void;
|
|
6
|
+
}
|
|
7
|
+
export interface RegisterSpanHooksOptions {
|
|
8
|
+
api: SpanHooksPluginApi;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Grace window the `agent_end` sweep holds a finished model span before ending it, so a
|
|
12
|
+
* trailing `llm_output` (observed ~1 ms later in the codex/harness flow, but timed generously)
|
|
13
|
+
* can finalize it with token usage + output messages first. Unref'd, so it never holds the
|
|
14
|
+
* process open; an orphan run with no `llm_output` lets the timer end the span.
|
|
15
|
+
*/
|
|
16
|
+
export declare const MODEL_SPAN_END_GRACE_MS = 2000;
|
|
17
|
+
export declare function registerSpanHooks(options: RegisterSpanHooksOptions): void;
|
|
18
|
+
//# sourceMappingURL=span-hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-hooks.d.ts","sourceRoot":"","sources":["../../../src/telemetry/spans/span-hooks.ts"],"names":[],"mappings":"AA6DA,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,EAAE,CACA,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,EACrD,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,IAAI,CAAC;CACT;AAED,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,kBAAkB,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAW5C,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CA2kBzE"}
|