@mastra/core 0.13.2 → 0.14.0-alpha.1
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/README.md +5 -44
- package/dist/agent/agent.types.d.ts +12 -2
- package/dist/agent/agent.types.d.ts.map +1 -1
- package/dist/agent/index.cjs +14 -14
- package/dist/agent/index.d.ts +17 -17
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -2
- package/dist/agent/input-processor/index.cjs +28 -0
- package/dist/agent/input-processor/index.js +3 -0
- package/dist/agent/input-processor/processors/index.d.ts +4 -4
- package/dist/agent/input-processor/processors/index.d.ts.map +1 -1
- package/dist/agent/input-processor/processors/language-detector.d.ts +6 -139
- package/dist/agent/input-processor/processors/language-detector.d.ts.map +1 -1
- package/dist/agent/input-processor/processors/moderation.d.ts +5 -94
- package/dist/agent/input-processor/processors/moderation.d.ts.map +1 -1
- package/dist/agent/input-processor/processors/pii-detector.d.ts +6 -164
- package/dist/agent/input-processor/processors/pii-detector.d.ts.map +1 -1
- package/dist/agent/input-processor/processors/prompt-injection-detector.d.ts +6 -96
- package/dist/agent/input-processor/processors/prompt-injection-detector.d.ts.map +1 -1
- package/dist/agent/input-processor/processors/unicode-normalizer.d.ts +9 -25
- package/dist/agent/input-processor/processors/unicode-normalizer.d.ts.map +1 -1
- package/dist/agent/message-list/index.d.ts +138 -39
- package/dist/agent/message-list/index.d.ts.map +1 -1
- package/dist/agent/message-list/types.d.ts +3 -0
- package/dist/agent/message-list/types.d.ts.map +1 -0
- package/dist/agent/message-list/utils/ai-v4-v5/core-model-message.d.ts +3 -0
- package/dist/agent/message-list/utils/ai-v4-v5/core-model-message.d.ts.map +1 -0
- package/dist/agent/message-list/utils/ai-v4-v5/ui-message.d.ts +3 -0
- package/dist/agent/message-list/utils/ai-v4-v5/ui-message.d.ts.map +1 -0
- package/dist/agent/message-list/utils/ai-v5/tool.d.ts +16 -0
- package/dist/agent/message-list/utils/ai-v5/tool.d.ts.map +1 -0
- package/dist/agent/types.d.ts +34 -4
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/ai-tracing/base.d.ts +22 -7
- package/dist/ai-tracing/base.d.ts.map +1 -1
- package/dist/ai-tracing/default.d.ts +3 -3
- package/dist/ai-tracing/default.d.ts.map +1 -1
- package/dist/ai-tracing/index.cjs +253 -72
- package/dist/ai-tracing/index.cjs.map +1 -1
- package/dist/ai-tracing/index.d.ts +1 -0
- package/dist/ai-tracing/index.d.ts.map +1 -1
- package/dist/ai-tracing/index.js +243 -71
- package/dist/ai-tracing/index.js.map +1 -1
- package/dist/ai-tracing/no-op.d.ts +39 -7
- package/dist/ai-tracing/no-op.d.ts.map +1 -1
- package/dist/ai-tracing/registry.d.ts +29 -4
- package/dist/ai-tracing/registry.d.ts.map +1 -1
- package/dist/ai-tracing/types.d.ts +112 -53
- package/dist/ai-tracing/types.d.ts.map +1 -1
- package/dist/ai-tracing/utils.d.ts +24 -0
- package/dist/ai-tracing/utils.d.ts.map +1 -0
- package/dist/base.cjs +2 -2
- package/dist/base.js +1 -1
- package/dist/bundler/index.cjs +2 -2
- package/dist/bundler/index.js +1 -1
- package/dist/{chunk-N3VGOJZV.cjs → chunk-4BMFOQDC.cjs} +27 -47
- package/dist/chunk-4BMFOQDC.cjs.map +1 -0
- package/dist/{chunk-MTRRRTB4.js → chunk-4XDSHUFK.js} +7 -6
- package/dist/chunk-4XDSHUFK.js.map +1 -0
- package/dist/{chunk-SSJVFUBZ.js → chunk-67L5DRLO.js} +3 -3
- package/dist/{chunk-SSJVFUBZ.js.map → chunk-67L5DRLO.js.map} +1 -1
- package/dist/{chunk-FUERFM46.js → chunk-6GF5M4GX.js} +3 -3
- package/dist/{chunk-FUERFM46.js.map → chunk-6GF5M4GX.js.map} +1 -1
- package/dist/{chunk-7E2SNI5D.cjs → chunk-7AXX55C5.cjs} +5 -5
- package/dist/chunk-7AXX55C5.cjs.map +1 -0
- package/dist/{chunk-6W6LYR7M.js → chunk-7XGDFDZ2.js} +3 -3
- package/dist/{chunk-6W6LYR7M.js.map → chunk-7XGDFDZ2.js.map} +1 -1
- package/dist/{chunk-R4HT5XUH.cjs → chunk-ASJVWHIK.cjs} +993 -124
- package/dist/chunk-ASJVWHIK.cjs.map +1 -0
- package/dist/{chunk-ZDZ57MIU.js → chunk-AWILTHBM.js} +3 -3
- package/dist/{chunk-ZDZ57MIU.js.map → chunk-AWILTHBM.js.map} +1 -1
- package/dist/{chunk-DDYSOZ25.js → chunk-AYXRNQH3.js} +3 -3
- package/dist/{chunk-DDYSOZ25.js.map → chunk-AYXRNQH3.js.map} +1 -1
- package/dist/{chunk-U2CK6AN5.cjs → chunk-BCCEYWAV.cjs} +4 -4
- package/dist/{chunk-U2CK6AN5.cjs.map → chunk-BCCEYWAV.cjs.map} +1 -1
- package/dist/{chunk-MH64VYGF.cjs → chunk-CSTWQQ3C.cjs} +14 -13
- package/dist/chunk-CSTWQQ3C.cjs.map +1 -0
- package/dist/{chunk-FTPL7ILZ.js → chunk-CWZDKGJ6.js} +3 -3
- package/dist/{chunk-FTPL7ILZ.js.map → chunk-CWZDKGJ6.js.map} +1 -1
- package/dist/{chunk-MVSUZXER.cjs → chunk-D7P76YH6.cjs} +4 -4
- package/dist/{chunk-MVSUZXER.cjs.map → chunk-D7P76YH6.cjs.map} +1 -1
- package/dist/{chunk-IL5SHDY4.js → chunk-DAMIFZPW.js} +949 -103
- package/dist/chunk-DAMIFZPW.js.map +1 -0
- package/dist/{chunk-KLXRYVVQ.cjs → chunk-DVI6XHUC.cjs} +4 -4
- package/dist/{chunk-KLXRYVVQ.cjs.map → chunk-DVI6XHUC.cjs.map} +1 -1
- package/dist/chunk-ELKY3FEM.cjs +14 -0
- package/dist/{chunk-IP5NGA2S.cjs.map → chunk-ELKY3FEM.cjs.map} +1 -1
- package/dist/{chunk-TOODGJKM.js → chunk-GZVSHXPP.js} +3 -3
- package/dist/chunk-GZVSHXPP.js.map +1 -0
- package/dist/{chunk-WA3SWCXD.cjs → chunk-I4XP6RAN.cjs} +9 -9
- package/dist/{chunk-WA3SWCXD.cjs.map → chunk-I4XP6RAN.cjs.map} +1 -1
- package/dist/{chunk-PLVSXEQP.cjs → chunk-IAP4IWKM.cjs} +4 -4
- package/dist/{chunk-PLVSXEQP.cjs.map → chunk-IAP4IWKM.cjs.map} +1 -1
- package/dist/{chunk-YT4RGZYO.cjs → chunk-KXCUCBEI.cjs} +8 -8
- package/dist/{chunk-YT4RGZYO.cjs.map → chunk-KXCUCBEI.cjs.map} +1 -1
- package/dist/{chunk-Z74LG5VH.cjs → chunk-LFAAEOQC.cjs} +21 -4
- package/dist/chunk-LFAAEOQC.cjs.map +1 -0
- package/dist/{chunk-DK7AVDMI.cjs → chunk-LVVAUDVQ.cjs} +4 -4
- package/dist/{chunk-DK7AVDMI.cjs.map → chunk-LVVAUDVQ.cjs.map} +1 -1
- package/dist/{chunk-HBMZEZTO.js → chunk-ON4S33NP.js} +3 -3
- package/dist/{chunk-HBMZEZTO.js.map → chunk-ON4S33NP.js.map} +1 -1
- package/dist/{chunk-L6YBPFYF.js → chunk-OPT2L5AM.js} +1089 -81
- package/dist/chunk-OPT2L5AM.js.map +1 -0
- package/dist/{chunk-N2KMAW6T.js → chunk-P7WF6NQU.js} +20 -4
- package/dist/chunk-P7WF6NQU.js.map +1 -0
- package/dist/{chunk-KEMW2BER.js → chunk-PY4MHJTE.js} +3 -3
- package/dist/{chunk-KEMW2BER.js.map → chunk-PY4MHJTE.js.map} +1 -1
- package/dist/{chunk-TZVJV7EV.js → chunk-QSJZLHWA.js} +5 -5
- package/dist/{chunk-TZVJV7EV.js.map → chunk-QSJZLHWA.js.map} +1 -1
- package/dist/{chunk-DCOKWJ5G.cjs → chunk-RJCNC57P.cjs} +1110 -79
- package/dist/chunk-RJCNC57P.cjs.map +1 -0
- package/dist/{chunk-LMW44O4V.cjs → chunk-RPV7GQAX.cjs} +4 -4
- package/dist/{chunk-LMW44O4V.cjs.map → chunk-RPV7GQAX.cjs.map} +1 -1
- package/dist/{chunk-TZOR5M7H.js → chunk-RYCRCJCY.js} +25 -45
- package/dist/chunk-RYCRCJCY.js.map +1 -0
- package/dist/{chunk-IDDUQR6P.cjs → chunk-V5WKCX3G.cjs} +3 -3
- package/dist/chunk-V5WKCX3G.cjs.map +1 -0
- package/dist/{chunk-6AR2Z5ZG.js → chunk-X3GXU6TZ.js} +3 -3
- package/dist/chunk-X3GXU6TZ.js.map +1 -0
- package/dist/deployer/index.cjs +2 -2
- package/dist/deployer/index.js +1 -1
- package/dist/index.cjs +74 -70
- package/dist/index.js +14 -14
- package/dist/llm/index.d.ts +2 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/model/base.types.d.ts +2 -6
- package/dist/llm/model/base.types.d.ts.map +1 -1
- package/dist/llm/model/index.d.ts +0 -1
- package/dist/llm/model/index.d.ts.map +1 -1
- package/dist/llm/model/model.d.ts +3 -2
- package/dist/llm/model/model.d.ts.map +1 -1
- package/dist/llm/model/model.loop.d.ts +25 -0
- package/dist/llm/model/model.loop.d.ts.map +1 -0
- package/dist/llm/model/model.loop.types.d.ts +39 -0
- package/dist/llm/model/model.loop.types.d.ts.map +1 -0
- package/dist/llm/model/shared.types.d.ts +8 -0
- package/dist/llm/model/shared.types.d.ts.map +1 -0
- package/dist/logger/constants.d.ts +1 -1
- package/dist/logger/index.cjs +6 -6
- package/dist/logger/index.js +1 -1
- package/dist/loop/index.cjs +2848 -0
- package/dist/loop/index.cjs.map +1 -0
- package/dist/loop/index.d.ts +2 -0
- package/dist/loop/index.d.ts.map +1 -0
- package/dist/loop/index.js +2842 -0
- package/dist/loop/index.js.map +1 -0
- package/dist/loop/loop.d.ts +5 -0
- package/dist/loop/loop.d.ts.map +1 -0
- package/dist/loop/telemetry/index.d.ts +36 -0
- package/dist/loop/telemetry/index.d.ts.map +1 -0
- package/dist/loop/telemetry/noop.d.ts +3 -0
- package/dist/loop/telemetry/noop.d.ts.map +1 -0
- package/dist/loop/test-utils/fullStream.d.ts +6 -0
- package/dist/loop/test-utils/fullStream.d.ts.map +1 -0
- package/dist/loop/test-utils/generateText.d.ts +6 -0
- package/dist/loop/test-utils/generateText.d.ts.map +1 -0
- package/dist/loop/test-utils/mockTracer.d.ts +47 -0
- package/dist/loop/test-utils/mockTracer.d.ts.map +1 -0
- package/dist/loop/test-utils/options.d.ts +6 -0
- package/dist/loop/test-utils/options.d.ts.map +1 -0
- package/dist/loop/test-utils/resultObject.d.ts +6 -0
- package/dist/loop/test-utils/resultObject.d.ts.map +1 -0
- package/dist/loop/test-utils/streamObject.d.ts +6 -0
- package/dist/loop/test-utils/streamObject.d.ts.map +1 -0
- package/dist/loop/test-utils/telemetry.d.ts +6 -0
- package/dist/loop/test-utils/telemetry.d.ts.map +1 -0
- package/dist/loop/test-utils/textStream.d.ts +6 -0
- package/dist/loop/test-utils/textStream.d.ts.map +1 -0
- package/dist/loop/test-utils/toUIMessageStream.d.ts +6 -0
- package/dist/loop/test-utils/toUIMessageStream.d.ts.map +1 -0
- package/dist/loop/test-utils/tools.d.ts +6 -0
- package/dist/loop/test-utils/tools.d.ts.map +1 -0
- package/dist/loop/test-utils/utils.d.ts +40 -0
- package/dist/loop/test-utils/utils.d.ts.map +1 -0
- package/dist/loop/types.d.ts +68 -0
- package/dist/loop/types.d.ts.map +1 -0
- package/dist/loop/workflow/llm-execution.d.ts +80 -0
- package/dist/loop/workflow/llm-execution.d.ts.map +1 -0
- package/dist/loop/workflow/outer-llm-step.d.ts +43 -0
- package/dist/loop/workflow/outer-llm-step.d.ts.map +1 -0
- package/dist/loop/workflow/run-state.d.ts +24 -0
- package/dist/loop/workflow/run-state.d.ts.map +1 -0
- package/dist/loop/workflow/schema.d.ts +80 -0
- package/dist/loop/workflow/schema.d.ts.map +1 -0
- package/dist/loop/workflow/stream.d.ts +6 -0
- package/dist/loop/workflow/stream.d.ts.map +1 -0
- package/dist/loop/workflow/tool-call-step.d.ts +41 -0
- package/dist/loop/workflow/tool-call-step.d.ts.map +1 -0
- package/dist/mastra/index.cjs +2 -2
- package/dist/mastra/index.d.ts +4 -5
- package/dist/mastra/index.d.ts.map +1 -1
- package/dist/mastra/index.js +1 -1
- package/dist/mcp/index.cjs +4 -4
- package/dist/mcp/index.js +2 -2
- package/dist/memory/index.cjs +4 -4
- package/dist/memory/index.js +1 -1
- package/dist/network/index.cjs +6 -6
- package/dist/network/index.cjs.map +1 -1
- package/dist/network/index.js +3 -3
- package/dist/network/index.js.map +1 -1
- package/dist/network/network.d.ts +8 -7
- package/dist/network/network.d.ts.map +1 -1
- package/dist/network/vNext/index.cjs +21 -21
- package/dist/network/vNext/index.cjs.map +1 -1
- package/dist/network/vNext/index.d.ts +7 -7
- package/dist/network/vNext/index.d.ts.map +1 -1
- package/dist/network/vNext/index.js +7 -7
- package/dist/network/vNext/index.js.map +1 -1
- package/dist/processors/index.cjs +512 -0
- package/dist/processors/index.cjs.map +1 -0
- package/dist/processors/index.d.ts +38 -0
- package/dist/processors/index.d.ts.map +1 -0
- package/dist/processors/index.js +481 -0
- package/dist/processors/index.js.map +1 -0
- package/dist/processors/processors/batch-parts.d.ts +42 -0
- package/dist/processors/processors/batch-parts.d.ts.map +1 -0
- package/dist/processors/processors/index.d.ts +10 -0
- package/dist/processors/processors/index.d.ts.map +1 -0
- package/dist/processors/processors/language-detector.d.ts +151 -0
- package/dist/processors/processors/language-detector.d.ts.map +1 -0
- package/dist/processors/processors/moderation.d.ts +130 -0
- package/dist/processors/processors/moderation.d.ts.map +1 -0
- package/dist/processors/processors/pii-detector.d.ts +197 -0
- package/dist/processors/processors/pii-detector.d.ts.map +1 -0
- package/dist/processors/processors/prompt-injection-detector.d.ts +108 -0
- package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -0
- package/dist/processors/processors/structured-output.d.ts +42 -0
- package/dist/processors/processors/structured-output.d.ts.map +1 -0
- package/dist/processors/processors/system-prompt-scrubber.d.ts +92 -0
- package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -0
- package/dist/processors/processors/token-limiter.d.ts +66 -0
- package/dist/processors/processors/token-limiter.d.ts.map +1 -0
- package/dist/processors/processors/unicode-normalizer.d.ts +34 -0
- package/dist/processors/processors/unicode-normalizer.d.ts.map +1 -0
- package/dist/processors/runner.d.ts +41 -0
- package/dist/processors/runner.d.ts.map +1 -0
- package/dist/relevance/index.cjs +4 -4
- package/dist/relevance/index.js +1 -1
- package/dist/scores/index.cjs +5 -5
- package/dist/scores/index.js +2 -2
- package/dist/server/index.cjs +2 -2
- package/dist/server/index.js +1 -1
- package/dist/storage/domains/operations/base.d.ts.map +1 -1
- package/dist/storage/index.cjs +15 -17
- package/dist/storage/index.cjs.map +1 -1
- package/dist/storage/index.js +4 -6
- package/dist/storage/index.js.map +1 -1
- package/dist/stream/aisdk/v4/transform.d.ts +26 -0
- package/dist/stream/aisdk/v4/transform.d.ts.map +1 -1
- package/dist/stream/aisdk/v5/compat.d.ts +159 -0
- package/dist/stream/aisdk/v5/compat.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/execute.d.ts +29 -0
- package/dist/stream/aisdk/v5/execute.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/file.d.ts +38 -0
- package/dist/stream/aisdk/v5/file.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/input.d.ts +15 -0
- package/dist/stream/aisdk/v5/input.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/object/schema.d.ts +4 -0
- package/dist/stream/aisdk/v5/object/schema.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/object/stream-object.d.ts +34 -0
- package/dist/stream/aisdk/v5/object/stream-object.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/output-helpers.d.ts +76 -0
- package/dist/stream/aisdk/v5/output-helpers.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/output.d.ts +119 -0
- package/dist/stream/aisdk/v5/output.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/test-utils.d.ts +19 -0
- package/dist/stream/aisdk/v5/test-utils.d.ts.map +1 -0
- package/dist/stream/aisdk/v5/transform.d.ts +31 -0
- package/dist/stream/aisdk/v5/transform.d.ts.map +1 -0
- package/dist/stream/base/input.d.ts +1 -1
- package/dist/stream/base/output.d.ts +89 -0
- package/dist/stream/base/output.d.ts.map +1 -0
- package/dist/stream/types.d.ts +30 -0
- package/dist/stream/types.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.cjs +2 -2
- package/dist/test-utils/llm-mock.cjs.map +1 -1
- package/dist/test-utils/llm-mock.d.ts +2 -2
- package/dist/test-utils/llm-mock.d.ts.map +1 -1
- package/dist/test-utils/llm-mock.js +2 -2
- package/dist/test-utils/llm-mock.js.map +1 -1
- package/dist/tools/tool-builder/builder.d.ts +3 -2
- package/dist/tools/tool-builder/builder.d.ts.map +1 -1
- package/dist/tools/types.d.ts +9 -0
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tts/index.cjs +2 -2
- package/dist/tts/index.js +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.cjs +19 -15
- package/dist/utils.d.ts +3 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/dist/vector/index.cjs +2 -2
- package/dist/vector/index.js +1 -1
- package/dist/voice/index.cjs +4 -4
- package/dist/voice/index.js +1 -1
- package/dist/workflows/default.d.ts.map +1 -1
- package/dist/workflows/index.cjs +10 -10
- package/dist/workflows/index.js +1 -1
- package/dist/workflows/legacy/index.cjs +22 -22
- package/dist/workflows/legacy/index.js +1 -1
- package/loop.d.ts +1 -0
- package/package.json +16 -1
- package/processors.d.ts +1 -0
- package/dist/agent/input-processor/processors/index.cjs +0 -28
- package/dist/agent/input-processor/processors/index.js +0 -3
- package/dist/agent/input-processor/runner.d.ts +0 -4
- package/dist/agent/input-processor/runner.d.ts.map +0 -1
- package/dist/chunk-6AR2Z5ZG.js.map +0 -1
- package/dist/chunk-7E2SNI5D.cjs.map +0 -1
- package/dist/chunk-DCOKWJ5G.cjs.map +0 -1
- package/dist/chunk-IDDUQR6P.cjs.map +0 -1
- package/dist/chunk-IL5SHDY4.js.map +0 -1
- package/dist/chunk-IP5NGA2S.cjs +0 -14
- package/dist/chunk-L6YBPFYF.js.map +0 -1
- package/dist/chunk-MH64VYGF.cjs.map +0 -1
- package/dist/chunk-MTRRRTB4.js.map +0 -1
- package/dist/chunk-N2KMAW6T.js.map +0 -1
- package/dist/chunk-N3VGOJZV.cjs.map +0 -1
- package/dist/chunk-R4HT5XUH.cjs.map +0 -1
- package/dist/chunk-TOODGJKM.js.map +0 -1
- package/dist/chunk-TZOR5M7H.js.map +0 -1
- package/dist/chunk-Z74LG5VH.cjs.map +0 -1
- package/dist/llm/model/base.d.ts +0 -26
- package/dist/llm/model/base.d.ts.map +0 -1
- /package/dist/agent/input-processor/{processors/index.cjs.map → index.cjs.map} +0 -0
- /package/dist/agent/input-processor/{processors/index.js.map → index.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/ai-tracing/no-op.ts","../../src/ai-tracing/types.ts","../../src/ai-tracing/base.ts","../../src/ai-tracing/default.ts","../../src/ai-tracing/registry.ts"],"names":["AISpanType","SamplingStrategyType","AITracingEventType","MastraBase","RegisteredLogger","MastraError","ConsoleLogger"],"mappings":";;;;;;;AAOO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAoE;AAAA,EACxE,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEP,WAAA,CAAY,SAA+B,SAAA,EAA4B;AACrE,IAAA,IAAA,CAAK,EAAA,GAAK,OAAA;AACV,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,OAAO,KAAA,GAAS,IAAA;AACtD,IAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA,EAEA,GAAA,GAAY;AAAA,EAAC;AAAA,EACb,KAAA,GAAc;AAAA,EAAC;AAAA,EACf,eAAA,CACE,IAAA,EACA,IAAA,EACA,QAAA,EACoB;AACpB,IAAA,OAAO,IAAI,WAAA,CAAuB,EAAE,IAAA,EAAM,IAAA,EAAM,UAAU,MAAA,EAAQ,IAAA,EAAK,EAAG,IAAA,CAAK,SAAS,CAAA;AAAA,EAC1F;AAAA,EACA,MAAA,GAAe;AAAA,EAAC;AAClB,CAAA;;;ACvBO,IAAK,UAAA,qBAAAA,WAAAA,KAAL;AAEL,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,YAAA,gBAAA,CAAA,GAAiB,gBAAA;AAEjB,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,YAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAdN,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AA+NL,IAAK,oBAAA,qBAAAC,qBAAAA,KAAL;AACL,EAAAA,sBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,sBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,sBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,sBAAA,QAAA,CAAA,GAAS,QAAA;AAJC,EAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AA6CL,IAAK,kBAAA,qBAAAC,mBAAAA,KAAL;AACL,EAAAA,oBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,oBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,oBAAA,YAAA,CAAA,GAAa,YAAA;AAHH,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;;;AC9PL,IAAe,eAAA,GAAf,cAAuCC,4BAAA,CAAW;AAAA,EAC7C,MAAA;AAAA,EAEV,YAAY,MAAA,EAAyB;AACnC,IAAA,KAAA,CAAM,EAAE,SAAA,EAAWC,kCAAA,CAAiB,cAAc,IAAA,EAAM,MAAA,CAAO,aAAa,CAAA;AAE5E,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAA,CAAO,WAAW,eAAe,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACpH;AAAA;AAAA;AAAA;AAAA,EAMA,IAAc,SAAA,GAAiC;AAC7C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,EAAC;AAAA,EACnC;AAAA,EAEA,IAAc,UAAA,GAAgC;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UACE,IAAA,EACA,IAAA,EACA,QAAA,EACA,MAAA,EACA,gBACA,UAAA,EACe;AACf,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,EAAE,cAAA,EAAgB,UAAA,EAAY,CAAA,EAAG;AACtD,MAAA,OAAO,IAAI,WAAkB,EAAE,IAAA,EAAM,MAAM,QAAA,EAAU,MAAA,IAAU,IAAI,CAAA;AAAA,IACrE;AAEA,IAAA,MAAM,OAAA,GAAgC;AAAA,MACpC,IAAA;AAAA,MACA,IAAA;AAAA,MACA,QAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,MAAA,GAAS,MAAA,CAAO,KAAA,GAAQ,IAAA;AAGrC,IAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAG3B,IAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAEzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,SAAA,GAAuC;AACrC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,GAA6C;AAC3C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAA4C;AAC1C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,UAAU,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY;AACV,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,kBAA4C,IAAA,EAA2B;AAE7E,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAG5C,IAAA,IAAA,CAAK,GAAA,GAAM,CAAC,QAAA,KAA6C;AACvD,MAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,MAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,CAAC,QAAA,KAA4C;AACzD,MAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,aAAa,YAAA,EAAuC;AAE5D,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,IAAA,CAAK,MAAA;AAE1B,IAAA,QAAQ,SAAS,IAAA;AAAM,MACrB,KAAA,QAAA;AACE,QAAA,OAAO,IAAA;AAAA,MACT,KAAA,OAAA;AACE,QAAA,OAAO,KAAA;AAAA,MACT,KAAA,OAAA;AACE,QAAA,IAAI,QAAA,CAAS,gBAAgB,MAAA,IAAa,QAAA,CAAS,cAAc,CAAA,IAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AAC9F,UAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,YACV,CAAA,8BAAA,EAAiC,SAAS,WAAW,CAAA,4DAAA;AAAA,WACvD;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA,CAAK,MAAA,EAAO,GAAI,QAAA,CAAS,WAAA;AAAA,MAClC,KAAA,QAAA;AACE,QAAA,OAAO,QAAA,CAAS,QAAQ,YAAY,CAAA;AAAA,MACtC;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA4C,QAAA,CAAiB,IAAI,CAAA,CAAE,CAAA;AAAA;AACvF,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,IAAA,EAAmC;AACrD,IAAA,IAAI,aAAA,GAAkC,IAAA;AAEtC,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,aAAA,GAAgB,SAAA,CAAU,QAAQ,aAAa,CAAA;AAAA,MACjD,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,SAAA,CAAU,IAAI,KAAK,KAAK,CAAA;AAAA,MAErE;AAAA,IACF;AAEA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,gBAAgB,IAAA,EAAuB;AAE/C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,cAAA,qBAAuC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC9F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,qCAAA,EAAuC,KAAK,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,cAAc,IAAA,EAAuB;AAE7C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,YAAA,mBAAqC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC5F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,mCAAA,EAAqC,KAAK,CAAA;AAAA,MAC9D,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,gBAAgB,IAAA,EAAuB;AAE/C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,cAAA,qBAAuC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC9F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,qCAAA,EAAuC,KAAK,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,YAAY,KAAA,EAAsC;AAChE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAM,QAAA,KAAY;AAC1D,MAAA,IAAI;AACF,QAAA,IAAI,SAAS,WAAA,EAAa;AACxB,UAAA,MAAM,QAAA,CAAS,YAAY,KAAK,CAAA;AAChC,UAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,yBAAA,EAA4B,QAAA,CAAS,IAAI,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,QACrF;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,uBAAA,EAA0B,QAAA,CAAS,IAAI,KAAK,KAAK,CAAA;AAAA,MAErE;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,CAAQ,WAAW,cAAc,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,wCAAA,EAA2C,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAKzE,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,0CAAA,EAA6C,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC5E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,kCAAA,EAAqC,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAGnE,IAAA,MAAM,mBAAmB,CAAC,GAAG,KAAK,SAAA,CAAU,GAAA,CAAI,OAAK,CAAA,CAAE,QAAA,EAAU,CAAA,EAAG,GAAG,KAAK,UAAA,CAAW,GAAA,CAAI,OAAK,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAE7G,IAAA,MAAM,OAAA,CAAQ,WAAW,gBAAgB,CAAA;AAEzC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oCAAA,EAAuC,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACtE;AACF;;;AC9RA,SAAS,cAAA,GAAyB;AAEhC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAC3D,IAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA,IAAA,KAAQ,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9E;AAKA,SAAS,eAAA,GAA0B;AAEjC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAC3D,IAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA,IAAA,KAAQ,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9E;AAEA,IAAM,gBAAN,MAAuE;AAAA,EAC9D,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEP,WAAA,CAAY,SAA+B,SAAA,EAA4B;AACrE,IAAA,IAAA,CAAK,KAAK,cAAA,EAAe;AACzB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,KAAA,GAAQ,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,OAAO,KAAA,GAAS,IAAA;AACtD,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAGjB,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAEnB,MAAA,IAAA,CAAK,UAAU,eAAA,EAAgB;AAAA,IACjC,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,OAAA;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,IAAI,QAAA,EAAgD;AAClD,IAAA,IAAA,CAAK,OAAA,uBAAc,IAAA,EAAK;AACxB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,WAAW,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,IAClD;AAAA,EAEF;AAAA,EAEA,KAAA,CAAM,KAAA,EAA4B,OAAA,GAAmB,IAAA,EAAY;AAC/D,IAAA,MAAM,aAAA,GACJ,iBAAiBC,6BAAA,GACb;AAAA,MACE,KAAA,EAAO;AAAA,QACL,IAAI,KAAA,CAAM,EAAA;AAAA,QACV,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,SAAS,KAAA,CAAM;AAAA;AACjB,KACF,GACA;AAAA,MACE,KAAA,EAAO;AAAA,QACL,SAAS,KAAA,CAAM;AAAA;AACjB,KACF;AAEN,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,IAAI,aAA8C,CAAA;AAAA,IACzD,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAO,aAA8C,CAAA;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,eAAA,CACE,IAAA,EACA,IAAA,EACA,QAAA,EACoB;AACpB,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,UAAU,IAAI,CAAA;AAAA,EAC5D;AAAA,EAEA,OAAO,QAAA,EAA+C;AACpD,IAAA,IAAA,CAAK,WAAW,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,EAElD;AAAA,EAEA,MAAM,MAAA,GAA0B;AAC9B,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK;AAAA;AAAA,KACf,CAAA;AAAA,EACH;AACF,CAAA;AAMO,IAAM,sBAAN,MAAqD;AAAA,EAC1D,IAAA,GAAO,uBAAA;AAAA,EACC,eAAA;AAAA,EAER,YAAY,eAAA,EAA4B;AAEtC,IAAA,IAAA,CAAK,mBACH,eAAA,IAAmB;AAAA,MACjB,UAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,EACA,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,aAAa,CAAA;AAAA,EACpC;AAAA,EAEA,QAAQ,IAAA,EAAmC;AAEzC,IAAA,MAAM,aAAa,CAAC,GAAA,EAAU,IAAA,mBAAO,IAAI,SAAQ,KAAW;AAC1D,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,QAAA,OAAO,GAAA;AAAA,MACT;AAGA,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,QAAA,OAAO,sBAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,QAAA,OAAO,IAAI,GAAA,CAAI,CAAA,IAAA,KAAQ,UAAA,CAAW,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAC/C;AAEA,MAAA,MAAM,WAAgB,EAAC;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,QAAA,IAAI,KAAK,eAAA,CAAgB,QAAA,CAAS,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AAEpD,UAAA,IAAI,IAAI,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,GAAG,MAAM,QAAA,EAAU;AAC5C,YAAA,QAAA,CAAS,GAAG,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,GAAG,GAAG,IAAI,CAAA;AAAA,UAC3C,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,GAAG,CAAA,GAAI,YAAA;AAAA,UAClB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,GAAG,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,GAAG,GAAG,IAAI,CAAA;AAAA,QAC3C;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAe,EAAE,GAAG,IAAA,EAAK;AAC/B,MAAA,YAAA,CAAa,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAChD,MAAA,OAAO,YAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,QAAA,GAAW,EAAE,GAAG,IAAA,EAAK;AAC3B,MAAA,QAAA,CAAS,QAAA,GAAW;AAAA,QAClB,mBAAA,EAAqB,yDAAA;AAAA,QACrB,iBAAA,EAAmB,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAC9D;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAAA,EAEhC;AACF;AAMO,IAAM,yBAAN,MAA0D;AAAA,EAC/D,IAAA,GAAO,iBAAA;AAAA,EACC,MAAA;AAAA,EAER,YAAY,MAAA,EAAwB;AAClC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,IAChB,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,+BAAA,CAAc;AAAA,QAC9B,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,KAAA,EAAsC;AACtD,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAGnB,IAAA,MAAM,cAAA,GAAiB,CAAC,QAAA,KAAkB;AACxC,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,QAAA,EAAU,IAAA,EAAM,CAAC,CAAA;AAAA,MACzC,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,MAAA,GAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA;AACxD,QAAA,OAAO,kCAAkC,MAAM,CAAA,CAAA,CAAA;AAAA,MACjD;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAiB,OAAA,KAAmB;AAC1D,MAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAQ,GAAI,UAAU,OAAA,EAAQ;AACvD,MAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAA,cAAA;AACE,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,sBAAA,CAAiB,CAAA;AAClC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,eAAe,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,CAAA;AAChE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF,KAAA,YAAA;AACE,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,KAAK,OAAO,CAAA;AAC5D,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,iBAAA,CAAc,CAAA;AAC/B,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAE,CAAA;AAC3C,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,mBAAA,EAAsB,eAAe,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,CAAA;AACtE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF,KAAA,cAAA;AACE,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,sBAAA,CAAiB,CAAA;AAClC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,qBAAA,EAAwB,eAAe,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAE,CAAA;AACxE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAwC,KAAA,CAAc,IAAI,CAAA,CAAE,CAAA;AAAA;AAChF,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,iCAAiC,CAAA;AAAA,EACpD;AACF;AAMO,IAAM,sBAAA,GAA0C;AAAA,EACrD,WAAA,EAAa,mBAAA;AAAA,EACb,QAAA,EAAU,EAAE,IAAA,EAAA,QAAA,eAAkC;AAAA,EAC9C,SAAA,EAAW,CAAC,IAAI,sBAAA,EAAwB,CAAA;AAAA;AAAA,EACxC,UAAA,EAAY,CAAC,IAAI,mBAAA,EAAqB;AACxC;AAMO,IAAM,gBAAA,GAAN,cAA+B,eAAA,CAAgB;AAAA,EACpD,WAAA,CAAY,SAA0B,sBAAA,EAAwB;AAC5D,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAMU,WAAqC,OAAA,EAA8C;AAE3F,IAAA,OAAO,IAAI,aAAA,CAAqB,OAAA,EAAS,IAAI,CAAA;AAAA,EAC/C;AACF;;;AClUA,IAAM,oBAAN,MAAwB;AAAA,EACd,SAAA,uBAAgB,GAAA,EAA6B;AAAA,EAC7C,eAAA;AAAA;AAAA;AAAA;AAAA,EAKR,QAAA,CAAS,IAAA,EAAc,QAAA,EAA2B,SAAA,GAAY,KAAA,EAAa;AACzE,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA;AACjC,IAAA,IAAI,SAAA,IAAa,CAAC,IAAA,CAAK,eAAA,EAAiB;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAA4C;AAC9C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,IAChC;AACA,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAuB;AAChC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACxC,IAAA,IAAI,QAAA,IAAY,QAAA,KAAa,IAAA,CAAK,eAAA,EAAiB;AAEjD,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,KAAM,QAAQ,CAAA;AAChF,MAAA,IAAA,CAAK,eAAA,GAAkB,UAAU,CAAC,CAAA;AAAA,IACpC;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAA+C;AAC7C,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAAA,EAC/B;AACF,CAAA;AAEA,IAAM,iBAAA,GAAoB,IAAI,iBAAA,EAAkB;AASzC,SAAS,iBAAA,CAAkB,IAAA,EAAc,QAAA,EAA2B,SAAA,GAAY,KAAA,EAAa;AAClG,EAAA,iBAAA,CAAkB,QAAA,CAAS,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AACtD;AAKO,SAAS,aAAa,IAAA,EAA4C;AACvE,EAAA,OAAO,iBAAA,CAAkB,IAAI,IAAI,CAAA;AACnC;AAKO,SAAS,oBAAoB,IAAA,EAAuB;AACzD,EAAA,OAAO,iBAAA,CAAkB,WAAW,IAAI,CAAA;AAC1C;AAKO,SAAS,sBAAA,GAA+B;AAC7C,EAAA,iBAAA,CAAkB,KAAA,EAAM;AAC1B;AAKO,SAAS,aAAa,IAAA,EAAwB;AACnD,EAAA,MAAM,OAAA,GAAU,aAAa,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAA,EAAU;AACjC,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAGxB,EAAA,OAAO,QAAA,CAAS,IAAA,KAAA,OAAA;AAClB","file":"index.cjs","sourcesContent":["/**\n * No Op Implementation for MastraAITracing\n */\n\nimport type { MastraAITracing } from './base';\nimport type { AISpanType, AISpan, AISpanOptions, AISpanTypeMap } from './types';\n\nexport class NoOpAISpan<TType extends AISpanType = any> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public metadata: AISpanTypeMap[TType];\n public trace: AISpan<any>;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public aiTracing: MastraAITracing;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = 'no-op';\n this.name = options.name;\n this.type = options.type;\n this.metadata = options.metadata;\n this.trace = options.parent ? options.parent.trace : (this as any);\n this.traceId = 'no-op-trace';\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n }\n\n end(): void {}\n error(): void {}\n createChildSpan<TChildType extends AISpanType>(\n type: TChildType,\n name: string,\n metadata: AISpanTypeMap[TChildType],\n ): AISpan<TChildType> {\n return new NoOpAISpan<TChildType>({ type, name, metadata, parent: this }, this.aiTracing);\n }\n update(): void {}\n}\n","/**\n * AI Tracing interfaces\n */\n\nimport type { MastraError } from '../error';\nimport type { RuntimeContext } from '../runtime-context';\nimport type { WorkflowRunStatus, WorkflowStepStatus } from '../workflows';\nimport type { MastraAITracing } from './base';\n\n// ============================================================================\n// Core AI-Specific Span Types\n// ============================================================================\n\n/**\n * AI-specific span types with their associated metadata\n */\nexport enum AISpanType {\n /** Agent run - root span for agent processes */\n AGENT_RUN = 'agent_run',\n /** Generic span for custom operations */\n GENERIC = 'generic',\n /** LLM generation with model calls, token usage, prompts, completions */\n LLM_GENERATION = 'llm_generation',\n /** MCP (Model Context Protocol) tool execution */\n MCP_TOOL_CALL = 'mcp_tool_call',\n /** Function/tool execution with inputs, outputs, errors */\n TOOL_CALL = 'tool_call',\n /** Workflow run - root span for workflow processes */\n WORKFLOW_RUN = 'workflow_run',\n /** Workflow step execution with step status, data flow */\n WORKFLOW_STEP = 'workflow_step',\n}\n\n// ============================================================================\n// Type-Specific Metadata Interfaces\n// ============================================================================\n\n/**\n * Base metadata that all spans can have\n */\nexport interface AIBaseMetadata {\n /** Input passed at the start of the span */\n input?: any;\n /** Output generated at the end of the span */\n output?: any;\n\n /** Error information if span failed */\n error?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n\n /** Custom tags for categorization */\n tags?: string[];\n /** User-defined attributes */\n attributes?: Record<string, any>;\n}\n\n/**\n * Agent Run metadata\n */\nexport interface AgentRunMetadata extends AIBaseMetadata {\n /** Agent identifier */\n agentId: string;\n /** Agent Instructions **/\n instructions?: string;\n /** Agent Prompt **/\n prompt?: string;\n /** Available tools for this execution */\n availableTools?: string[];\n /** Maximum steps allowed */\n maxSteps?: number;\n}\n\n/**\n * LLM Generation metadata\n */\nexport interface LLMGenerationMetadata extends AIBaseMetadata {\n /** Model name (e.g., 'gpt-4', 'claude-3') */\n model?: string;\n /** Model provider (e.g., 'openai', 'anthropic') */\n provider?: string;\n /** Type of result/output this LLM call produced */\n resultType?: 'tool_selection' | 'response_generation' | 'reasoning' | 'planning';\n /** Token usage statistics */\n usage?: {\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n promptCacheHitTokens?: number;\n promptCacheMissTokens?: number;\n };\n /** Model parameters */\n parameters?: {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stop?: string[];\n };\n /** Whether this was a streaming response */\n streaming?: boolean;\n}\n\n/**\n * Tool Call metadata\n */\nexport interface ToolCallMetadata extends AIBaseMetadata {\n toolId?: string;\n success?: boolean;\n}\n\n/**\n * MCP Tool Call metadata\n */\nexport interface MCPToolCallMetadata extends AIBaseMetadata {\n /** Id of the MCP tool/function */\n toolId: string;\n /** MCP server identifier */\n mcpServer: string;\n /** MCP server version */\n serverVersion?: string;\n /** Whether tool execution was successful */\n success?: boolean;\n}\n\n/**\n * Workflow Run metadata\n */\nexport interface WorkflowRunMetadata extends AIBaseMetadata {\n /** Workflow identifier */\n workflowId: string;\n /** Workflow status */\n status?: WorkflowRunStatus;\n}\n\n/**\n * Workflow Step metadata\n */\nexport interface WorkflowStepMetadata extends AIBaseMetadata {\n /** Step identifier */\n stepId: string;\n /** Step status */\n status?: WorkflowStepStatus;\n}\n\n/**\n * AI-specific span types mapped to their metadata\n */\nexport interface AISpanTypeMap {\n [AISpanType.AGENT_RUN]: AgentRunMetadata;\n [AISpanType.WORKFLOW_RUN]: WorkflowRunMetadata;\n [AISpanType.LLM_GENERATION]: LLMGenerationMetadata;\n [AISpanType.TOOL_CALL]: ToolCallMetadata;\n [AISpanType.MCP_TOOL_CALL]: MCPToolCallMetadata;\n [AISpanType.WORKFLOW_STEP]: WorkflowStepMetadata;\n [AISpanType.GENERIC]: AIBaseMetadata;\n}\n\n/**\n * Union type for cases that need to handle any span type\n */\nexport type AnyAISpanMetadata = AISpanTypeMap[keyof AISpanTypeMap];\n\n// ============================================================================\n// Span Interfaces\n// ============================================================================\n\n/**\n * AI Span interface with type safety\n */\nexport interface AISpan<TType extends AISpanType> {\n /** Unique span identifier */\n id: string;\n /** Name of the span */\n name: string;\n /** Type of the span */\n type: TType;\n /** When span started */\n startTime: Date;\n /** When span ended */\n endTime?: Date;\n /** AI-specific metadata - strongly typed based on span type */\n metadata: AISpanTypeMap[TType];\n /** The top-level span - can be any type */\n trace: AnyAISpan;\n /** OpenTelemetry-compatible trace ID (32 hex chars) - present on all spans */\n traceId: string;\n /** Pointer to the AITracing instance */\n aiTracing: MastraAITracing;\n\n // Methods for span lifecycle\n /** End the span */\n end(metadata?: Partial<AISpanTypeMap[TType]>): void;\n\n /** Record an error for the span, optionally end the span as well */\n error(error: MastraError | Error, endSpan?: boolean): void;\n\n /** Update span metadata */\n update(metadata: Partial<AISpanTypeMap[TType]>): void;\n\n /** Create child span - can be any span type independent of parent */\n createChildSpan<TChildType extends AISpanType>(\n type: TChildType,\n name: string,\n metadata: AISpanTypeMap[TChildType],\n ): AISpan<TChildType>;\n}\n\n/**\n * Union type for cases that need to handle any span\n */\nexport type AnyAISpan = AISpan<keyof AISpanTypeMap>;\n\n/**\n * Options for span creation\n */\nexport interface AISpanOptions<TType extends AISpanType> {\n /** Span name */\n name: string;\n /** Span type */\n type: TType;\n /** Span metadata */\n metadata: AISpanTypeMap[TType];\n /** Parent span */\n parent?: AISpan<any>;\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Sampling strategy types\n */\nexport enum SamplingStrategyType {\n ALWAYS = 'always',\n NEVER = 'never',\n RATIO = 'ratio',\n CUSTOM = 'custom',\n}\n\n/**\n * Context for TraceSampling\n */\nexport interface AITraceContext {\n runtimeContext?: RuntimeContext;\n attributes?: Record<string, any>;\n}\n\n/**\n * Sampling strategy configuration\n */\nexport type SamplingStrategy =\n | { type: SamplingStrategyType.ALWAYS }\n | { type: SamplingStrategyType.NEVER }\n | { type: SamplingStrategyType.RATIO; probability: number }\n | { type: SamplingStrategyType.CUSTOM; sampler: (traceContext: AITraceContext) => boolean };\n\n/**\n * Complete AI Tracing configuration that combines all options\n */\nexport interface AITracingConfig {\n /** Service name for tracing */\n serviceName: string;\n /** Sampling strategy - controls whether tracing is collected */\n sampling: SamplingStrategy;\n /** Custom exporters */\n exporters?: AITracingExporter[];\n /** Custom processors */\n processors?: AISpanProcessor[];\n}\n\n// ============================================================================\n// Exporter and Processor Interfaces\n// ============================================================================\n\n/**\n * AI Tracing event types\n */\nexport enum AITracingEventType {\n SPAN_STARTED = 'span_started',\n SPAN_UPDATED = 'span_updated',\n SPAN_ENDED = 'span_ended',\n}\n\n/**\n * Tracing events that can be exported\n */\nexport type AITracingEvent =\n | { type: AITracingEventType.SPAN_STARTED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_UPDATED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_ENDED; span: AnyAISpan };\n\n/**\n * Interface for tracing exporters\n */\nexport interface AITracingExporter {\n /** Exporter name */\n name: string;\n\n /** Export tracing events */\n exportEvent(event: AITracingEvent): Promise<void>;\n\n /** Shutdown exporter */\n shutdown(): Promise<void>;\n}\n\n/**\n * Interface for span processors\n */\nexport interface AISpanProcessor {\n /** Processor name */\n name: string;\n /** Process span before export */\n process(span: AnyAISpan): AnyAISpan | null;\n /** Shutdown processor */\n shutdown(): Promise<void>;\n}\n","/**\n * MastraAITracing - Abstract base class for AI Tracing implementations\n */\n\nimport { MastraBase } from '../base';\nimport { RegisteredLogger } from '../logger/constants';\nimport type { RuntimeContext } from '../runtime-context';\nimport { NoOpAISpan } from './no-op';\nimport type {\n AITracingConfig,\n AISpan,\n AISpanOptions,\n AISpanType,\n AITracingExporter,\n AISpanProcessor,\n AITracingEvent,\n AITraceContext,\n AISpanTypeMap,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType, AITracingEventType } from './types';\n\n// ============================================================================\n// Abstract Base Class\n// ============================================================================\n\n/**\n * Abstract base class for all AI Tracing implementations in Mastra.\n *\n */\nexport abstract class MastraAITracing extends MastraBase {\n protected config: AITracingConfig;\n\n constructor(config: AITracingConfig) {\n super({ component: RegisteredLogger.AI_TELEMETRY, name: config.serviceName });\n\n this.config = config;\n\n this.logger.debug(`AI Tracing initialized [service=${config.serviceName}] [sampling=${this.config.sampling.type}]`);\n }\n\n // ============================================================================\n // Protected getters for clean config access\n // ============================================================================\n\n protected get exporters(): AITracingExporter[] {\n return this.config.exporters || [];\n }\n\n protected get processors(): AISpanProcessor[] {\n return this.config.processors || [];\n }\n\n // ============================================================================\n // Public API - Single type-safe span creation method\n // ============================================================================\n\n /**\n * Start a new span of a specific AISpanType\n */\n startSpan<TType extends AISpanType>(\n type: TType,\n name: string,\n metadata: AISpanTypeMap[TType],\n parent?: AnyAISpan,\n runtimeContext?: RuntimeContext,\n attributes?: Record<string, any>,\n ): AISpan<TType> {\n if (!this.shouldSample({ runtimeContext, attributes })) {\n return new NoOpAISpan<TType>({ type, name, metadata, parent }, this);\n }\n\n const options: AISpanOptions<TType> = {\n type,\n name,\n metadata,\n parent,\n };\n\n const span = this.createSpan(options);\n span.trace = parent ? parent.trace : span;\n\n // Automatically wire up tracing lifecycle\n this.wireSpanLifecycle(span);\n\n // Emit span started event\n this.emitSpanStarted(span);\n\n return span;\n }\n\n // ============================================================================\n // Abstract Methods - Must be implemented by concrete classes\n // ============================================================================\n\n /**\n * Create a new span (called after sampling)\n *\n * Implementations should:\n * 1. Create a plain span with the provided metadata\n * 2. Return the span - base class handles all tracing lifecycle automatically\n *\n * The base class will automatically:\n * - Set trace relationships\n * - Wire span lifecycle callbacks\n * - Emit span_started event\n */\n protected abstract createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType>;\n\n // ============================================================================\n // Configuration Management\n // ============================================================================\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<AITracingConfig> {\n return { ...this.config };\n }\n\n // ============================================================================\n // Plugin Access\n // ============================================================================\n\n /**\n * Get all exporters\n */\n getExporters(): readonly AITracingExporter[] {\n return [...this.exporters];\n }\n\n /**\n * Get all processors\n */\n getProcessors(): readonly AISpanProcessor[] {\n return [...this.processors];\n }\n\n /**\n * Get the logger instance (for exporters and other components)\n */\n getLogger() {\n return this.logger;\n }\n\n // ============================================================================\n // Span Lifecycle Management\n // ============================================================================\n\n /**\n * Automatically wires up AI tracing lifecycle events for any span\n * This ensures all spans emit events regardless of implementation\n */\n private wireSpanLifecycle<TType extends AISpanType>(span: AISpan<TType>): void {\n // Store original methods\n const originalEnd = span.end.bind(span);\n const originalUpdate = span.update.bind(span);\n\n // Wrap methods to automatically emit tracing events\n span.end = (metadata?: Partial<AISpanTypeMap[TType]>) => {\n originalEnd(metadata);\n this.emitSpanEnded(span);\n };\n\n span.update = (metadata: Partial<AISpanTypeMap[TType]>) => {\n originalUpdate(metadata);\n this.emitSpanUpdated(span);\n };\n }\n\n // ============================================================================\n // Utility Methods\n // ============================================================================\n\n /**\n * Check if an AI trace should be sampled\n */\n protected shouldSample(traceContext: AITraceContext): boolean {\n // Check built-in sampling strategy\n const { sampling } = this.config;\n\n switch (sampling.type) {\n case SamplingStrategyType.ALWAYS:\n return true;\n case SamplingStrategyType.NEVER:\n return false;\n case SamplingStrategyType.RATIO:\n if (sampling.probability === undefined || sampling.probability < 0 || sampling.probability > 1) {\n this.logger.warn(\n `Invalid sampling probability: ${sampling.probability}. Expected value between 0 and 1. Defaulting to no sampling.`,\n );\n return false;\n }\n return Math.random() < sampling.probability;\n case SamplingStrategyType.CUSTOM:\n return sampling.sampler(traceContext);\n default:\n throw new Error(`Sampling strategy type not implemented: ${(sampling as any).type}`);\n }\n }\n\n /**\n * Process a span through all processors\n */\n private processSpan(span: AnyAISpan): AnyAISpan | null {\n let processedSpan: AnyAISpan | null = span;\n\n for (const processor of this.processors) {\n if (!processedSpan) {\n break;\n }\n\n try {\n processedSpan = processor.process(processedSpan);\n } catch (error) {\n this.logger.error(`Processor error [name=${processor.name}]`, error);\n // Continue with other processors\n }\n }\n\n return processedSpan;\n }\n\n // ============================================================================\n // Event-driven Export Methods\n // ============================================================================\n\n /**\n * Emit a span started event\n */\n protected emitSpanStarted(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_STARTED, span: processedSpan }).catch(error => {\n this.logger.error('Failed to export span_started event', error);\n });\n }\n }\n\n /**\n * Emit a span ended event (called automatically when spans end)\n */\n protected emitSpanEnded(span: AnyAISpan): void {\n // Process the span through all processors\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_ENDED, span: processedSpan }).catch(error => {\n this.logger.error('Failed to export span_ended event', error);\n });\n }\n }\n\n /**\n * Emit a span updated event\n */\n protected emitSpanUpdated(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_UPDATED, span: processedSpan }).catch(error => {\n this.logger.error('Failed to export span_updated event', error);\n });\n }\n }\n\n /**\n * Export tracing event through all exporters (realtime mode)\n */\n protected async exportEvent(event: AITracingEvent): Promise<void> {\n const exportPromises = this.exporters.map(async exporter => {\n try {\n if (exporter.exportEvent) {\n await exporter.exportEvent(event);\n this.logger.debug(`Event exported [exporter=${exporter.name}] [type=${event.type}]`);\n }\n } catch (error) {\n this.logger.error(`Export error [exporter=${exporter.name}]`, error);\n // Don't rethrow - continue with other exporters\n }\n });\n\n await Promise.allSettled(exportPromises);\n }\n\n // ============================================================================\n // Lifecycle Management\n // ============================================================================\n\n /**\n * Initialize AI tracing (called by Mastra during component registration)\n */\n async init(): Promise<void> {\n this.logger.debug(`AI Tracing initialization started [name=${this.name}]`);\n\n // Any initialization logic for the AI tracing system\n // This could include setting up queues, starting background processes, etc.\n\n this.logger.info(`AI Tracing initialized successfully [name=${this.name}]`);\n }\n\n /**\n * Shutdown AI tracing and clean up resources\n */\n async shutdown(): Promise<void> {\n this.logger.debug(`AI Tracing shutdown started [name=${this.name}]`);\n\n // Shutdown all components\n const shutdownPromises = [...this.exporters.map(e => e.shutdown()), ...this.processors.map(p => p.shutdown())];\n\n await Promise.allSettled(shutdownPromises);\n\n this.logger.info(`AI Tracing shutdown completed [name=${this.name}]`);\n }\n}\n","/**\n * Default Implementation for MastraAITracing\n */\n\nimport { MastraError } from '../error';\nimport type { IMastraLogger } from '../logger';\nimport { ConsoleLogger } from '../logger';\nimport { MastraAITracing } from './base';\nimport type {\n AISpanType,\n AISpan,\n AISpanOptions,\n AITracingExporter,\n AITracingConfig,\n AITracingEvent,\n AISpanTypeMap,\n AISpanProcessor,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType, AITracingEventType } from './types';\n\n// ============================================================================\n// Default AISpan Implementation\n// ============================================================================\n\n/**\n * Generate OpenTelemetry-compatible span ID (64-bit, 16 hex chars)\n */\nfunction generateSpanId(): string {\n // Generate 8 random bytes (64 bits) in hex format\n const bytes = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 8; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate OpenTelemetry-compatible trace ID (128-bit, 32 hex chars)\n */\nfunction generateTraceId(): string {\n // Generate 16 random bytes (128 bits) in hex format\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nclass DefaultAISpan<TType extends AISpanType> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public metadata: AISpanTypeMap[TType];\n public trace: AISpan<any>;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public aiTracing: MastraAITracing;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = generateSpanId();\n this.name = options.name;\n this.type = options.type;\n this.metadata = options.metadata;\n this.trace = options.parent ? options.parent.trace : (this as any);\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n\n // Set trace ID: generate new for root spans, inherit for child spans\n if (!options.parent) {\n // This is a root span, so it becomes its own trace with a new trace ID\n this.traceId = generateTraceId();\n } else {\n // Child span inherits trace ID from root span\n this.traceId = options.parent.trace.traceId;\n }\n }\n\n end(metadata?: Partial<AISpanTypeMap[TType]>): void {\n this.endTime = new Date();\n if (metadata) {\n this.metadata = { ...this.metadata, ...metadata };\n }\n // Tracing events automatically handled by base class\n }\n\n error(error: MastraError | Error, endSpan: boolean = true): void {\n const errorMetadata =\n error instanceof MastraError\n ? {\n error: {\n id: error.id,\n details: error.details,\n category: error.category,\n domain: error.domain,\n message: error.message,\n },\n }\n : {\n error: {\n message: error.message,\n },\n };\n\n if (endSpan) {\n this.end(errorMetadata as Partial<AISpanTypeMap[TType]>);\n } else {\n this.update(errorMetadata as Partial<AISpanTypeMap[TType]>);\n }\n }\n\n createChildSpan<TChildType extends AISpanType>(\n type: TChildType,\n name: string,\n metadata: AISpanTypeMap[TChildType],\n ): AISpan<TChildType> {\n return this.aiTracing.startSpan(type, name, metadata, this);\n }\n\n update(metadata: Partial<AISpanTypeMap[TType]>): void {\n this.metadata = { ...this.metadata, ...metadata };\n // Tracing events automatically handled by base class\n }\n\n async export(): Promise<string> {\n return JSON.stringify({\n id: this.id,\n metadata: this.metadata,\n startTime: this.startTime,\n endTime: this.endTime,\n traceId: this.traceId, // OpenTelemetry trace ID\n });\n }\n}\n\n// ============================================================================\n// Sensitive Data Filter Processor\n// ============================================================================\n\nexport class SensitiveDataFilter implements AISpanProcessor {\n name = 'sensitive-data-filter';\n private sensitiveFields: string[];\n\n constructor(sensitiveFields?: string[]) {\n // Default sensitive fields with case-insensitive matching\n this.sensitiveFields = (\n sensitiveFields || [\n 'password',\n 'token',\n 'secret',\n 'key',\n 'apiKey',\n 'auth',\n 'authorization',\n 'bearer',\n 'jwt',\n 'credential',\n 'sessionId',\n ]\n ).map(field => field.toLowerCase());\n }\n\n process(span: AnyAISpan): AnyAISpan | null {\n // Deep filter function to recursively handle nested objects\n const deepFilter = (obj: any, seen = new WeakSet()): any => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (seen.has(obj)) {\n return '[Circular Reference]';\n }\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(item => deepFilter(item, seen));\n }\n\n const filtered: any = {};\n Object.keys(obj).forEach(key => {\n if (this.sensitiveFields.includes(key.toLowerCase())) {\n // Only redact primitive values, recurse into objects/arrays\n if (obj[key] && typeof obj[key] === 'object') {\n filtered[key] = deepFilter(obj[key], seen);\n } else {\n filtered[key] = '[REDACTED]';\n }\n } else {\n filtered[key] = deepFilter(obj[key], seen);\n }\n });\n\n return filtered;\n };\n\n try {\n // Create a copy of the span with filtered metadata\n const filteredSpan = { ...span };\n filteredSpan.metadata = deepFilter(span.metadata);\n return filteredSpan;\n } catch (error) {\n // If filtering fails, return heavily redacted span for security\n const safeSpan = { ...span };\n safeSpan.metadata = {\n '[FILTERING_ERROR]': 'Metadata was completely redacted due to filtering error',\n '[ERROR_MESSAGE]': error instanceof Error ? error.message : 'Unknown filtering error',\n } as any;\n return safeSpan;\n }\n }\n\n async shutdown(): Promise<void> {\n // No cleanup needed\n }\n}\n\n// ============================================================================\n// Default Console Exporter\n// ============================================================================\n\nexport class DefaultConsoleExporter implements AITracingExporter {\n name = 'default-console';\n private logger: IMastraLogger;\n\n constructor(logger?: IMastraLogger) {\n if (logger) {\n this.logger = logger;\n } else {\n // Fallback: create a direct ConsoleLogger instance if none provided\n this.logger = new ConsoleLogger({\n name: 'default-console-exporter',\n });\n }\n }\n\n async exportEvent(event: AITracingEvent): Promise<void> {\n const span = event.span;\n\n // Helper to safely stringify metadata (filtering already done by processor)\n const formatMetadata = (metadata: any) => {\n try {\n return JSON.stringify(metadata, null, 2);\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : 'Unknown formatting error';\n return `[Unable to serialize metadata: ${errMsg}]`;\n }\n };\n\n // Helper to format duration\n const formatDuration = (startTime: Date, endTime?: Date) => {\n if (!endTime) return 'N/A';\n const duration = endTime.getTime() - startTime.getTime();\n return `${duration}ms`;\n };\n\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n this.logger.info(`🚀 SPAN_STARTED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n this.logger.info(` Metadata: ${formatMetadata(span.metadata)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_ENDED:\n const duration = formatDuration(span.startTime, span.endTime);\n this.logger.info(`✅ SPAN_ENDED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Duration: ${duration}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n this.logger.info(` Final Metadata: ${formatMetadata(span.metadata)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_UPDATED:\n this.logger.info(`📝 SPAN_UPDATED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n this.logger.info(` Updated Metadata: ${formatMetadata(span.metadata)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n default:\n throw new Error(`Tracing event type not implemented: ${(event as any).type}`);\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('DefaultConsoleExporter shutdown');\n }\n}\n\n// ============================================================================\n// Default Configuration (defined after classes to avoid circular dependencies)\n// ============================================================================\n\nexport const aiTracingDefaultConfig: AITracingConfig = {\n serviceName: 'mastra-ai-service',\n sampling: { type: SamplingStrategyType.ALWAYS },\n exporters: [new DefaultConsoleExporter()], // Uses its own fallback logger\n processors: [new SensitiveDataFilter()],\n};\n\n// ============================================================================\n// Default AI Tracing Implementation\n// ============================================================================\n\nexport class DefaultAITracing extends MastraAITracing {\n constructor(config: AITracingConfig = aiTracingDefaultConfig) {\n super(config);\n }\n\n // ============================================================================\n // Abstract Method Implementations\n // ============================================================================\n\n protected createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType> {\n // Simple span creation - base class handles all tracing lifecycle automatically\n return new DefaultAISpan<TType>(options, this);\n }\n}\n","/**\n * AI Tracing Registry for Mastra\n *\n * Provides a global registry for AI tracing instances.\n */\n\nimport type { MastraAITracing } from './base';\nimport { SamplingStrategyType } from './types';\n\n// ============================================================================\n// Global AI Tracing Registry\n// ============================================================================\n\n/**\n * Global registry for AI Tracing instances.\n */\nclass AITracingRegistry {\n private instances = new Map<string, MastraAITracing>();\n private defaultInstance?: MastraAITracing;\n\n /**\n * Register a tracing instance\n */\n register(name: string, instance: MastraAITracing, isDefault = false): void {\n this.instances.set(name, instance);\n if (isDefault || !this.defaultInstance) {\n this.defaultInstance = instance;\n }\n }\n\n /**\n * Get a tracing instance by name\n */\n get(name?: string): MastraAITracing | undefined {\n if (name) {\n return this.instances.get(name);\n }\n return this.defaultInstance;\n }\n\n /**\n * Unregister a tracing instance\n */\n unregister(name: string): boolean {\n const instance = this.instances.get(name);\n if (instance && instance === this.defaultInstance) {\n // Find another instance to be the default\n const remaining = Array.from(this.instances.values()).filter(i => i !== instance);\n this.defaultInstance = remaining[0];\n }\n return this.instances.delete(name);\n }\n\n /**\n * Clear all instances\n */\n clear(): void {\n this.instances.clear();\n this.defaultInstance = undefined;\n }\n\n /**\n * Get all registered instances\n */\n getAll(): ReadonlyMap<string, MastraAITracing> {\n return new Map(this.instances);\n }\n}\n\nconst aiTracingRegistry = new AITracingRegistry();\n\n// ============================================================================\n// Registry Management Functions\n// ============================================================================\n\n/**\n * Register an AI tracing instance globally\n */\nexport function registerAITracing(name: string, instance: MastraAITracing, isDefault = false): void {\n aiTracingRegistry.register(name, instance, isDefault);\n}\n\n/**\n * Get an AI tracing instance from the registry\n */\nexport function getAITracing(name?: string): MastraAITracing | undefined {\n return aiTracingRegistry.get(name);\n}\n\n/**\n * Unregister an AI tracing instance\n */\nexport function unregisterAITracing(name: string): boolean {\n return aiTracingRegistry.unregister(name);\n}\n\n/**\n * Clear all AI tracing instances\n */\nexport function clearAITracingRegistry(): void {\n aiTracingRegistry.clear();\n}\n\n/**\n * Check if AI tracing is available and enabled\n */\nexport function hasAITracing(name?: string): boolean {\n const tracing = getAITracing(name);\n if (!tracing) return false;\n\n const config = tracing.getConfig();\n const sampling = config.sampling;\n\n // Check if sampling allows tracing\n return sampling.type !== SamplingStrategyType.NEVER;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/ai-tracing/no-op.ts","../../src/ai-tracing/types.ts","../../src/ai-tracing/base.ts","../../src/ai-tracing/default.ts","../../src/ai-tracing/registry.ts","../../src/ai-tracing/utils.ts"],"names":["AISpanType","SamplingStrategyType","AITracingEventType","MastraBase","RegisteredLogger","MastraError","ConsoleLogger","LogLevel"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * No Op Implementation for MastraAITracing\n */\n\nimport type { MastraAITracing } from './base';\nimport type { AISpanType, AISpan, AISpanOptions, AISpanTypeMap, AnyAISpan } from './types';\n\nexport class NoOpAISpan<TType extends AISpanType = any> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public attributes: AISpanTypeMap[TType];\n public parent?: AnyAISpan;\n public trace: AnyAISpan;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public aiTracing: MastraAITracing;\n public input?: any;\n public output?: any;\n public errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n public metadata?: Record<string, any>;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = 'no-op';\n this.name = options.name;\n this.type = options.type;\n this.attributes = options.attributes || ({} as AISpanTypeMap[TType]);\n this.metadata = options.metadata;\n this.parent = options.parent;\n this.trace = options.parent ? options.parent.trace : (this as any);\n this.traceId = 'no-op-trace';\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n this.input = options.input;\n }\n\n end(_options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void {}\n\n error(_options: {\n error: any;\n endSpan?: boolean;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {}\n\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return new NoOpAISpan<TChildType>({ ...options, parent: this }, this.aiTracing);\n }\n\n update(_options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {}\n\n get isRootSpan(): boolean {\n return !this.parent;\n }\n}\n","/**\n * AI Tracing interfaces\n */\n\nimport type { MastraError } from '../error';\nimport type { RuntimeContext } from '../runtime-context';\nimport type { WorkflowRunStatus, WorkflowStepStatus } from '../workflows';\nimport type { MastraAITracing } from './base';\n\n// ============================================================================\n// Core AI-Specific Span Types\n// ============================================================================\n\n/**\n * AI-specific span types with their associated metadata\n */\nexport enum AISpanType {\n /** Agent run - root span for agent processes */\n AGENT_RUN = 'agent_run',\n /** Generic span for custom operations */\n GENERIC = 'generic',\n /** LLM generation with model calls, token usage, prompts, completions */\n LLM_GENERATION = 'llm_generation',\n /** MCP (Model Context Protocol) tool execution */\n MCP_TOOL_CALL = 'mcp_tool_call',\n /** Function/tool execution with inputs, outputs, errors */\n TOOL_CALL = 'tool_call',\n /** Workflow run - root span for workflow processes */\n WORKFLOW_RUN = 'workflow_run',\n /** Workflow step execution with step status, data flow */\n WORKFLOW_STEP = 'workflow_step',\n}\n\n// ============================================================================\n// Type-Specific Attributes Interfaces\n// ============================================================================\n\n/**\n * Base attributes that all spans can have\n */\nexport interface AIBaseAttributes {}\n\n/**\n * Agent Run attributes\n */\nexport interface AgentRunAttributes extends AIBaseAttributes {\n /** Agent identifier */\n agentId: string;\n /** Agent Instructions **/\n instructions?: string;\n /** Agent Prompt **/\n prompt?: string;\n /** Available tools for this execution */\n availableTools?: string[];\n /** Maximum steps allowed */\n maxSteps?: number;\n}\n\n/**\n * LLM Generation attributes\n */\nexport interface LLMGenerationAttributes extends AIBaseAttributes {\n /** Model name (e.g., 'gpt-4', 'claude-3') */\n model?: string;\n /** Model provider (e.g., 'openai', 'anthropic') */\n provider?: string;\n /** Type of result/output this LLM call produced */\n resultType?: 'tool_selection' | 'response_generation' | 'reasoning' | 'planning';\n /** Token usage statistics */\n usage?: {\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n promptCacheHitTokens?: number;\n promptCacheMissTokens?: number;\n };\n /** Model parameters */\n parameters?: {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stop?: string[];\n };\n /** Whether this was a streaming response */\n streaming?: boolean;\n}\n\n/**\n * Tool Call attributes\n */\nexport interface ToolCallAttributes extends AIBaseAttributes {\n toolId?: string;\n toolType?: string;\n success?: boolean;\n}\n\n/**\n * MCP Tool Call attributes\n */\nexport interface MCPToolCallAttributes extends AIBaseAttributes {\n /** Id of the MCP tool/function */\n toolId: string;\n /** MCP server identifier */\n mcpServer: string;\n /** MCP server version */\n serverVersion?: string;\n /** Whether tool execution was successful */\n success?: boolean;\n}\n\n/**\n * Workflow Run attributes\n */\nexport interface WorkflowRunAttributes extends AIBaseAttributes {\n /** Workflow identifier */\n workflowId: string;\n /** Workflow status */\n status?: WorkflowRunStatus;\n}\n\n/**\n * Workflow Step attributes\n */\nexport interface WorkflowStepAttributes extends AIBaseAttributes {\n /** Step identifier */\n stepId: string;\n /** Step status */\n status?: WorkflowStepStatus;\n}\n\n/**\n * AI-specific span types mapped to their attributes\n */\nexport interface AISpanTypeMap {\n [AISpanType.AGENT_RUN]: AgentRunAttributes;\n [AISpanType.WORKFLOW_RUN]: WorkflowRunAttributes;\n [AISpanType.LLM_GENERATION]: LLMGenerationAttributes;\n [AISpanType.TOOL_CALL]: ToolCallAttributes;\n [AISpanType.MCP_TOOL_CALL]: MCPToolCallAttributes;\n [AISpanType.WORKFLOW_STEP]: WorkflowStepAttributes;\n [AISpanType.GENERIC]: AIBaseAttributes;\n}\n\n/**\n * Union type for cases that need to handle any span type\n */\nexport type AnyAISpanAttributes = AISpanTypeMap[keyof AISpanTypeMap];\n\n// ============================================================================\n// Span Interfaces\n// ============================================================================\n\n/**\n * AI Span interface with type safety\n */\nexport interface AISpan<TType extends AISpanType> {\n /** Unique span identifier */\n id: string;\n /** Name of the span */\n name: string;\n /** Type of the span */\n type: TType;\n /** When span started */\n startTime: Date;\n /** When span ended */\n endTime?: Date;\n /** AI-specific attributes - strongly typed based on span type */\n attributes?: AISpanTypeMap[TType];\n /** Parent span reference (undefined for root spans) */\n parent?: AnyAISpan;\n /** The top-level span - can be any type */\n trace: AnyAISpan;\n /** OpenTelemetry-compatible trace ID (32 hex chars) - present on all spans */\n traceId: string;\n /** Pointer to the AITracing instance */\n aiTracing: MastraAITracing;\n\n /** Input passed at the start of the span */\n input?: any;\n /** Output generated at the end of the span */\n output?: any;\n\n /** Error information if span failed */\n errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n\n /** User-defined metadata */\n metadata?: Record<string, any>;\n\n // Methods for span lifecycle\n /** End the span */\n end(options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void;\n\n /** Record an error for the span, optionally end the span as well */\n error(options: {\n error: MastraError | Error;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n endSpan?: boolean;\n }): void;\n\n /** Update span attributes */\n update(options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void;\n\n /** Create child span - can be any span type independent of parent */\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType>;\n\n /** Returns `TRUE` if the span is the root span of a trace */\n get isRootSpan(): boolean;\n}\n\n/**\n * Union type for cases that need to handle any span\n */\nexport type AnyAISpan = AISpan<keyof AISpanTypeMap>;\n\n/**\n * Options for span creation\n */\nexport interface AISpanOptions<TType extends AISpanType> {\n /** Span name */\n name: string;\n /** Span type */\n type: TType;\n /** Input data */\n input?: any;\n /** Span attributes */\n attributes?: AISpanTypeMap[TType];\n /** Span metadata */\n metadata?: Record<string, any>;\n /** Parent span */\n parent?: AnyAISpan;\n}\n\n// ============================================================================\n// Configuration Types\n// ============================================================================\n\n/**\n * Sampling strategy types\n */\nexport enum SamplingStrategyType {\n ALWAYS = 'always',\n NEVER = 'never',\n RATIO = 'ratio',\n CUSTOM = 'custom',\n}\n\n/**\n * Context for TraceSampling\n */\nexport interface AITraceContext {\n runtimeContext?: RuntimeContext;\n metadata?: Record<string, any>;\n}\n\n/**\n * Sampling strategy configuration\n */\nexport type SamplingStrategy =\n | { type: SamplingStrategyType.ALWAYS }\n | { type: SamplingStrategyType.NEVER }\n | { type: SamplingStrategyType.RATIO; probability: number }\n | { type: SamplingStrategyType.CUSTOM; sampler: (traceContext: AITraceContext) => boolean };\n\n/**\n * Configuration for a single AI tracing instance\n */\nexport interface AITracingInstanceConfig {\n /** Service name for tracing */\n serviceName: string;\n /** Instance name from the registry */\n instanceName: string;\n /** Sampling strategy - controls whether tracing is collected (defaults to ALWAYS) */\n sampling?: SamplingStrategy;\n /** Custom exporters */\n exporters?: AITracingExporter[];\n /** Custom processors */\n processors?: AISpanProcessor[];\n}\n\n/**\n * Complete AI Tracing configuration\n */\nexport interface AITracingConfig {\n /** Map of tracing instance names to their configurations or pre-instantiated instances */\n instances: Record<string, AITracingInstanceConfig | MastraAITracing>;\n /** Optional selector function to choose which tracing instance to use */\n selector?: TracingSelector;\n}\n\n// ============================================================================\n// Exporter and Processor Interfaces\n// ============================================================================\n\n/**\n * AI Tracing event types\n */\nexport enum AITracingEventType {\n SPAN_STARTED = 'span_started',\n SPAN_UPDATED = 'span_updated',\n SPAN_ENDED = 'span_ended',\n}\n\n/**\n * Tracing events that can be exported\n */\nexport type AITracingEvent =\n | { type: AITracingEventType.SPAN_STARTED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_UPDATED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_ENDED; span: AnyAISpan };\n\n/**\n * Interface for tracing exporters\n */\nexport interface AITracingExporter {\n /** Exporter name */\n name: string;\n\n /** Export tracing events */\n exportEvent(event: AITracingEvent): Promise<void>;\n\n /** Shutdown exporter */\n shutdown(): Promise<void>;\n}\n\n/**\n * Interface for span processors\n */\nexport interface AISpanProcessor {\n /** Processor name */\n name: string;\n /** Process span before export */\n process(span: AnyAISpan): AnyAISpan | null;\n /** Shutdown processor */\n shutdown(): Promise<void>;\n}\n\n// ============================================================================\n// AI Tracing Selection Types\n// ============================================================================\n\n/**\n * Context provided to tracing selector functions\n */\nexport interface AITracingSelectorContext {\n /** Runtime context */\n runtimeContext?: RuntimeContext;\n}\n\n/**\n * Function to select which AI tracing instance to use for a given span\n * Returns the name of the tracing instance, or undefined to use default\n */\nexport type TracingSelector = (\n context: AITracingSelectorContext,\n availableTracers: ReadonlyMap<string, MastraAITracing>,\n) => string | undefined;\n\n/**\n * Context for AI tracing that flows through workflow and agent execution\n */\nexport interface AITracingContext {\n /** Parent AI span for creating child spans in nested operations */\n parentAISpan?: AnyAISpan;\n /** User-defined metadata */\n metadata?: Record<string, any>;\n}\n","/**\n * MastraAITracing - Abstract base class for AI Tracing implementations\n */\n\nimport { MastraBase } from '../base';\nimport type { IMastraLogger } from '../logger';\nimport { RegisteredLogger } from '../logger/constants';\nimport type { RuntimeContext } from '../runtime-context';\nimport { NoOpAISpan } from './no-op';\nimport type {\n AITracingInstanceConfig,\n AISpan,\n AISpanOptions,\n AISpanType,\n AITracingExporter,\n AISpanProcessor,\n AITracingEvent,\n AITraceContext,\n AISpanTypeMap,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType, AITracingEventType } from './types';\n\n// ============================================================================\n// Abstract Base Class\n// ============================================================================\n\n/**\n * Abstract base class for all AI Tracing implementations in Mastra.\n *\n */\nexport abstract class MastraAITracing extends MastraBase {\n protected config: Required<AITracingInstanceConfig>;\n\n constructor(config: AITracingInstanceConfig) {\n super({ component: RegisteredLogger.AI_TRACING, name: config.serviceName });\n\n // Apply defaults for optional fields\n this.config = {\n serviceName: config.serviceName,\n instanceName: config.instanceName,\n sampling: config.sampling ?? { type: SamplingStrategyType.ALWAYS },\n exporters: config.exporters ?? [],\n processors: config.processors ?? [],\n };\n }\n\n /**\n * Override setLogger to add AI tracing specific initialization log\n */\n __setLogger(logger: IMastraLogger) {\n super.__setLogger(logger);\n // Log AI tracing initialization details after logger is properly set\n this.logger.debug(\n `[AI Tracing] Initialized [service=${this.config.serviceName}] [instance=${this.config.instanceName}] [sampling=${this.config.sampling.type}]`,\n );\n }\n\n // ============================================================================\n // Protected getters for clean config access\n // ============================================================================\n\n protected get exporters(): AITracingExporter[] {\n return this.config.exporters || [];\n }\n\n protected get processors(): AISpanProcessor[] {\n return this.config.processors || [];\n }\n\n // ============================================================================\n // Public API - Single type-safe span creation method\n // ============================================================================\n\n /**\n * Start a new span of a specific AISpanType\n */\n startSpan<TType extends AISpanType>(options: {\n type: TType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TType];\n metadata?: Record<string, any>;\n parent?: AnyAISpan;\n startOptions?: {\n runtimeContext?: RuntimeContext;\n };\n }): AISpan<TType> {\n const { type, name, input, attributes, metadata, parent, startOptions } = options;\n const { runtimeContext } = startOptions || {};\n\n if (!this.shouldSample({ runtimeContext })) {\n return new NoOpAISpan<TType>({ type, name, input, attributes, metadata, parent }, this);\n }\n\n const spanOptions: AISpanOptions<TType> = {\n type,\n name,\n input,\n attributes,\n metadata,\n parent,\n };\n\n const span = this.createSpan(spanOptions);\n\n // Automatically wire up tracing lifecycle\n this.wireSpanLifecycle(span);\n\n // Emit span started event\n this.emitSpanStarted(span);\n\n return span;\n }\n\n // ============================================================================\n // Abstract Methods - Must be implemented by concrete classes\n // ============================================================================\n\n /**\n * Create a new span (called after sampling)\n *\n * Implementations should:\n * 1. Create a plain span with the provided attributes\n * 2. Return the span - base class handles all tracing lifecycle automatically\n *\n * The base class will automatically:\n * - Set trace relationships\n * - Wire span lifecycle callbacks\n * - Emit span_started event\n */\n protected abstract createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType>;\n\n // ============================================================================\n // Configuration Management\n // ============================================================================\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<Required<AITracingInstanceConfig>> {\n return { ...this.config };\n }\n\n // ============================================================================\n // Plugin Access\n // ============================================================================\n\n /**\n * Get all exporters\n */\n getExporters(): readonly AITracingExporter[] {\n return [...this.exporters];\n }\n\n /**\n * Get all processors\n */\n getProcessors(): readonly AISpanProcessor[] {\n return [...this.processors];\n }\n\n /**\n * Get the logger instance (for exporters and other components)\n */\n getLogger() {\n return this.logger;\n }\n\n // ============================================================================\n // Span Lifecycle Management\n // ============================================================================\n\n /**\n * Automatically wires up AI tracing lifecycle events for any span\n * This ensures all spans emit events regardless of implementation\n */\n private wireSpanLifecycle<TType extends AISpanType>(span: AISpan<TType>): void {\n // Store original methods\n const originalEnd = span.end.bind(span);\n const originalUpdate = span.update.bind(span);\n\n // Wrap methods to automatically emit tracing events\n span.end = (options?: {\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }) => {\n originalEnd(options);\n this.emitSpanEnded(span);\n };\n\n span.update = (options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }) => {\n originalUpdate(options);\n this.emitSpanUpdated(span);\n };\n }\n\n // ============================================================================\n // Utility Methods\n // ============================================================================\n\n /**\n * Check if an AI trace should be sampled\n */\n protected shouldSample(traceContext: AITraceContext): boolean {\n // Check built-in sampling strategy\n const { sampling } = this.config;\n\n switch (sampling.type) {\n case SamplingStrategyType.ALWAYS:\n return true;\n case SamplingStrategyType.NEVER:\n return false;\n case SamplingStrategyType.RATIO:\n if (sampling.probability === undefined || sampling.probability < 0 || sampling.probability > 1) {\n this.logger.warn(\n `Invalid sampling probability: ${sampling.probability}. Expected value between 0 and 1. Defaulting to no sampling.`,\n );\n return false;\n }\n return Math.random() < sampling.probability;\n case SamplingStrategyType.CUSTOM:\n return sampling.sampler(traceContext);\n default:\n throw new Error(`Sampling strategy type not implemented: ${(sampling as any).type}`);\n }\n }\n\n /**\n * Process a span through all processors\n */\n private processSpan(span: AnyAISpan): AnyAISpan | null {\n let processedSpan: AnyAISpan | null = span;\n\n for (const processor of this.processors) {\n if (!processedSpan) {\n break;\n }\n\n try {\n processedSpan = processor.process(processedSpan);\n } catch (error) {\n this.logger.error(`[AI Tracing] Processor error [name=${processor.name}]`, error);\n // Continue with other processors\n }\n }\n\n return processedSpan;\n }\n\n // ============================================================================\n // Event-driven Export Methods\n // ============================================================================\n\n /**\n * Emit a span started event\n */\n protected emitSpanStarted(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_STARTED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_started event', error);\n });\n }\n }\n\n /**\n * Emit a span ended event (called automatically when spans end)\n */\n protected emitSpanEnded(span: AnyAISpan): void {\n // Process the span through all processors\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_ENDED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_ended event', error);\n });\n }\n }\n\n /**\n * Emit a span updated event\n */\n protected emitSpanUpdated(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_UPDATED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_updated event', error);\n });\n }\n }\n\n /**\n * Export tracing event through all exporters (realtime mode)\n */\n protected async exportEvent(event: AITracingEvent): Promise<void> {\n const exportPromises = this.exporters.map(async exporter => {\n try {\n if (exporter.exportEvent) {\n await exporter.exportEvent(event);\n this.logger.debug(`[AI Tracing] Event exported [exporter=${exporter.name}] [type=${event.type}]`);\n }\n } catch (error) {\n this.logger.error(`[AI Tracing] Export error [exporter=${exporter.name}]`, error);\n // Don't rethrow - continue with other exporters\n }\n });\n\n await Promise.allSettled(exportPromises);\n }\n\n // ============================================================================\n // Lifecycle Management\n // ============================================================================\n\n /**\n * Initialize AI tracing (called by Mastra during component registration)\n */\n async init(): Promise<void> {\n this.logger.debug(`[AI Tracing] Initialization started [name=${this.name}]`);\n\n // Any initialization logic for the AI tracing system\n // This could include setting up queues, starting background processes, etc.\n\n this.logger.info(`[AI Tracing] Initialized successfully [name=${this.name}]`);\n }\n\n /**\n * Shutdown AI tracing and clean up resources\n */\n async shutdown(): Promise<void> {\n this.logger.debug(`[AI Tracing] Shutdown started [name=${this.name}]`);\n\n // Shutdown all components\n const shutdownPromises = [...this.exporters.map(e => e.shutdown()), ...this.processors.map(p => p.shutdown())];\n\n await Promise.allSettled(shutdownPromises);\n\n this.logger.info(`[AI Tracing] Shutdown completed [name=${this.name}]`);\n }\n}\n","/**\n * Default Implementation for MastraAITracing\n */\n\nimport { MastraError } from '../error';\nimport type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, LogLevel } from '../logger';\nimport { MastraAITracing } from './base';\nimport type {\n AISpanType,\n AISpan,\n AISpanOptions,\n AITracingExporter,\n AITracingInstanceConfig,\n AITracingEvent,\n AISpanTypeMap,\n AISpanProcessor,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType, AITracingEventType } from './types';\n\n// ============================================================================\n// Default AISpan Implementation\n// ============================================================================\n\n/**\n * Generate OpenTelemetry-compatible span ID (64-bit, 16 hex chars)\n */\nfunction generateSpanId(): string {\n // Generate 8 random bytes (64 bits) in hex format\n const bytes = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 8; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate OpenTelemetry-compatible trace ID (128-bit, 32 hex chars)\n */\nfunction generateTraceId(): string {\n // Generate 16 random bytes (128 bits) in hex format\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nclass DefaultAISpan<TType extends AISpanType> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public attributes: AISpanTypeMap[TType];\n public parent?: AnyAISpan;\n public trace: AnyAISpan;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public aiTracing: MastraAITracing;\n public input?: any;\n public output?: any;\n public errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n public metadata?: Record<string, any>;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = generateSpanId();\n this.name = options.name;\n this.type = options.type;\n this.attributes = options.attributes || ({} as AISpanTypeMap[TType]);\n this.metadata = options.metadata;\n this.parent = options.parent;\n this.trace = options.parent ? options.parent.trace : (this as any);\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n this.input = options.input;\n\n // Set trace ID: generate new for root spans, inherit for child spans\n if (!options.parent) {\n // This is a root span, so it becomes its own trace with a new trace ID\n this.traceId = generateTraceId();\n } else {\n // Child span inherits trace ID from root span\n this.traceId = options.parent.trace.traceId;\n }\n }\n\n end(options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void {\n this.endTime = new Date();\n if (options?.output !== undefined) {\n this.output = options.output;\n }\n if (options?.attributes) {\n this.attributes = { ...this.attributes, ...options.attributes };\n }\n if (options?.metadata) {\n this.metadata = { ...this.metadata, ...options.metadata };\n }\n // Tracing events automatically handled by base class\n }\n\n error(options: {\n error: MastraError | Error;\n endSpan?: boolean;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {\n const { error, endSpan = true, attributes, metadata } = options;\n\n this.errorInfo =\n error instanceof MastraError\n ? {\n id: error.id,\n details: error.details,\n category: error.category,\n domain: error.domain,\n message: error.message,\n }\n : {\n message: error.message,\n };\n\n // Update attributes if provided\n if (attributes) {\n this.attributes = { ...this.attributes, ...attributes };\n }\n if (metadata) {\n this.metadata = { ...this.metadata, ...metadata };\n }\n\n if (endSpan) {\n this.end();\n } else {\n // Trigger span update event when not ending the span\n this.update({});\n }\n // Note: errorInfo is now a span property, attributes handled above\n }\n\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return this.aiTracing.startSpan({\n ...options,\n parent: this,\n });\n }\n\n update(options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {\n if (options?.input !== undefined) {\n this.input = options.input;\n }\n if (options?.output !== undefined) {\n this.output = options.output;\n }\n if (options?.attributes) {\n this.attributes = { ...this.attributes, ...options.attributes };\n }\n if (options?.metadata) {\n this.metadata = { ...this.metadata, ...options.metadata };\n }\n // Tracing events automatically handled by base class\n }\n\n get isRootSpan(): boolean {\n return !this.parent;\n }\n\n async export(): Promise<string> {\n return JSON.stringify({\n id: this.id,\n attributes: this.attributes,\n metadata: this.metadata,\n startTime: this.startTime,\n endTime: this.endTime,\n traceId: this.traceId, // OpenTelemetry trace ID\n });\n }\n}\n\n// ============================================================================\n// Sensitive Data Filter Processor\n// ============================================================================\n\nexport class SensitiveDataFilter implements AISpanProcessor {\n name = 'sensitive-data-filter';\n private sensitiveFields: string[];\n\n constructor(sensitiveFields?: string[]) {\n // Default sensitive fields with case-insensitive matching\n this.sensitiveFields = (\n sensitiveFields || [\n 'password',\n 'token',\n 'secret',\n 'key',\n 'apiKey',\n 'auth',\n 'authorization',\n 'bearer',\n 'jwt',\n 'credential',\n 'sessionId',\n ]\n ).map(field => field.toLowerCase());\n }\n\n process(span: AnyAISpan): AnyAISpan | null {\n // Deep filter function to recursively handle nested objects\n const deepFilter = (obj: any, seen = new WeakSet()): any => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (seen.has(obj)) {\n return '[Circular Reference]';\n }\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(item => deepFilter(item, seen));\n }\n\n const filtered: any = {};\n Object.keys(obj).forEach(key => {\n if (this.sensitiveFields.includes(key.toLowerCase())) {\n // Only redact primitive values, recurse into objects/arrays\n if (obj[key] && typeof obj[key] === 'object') {\n filtered[key] = deepFilter(obj[key], seen);\n } else {\n filtered[key] = '[REDACTED]';\n }\n } else {\n filtered[key] = deepFilter(obj[key], seen);\n }\n });\n\n return filtered;\n };\n\n try {\n // Create a copy of the span with filtered attributes\n const filteredSpan = { ...span };\n filteredSpan.attributes = deepFilter(span.attributes);\n filteredSpan.metadata = deepFilter(span.metadata);\n filteredSpan.input = deepFilter(span.input);\n filteredSpan.output = deepFilter(span.output);\n filteredSpan.errorInfo = deepFilter(span.errorInfo);\n return filteredSpan;\n } catch (error) {\n // If filtering fails, return heavily redacted span for security\n const safeSpan = { ...span };\n safeSpan.attributes = {\n '[FILTERING_ERROR]': 'Attributes were completely redacted due to filtering error',\n '[ERROR_MESSAGE]': error instanceof Error ? error.message : 'Unknown filtering error',\n } as any;\n return safeSpan;\n }\n }\n\n async shutdown(): Promise<void> {\n // No cleanup needed\n }\n}\n\n// ============================================================================\n// Default Console Exporter\n// ============================================================================\n\nexport class DefaultConsoleExporter implements AITracingExporter {\n name = 'default-console';\n private logger: IMastraLogger;\n\n constructor(logger?: IMastraLogger) {\n if (logger) {\n this.logger = logger;\n } else {\n // Fallback: create a direct ConsoleLogger instance if none provided\n this.logger = new ConsoleLogger({\n name: 'default-console-exporter',\n level: LogLevel.INFO, // Set to INFO so that info() calls actually log\n });\n }\n }\n\n async exportEvent(event: AITracingEvent): Promise<void> {\n const span = event.span;\n\n // Helper to safely stringify attributes (filtering already done by processor)\n const formatAttributes = (attributes: any) => {\n try {\n return JSON.stringify(attributes, null, 2);\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : 'Unknown formatting error';\n return `[Unable to serialize attributes: ${errMsg}]`;\n }\n };\n\n // Helper to format duration\n const formatDuration = (startTime: Date, endTime?: Date) => {\n if (!endTime) return 'N/A';\n const duration = endTime.getTime() - startTime.getTime();\n return `${duration}ms`;\n };\n\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n this.logger.info(`🚀 SPAN_STARTED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n this.logger.info(` Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_ENDED:\n const duration = formatDuration(span.startTime, span.endTime);\n this.logger.info(`✅ SPAN_ENDED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Duration: ${duration}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n if (span.output !== undefined) {\n this.logger.info(` Output: ${formatAttributes(span.output)}`);\n }\n if (span.errorInfo) {\n this.logger.info(` Error: ${formatAttributes(span.errorInfo)}`);\n }\n this.logger.info(` Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_UPDATED:\n this.logger.info(`📝 SPAN_UPDATED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n if (span.output !== undefined) {\n this.logger.info(` Output: ${formatAttributes(span.output)}`);\n }\n if (span.errorInfo) {\n this.logger.info(` Error: ${formatAttributes(span.errorInfo)}`);\n }\n this.logger.info(` Updated Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n default:\n throw new Error(`Tracing event type not implemented: ${(event as any).type}`);\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('DefaultConsoleExporter shutdown');\n }\n}\n\n// ============================================================================\n// Default Configuration (defined after classes to avoid circular dependencies)\n// ============================================================================\n\nexport const aiTracingDefaultConfig: AITracingInstanceConfig = {\n serviceName: 'mastra-ai-service',\n instanceName: 'default',\n sampling: { type: SamplingStrategyType.ALWAYS },\n exporters: [new DefaultConsoleExporter()], // Uses its own fallback logger\n processors: [new SensitiveDataFilter()],\n};\n\n// ============================================================================\n// Default AI Tracing Implementation\n// ============================================================================\n\nexport class DefaultAITracing extends MastraAITracing {\n constructor(config: AITracingInstanceConfig = aiTracingDefaultConfig) {\n super(config);\n }\n\n // ============================================================================\n // Abstract Method Implementations\n // ============================================================================\n\n protected createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType> {\n // Simple span creation - base class handles all tracing lifecycle automatically\n return new DefaultAISpan<TType>(options, this);\n }\n}\n","/**\n * AI Tracing Registry for Mastra\n *\n * Provides a global registry for AI tracing instances.\n */\n\nimport { MastraAITracing } from './base';\nimport { DefaultAITracing } from './default';\nimport { SamplingStrategyType } from './types';\nimport type { TracingSelector, AITracingSelectorContext, AITracingConfig, AITracingInstanceConfig } from './types';\n\n// ============================================================================\n// Global AI Tracing Registry\n// ============================================================================\n\n/**\n * Global registry for AI Tracing instances.\n */\nclass AITracingRegistry {\n private instances = new Map<string, MastraAITracing>();\n private defaultInstance?: MastraAITracing;\n private selector?: TracingSelector;\n\n /**\n * Register a tracing instance\n */\n register(name: string, instance: MastraAITracing, isDefault = false): void {\n if (this.instances.has(name)) {\n throw new Error(`AI Tracing instance '${name}' already registered`);\n }\n\n this.instances.set(name, instance);\n\n // Set as default if explicitly marked or if it's the first instance\n if (isDefault || !this.defaultInstance) {\n this.defaultInstance = instance;\n }\n }\n\n /**\n * Get a tracing instance by name\n */\n get(name: string): MastraAITracing | undefined {\n return this.instances.get(name);\n }\n\n /**\n * Get the default tracing instance\n */\n getDefault(): MastraAITracing | undefined {\n return this.defaultInstance;\n }\n\n /**\n * Set the tracing selector function\n */\n setSelector(selector: TracingSelector): void {\n this.selector = selector;\n }\n\n /**\n * Get the selected tracing instance based on context\n */\n getSelected(context: AITracingSelectorContext): MastraAITracing | undefined {\n // 1. Try selector function if provided\n if (this.selector) {\n const selected = this.selector(context, this.instances);\n if (selected && this.instances.has(selected)) {\n return this.instances.get(selected);\n }\n }\n\n // 2. Fall back to default\n return this.defaultInstance;\n }\n\n /**\n * Unregister a tracing instance\n */\n unregister(name: string): boolean {\n return this.instances.delete(name);\n }\n\n /**\n * Shutdown all instances and clear the registry\n */\n async shutdown(): Promise<void> {\n const shutdownPromises = Array.from(this.instances.values()).map(instance => instance.shutdown());\n\n await Promise.allSettled(shutdownPromises);\n this.instances.clear();\n }\n\n /**\n * Clear all instances without shutdown\n */\n clear(): void {\n this.instances.clear();\n this.defaultInstance = undefined;\n this.selector = undefined;\n }\n\n /**\n * Get all registered instances\n */\n getAll(): ReadonlyMap<string, MastraAITracing> {\n return new Map(this.instances);\n }\n}\n\nconst aiTracingRegistry = new AITracingRegistry();\n\n// ============================================================================\n// Registry Management Functions\n// ============================================================================\n\n/**\n * Register an AI tracing instance globally\n */\nexport function registerAITracing(name: string, instance: MastraAITracing, isDefault = false): void {\n aiTracingRegistry.register(name, instance, isDefault);\n}\n\n/**\n * Get an AI tracing instance from the registry\n */\nexport function getAITracing(name: string): MastraAITracing | undefined {\n return aiTracingRegistry.get(name);\n}\n\n/**\n * Get the default AI tracing instance\n */\nexport function getDefaultAITracing(): MastraAITracing | undefined {\n return aiTracingRegistry.getDefault();\n}\n\n/**\n * Set the AI tracing selector function\n */\nexport function setAITracingSelector(selector: TracingSelector): void {\n aiTracingRegistry.setSelector(selector);\n}\n\n/**\n * Get the selected AI tracing instance based on context\n */\nexport function getSelectedAITracing(context: AITracingSelectorContext): MastraAITracing | undefined {\n return aiTracingRegistry.getSelected(context);\n}\n\n/**\n * Unregister an AI tracing instance\n */\nexport function unregisterAITracing(name: string): boolean {\n return aiTracingRegistry.unregister(name);\n}\n\n/**\n * Shutdown all AI tracing instances and clear the registry\n */\nexport async function shutdownAITracingRegistry(): Promise<void> {\n await aiTracingRegistry.shutdown();\n}\n\n/**\n * Clear all AI tracing instances without shutdown\n */\nexport function clearAITracingRegistry(): void {\n aiTracingRegistry.clear();\n}\n\n/**\n * Get all registered AI tracing instances\n */\nexport function getAllAITracing(): ReadonlyMap<string, MastraAITracing> {\n return aiTracingRegistry.getAll();\n}\n\n/**\n * Check if AI tracing is available and enabled\n */\nexport function hasAITracing(name: string): boolean {\n const tracing = getAITracing(name);\n if (!tracing) return false;\n\n const config = tracing.getConfig();\n const sampling = config.sampling;\n\n // Check if sampling allows tracing\n return sampling.type !== SamplingStrategyType.NEVER;\n}\n\n/**\n * Type guard to check if an object is a MastraAITracing instance\n */\nfunction isAITracingInstance(obj: AITracingInstanceConfig | MastraAITracing): obj is MastraAITracing {\n return obj instanceof MastraAITracing;\n}\n\n/**\n * Setup AI tracing from the AITracingConfig\n */\nexport function setupAITracing(config: AITracingConfig): void {\n const entries = Object.entries(config.instances);\n\n entries.forEach(([name, tracingDef], index) => {\n const instance = isAITracingInstance(tracingDef)\n ? tracingDef // Pre-instantiated custom implementation\n : new DefaultAITracing({ ...tracingDef, instanceName: name }); // Config -> DefaultAITracing with instance name\n\n // First registered instance becomes default\n const isDefault = index === 0;\n registerAITracing(name, instance, isDefault);\n });\n\n // Set selector function if provided\n if (config.selector) {\n setAITracingSelector(config.selector);\n }\n}\n","/**\n * Utility functions for cleaning and manipulating metadata objects\n * used in AI tracing and observability.\n */\n\n/**\n * Removes non-serializable values from a metadata object.\n * @param metadata - An object with arbitrary values\n * @returns A new object with only serializable entries\n */\nexport function sanitizeMetadata(metadata: Record<string, any> | undefined): Record<string, any> {\n if (!metadata) return {};\n const sanitized: Record<string, any> = {};\n for (const [key, value] of Object.entries(metadata)) {\n if (isSerializable(value)) {\n sanitized[key] = value;\n }\n }\n return sanitized;\n}\n\n/**\n * Checks if a value can be safely JSON-stringified.\n * @param value - Any value\n * @returns true if serializable, false otherwise\n */\nexport function isSerializable(value: any): boolean {\n try {\n JSON.stringify(value);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Removes specific keys from an object.\n * @param obj - The original object\n * @param keysToOmit - Keys to exclude from the returned object\n * @returns A new object with the specified keys removed\n */\nexport function omitKeys<T extends Record<string, any>>(obj: T, keysToOmit: string[]): Partial<T> {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToOmit.includes(key))) as Partial<T>;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-tracing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai-tracing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC"}
|