@mastra/core 0.15.3-alpha.2 → 0.15.3-alpha.4

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.
Files changed (201) hide show
  1. package/dist/agent/agent.types.d.ts +9 -4
  2. package/dist/agent/agent.types.d.ts.map +1 -1
  3. package/dist/agent/index.cjs +11 -11
  4. package/dist/agent/index.d.ts +33 -5
  5. package/dist/agent/index.d.ts.map +1 -1
  6. package/dist/agent/index.js +2 -2
  7. package/dist/agent/input-processor/index.cjs +6 -6
  8. package/dist/agent/input-processor/index.js +1 -1
  9. package/dist/agent/message-list/index.d.ts +5 -1
  10. package/dist/agent/message-list/index.d.ts.map +1 -1
  11. package/dist/agent/message-list/prompt/convert-file.d.ts +7 -0
  12. package/dist/agent/message-list/prompt/convert-file.d.ts.map +1 -0
  13. package/dist/agent/message-list/prompt/download-assets.d.ts +15 -0
  14. package/dist/agent/message-list/prompt/download-assets.d.ts.map +1 -0
  15. package/dist/agent/types.d.ts +11 -6
  16. package/dist/agent/types.d.ts.map +1 -1
  17. package/dist/ai-tracing/context.d.ts.map +1 -1
  18. package/dist/ai-tracing/default.d.ts.map +1 -1
  19. package/dist/ai-tracing/index.cjs +43 -31
  20. package/dist/ai-tracing/index.js +1 -1
  21. package/dist/ai-tracing/no-op.d.ts +0 -1
  22. package/dist/ai-tracing/no-op.d.ts.map +1 -1
  23. package/dist/ai-tracing/types.d.ts +0 -2
  24. package/dist/ai-tracing/types.d.ts.map +1 -1
  25. package/dist/ai-tracing/utils.d.ts +44 -8
  26. package/dist/ai-tracing/utils.d.ts.map +1 -1
  27. package/dist/{chunk-QA2TWVUS.cjs → chunk-5CJDO3UO.cjs} +292 -9
  28. package/dist/chunk-5CJDO3UO.cjs.map +1 -0
  29. package/dist/chunk-ABRPHTOG.cjs +108 -0
  30. package/dist/chunk-ABRPHTOG.cjs.map +1 -0
  31. package/dist/chunk-BJGHUKKM.js +103 -0
  32. package/dist/chunk-BJGHUKKM.js.map +1 -0
  33. package/dist/{chunk-BRNBKCHE.js → chunk-CKM2ESZF.js} +51 -26
  34. package/dist/chunk-CKM2ESZF.js.map +1 -0
  35. package/dist/{chunk-HHLPYCQG.cjs → chunk-DZADAEAF.cjs} +68 -22
  36. package/dist/chunk-DZADAEAF.cjs.map +1 -0
  37. package/dist/{chunk-VBAWR62U.cjs → chunk-F2CAC2R2.cjs} +54 -29
  38. package/dist/chunk-F2CAC2R2.cjs.map +1 -0
  39. package/dist/{chunk-C5C4PN54.js → chunk-F4SQXAXR.js} +292 -9
  40. package/dist/chunk-F4SQXAXR.js.map +1 -0
  41. package/dist/{chunk-UG3KS3XV.cjs → chunk-F6XWBVVG.cjs} +4 -4
  42. package/dist/{chunk-UG3KS3XV.cjs.map → chunk-F6XWBVVG.cjs.map} +1 -1
  43. package/dist/{chunk-WHEH32QU.cjs → chunk-FQRDHVZC.cjs} +4 -4
  44. package/dist/{chunk-WHEH32QU.cjs.map → chunk-FQRDHVZC.cjs.map} +1 -1
  45. package/dist/{chunk-4DKPMUAC.cjs → chunk-I7OAONIW.cjs} +259 -177
  46. package/dist/chunk-I7OAONIW.cjs.map +1 -0
  47. package/dist/{chunk-XOZ737RO.js → chunk-IODUKRQP.js} +3 -3
  48. package/dist/{chunk-XOZ737RO.js.map → chunk-IODUKRQP.js.map} +1 -1
  49. package/dist/{chunk-7OSUKFNG.cjs → chunk-KUNWELBC.cjs} +692 -507
  50. package/dist/chunk-KUNWELBC.cjs.map +1 -0
  51. package/dist/{chunk-WOTBMZCN.js → chunk-LOYT3WUA.js} +255 -176
  52. package/dist/chunk-LOYT3WUA.js.map +1 -0
  53. package/dist/{chunk-6VROHRAR.cjs → chunk-LVGGMWSE.cjs} +31 -8
  54. package/dist/chunk-LVGGMWSE.cjs.map +1 -0
  55. package/dist/{chunk-T64BA34G.js → chunk-OFPVAPUH.js} +4 -4
  56. package/dist/{chunk-T64BA34G.js.map → chunk-OFPVAPUH.js.map} +1 -1
  57. package/dist/{chunk-5NGEKEU7.js → chunk-P2IJ74UW.js} +661 -476
  58. package/dist/chunk-P2IJ74UW.js.map +1 -0
  59. package/dist/{chunk-QBNRMJAN.cjs → chunk-VVTB47UG.cjs} +6 -6
  60. package/dist/{chunk-QBNRMJAN.cjs.map → chunk-VVTB47UG.cjs.map} +1 -1
  61. package/dist/{chunk-HXYE4EJA.cjs → chunk-W5CF7DLB.cjs} +9 -9
  62. package/dist/{chunk-HXYE4EJA.cjs.map → chunk-W5CF7DLB.cjs.map} +1 -1
  63. package/dist/{chunk-FLXWZUIG.js → chunk-WWQ3QRPF.js} +27 -5
  64. package/dist/chunk-WWQ3QRPF.js.map +1 -0
  65. package/dist/{chunk-E3LAPNKY.js → chunk-XPFWOBV4.js} +4 -4
  66. package/dist/{chunk-E3LAPNKY.js.map → chunk-XPFWOBV4.js.map} +1 -1
  67. package/dist/{chunk-IYCG5OVT.js → chunk-YAWYQH3N.js} +3 -3
  68. package/dist/{chunk-IYCG5OVT.js.map → chunk-YAWYQH3N.js.map} +1 -1
  69. package/dist/{chunk-UT6KEZRF.js → chunk-YVIYEC6R.js} +62 -16
  70. package/dist/chunk-YVIYEC6R.js.map +1 -0
  71. package/dist/index.cjs +47 -43
  72. package/dist/index.js +10 -10
  73. package/dist/integration/index.cjs +3 -3
  74. package/dist/integration/index.js +1 -1
  75. package/dist/llm/index.d.ts +2 -2
  76. package/dist/llm/index.d.ts.map +1 -1
  77. package/dist/llm/model/base.types.d.ts +2 -2
  78. package/dist/llm/model/base.types.d.ts.map +1 -1
  79. package/dist/llm/model/model.d.ts +4 -4
  80. package/dist/llm/model/model.d.ts.map +1 -1
  81. package/dist/llm/model/model.loop.d.ts +1 -1
  82. package/dist/llm/model/model.loop.d.ts.map +1 -1
  83. package/dist/llm/model/model.loop.types.d.ts +2 -0
  84. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  85. package/dist/loop/index.cjs +2 -2
  86. package/dist/loop/index.js +1 -1
  87. package/dist/loop/loop.d.ts +1 -1
  88. package/dist/loop/loop.d.ts.map +1 -1
  89. package/dist/loop/types.d.ts +4 -0
  90. package/dist/loop/types.d.ts.map +1 -1
  91. package/dist/loop/workflow/llm-execution.d.ts +1 -1
  92. package/dist/loop/workflow/llm-execution.d.ts.map +1 -1
  93. package/dist/loop/workflow/stream.d.ts +1 -1
  94. package/dist/loop/workflow/stream.d.ts.map +1 -1
  95. package/dist/mastra/hooks.d.ts.map +1 -1
  96. package/dist/mastra/index.cjs +2 -2
  97. package/dist/mastra/index.d.ts +8 -3
  98. package/dist/mastra/index.d.ts.map +1 -1
  99. package/dist/mastra/index.js +1 -1
  100. package/dist/memory/index.cjs +4 -4
  101. package/dist/memory/index.js +1 -1
  102. package/dist/network/index.cjs +4 -4
  103. package/dist/network/index.js +2 -2
  104. package/dist/network/vNext/index.cjs +14 -14
  105. package/dist/network/vNext/index.js +2 -2
  106. package/dist/processors/index.cjs +13 -11
  107. package/dist/processors/index.cjs.map +1 -1
  108. package/dist/processors/index.d.ts +4 -0
  109. package/dist/processors/index.d.ts.map +1 -1
  110. package/dist/processors/index.js +7 -5
  111. package/dist/processors/index.js.map +1 -1
  112. package/dist/processors/processors/moderation.d.ts +4 -0
  113. package/dist/processors/processors/moderation.d.ts.map +1 -1
  114. package/dist/processors/processors/pii-detector.d.ts +3 -0
  115. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  116. package/dist/processors/processors/prompt-injection-detector.d.ts +2 -0
  117. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  118. package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -0
  119. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  120. package/dist/processors/runner.d.ts +5 -4
  121. package/dist/processors/runner.d.ts.map +1 -1
  122. package/dist/relevance/index.cjs +4 -4
  123. package/dist/relevance/index.js +1 -1
  124. package/dist/scores/base.d.ts +2 -0
  125. package/dist/scores/base.d.ts.map +1 -1
  126. package/dist/scores/hooks.d.ts +3 -1
  127. package/dist/scores/hooks.d.ts.map +1 -1
  128. package/dist/scores/index.cjs +27 -18
  129. package/dist/scores/index.cjs.map +1 -1
  130. package/dist/scores/index.js +23 -14
  131. package/dist/scores/index.js.map +1 -1
  132. package/dist/scores/run-experiment/index.d.ts +2 -0
  133. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  134. package/dist/scores/types.d.ts +3 -0
  135. package/dist/scores/types.d.ts.map +1 -1
  136. package/dist/storage/index.cjs +3 -3
  137. package/dist/storage/index.js +1 -1
  138. package/dist/stream/aisdk/v5/compat/consume-stream.d.ts +8 -0
  139. package/dist/stream/aisdk/v5/compat/consume-stream.d.ts.map +1 -0
  140. package/dist/stream/aisdk/v5/compat/content.d.ts +7 -0
  141. package/dist/stream/aisdk/v5/compat/content.d.ts.map +1 -0
  142. package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts +23 -0
  143. package/dist/stream/aisdk/v5/compat/delayed-promise.d.ts.map +1 -0
  144. package/dist/stream/aisdk/v5/compat/index.d.ts +8 -0
  145. package/dist/stream/aisdk/v5/compat/index.d.ts.map +1 -0
  146. package/dist/stream/aisdk/v5/compat/media.d.ts +91 -0
  147. package/dist/stream/aisdk/v5/compat/media.d.ts.map +1 -0
  148. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts +11 -0
  149. package/dist/stream/aisdk/v5/compat/prepare-tools.d.ts.map +1 -0
  150. package/dist/stream/aisdk/v5/compat/ui-message.d.ts +20 -0
  151. package/dist/stream/aisdk/v5/compat/ui-message.d.ts.map +1 -0
  152. package/dist/stream/aisdk/v5/compat/validation.d.ts +17 -0
  153. package/dist/stream/aisdk/v5/compat/validation.d.ts.map +1 -0
  154. package/dist/stream/aisdk/v5/output.d.ts +1 -1
  155. package/dist/stream/base/output.d.ts +1 -1
  156. package/dist/stream/index.cjs +3 -3
  157. package/dist/stream/index.js +1 -1
  158. package/dist/test-utils/llm-mock.cjs +2 -2
  159. package/dist/test-utils/llm-mock.js +1 -1
  160. package/dist/tools/index.cjs +4 -4
  161. package/dist/tools/index.js +1 -1
  162. package/dist/tools/is-vercel-tool.cjs +2 -2
  163. package/dist/tools/is-vercel-tool.js +1 -1
  164. package/dist/tools/tool.d.ts +3 -1
  165. package/dist/tools/tool.d.ts.map +1 -1
  166. package/dist/tools/validation.d.ts.map +1 -1
  167. package/dist/utils.cjs +20 -16
  168. package/dist/utils.d.ts +12 -3
  169. package/dist/utils.d.ts.map +1 -1
  170. package/dist/utils.js +1 -1
  171. package/dist/workflows/default.d.ts +13 -3
  172. package/dist/workflows/default.d.ts.map +1 -1
  173. package/dist/workflows/evented/index.cjs +10 -10
  174. package/dist/workflows/evented/index.js +1 -1
  175. package/dist/workflows/execution-engine.d.ts +2 -2
  176. package/dist/workflows/execution-engine.d.ts.map +1 -1
  177. package/dist/workflows/index.cjs +10 -10
  178. package/dist/workflows/index.js +1 -1
  179. package/dist/workflows/legacy/index.cjs +22 -22
  180. package/dist/workflows/legacy/index.js +1 -1
  181. package/dist/workflows/workflow.d.ts +8 -8
  182. package/dist/workflows/workflow.d.ts.map +1 -1
  183. package/package.json +6 -6
  184. package/dist/chunk-4DKPMUAC.cjs.map +0 -1
  185. package/dist/chunk-5NGEKEU7.js.map +0 -1
  186. package/dist/chunk-6VROHRAR.cjs.map +0 -1
  187. package/dist/chunk-7OSUKFNG.cjs.map +0 -1
  188. package/dist/chunk-BRNBKCHE.js.map +0 -1
  189. package/dist/chunk-C5C4PN54.js.map +0 -1
  190. package/dist/chunk-E4XQMNEI.cjs +0 -77
  191. package/dist/chunk-E4XQMNEI.cjs.map +0 -1
  192. package/dist/chunk-FLXWZUIG.js.map +0 -1
  193. package/dist/chunk-HHLPYCQG.cjs.map +0 -1
  194. package/dist/chunk-IVGAHFAJ.js +0 -72
  195. package/dist/chunk-IVGAHFAJ.js.map +0 -1
  196. package/dist/chunk-QA2TWVUS.cjs.map +0 -1
  197. package/dist/chunk-UT6KEZRF.js.map +0 -1
  198. package/dist/chunk-VBAWR62U.cjs.map +0 -1
  199. package/dist/chunk-WOTBMZCN.js.map +0 -1
  200. package/dist/stream/aisdk/v5/compat.d.ts +0 -73
  201. package/dist/stream/aisdk/v5/compat.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/events/event-emitter.ts","../src/mastra/hooks.ts","../src/mastra/index.ts"],"names":[],"mappings":"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","file":"chunk-UT6KEZRF.js","sourcesContent":["import EventEmitter from 'events';\nimport { PubSub } from './pubsub';\nimport type { Event } from './types';\n\nexport class EventEmitterPubSub extends PubSub {\n private emitter: EventEmitter;\n\n constructor() {\n super();\n this.emitter = new EventEmitter();\n }\n\n async publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>): Promise<void> {\n const id = crypto.randomUUID();\n const createdAt = new Date();\n this.emitter.emit(topic, {\n ...event,\n id,\n createdAt,\n });\n }\n\n async subscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.on(topic, cb);\n }\n\n async unsubscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.off(topic, cb);\n }\n\n async flush(): Promise<void> {\n // no-op\n }\n}\n","import type { Mastra } from '..';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { ScoringHookInput } from '../scores';\n\nexport function createOnScorerHook(mastra: Mastra) {\n return async (hookData: ScoringHookInput) => {\n if (!mastra.getStorage()) {\n return;\n }\n\n const storage = mastra.getStorage();\n const entityId = hookData.entity.id;\n const entityType = hookData.entityType;\n const scorer = hookData.scorer;\n\n let scorerToUse;\n try {\n if (entityType === 'AGENT') {\n const agent = mastra.getAgentById(entityId);\n const scorers = await agent.getScorers();\n scorerToUse = scorers[scorer.id];\n } else if (entityType === 'WORKFLOW') {\n const workflow = mastra.getWorkflowById(entityId);\n const scorers = await workflow.getScorers();\n scorerToUse = scorers[scorer.id];\n } else {\n return;\n }\n\n if (!scorerToUse) {\n throw new MastraError({\n id: 'MASTRA_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ID ${hookData.scorer.id} not found`,\n });\n }\n\n let input = hookData.input;\n let output = hookData.output;\n\n if (entityType !== 'AGENT') {\n output = { object: hookData.output };\n }\n const { structuredOutput, ...rest } = hookData as any; // temporary fix;\n\n const runResult = await scorerToUse.scorer.run({\n ...rest,\n input,\n output,\n });\n\n const payload = {\n ...rest,\n ...runResult,\n entityId,\n scorerId: hookData.scorer.id,\n metadata: {\n structuredOutput: !!structuredOutput,\n },\n };\n await storage?.saveScore(payload);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_HOOK',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n details: {\n scorerId: scorer.id,\n entityId,\n entityType,\n },\n },\n error,\n );\n\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n };\n}\n","import type { Agent } from '../agent';\nimport { getAllAITracing, setupAITracing, shutdownAITracingRegistry } from '../ai-tracing';\nimport type { AITracingConfig } from '../ai-tracing';\nimport type { BundlerConfig } from '../bundler/types';\nimport type { MastraDeployer } from '../deployer';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { EventEmitterPubSub } from '../events/event-emitter';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event } from '../events/types';\nimport { AvailableHooks, registerHook } from '../hooks';\nimport { LogLevel, noopLogger, ConsoleLogger } from '../logger';\nimport type { IMastraLogger } from '../logger';\nimport type { MCPServerBase } from '../mcp';\nimport type { MastraMemory } from '../memory/memory';\nimport type { AgentNetwork } from '../network';\nimport type { NewAgentNetwork } from '../network/vNext';\nimport type { Middleware, ServerConfig } from '../server/types';\nimport type { MastraStorage } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport { InstrumentClass, Telemetry } from '../telemetry';\nimport type { OtelConfig } from '../telemetry';\nimport type { MastraTTS } from '../tts';\nimport type { MastraIdGenerator } from '../types';\nimport type { MastraVector } from '../vector';\nimport type { Workflow } from '../workflows';\nimport { WorkflowEventProcessor } from '../workflows/evented/workflow-event-processor';\nimport type { LegacyWorkflow } from '../workflows/legacy';\nimport { createOnScorerHook } from './hooks';\n\nexport interface Config<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n> {\n agents?: TAgents;\n networks?: TNetworks;\n vnext_networks?: TVNextNetworks;\n storage?: MastraStorage;\n vectors?: TVectors;\n logger?: TLogger | false;\n legacy_workflows?: TLegacyWorkflows;\n workflows?: TWorkflows;\n tts?: TTTS;\n telemetry?: OtelConfig;\n observability?: AITracingConfig;\n idGenerator?: MastraIdGenerator;\n deployer?: MastraDeployer;\n server?: ServerConfig;\n mcpServers?: TMCPServers;\n bundler?: BundlerConfig;\n pubsub?: PubSub;\n\n /**\n * Server middleware functions to be applied to API routes\n * Each middleware can specify a path pattern (defaults to '/api/*')\n * @deprecated use server.middleware instead\n */\n serverMiddleware?: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path?: string;\n }>;\n\n // @deprecated add memory to your Agent directly instead\n memory?: never;\n\n events?: {\n [topic: string]: (\n event: Event,\n cb?: () => Promise<void>,\n ) => Promise<void> | ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n };\n}\n\n@InstrumentClass({\n prefix: 'mastra',\n excludeMethods: ['getLogger', 'getTelemetry'],\n})\nexport class Mastra<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n> {\n #vectors?: TVectors;\n #agents: TAgents;\n #logger: TLogger;\n #legacy_workflows: TLegacyWorkflows;\n #workflows: TWorkflows;\n #tts?: TTTS;\n #deployer?: MastraDeployer;\n #serverMiddleware: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path: string;\n }> = [];\n #telemetry?: Telemetry;\n #storage?: MastraStorage;\n #memory?: MastraMemory;\n #networks?: TNetworks;\n #vnext_networks?: TVNextNetworks;\n #server?: ServerConfig;\n #mcpServers?: TMCPServers;\n #bundler?: BundlerConfig;\n #idGenerator?: MastraIdGenerator;\n #pubsub: PubSub;\n #events: {\n [topic: string]: ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n } = {};\n\n /**\n * @deprecated use getTelemetry() instead\n */\n get telemetry() {\n return this.#telemetry;\n }\n\n /**\n * @deprecated use getStorage() instead\n */\n get storage() {\n return this.#storage;\n }\n\n /**\n * @deprecated use getMemory() instead\n */\n get memory() {\n return this.#memory;\n }\n\n get pubsub() {\n return this.#pubsub;\n }\n\n public getIdGenerator() {\n return this.#idGenerator;\n }\n\n /**\n * Generate a unique identifier using the configured generator or default to crypto.randomUUID()\n * @returns A unique string ID\n */\n public generateId(): string {\n if (this.#idGenerator) {\n const id = this.#idGenerator();\n if (!id) {\n const error = new MastraError({\n id: 'MASTRA_ID_GENERATOR_RETURNED_EMPTY_STRING',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'ID generator returned an empty string, which is not allowed',\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return id;\n }\n return crypto.randomUUID();\n }\n\n public setIdGenerator(idGenerator: MastraIdGenerator) {\n this.#idGenerator = idGenerator;\n }\n\n constructor(\n config?: Config<\n TAgents,\n TLegacyWorkflows,\n TWorkflows,\n TVectors,\n TTTS,\n TLogger,\n TNetworks,\n TVNextNetworks,\n TMCPServers\n >,\n ) {\n // Store server middleware with default path\n if (config?.serverMiddleware) {\n this.#serverMiddleware = config.serverMiddleware.map(m => ({\n handler: m.handler,\n path: m.path || '/api/*',\n }));\n }\n\n /*\n Events\n */\n if (config?.pubsub) {\n this.#pubsub = config.pubsub;\n } else {\n this.#pubsub = new EventEmitterPubSub();\n }\n\n this.#events = {};\n for (const topic in config?.events ?? {}) {\n if (!Array.isArray(config?.events?.[topic])) {\n this.#events[topic] = [config?.events?.[topic] as any];\n } else {\n this.#events[topic] = config?.events?.[topic] ?? [];\n }\n }\n\n const workflowEventProcessor = new WorkflowEventProcessor({ mastra: this });\n const workflowEventCb = async (event: Event, cb?: () => Promise<void>): Promise<void> => {\n try {\n await workflowEventProcessor.process(event, cb);\n } catch (e) {\n console.error('Error processing event', e);\n }\n };\n if (this.#events.workflows) {\n this.#events.workflows.push(workflowEventCb);\n } else {\n this.#events.workflows = [workflowEventCb];\n }\n\n /*\n Logger\n */\n\n let logger: TLogger;\n if (config?.logger === false) {\n logger = noopLogger as unknown as TLogger;\n } else {\n if (config?.logger) {\n logger = config.logger;\n } else {\n const levelOnEnv =\n process.env.NODE_ENV === 'production' && process.env.MASTRA_DEV !== 'true' ? LogLevel.WARN : LogLevel.INFO;\n logger = new ConsoleLogger({ name: 'Mastra', level: levelOnEnv }) as unknown as TLogger;\n }\n }\n this.#logger = logger;\n\n this.#idGenerator = config?.idGenerator;\n\n let storage = config?.storage;\n\n if (storage) {\n storage = augmentWithInit(storage);\n }\n\n /*\n Telemetry\n */\n\n this.#telemetry = Telemetry.init(config?.telemetry);\n\n // Warn if telemetry is enabled but the instrumentation global is not set\n if (\n config?.telemetry?.enabled !== false &&\n typeof globalThis !== 'undefined' &&\n (globalThis as any).___MASTRA_TELEMETRY___ !== true\n ) {\n this.#logger?.warn(\n `Mastra telemetry is enabled, but the required instrumentation file was not loaded. ` +\n `If you are using Mastra outside of the mastra server environment, see: https://mastra.ai/en/docs/observability/tracing#tracing-outside-mastra-server-environment`,\n `If you are using a custom instrumentation file or want to disable this warning, set the globalThis.___MASTRA_TELEMETRY___ variable to true in your instrumentation file.`,\n );\n }\n\n /*\n AI Tracing\n */\n\n if (config?.observability) {\n setupAITracing(config.observability);\n }\n\n /*\n Storage\n */\n if (this.#telemetry && storage) {\n this.#storage = this.#telemetry.traceClass(storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry', 'batchTraceInsert', 'getTraces', 'getEvalsByAgentName'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n } else {\n this.#storage = storage;\n }\n\n /*\n Vectors\n */\n if (config?.vectors) {\n let vectors: Record<string, MastraVector> = {};\n Object.entries(config.vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n } else {\n vectors[key] = vector;\n }\n });\n\n this.#vectors = vectors as TVectors;\n }\n\n if (config?.networks) {\n this.#networks = config.networks;\n }\n\n if (config?.vnext_networks) {\n this.#vnext_networks = config.vnext_networks;\n }\n\n if (config?.mcpServers) {\n this.#mcpServers = config.mcpServers;\n\n // Set logger/telemetry/Mastra instance/id for MCP servers\n Object.entries(this.#mcpServers).forEach(([key, server]) => {\n server.setId(key);\n if (this.#telemetry) {\n server.__setTelemetry(this.#telemetry);\n }\n\n server.__registerMastra(this);\n server.__setLogger(this.getLogger());\n });\n }\n\n if (config && `memory` in config) {\n const error = new MastraError({\n id: 'MASTRA_CONSTRUCTOR_INVALID_MEMORY_CONFIG',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `\n Memory should be added to Agents, not to Mastra.\n\nInstead of:\n new Mastra({ memory: new Memory() })\n\ndo:\n new Agent({ memory: new Memory() })\n`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (config?.tts) {\n this.#tts = config.tts;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#tts?.[key]) {\n if (this.#telemetry) {\n // @ts-ignore\n this.#tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#tts[key].__setTelemetry(this.#telemetry);\n }\n }\n });\n }\n\n /*\n Agents\n */\n const agents: Record<string, Agent> = {};\n if (config?.agents) {\n Object.entries(config.agents).forEach(([key, agent]) => {\n if (agents[key]) {\n const error = new MastraError({\n id: 'MASTRA_AGENT_REGISTRATION_DUPLICATE_ID',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ID:${key} already exists`,\n details: {\n agentId: key,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n agent.__registerMastra(this);\n\n agent.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n\n agents[key] = agent;\n });\n }\n\n this.#agents = agents as TAgents;\n\n /*\n Networks\n */\n this.#networks = {} as TNetworks;\n this.#vnext_networks = {} as TVNextNetworks;\n\n if (config?.networks) {\n Object.entries(config.networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#networks[key] = network;\n });\n }\n\n if (config?.vnext_networks) {\n Object.entries(config.vnext_networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#vnext_networks[key] = network;\n });\n }\n\n /*\n Legacy Workflows\n */\n this.#legacy_workflows = {} as TLegacyWorkflows;\n\n if (config?.legacy_workflows) {\n Object.entries(config.legacy_workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#legacy_workflows[key] = workflow;\n\n const workflowSteps = Object.values(workflow.steps).filter(step => !!step.workflowId && !!step.workflow);\n if (workflowSteps.length > 0) {\n workflowSteps.forEach(step => {\n // @ts-ignore\n this.#legacy_workflows[step.workflowId] = step.workflow;\n });\n }\n });\n }\n\n this.#workflows = {} as TWorkflows;\n if (config?.workflows) {\n Object.entries(config.workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#workflows[key] = workflow;\n });\n }\n\n if (config?.server) {\n this.#server = config.server;\n }\n\n registerHook(AvailableHooks.ON_SCORER_RUN, createOnScorerHook(this));\n\n /*\n Register Mastra instance with AI tracing exporters and initialize them\n */\n if (config?.observability) {\n this.registerAITracingExporters();\n this.initAITracingExporters();\n }\n\n this.setLogger({ logger });\n }\n\n /**\n * Register this Mastra instance with AI tracing exporters that need it\n */\n private registerAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Check if exporter has __registerMastra method\n if ('__registerMastra' in exporter && typeof (exporter as any).__registerMastra === 'function') {\n (exporter as any).__registerMastra(this);\n }\n });\n });\n }\n\n /**\n * Initialize all AI tracing exporters after registration is complete\n */\n private initAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Initialize exporter if it has an init method\n if ('init' in exporter && typeof exporter.init === 'function') {\n try {\n exporter.init();\n } catch (error) {\n this.#logger?.warn('Failed to initialize AI tracing exporter', {\n exporterName: exporter.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n });\n });\n }\n\n public getAgent<TAgentName extends keyof TAgents>(name: TAgentName): TAgents[TAgentName] {\n const agent = this.#agents?.[name];\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ${String(name)} not found`,\n details: {\n status: 404,\n agentName: String(name),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#agents[name];\n }\n\n public getAgentById(id: string): Agent {\n let agent = Object.values(this.#agents).find(a => a.id === id);\n\n if (!agent) {\n try {\n agent = this.getAgent(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with id ${String(id)} not found`,\n details: {\n status: 404,\n agentId: String(id),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return agent;\n }\n\n public getAgents() {\n return this.#agents;\n }\n\n public getVector<TVectorName extends keyof TVectors>(name: TVectorName): TVectors[TVectorName] {\n const vector = this.#vectors?.[name];\n if (!vector) {\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector with name ${String(name)} not found`,\n details: {\n status: 404,\n vectorName: String(name),\n vectors: Object.keys(this.#vectors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return vector;\n }\n\n public getVectors() {\n return this.#vectors;\n }\n\n public getDeployer() {\n return this.#deployer;\n }\n\n public legacy_getWorkflow<TWorkflowId extends keyof TLegacyWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TLegacyWorkflows[TWorkflowId] {\n const workflow = this.#legacy_workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_LEGACY_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#legacy_workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TLegacyWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflow<TWorkflowId extends keyof TWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TWorkflows[TWorkflowId] {\n const workflow = this.#workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflowById(id: string): Workflow {\n let workflow = Object.values(this.#workflows).find(a => a.id === id);\n\n if (!workflow) {\n try {\n workflow = this.getWorkflow(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return workflow;\n }\n\n public legacy_getWorkflows(props: { serialized?: boolean } = {}): Record<string, LegacyWorkflow> {\n if (props.serialized) {\n return Object.entries(this.#legacy_workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#legacy_workflows;\n }\n\n public getWorkflows(props: { serialized?: boolean } = {}): Record<string, Workflow> {\n if (props.serialized) {\n return Object.entries(this.#workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#workflows;\n }\n\n public setStorage(storage: MastraStorage) {\n this.#storage = augmentWithInit(storage);\n }\n\n public setLogger({ logger }: { logger: TLogger }) {\n this.#logger = logger;\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n this.#agents?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#memory) {\n this.#memory.__setLogger(this.#logger);\n }\n\n if (this.#deployer) {\n this.#deployer.__setLogger(this.#logger);\n }\n\n if (this.#tts) {\n Object.keys(this.#tts).forEach(key => {\n this.#tts?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#storage) {\n this.#storage.__setLogger(this.#logger);\n }\n\n if (this.#vectors) {\n Object.keys(this.#vectors).forEach(key => {\n this.#vectors?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#mcpServers) {\n Object.keys(this.#mcpServers).forEach(key => {\n this.#mcpServers?.[key]?.__setLogger(this.#logger);\n });\n }\n\n // Set logger for AI tracing instances\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(instance => {\n instance.__setLogger(this.#logger);\n });\n }\n\n public setTelemetry(telemetry: OtelConfig) {\n this.#telemetry = Telemetry.init(telemetry);\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n if (this.#telemetry) {\n this.#agents?.[key]?.__setTelemetry(this.#telemetry);\n }\n });\n }\n\n if (this.#memory) {\n this.#memory = this.#telemetry.traceClass(this.#memory, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#memory.__setTelemetry(this.#telemetry);\n }\n\n if (this.#deployer) {\n this.#deployer = this.#telemetry.traceClass(this.#deployer, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#deployer.__setTelemetry(this.#telemetry);\n }\n\n if (this.#tts) {\n let tts = {} as Record<string, MastraTTS>;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#telemetry) {\n tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n tts[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#tts = tts as TTTS;\n }\n\n if (this.#storage) {\n this.#storage = this.#telemetry.traceClass(this.#storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n }\n\n if (this.#vectors) {\n let vectors = {} as Record<string, MastraVector>;\n Object.entries(this.#vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#vectors = vectors as TVectors;\n }\n }\n\n public getTTS() {\n return this.#tts;\n }\n\n public getLogger() {\n return this.#logger;\n }\n\n public getTelemetry() {\n return this.#telemetry;\n }\n\n public getMemory() {\n return this.#memory;\n }\n\n public getStorage() {\n return this.#storage;\n }\n\n public getServerMiddleware() {\n return this.#serverMiddleware;\n }\n\n public setServerMiddleware(serverMiddleware: Middleware | Middleware[]) {\n if (typeof serverMiddleware === 'function') {\n this.#serverMiddleware = [\n {\n handler: serverMiddleware,\n path: '/api/*',\n },\n ];\n return;\n }\n\n if (!Array.isArray(serverMiddleware)) {\n const error = new MastraError({\n id: 'MASTRA_SET_SERVER_MIDDLEWARE_INVALID_TYPE',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Invalid middleware: expected a function or array, received ${typeof serverMiddleware}`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n this.#serverMiddleware = serverMiddleware.map(m => {\n if (typeof m === 'function') {\n return {\n handler: m,\n path: '/api/*',\n };\n }\n return {\n handler: m.handler,\n path: m.path || '/api/*',\n };\n });\n }\n\n public getNetworks() {\n return Object.values(this.#networks || {});\n }\n\n public vnext_getNetworks() {\n return Object.values(this.#vnext_networks || {});\n }\n\n public getServer() {\n return this.#server;\n }\n\n public getBundlerConfig() {\n return this.#bundler;\n }\n\n /**\n * Get a specific network by ID\n * @param networkId - The ID of the network to retrieve\n * @returns The network with the specified ID, or undefined if not found\n */\n public getNetwork(networkId: string): AgentNetwork | undefined {\n const networks = this.getNetworks();\n return networks.find(network => {\n const routingAgent = network.getRoutingAgent();\n return network.formatAgentId(routingAgent.name) === networkId;\n });\n }\n\n public vnext_getNetwork(networkId: string): NewAgentNetwork | undefined {\n const networks = this.vnext_getNetworks();\n return networks.find(network => network.id === networkId);\n }\n\n public async getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n runId: string;\n transportId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger?.getLogsByRunId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not configured or does not support getLogsByRunId operation',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return await this.#logger.getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n });\n }\n\n public async getLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not set',\n details: {\n transportId,\n },\n });\n throw error;\n }\n\n return await this.#logger.getLogs(transportId, params);\n }\n\n /**\n * Get all registered MCP server instances.\n * @returns A record of MCP server ID to MCPServerBase instance, or undefined if none are registered.\n */\n public getMCPServers(): Record<string, MCPServerBase> | undefined {\n return this.#mcpServers;\n }\n\n /**\n * Get a specific MCP server instance.\n * If a version is provided, it attempts to find the server with that exact logical ID and version.\n * If no version is provided, it returns the server with the specified logical ID that has the most recent releaseDate.\n * The logical ID should match the `id` property of the MCPServer instance (typically set via MCPServerConfig.id).\n * @param serverId - The logical ID of the MCP server to retrieve.\n * @param version - Optional specific version of the MCP server to retrieve.\n * @returns The MCP server instance, or undefined if not found or if the specific version is not found.\n */\n public getMCPServer(serverId: string, version?: string): MCPServerBase | undefined {\n if (!this.#mcpServers) {\n return undefined;\n }\n\n const allRegisteredServers = Object.values(this.#mcpServers || {});\n\n const matchingLogicalIdServers = allRegisteredServers.filter(server => server.id === serverId);\n\n if (matchingLogicalIdServers.length === 0) {\n this.#logger?.debug(`No MCP servers found with logical ID: ${serverId}`);\n return undefined;\n }\n\n if (version) {\n const specificVersionServer = matchingLogicalIdServers.find(server => server.version === version);\n if (!specificVersionServer) {\n this.#logger?.debug(`MCP server with logical ID '${serverId}' found, but not version '${version}'.`);\n }\n return specificVersionServer;\n } else {\n // No version specified, find the one with the most recent releaseDate\n if (matchingLogicalIdServers.length === 1) {\n return matchingLogicalIdServers[0];\n }\n\n matchingLogicalIdServers.sort((a, b) => {\n // Ensure releaseDate exists and is a string before creating a Date object\n const dateAVal = a.releaseDate && typeof a.releaseDate === 'string' ? new Date(a.releaseDate).getTime() : NaN;\n const dateBVal = b.releaseDate && typeof b.releaseDate === 'string' ? new Date(b.releaseDate).getTime() : NaN;\n\n if (isNaN(dateAVal) && isNaN(dateBVal)) return 0;\n if (isNaN(dateAVal)) return 1; // Treat invalid/missing dates as older\n if (isNaN(dateBVal)) return -1; // Treat invalid/missing dates as older\n\n return dateBVal - dateAVal; // Sorts in descending order of time (latest first)\n });\n\n // After sorting, the first element should be the latest if its date is valid\n if (matchingLogicalIdServers.length > 0) {\n const latestServer = matchingLogicalIdServers[0];\n if (\n latestServer &&\n latestServer.releaseDate &&\n typeof latestServer.releaseDate === 'string' &&\n !isNaN(new Date(latestServer.releaseDate).getTime())\n ) {\n return latestServer;\n }\n }\n this.#logger?.warn(\n `Could not determine the latest server for logical ID '${serverId}' due to invalid or missing release dates, or no servers left after filtering.`,\n );\n return undefined;\n }\n }\n\n public async addTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.subscribe(topic, listener);\n }\n\n public async removeTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n\n public async startEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.subscribe(topic, listener);\n }\n }\n }\n\n public async stopEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n }\n\n await this.#pubsub.flush();\n }\n\n /**\n * Shutdown Mastra and clean up all resources\n */\n async shutdown(): Promise<void> {\n // Shutdown AI tracing registry and all instances\n await shutdownAITracingRegistry();\n await this.stopEventEngine();\n\n this.#logger?.info('Mastra shutdown completed');\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/llm/model/model.ts"],"names":["MastraBase","OpenAIReasoningSchemaCompatLayer","OpenAISchemaCompatLayer","GoogleSchemaCompatLayer","AnthropicSchemaCompatLayer","DeepSeekSchemaCompatLayer","MetaSchemaCompatLayer","applyCompatLayer","isZodType","z","zodToJsonSchema","jsonSchema","MastraError","delay","Output","generateText","generateObject","streamText","streamObject"],"mappings":"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","file":"chunk-VBAWR62U.cjs","sourcesContent":["import type { LanguageModelV1FinishReason } from '@ai-sdk/provider';\nimport {\n AnthropicSchemaCompatLayer,\n applyCompatLayer,\n DeepSeekSchemaCompatLayer,\n GoogleSchemaCompatLayer,\n MetaSchemaCompatLayer,\n OpenAIReasoningSchemaCompatLayer,\n OpenAISchemaCompatLayer,\n} from '@mastra/schema-compat';\nimport type { CoreMessage, LanguageModel, Schema, StreamObjectOnFinishCallback, StreamTextOnFinishCallback } from 'ai';\nimport { generateObject, generateText, jsonSchema, Output, streamObject, streamText } from 'ai';\nimport type { JSONSchema7 } from 'json-schema';\nimport type { ZodSchema } from 'zod';\nimport { z } from 'zod';\n\nimport { zodToJsonSchema } from 'zod-to-json-schema';\nimport type { MastraPrimitives } from '../../action';\nimport { AISpanType } from '../../ai-tracing';\nimport type { AISpan, AnyAISpan } from '../../ai-tracing';\nimport { MastraBase } from '../../base';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../error';\nimport type { Mastra } from '../../mastra';\nimport { delay, isZodType } from '../../utils';\n\nimport type {\n GenerateObjectWithMessagesArgs,\n GenerateTextResult,\n GenerateObjectResult,\n GenerateTextWithMessagesArgs,\n OriginalGenerateTextOptions,\n ToolSet,\n GenerateReturn,\n OriginalGenerateObjectOptions,\n StreamTextWithMessagesArgs,\n StreamTextResult,\n OriginalStreamTextOptions,\n StreamObjectWithMessagesArgs,\n OriginalStreamObjectOptions,\n StreamObjectResult,\n StreamReturn,\n} from './base.types';\nimport type { inferOutput } from './shared.types';\n\nexport class MastraLLMV1 extends MastraBase {\n #model: LanguageModel;\n #mastra?: Mastra;\n\n constructor({ model, mastra }: { model: LanguageModel; mastra?: Mastra }) {\n super({ name: 'aisdk' });\n\n this.#model = model;\n\n if (mastra) {\n this.#mastra = mastra;\n if (mastra.getLogger()) {\n this.__setLogger(this.#mastra.getLogger());\n }\n }\n }\n\n __registerPrimitives(p: MastraPrimitives) {\n if (p.telemetry) {\n this.__setTelemetry(p.telemetry);\n }\n\n if (p.logger) {\n this.__setLogger(p.logger);\n }\n }\n\n __registerMastra(p: Mastra) {\n this.#mastra = p;\n }\n\n getProvider() {\n return this.#model.provider;\n }\n\n getModelId() {\n return this.#model.modelId;\n }\n\n getModel() {\n return this.#model;\n }\n\n private _applySchemaCompat(schema: ZodSchema | JSONSchema7): Schema {\n const model = this.#model;\n\n const schemaCompatLayers = [];\n\n if (model) {\n const modelInfo = {\n modelId: model.modelId,\n supportsStructuredOutputs: model.supportsStructuredOutputs ?? false,\n provider: model.provider,\n };\n schemaCompatLayers.push(\n new OpenAIReasoningSchemaCompatLayer(modelInfo),\n new OpenAISchemaCompatLayer(modelInfo),\n new GoogleSchemaCompatLayer(modelInfo),\n new AnthropicSchemaCompatLayer(modelInfo),\n new DeepSeekSchemaCompatLayer(modelInfo),\n new MetaSchemaCompatLayer(modelInfo),\n );\n }\n\n return applyCompatLayer({\n schema: schema as any,\n compatLayers: schemaCompatLayers,\n mode: 'aiSdkSchema',\n });\n }\n\n private _startAISpan(\n model: LanguageModel,\n agentAISpan: AISpan<AISpanType.AGENT_RUN>,\n name: string,\n streaming: boolean,\n options: any,\n ): AnyAISpan {\n return agentAISpan?.createChildSpan({\n name,\n type: AISpanType.LLM_GENERATION,\n input: options.prompt,\n attributes: {\n model: model.modelId,\n provider: model.provider,\n parameters: {\n temperature: options.temperature,\n maxTokens: options.maxTokens,\n topP: options.topP,\n frequencyPenalty: options.frequencyPenalty,\n presencePenalty: options.presencePenalty,\n stop: options.stop,\n },\n streaming,\n },\n });\n }\n\n private _wrapModel(model: LanguageModel, agentAISpan?: AISpan<AISpanType.AGENT_RUN>): LanguageModel {\n if (!agentAISpan) {\n return model;\n }\n\n const wrappedDoGenerate = async (options: any) => {\n const llmSpan = this._startAISpan(model, agentAISpan, `llm generate: '${model.modelId}'`, false, options);\n\n try {\n const result = await model.doGenerate(options);\n\n llmSpan.end({\n output: result.text,\n attributes: {\n usage: result.usage\n ? {\n promptTokens: result.usage.promptTokens,\n completionTokens: result.usage.completionTokens,\n }\n : undefined,\n },\n });\n return result;\n } catch (error) {\n llmSpan.error({ error: error as Error });\n throw error;\n }\n };\n\n const wrappedDoStream = async (options: any) => {\n const llmSpan = this._startAISpan(model, agentAISpan, `llm stream: '${model.modelId}'`, true, options);\n\n try {\n const result = await model.doStream(options);\n\n // Create a wrapped stream that tracks the final result\n const originalStream = result.stream;\n let finishReason: LanguageModelV1FinishReason;\n let finalUsage: any = null;\n\n const wrappedStream = originalStream.pipeThrough(\n new TransformStream({\n // this gets called on each chunk output\n transform(chunk, controller) {\n //TODO: Would be great to export chunks as events on the span\n //TODO: Figure out how to get the final usage\n // if (chunk.type === 'response-metadata' && chunk.usage) {\n // finalUsage = chunk.usage;\n // }\n if (chunk.type === 'finish') {\n finishReason = chunk.finishReason;\n finalUsage = chunk.usage;\n }\n controller.enqueue(chunk);\n },\n // this gets called at the end of the stream\n flush() {\n llmSpan.end({\n attributes: {\n usage: finalUsage\n ? {\n promptTokens: finalUsage.promptTokens,\n completionTokens: finalUsage.completionTokens,\n totalTokens: finalUsage.totalTokens,\n }\n : undefined,\n },\n metadata: {\n finishReason,\n },\n });\n },\n }),\n );\n\n return {\n ...result,\n stream: wrappedStream,\n };\n } catch (error) {\n llmSpan.error({ error: error as Error });\n throw error;\n }\n };\n\n return {\n ...model,\n doGenerate: wrappedDoGenerate,\n doStream: wrappedDoStream,\n };\n }\n\n async __text<Tools extends ToolSet, Z extends ZodSchema | JSONSchema7 | undefined>({\n runId,\n messages,\n maxSteps = 5,\n tools = {},\n temperature,\n toolChoice = 'auto',\n onStepFinish,\n experimental_output,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n agentAISpan,\n ...rest\n }: GenerateTextWithMessagesArgs<Tools, Z>): Promise<GenerateTextResult<Tools, Z>> {\n const model = this.#model;\n\n this.logger.debug(`[LLM] - Generating text`, {\n runId,\n messages,\n maxSteps,\n threadId,\n resourceId,\n tools: Object.keys(tools),\n });\n\n let schema: z.ZodType<inferOutput<Z>> | Schema<inferOutput<Z>> | undefined = undefined;\n\n if (experimental_output) {\n this.logger.debug('[LLM] - Using experimental output', {\n runId,\n });\n\n if (isZodType(experimental_output)) {\n schema = experimental_output as z.ZodType<inferOutput<Z>>;\n if (schema instanceof z.ZodArray) {\n schema = schema._def.type as z.ZodType<inferOutput<Z>>;\n }\n\n let jsonSchemaToUse;\n if ('toJSONSchema' in z) {\n // Use dynamic property access to avoid import errors in Zod v3\n // @ts-ignore\n jsonSchemaToUse = (z as any)['toJSONSchema'](schema) as JSONSchema7;\n } else {\n jsonSchemaToUse = zodToJsonSchema(schema, {\n $refStrategy: 'none',\n target: 'jsonSchema7',\n }) as JSONSchema7;\n }\n\n schema = jsonSchema(jsonSchemaToUse) as Schema<inferOutput<Z>>;\n } else {\n schema = jsonSchema(experimental_output as JSONSchema7) as Schema<inferOutput<Z>>;\n }\n }\n\n const argsForExecute: OriginalGenerateTextOptions<Tools, Z> = {\n ...rest,\n messages,\n model: this._wrapModel(model, agentAISpan),\n temperature,\n tools: {\n ...(tools as Tools),\n },\n toolChoice,\n maxSteps,\n onStepFinish: async props => {\n try {\n await onStepFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_TEXT_ON_STEP_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Text Step Change:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n });\n\n if (\n props?.response?.headers?.['x-ratelimit-remaining-tokens'] &&\n parseInt(props?.response?.headers?.['x-ratelimit-remaining-tokens'], 10) < 2000\n ) {\n this.logger.warn('Rate limit approaching, waiting 10 seconds', { runId });\n await delay(10 * 1000);\n }\n },\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n experimental_output: schema\n ? Output.object({\n schema,\n })\n : undefined,\n };\n\n try {\n const result: GenerateTextResult<Tools, Z> = await generateText(argsForExecute);\n\n if (schema && result.finishReason === 'stop') {\n result.object = (result as any).experimental_output;\n }\n\n return result;\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_TEXT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n async __textObject<Z extends ZodSchema | JSONSchema7>({\n messages,\n structuredOutput,\n runId,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n agentAISpan,\n ...rest\n }: GenerateObjectWithMessagesArgs<Z>): Promise<GenerateObjectResult<Z>> {\n const model = this.#model;\n\n this.logger.debug(`[LLM] - Generating a text object`, { runId });\n\n try {\n let output: 'object' | 'array' = 'object';\n if (structuredOutput instanceof z.ZodArray) {\n output = 'array';\n structuredOutput = structuredOutput._def.type;\n }\n\n const processedSchema = this._applySchemaCompat(structuredOutput!);\n\n const argsForExecute: OriginalGenerateObjectOptions<Z> = {\n ...rest,\n messages,\n model: this._wrapModel(model, agentAISpan),\n // @ts-expect-error - output in our implementation can only be object or array\n output,\n schema: processedSchema as Schema<Z>,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n };\n\n try {\n // @ts-expect-error - output in our implementation can only be object or array\n return await generateObject(argsForExecute);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_OBJECT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n } catch (e: unknown) {\n if (e instanceof MastraError) {\n throw e;\n }\n\n const mastraError = new MastraError(\n {\n id: 'LLM_GENERATE_OBJECT_AI_SDK_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n __stream<Tools extends ToolSet, Z extends ZodSchema | JSONSchema7 | undefined = undefined>({\n messages,\n onStepFinish,\n onFinish,\n maxSteps = 5,\n tools = {},\n runId,\n temperature,\n toolChoice = 'auto',\n experimental_output,\n telemetry,\n threadId,\n resourceId,\n runtimeContext,\n agentAISpan,\n ...rest\n }: StreamTextWithMessagesArgs<Tools, Z>): StreamTextResult<Tools, Z> {\n const model = this.#model;\n this.logger.debug(`[LLM] - Streaming text`, {\n runId,\n threadId,\n resourceId,\n messages,\n maxSteps,\n tools: Object.keys(tools || {}),\n });\n\n let schema: z.ZodType<Z> | Schema<Z> | undefined;\n if (experimental_output) {\n this.logger.debug('[LLM] - Using experimental output', {\n runId,\n });\n if (typeof (experimental_output as any).parse === 'function') {\n schema = experimental_output as z.ZodType<Z>;\n if (schema instanceof z.ZodArray) {\n schema = schema._def.type as z.ZodType<Z>;\n }\n } else {\n schema = jsonSchema(experimental_output as JSONSchema7) as Schema<Z>;\n }\n }\n\n const argsForExecute: OriginalStreamTextOptions<Tools, Z> = {\n model: this._wrapModel(model, agentAISpan),\n temperature,\n tools: {\n ...(tools as Tools),\n },\n maxSteps,\n toolChoice,\n onStepFinish: async props => {\n try {\n await onStepFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_ON_STEP_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Stream Step Change:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n });\n\n if (\n props?.response?.headers?.['x-ratelimit-remaining-tokens'] &&\n parseInt(props?.response?.headers?.['x-ratelimit-remaining-tokens'], 10) < 2000\n ) {\n this.logger.warn('Rate limit approaching, waiting 10 seconds', { runId });\n await delay(10 * 1000);\n }\n },\n onFinish: async props => {\n try {\n await onFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_ON_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n finishReason: props?.finishReason,\n toolCalls: props?.toolCalls ? JSON.stringify(props.toolCalls) : '',\n toolResults: props?.toolResults ? JSON.stringify(props.toolResults) : '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Stream Finished:', {\n text: props?.text,\n toolCalls: props?.toolCalls,\n toolResults: props?.toolResults,\n finishReason: props?.finishReason,\n usage: props?.usage,\n runId,\n threadId,\n resourceId,\n });\n },\n ...rest,\n messages,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n experimental_output: schema\n ? (Output.object({\n schema,\n }) as any)\n : undefined,\n };\n\n try {\n return streamText(argsForExecute);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_TEXT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n __streamObject<T extends ZodSchema | JSONSchema7>({\n messages,\n runId,\n runtimeContext,\n threadId,\n resourceId,\n onFinish,\n structuredOutput,\n telemetry,\n agentAISpan,\n ...rest\n }: StreamObjectWithMessagesArgs<T>): StreamObjectResult<T> {\n const model = this.#model;\n this.logger.debug(`[LLM] - Streaming structured output`, {\n runId,\n messages,\n });\n\n try {\n let output: 'object' | 'array' = 'object';\n if (structuredOutput instanceof z.ZodArray) {\n output = 'array';\n structuredOutput = structuredOutput._def.type;\n }\n\n const processedSchema = this._applySchemaCompat(structuredOutput!);\n\n const argsForExecute: OriginalStreamObjectOptions<T> = {\n ...rest,\n model: this._wrapModel(model, agentAISpan),\n onFinish: async props => {\n try {\n // @ts-expect-error - onFinish is not inferred correctly\n await onFinish?.({ ...props, runId: runId! });\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_ON_FINISH_CALLBACK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n toolCalls: '',\n toolResults: '',\n finishReason: '',\n usage: props?.usage ? JSON.stringify(props.usage) : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n throw mastraError;\n }\n\n this.logger.debug('[LLM] - Object Stream Finished:', {\n usage: props?.usage,\n runId,\n threadId,\n resourceId,\n });\n },\n messages,\n // @ts-expect-error - output in our implementation can only be object or array\n output,\n experimental_telemetry: {\n ...this.experimental_telemetry,\n ...telemetry,\n },\n schema: processedSchema as Schema<inferOutput<T>>,\n };\n\n try {\n return streamObject(argsForExecute as any);\n } catch (e: unknown) {\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_AI_SDK_EXECUTION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.THIRD_PARTY,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n } catch (e: unknown) {\n if (e instanceof MastraError) {\n throw e;\n }\n\n const mastraError = new MastraError(\n {\n id: 'LLM_STREAM_OBJECT_AI_SDK_SCHEMA_CONVERSION_FAILED',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n details: {\n modelId: model.modelId,\n modelProvider: model.provider,\n runId: runId ?? 'unknown',\n threadId: threadId ?? 'unknown',\n resourceId: resourceId ?? 'unknown',\n },\n },\n e,\n );\n throw mastraError;\n }\n }\n\n convertToMessages(messages: string | string[] | CoreMessage[]): CoreMessage[] {\n if (Array.isArray(messages)) {\n return messages.map(m => {\n if (typeof m === 'string') {\n return {\n role: 'user',\n content: m,\n };\n }\n return m;\n });\n }\n\n return [\n {\n role: 'user',\n content: messages,\n },\n ];\n }\n\n async generate<\n Output extends ZodSchema | JSONSchema7 | undefined = undefined,\n StructuredOutput extends ZodSchema | JSONSchema7 | undefined = undefined,\n Tools extends ToolSet = ToolSet,\n >(\n messages: string | string[] | CoreMessage[],\n {\n output,\n ...rest\n }: Omit<\n Output extends undefined\n ? GenerateTextWithMessagesArgs<Tools, StructuredOutput>\n : Omit<GenerateObjectWithMessagesArgs<NonNullable<Output>>, 'structuredOutput' | 'output'>,\n 'messages'\n > & { output?: Output },\n ): Promise<GenerateReturn<Tools, Output, StructuredOutput>> {\n const msgs = this.convertToMessages(messages);\n\n if (!output) {\n const { maxSteps, onStepFinish, ...textOptions } = rest as Omit<\n GenerateTextWithMessagesArgs<Tools, StructuredOutput>,\n 'messages'\n >;\n return (await this.__text<Tools, StructuredOutput>({\n messages: msgs,\n maxSteps,\n onStepFinish,\n ...textOptions,\n })) as unknown as GenerateReturn<Tools, Output, StructuredOutput>;\n }\n\n return (await this.__textObject({\n messages: msgs,\n structuredOutput: output as NonNullable<Output>,\n ...rest,\n })) as unknown as GenerateReturn<Tools, Output, StructuredOutput>;\n }\n\n stream<\n Output extends ZodSchema | JSONSchema7 | undefined = undefined,\n StructuredOutput extends ZodSchema | JSONSchema7 | undefined = undefined,\n Tools extends ToolSet = ToolSet,\n >(\n messages: string | string[] | CoreMessage[],\n {\n maxSteps = 5,\n output,\n onFinish,\n ...rest\n }: Omit<\n Output extends undefined\n ? StreamTextWithMessagesArgs<Tools, StructuredOutput>\n : Omit<StreamObjectWithMessagesArgs<NonNullable<Output>>, 'structuredOutput' | 'output'> & { maxSteps?: never },\n 'messages'\n > & { output?: Output },\n ): StreamReturn<Tools, Output, StructuredOutput> {\n const msgs = this.convertToMessages(messages);\n\n if (!output) {\n return this.__stream({\n messages: msgs,\n maxSteps,\n onFinish: onFinish as StreamTextOnFinishCallback<Tools> | undefined,\n ...rest,\n }) as unknown as StreamReturn<Tools, Output, StructuredOutput>;\n }\n\n return this.__streamObject({\n messages: msgs,\n structuredOutput: output as NonNullable<Output>,\n onFinish: onFinish as StreamObjectOnFinishCallback<inferOutput<Output>> | undefined,\n ...rest,\n }) as unknown as StreamReturn<Tools, Output, StructuredOutput>;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ai-tracing/no-op.ts","../src/ai-tracing/types.ts","../src/ai-tracing/base.ts","../src/ai-tracing/exporters/console.ts","../src/ai-tracing/exporters/default.ts","../src/ai-tracing/default.ts","../src/ai-tracing/registry.ts","../src/ai-tracing/utils.ts","../src/ai-tracing/context.ts"],"names":["AISpanType","SamplingStrategyType","AITracingEventType"],"mappings":"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","file":"chunk-WOTBMZCN.js","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 isEvent: boolean;\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 this.output = options.isEvent ? options.output : undefined;\n this.isEvent = options.isEvent;\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, isEvent: false }, this.aiTracing);\n }\n\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return new NoOpAISpan<TChildType>({ ...options, parent: this, isEvent: true }, 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 /** Individual LLM streaming chunk/event */\n LLM_CHUNK = 'llm_chunk',\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 /** Workflow conditional execution with condition evaluation */\n WORKFLOW_CONDITIONAL = 'workflow_conditional',\n /** Individual condition evaluation within conditional */\n WORKFLOW_CONDITIONAL_EVAL = 'workflow_conditional_eval',\n /** Workflow parallel execution */\n WORKFLOW_PARALLEL = 'workflow_parallel',\n /** Workflow loop execution */\n WORKFLOW_LOOP = 'workflow_loop',\n /** Workflow sleep operation */\n WORKFLOW_SLEEP = 'workflow_sleep',\n /** Workflow wait for event operation */\n WORKFLOW_WAIT_EVENT = 'workflow_wait_event',\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 /** Reason the generation finished */\n finishReason?: string;\n}\n\n/**\n * LLM Chunk attributes - for individual streaming chunks/events\n */\nexport interface LLMChunkAttributes extends AIBaseAttributes {\n /** Type of chunk (text-delta, reasoning-delta, tool-call, etc.) */\n chunkType?: string;\n /** Sequence number of this chunk in the stream */\n sequenceNumber?: number;\n}\n\n/**\n * Tool Call attributes\n */\nexport interface ToolCallAttributes extends AIBaseAttributes {\n toolId?: string;\n toolType?: string;\n toolDescription?: 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 * Workflow Conditional attributes\n */\nexport interface WorkflowConditionalAttributes extends AIBaseAttributes {\n /** Number of conditions evaluated */\n conditionCount: number;\n /** Which condition indexes evaluated to true */\n truthyIndexes?: number[];\n /** Which steps will be executed */\n selectedSteps?: string[];\n}\n\n/**\n * Workflow Conditional Evaluation attributes\n */\nexport interface WorkflowConditionalEvalAttributes extends AIBaseAttributes {\n /** Index of this condition in the conditional */\n conditionIndex: number;\n /** Result of condition evaluation */\n result?: boolean;\n}\n\n/**\n * Workflow Parallel attributes\n */\nexport interface WorkflowParallelAttributes extends AIBaseAttributes {\n /** Number of parallel branches */\n branchCount: number;\n /** Step IDs being executed in parallel */\n parallelSteps?: string[];\n}\n\n/**\n * Workflow Loop attributes\n */\nexport interface WorkflowLoopAttributes extends AIBaseAttributes {\n /** Type of loop (foreach, dowhile, dountil) */\n loopType?: 'foreach' | 'dowhile' | 'dountil';\n /** Current iteration number (for individual iterations) */\n iteration?: number;\n /** Total iterations (if known) */\n totalIterations?: number;\n /** Number of steps to run concurrently in foreach loop */\n concurrency?: number;\n}\n\n/**\n * Workflow Sleep attributes\n */\nexport interface WorkflowSleepAttributes extends AIBaseAttributes {\n /** Sleep duration in milliseconds */\n durationMs?: number;\n /** Sleep until date */\n untilDate?: Date;\n /** Sleep type */\n sleepType?: 'fixed' | 'dynamic';\n}\n\n/**\n * Workflow Wait Event attributes\n */\nexport interface WorkflowWaitEventAttributes extends AIBaseAttributes {\n /** Event name being waited for */\n eventName?: string;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n /** Whether event was received or timed out */\n eventReceived?: boolean;\n /** Wait duration in milliseconds */\n waitDurationMs?: number;\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.LLM_CHUNK]: LLMChunkAttributes;\n [AISpanType.TOOL_CALL]: ToolCallAttributes;\n [AISpanType.MCP_TOOL_CALL]: MCPToolCallAttributes;\n [AISpanType.WORKFLOW_STEP]: WorkflowStepAttributes;\n [AISpanType.WORKFLOW_CONDITIONAL]: WorkflowConditionalAttributes;\n [AISpanType.WORKFLOW_CONDITIONAL_EVAL]: WorkflowConditionalEvalAttributes;\n [AISpanType.WORKFLOW_PARALLEL]: WorkflowParallelAttributes;\n [AISpanType.WORKFLOW_LOOP]: WorkflowLoopAttributes;\n [AISpanType.WORKFLOW_SLEEP]: WorkflowSleepAttributes;\n [AISpanType.WORKFLOW_WAIT_EVENT]: WorkflowWaitEventAttributes;\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 /** Is an event span? (event occurs at startTime, has no endTime) */\n isEvent: boolean;\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 /** Create event span - can be any span type independent of parent\n Event spans have no input, and no endTime.\n */\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: 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 /** Output data (for event spans) */\n output?: any;\n /** Span attributes */\n attributes?: AISpanTypeMap[TType];\n /** Span metadata */\n metadata?: Record<string, any>;\n /** Parent span */\n parent?: AnyAISpan;\n /** Is an event span? */\n isEvent: boolean;\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 TraceContext {\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: TraceContext) => boolean };\n\nexport type TracingStrategy = 'realtime' | 'batch-with-updates' | 'insert-only';\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, Omit<AITracingInstanceConfig, 'instanceName'> | 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 /** Initialize exporter (called after all dependencies are ready) */\n init?(): void;\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 TracingContext {\n /** Current AI span for creating child spans and adding metadata */\n currentSpan?: AnyAISpan;\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 TraceContext,\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 output?: any;\n attributes?: AISpanTypeMap[TType];\n metadata?: Record<string, any>;\n parent?: AnyAISpan;\n startOptions?: {\n runtimeContext?: RuntimeContext;\n };\n isEvent?: boolean;\n }): AISpan<TType> {\n const { type, name, input, output, attributes, metadata, parent, startOptions, isEvent } = options;\n const { runtimeContext } = startOptions || {};\n\n if (!this.shouldSample({ runtimeContext })) {\n return new NoOpAISpan<TType>(\n { type, name, input, output, attributes, metadata, parent, isEvent: isEvent === true },\n this,\n );\n }\n\n const spanOptions: AISpanOptions<TType> = {\n type,\n name,\n input,\n output,\n attributes,\n metadata,\n parent,\n isEvent: isEvent === true,\n };\n\n const span = this.createSpan(spanOptions);\n\n if (span.isEvent) {\n this.emitSpanEnded(span);\n } else {\n // Automatically wire up tracing lifecycle\n this.wireSpanLifecycle(span);\n\n // Emit span started event\n this.emitSpanStarted(span);\n }\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: TraceContext): 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 init(): 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","import { ConsoleLogger, LogLevel } from '../../logger';\nimport type { IMastraLogger } from '../../logger';\nimport { AITracingEventType } from '../types';\nimport type { AITracingEvent, AITracingExporter } from '../types';\n\nexport class ConsoleExporter implements AITracingExporter {\n name = 'tracing-console-exporter';\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({ level: LogLevel.INFO });\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 this.logger.warn(`Tracing event type not implemented: ${(event as any).type}`);\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('ConsoleExporter shutdown');\n }\n}\n","import { ConsoleLogger, LogLevel } from '../../logger';\nimport type { IMastraLogger } from '../../logger';\nimport type { Mastra } from '../../mastra';\nimport type { MastraStorage } from '../../storage/base';\nimport type { AISpanRecord } from '../../storage/types';\nimport { AITracingEventType } from '../types';\nimport type { AITracingEvent, AITracingExporter, AnyAISpan, TracingStrategy } from '../types';\n\ntype InternalAISpanRecord = Omit<AISpanRecord, 'spanId' | 'traceId' | 'createdAt' | 'updatedAt'>;\n\ninterface BatchingConfig {\n maxBatchSize?: number; // Default: 1000 spans\n maxBufferSize?: number; // Default: 10000 spans\n maxBatchWaitMs?: number; // Default: 5000ms\n maxRetries?: number; // Default: 4\n retryDelayMs?: number; // Default: 500ms (base delay for exponential backoff)\n\n // Strategy selection (optional)\n strategy?: TracingStrategy | 'auto';\n}\n\ninterface BatchBuffer {\n // For batch-with-updates strategy\n creates: AISpanRecord[];\n updates: UpdateRecord[];\n\n // For insert-only strategy\n insertOnly: AISpanRecord[];\n\n // Ordering enforcement (batch-with-updates only)\n seenSpans: Set<string>; // \"traceId:spanId\" combinations we've seen creates for\n spanSequences: Map<string, number>; // \"traceId:spanId\" -> next sequence number\n\n // Metrics\n outOfOrderCount: number;\n\n // Metadata\n firstEventTime?: Date;\n totalSize: number;\n}\n\ninterface UpdateRecord {\n traceId: string;\n spanId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n sequenceNumber: number; // For ordering updates to same span\n}\n\n/**\n * Resolves the final strategy based on user config and storage hints\n */\nfunction resolveStrategy(userConfig: BatchingConfig, storage: MastraStorage, logger: IMastraLogger): TracingStrategy {\n if (userConfig.strategy && userConfig.strategy !== 'auto') {\n const hints = storage.aiTracingStrategy;\n if (hints.supported.includes(userConfig.strategy)) {\n return userConfig.strategy;\n }\n // Log warning and fall through to auto-selection\n logger.warn('User-specified AI tracing strategy not supported by storage adapter, falling back to auto-selection', {\n userStrategy: userConfig.strategy,\n storageAdapter: storage.constructor.name,\n supportedStrategies: hints.supported,\n fallbackStrategy: hints.preferred,\n });\n }\n return storage.aiTracingStrategy.preferred;\n}\n\nexport class DefaultExporter implements AITracingExporter {\n name = 'tracing-default-exporter';\n private logger: IMastraLogger;\n private mastra: Mastra | null = null;\n private config: Required<BatchingConfig>;\n private resolvedStrategy: TracingStrategy;\n private buffer: BatchBuffer;\n private flushTimer: NodeJS.Timeout | null = null;\n\n constructor(config: BatchingConfig = {}, 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({ level: LogLevel.INFO });\n }\n\n // Set default configuration\n this.config = {\n maxBatchSize: config.maxBatchSize ?? 1000,\n maxBufferSize: config.maxBufferSize ?? 10000,\n maxBatchWaitMs: config.maxBatchWaitMs ?? 5000,\n maxRetries: config.maxRetries ?? 4,\n retryDelayMs: config.retryDelayMs ?? 500,\n strategy: config.strategy ?? 'auto',\n };\n\n // Initialize buffer\n this.buffer = {\n creates: [],\n updates: [],\n insertOnly: [],\n seenSpans: new Set(),\n spanSequences: new Map(),\n outOfOrderCount: 0,\n totalSize: 0,\n };\n\n // Resolve strategy - we'll do this lazily on first export since we need storage\n this.resolvedStrategy = 'batch-with-updates'; // temporary default\n }\n\n private strategyInitialized = false;\n\n /**\n * Register the Mastra instance (called after Mastra construction is complete)\n */\n __registerMastra(mastra: Mastra): void {\n this.mastra = mastra;\n }\n\n /**\n * Initialize the exporter (called after all dependencies are ready)\n */\n init(): void {\n if (!this.mastra) {\n throw new Error('DefaultExporter: init() called before __registerMastra()');\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n throw new Error('DefaultExporter: Storage not available during initialization');\n }\n\n this.initializeStrategy(storage);\n }\n\n /**\n * Initialize the resolved strategy once storage is available\n */\n private initializeStrategy(storage: MastraStorage): void {\n if (this.strategyInitialized) return;\n\n this.resolvedStrategy = resolveStrategy(this.config, storage, this.logger);\n this.strategyInitialized = true;\n\n this.logger.info('AI tracing exporter initialized', {\n strategy: this.resolvedStrategy,\n source: this.config.strategy !== 'auto' ? 'user' : 'auto',\n storageAdapter: storage.constructor.name,\n maxBatchSize: this.config.maxBatchSize,\n maxBatchWaitMs: this.config.maxBatchWaitMs,\n });\n }\n\n /**\n * Builds a unique span key for tracking\n */\n private buildSpanKey(traceId: string, spanId: string): string {\n return `${traceId}:${spanId}`;\n }\n\n /**\n * Gets the next sequence number for a span\n */\n private getNextSequence(spanKey: string): number {\n const current = this.buffer.spanSequences.get(spanKey) || 0;\n const next = current + 1;\n this.buffer.spanSequences.set(spanKey, next);\n return next;\n }\n\n /**\n * Handles out-of-order span updates by logging and skipping\n */\n private handleOutOfOrderUpdate(event: AITracingEvent): void {\n this.logger.warn('Out-of-order span update detected - skipping event', {\n spanId: event.span.id,\n traceId: event.span.traceId,\n eventType: event.type,\n });\n }\n\n /**\n * Adds an event to the appropriate buffer based on strategy\n */\n private addToBuffer(event: AITracingEvent): void {\n const spanKey = this.buildSpanKey(event.span.traceId, event.span.id);\n\n // Set first event time if buffer is empty\n if (this.buffer.totalSize === 0) {\n this.buffer.firstEventTime = new Date();\n }\n\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n const createRecord = {\n traceId: event.span.traceId,\n spanId: event.span.id,\n ...this.buildCreateRecord(event.span),\n createdAt: new Date(),\n updatedAt: null,\n };\n this.buffer.creates.push(createRecord);\n this.buffer.seenSpans.add(spanKey);\n }\n // insert-only ignores SPAN_STARTED\n break;\n\n case AITracingEventType.SPAN_UPDATED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n if (this.buffer.seenSpans.has(spanKey)) {\n // Normal case: create already in buffer\n this.buffer.updates.push({\n traceId: event.span.traceId,\n spanId: event.span.id,\n updates: {\n ...this.buildUpdateRecord(event.span),\n updatedAt: new Date(),\n },\n sequenceNumber: this.getNextSequence(spanKey),\n });\n } else {\n // Out-of-order case: log and skip\n this.handleOutOfOrderUpdate(event);\n this.buffer.outOfOrderCount++;\n }\n }\n // insert-only ignores SPAN_UPDATED\n break;\n\n case AITracingEventType.SPAN_ENDED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n if (this.buffer.seenSpans.has(spanKey)) {\n // Normal case: create already in buffer\n this.buffer.updates.push({\n traceId: event.span.traceId,\n spanId: event.span.id,\n updates: {\n ...this.buildUpdateRecord(event.span),\n updatedAt: new Date(),\n },\n sequenceNumber: this.getNextSequence(spanKey),\n });\n } else {\n // Out-of-order case: log and skip\n this.handleOutOfOrderUpdate(event);\n this.buffer.outOfOrderCount++;\n }\n } else if (this.resolvedStrategy === 'insert-only') {\n // Only process SPAN_ENDED for insert-only strategy\n const createRecord = {\n traceId: event.span.traceId,\n spanId: event.span.id,\n ...this.buildCreateRecord(event.span),\n createdAt: new Date(),\n updatedAt: null,\n };\n this.buffer.insertOnly.push(createRecord);\n }\n break;\n }\n\n // Update total size\n this.buffer.totalSize = this.buffer.creates.length + this.buffer.updates.length + this.buffer.insertOnly.length;\n }\n\n /**\n * Checks if buffer should be flushed based on size or time triggers\n */\n private shouldFlush(): boolean {\n // Emergency flush - buffer overflow\n if (this.buffer.totalSize >= this.config.maxBufferSize) {\n return true;\n }\n\n // Size-based flush\n if (this.buffer.totalSize >= this.config.maxBatchSize) {\n return true;\n }\n\n // Time-based flush\n if (this.buffer.firstEventTime && this.buffer.totalSize > 0) {\n const elapsed = Date.now() - this.buffer.firstEventTime.getTime();\n if (elapsed >= this.config.maxBatchWaitMs) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Resets the buffer after successful flush\n */\n private resetBuffer(): void {\n this.buffer.creates = [];\n this.buffer.updates = [];\n this.buffer.insertOnly = [];\n this.buffer.seenSpans.clear();\n this.buffer.spanSequences.clear();\n this.buffer.outOfOrderCount = 0;\n this.buffer.firstEventTime = undefined;\n this.buffer.totalSize = 0;\n }\n\n /**\n * Schedules a flush using setTimeout\n */\n private scheduleFlush(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => {\n this.flush().catch(error => {\n this.logger.error('Scheduled flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n }, this.config.maxBatchWaitMs);\n }\n\n /**\n * Serializes span attributes to storage record format\n * Handles all AI span types and their specific attributes\n */\n private serializeAttributes(span: AnyAISpan): Record<string, any> | null {\n if (!span.attributes) {\n return null;\n }\n\n try {\n // Convert the typed attributes to a plain object\n // This handles nested objects, dates, and other complex types\n return JSON.parse(\n JSON.stringify(span.attributes, (_key, value) => {\n // Handle Date objects\n if (value instanceof Date) {\n return value.toISOString();\n }\n // Handle other objects that might not serialize properly\n if (typeof value === 'object' && value !== null) {\n // For arrays and plain objects, let JSON.stringify handle them\n return value;\n }\n // For primitives, return as-is\n return value;\n }),\n );\n } catch (error) {\n this.logger.warn('Failed to serialize span attributes, storing as null', {\n spanId: span.id,\n spanType: span.type,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n private buildCreateRecord(span: AnyAISpan): InternalAISpanRecord {\n return {\n parentSpanId: span.parent?.id ?? null,\n name: span.name,\n scope: null,\n spanType: span.type,\n attributes: this.serializeAttributes(span),\n metadata: span.metadata ?? null,\n links: null,\n startedAt: span.startTime,\n endedAt: span.endTime ?? null,\n input: span.input,\n output: span.output,\n error: span.errorInfo,\n isEvent: span.isEvent,\n };\n }\n\n private buildUpdateRecord(span: AnyAISpan): Partial<InternalAISpanRecord> {\n return {\n name: span.name,\n scope: null,\n attributes: this.serializeAttributes(span),\n metadata: span.metadata ?? null,\n links: null,\n endedAt: span.endTime ?? null,\n input: span.input,\n output: span.output,\n error: span.errorInfo,\n };\n }\n\n /**\n * Handles realtime strategy - processes each event immediately\n */\n private async handleRealtimeEvent(event: AITracingEvent, storage: MastraStorage): Promise<void> {\n const span = event.span;\n\n // Event spans only have an end event\n if (span.isEvent) {\n if (event.type === AITracingEventType.SPAN_ENDED) {\n await storage.createAISpan({\n traceId: span.traceId,\n spanId: span.id,\n ...this.buildCreateRecord(span),\n createdAt: new Date(),\n updatedAt: null,\n });\n } else {\n this.logger.warn(`Tracing event type not implemented for event spans: ${event.type}`);\n }\n } else {\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n await storage.createAISpan({\n traceId: span.traceId,\n spanId: span.id,\n ...this.buildCreateRecord(span),\n createdAt: new Date(),\n updatedAt: null,\n });\n break;\n case AITracingEventType.SPAN_UPDATED:\n case AITracingEventType.SPAN_ENDED:\n await storage.updateAISpan({\n traceId: span.traceId,\n spanId: span.id,\n updates: {\n ...this.buildUpdateRecord(span),\n updatedAt: new Date(),\n },\n });\n break;\n default:\n this.logger.warn(`Tracing event type not implemented for span spans: ${(event as any).type}`);\n }\n }\n }\n\n /**\n * Handles batch-with-updates strategy - buffers events and processes in batches\n */\n private handleBatchWithUpdatesEvent(event: AITracingEvent): void {\n this.addToBuffer(event);\n\n if (this.shouldFlush()) {\n // Immediate flush for size/emergency triggers\n this.flush().catch(error => {\n this.logger.error('Batch flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n } else if (this.buffer.totalSize === 1) {\n // Schedule flush for the first event in buffer\n this.scheduleFlush();\n }\n }\n\n /**\n * Handles insert-only strategy - only processes SPAN_ENDED events in batches\n */\n private handleInsertOnlyEvent(event: AITracingEvent): void {\n // Only process SPAN_ENDED events for insert-only strategy\n if (event.type === AITracingEventType.SPAN_ENDED) {\n this.addToBuffer(event);\n\n if (this.shouldFlush()) {\n // Immediate flush for size/emergency triggers\n this.flush().catch(error => {\n this.logger.error('Batch flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n } else if (this.buffer.totalSize === 1) {\n // Schedule flush for the first event in buffer\n this.scheduleFlush();\n }\n }\n // Ignore SPAN_STARTED and SPAN_UPDATED events\n }\n\n /**\n * Calculates retry delay using exponential backoff\n */\n private calculateRetryDelay(attempt: number): number {\n return this.config.retryDelayMs * Math.pow(2, attempt);\n }\n\n /**\n * Flushes the current buffer to storage with retry logic\n */\n private async flush(): Promise<void> {\n if (!this.mastra) {\n this.logger.warn('Cannot flush traces. Mastra instance not registered yet.');\n return;\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n this.logger.warn('Cannot flush traces. Mastra storage is not initialized');\n return;\n }\n\n // Clear timer since we're flushing\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n\n if (this.buffer.totalSize === 0) {\n return; // Nothing to flush\n }\n\n const startTime = Date.now();\n const flushReason =\n this.buffer.totalSize >= this.config.maxBufferSize\n ? 'overflow'\n : this.buffer.totalSize >= this.config.maxBatchSize\n ? 'size'\n : 'time';\n\n // Create a copy of the buffer to work with\n const bufferCopy: BatchBuffer = {\n creates: [...this.buffer.creates],\n updates: [...this.buffer.updates],\n insertOnly: [...this.buffer.insertOnly],\n seenSpans: new Set(this.buffer.seenSpans),\n spanSequences: new Map(this.buffer.spanSequences),\n outOfOrderCount: this.buffer.outOfOrderCount,\n firstEventTime: this.buffer.firstEventTime,\n totalSize: this.buffer.totalSize,\n };\n\n // Reset buffer immediately to prevent blocking new events\n this.resetBuffer();\n\n // Attempt to flush with retry logic\n await this.flushWithRetries(storage, bufferCopy, 0);\n\n const elapsed = Date.now() - startTime;\n this.logger.debug('Batch flushed', {\n strategy: this.resolvedStrategy,\n batchSize: bufferCopy.totalSize,\n flushReason,\n durationMs: elapsed,\n outOfOrderCount: bufferCopy.outOfOrderCount > 0 ? bufferCopy.outOfOrderCount : undefined,\n });\n }\n\n /**\n * Attempts to flush with exponential backoff retry logic\n */\n private async flushWithRetries(storage: MastraStorage, buffer: BatchBuffer, attempt: number): Promise<void> {\n try {\n if (this.resolvedStrategy === 'batch-with-updates') {\n // Process creates first (always safe)\n if (buffer.creates.length > 0) {\n await storage.batchCreateAISpans({ records: buffer.creates });\n }\n\n // Sort updates by span, then by sequence number\n if (buffer.updates.length > 0) {\n const sortedUpdates = buffer.updates.sort((a, b) => {\n const spanCompare = this.buildSpanKey(a.traceId, a.spanId).localeCompare(\n this.buildSpanKey(b.traceId, b.spanId),\n );\n if (spanCompare !== 0) return spanCompare;\n return a.sequenceNumber - b.sequenceNumber;\n });\n\n await storage.batchUpdateAISpans({ records: sortedUpdates });\n }\n } else if (this.resolvedStrategy === 'insert-only') {\n // Simple batch insert for insert-only strategy\n if (buffer.insertOnly.length > 0) {\n await storage.batchCreateAISpans({ records: buffer.insertOnly });\n }\n }\n } catch (error) {\n if (attempt < this.config.maxRetries) {\n const retryDelay = this.calculateRetryDelay(attempt);\n this.logger.warn('Batch flush failed, retrying', {\n attempt: attempt + 1,\n maxRetries: this.config.maxRetries,\n nextRetryInMs: retryDelay,\n error: error instanceof Error ? error.message : String(error),\n });\n\n await new Promise(resolve => setTimeout(resolve, retryDelay));\n return this.flushWithRetries(storage, buffer, attempt + 1);\n } else {\n this.logger.error('Batch flush failed after all retries, dropping batch', {\n finalAttempt: attempt + 1,\n maxRetries: this.config.maxRetries,\n droppedBatchSize: buffer.totalSize,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n async exportEvent(event: AITracingEvent): Promise<void> {\n if (!this.mastra) {\n this.logger.warn('Cannot export AI tracing event. Mastra instance not registered yet.');\n return;\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n this.logger.warn('Cannot store traces. Mastra storage is not initialized');\n return;\n }\n\n // Initialize strategy if not already done (fallback for edge cases)\n if (!this.strategyInitialized) {\n this.initializeStrategy(storage);\n }\n\n // Clear strategy routing - explicit and readable\n switch (this.resolvedStrategy) {\n case 'realtime':\n await this.handleRealtimeEvent(event, storage);\n break;\n case 'batch-with-updates':\n this.handleBatchWithUpdatesEvent(event);\n break;\n case 'insert-only':\n this.handleInsertOnlyEvent(event);\n break;\n }\n }\n\n async shutdown(): Promise<void> {\n // Clear any pending timer\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Flush any remaining events\n if (this.buffer.totalSize > 0) {\n this.logger.info('Flushing remaining events on shutdown', {\n remainingEvents: this.buffer.totalSize,\n });\n try {\n await this.flush();\n } catch (error) {\n this.logger.error('Failed to flush remaining events during shutdown', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n this.logger.info('DefaultExporter shutdown complete');\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 { ConsoleExporter } from './exporters';\nimport type {\n AISpanType,\n AISpan,\n AISpanOptions,\n AITracingInstanceConfig,\n AISpanTypeMap,\n AISpanProcessor,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType } 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 isEvent: boolean;\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 private logger: IMastraLogger;\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 this.isEvent = options.isEvent;\n this.logger = new ConsoleLogger({\n name: 'default-ai-span',\n level: LogLevel.INFO, // Set to INFO so that info() calls actually log\n });\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 if (this.isEvent) {\n // Event spans don't have endTime or input.\n // Event spans are immediately emitted by the base class via the end() event.\n this.output = options.output;\n }\n }\n\n end(options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void {\n if (this.isEvent) {\n this.logger.warn(`End event is not available on event spans`);\n return;\n }\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 if (this.isEvent) {\n this.logger.warn(`Error event is not available on event spans`);\n return;\n }\n\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 isEvent: false,\n });\n }\n\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return this.aiTracing.startSpan({\n ...options,\n parent: this,\n isEvent: true,\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 (this.isEvent) {\n this.logger.warn(`Update() is not available on event spans`);\n return;\n }\n\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 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 ConsoleExporter()],\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(\n obj: Omit<AITracingInstanceConfig, 'instanceName'> | MastraAITracing,\n): 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","/**\n * AI Tracing Context Integration\n *\n * This module provides automatic AI tracing context propagation throughout Mastra's execution contexts.\n * It uses JavaScript Proxies to transparently wrap Mastra, Agent, and Workflow instances so that\n * tracing context is automatically injected without requiring manual passing by users.\n */\n\nimport type { Agent } from '../agent';\nimport type { Mastra } from '../mastra';\nimport type { Workflow } from '../workflows';\nimport type { TracingContext, AnyAISpan } from './types';\n\nconst AGENT_GETTERS = ['getAgent', 'getAgentById'];\nconst AGENT_METHODS_TO_WRAP = ['generate', 'stream', 'generateVNext', 'streamVNext'];\n\nconst WORKFLOW_GETTERS = ['getWorkflow', 'getWorkflowById'];\nconst WORKFLOW_METHODS_TO_WRAP = ['execute'];\n\n/**\n * Helper function to detect NoOp spans to avoid unnecessary wrapping\n */\nfunction isNoOpSpan(span: AnyAISpan): boolean {\n // Check if this is a NoOp span implementation\n return (\n span.constructor.name === 'NoOpAISpan' || (span as any).__isNoOp === true || !span.aiTracing // NoOp spans might not have aiTracing reference\n );\n}\n\n/**\n * Creates a tracing-aware Mastra proxy that automatically injects\n * AI tracing context into agent and workflow method calls\n */\nexport function wrapMastra<T extends Mastra>(mastra: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return mastra;\n }\n\n try {\n return new Proxy(mastra, {\n get(target, prop) {\n try {\n if (AGENT_GETTERS.includes(prop as string)) {\n return (...args: any[]) => {\n const agent = (target as any)[prop](...args);\n return wrapAgent(agent, tracingContext);\n };\n }\n\n // Wrap workflow getters\n if (WORKFLOW_GETTERS.includes(prop as string)) {\n return (...args: any[]) => {\n const workflow = (target as any)[prop](...args);\n return wrapWorkflow(workflow, tracingContext);\n };\n }\n\n // Pass through all other methods unchanged\n return (target as any)[prop];\n } catch (error) {\n console.warn('AI Tracing: Failed to wrap method, falling back to original', error);\n return (target as any)[prop];\n }\n },\n });\n } catch (error) {\n console.warn('AI Tracing: Failed to create proxy, using original Mastra instance', error);\n return mastra;\n }\n}\n\n/**\n * Creates a tracing-aware Agent proxy that automatically injects\n * AI tracing context into generation method calls\n */\nexport function wrapAgent<T extends Agent>(agent: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return agent;\n }\n\n try {\n return new Proxy(agent, {\n get(target, prop) {\n try {\n if (AGENT_METHODS_TO_WRAP.includes(prop as string)) {\n return (input: any, options: any = {}) => {\n return (target as any)[prop](input, {\n ...options,\n tracingContext,\n });\n };\n }\n\n return (target as any)[prop];\n } catch (error) {\n console.warn('AI Tracing: Failed to wrap agent method, falling back to original', error);\n return (target as any)[prop];\n }\n },\n });\n } catch (error) {\n console.warn('AI Tracing: Failed to create agent proxy, using original instance', error);\n return agent;\n }\n}\n\n/**\n * Creates a tracing-aware Workflow proxy that automatically injects\n * AI tracing context into execution method calls\n */\nexport function wrapWorkflow<T extends Workflow>(workflow: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return workflow;\n }\n\n try {\n return new Proxy(workflow, {\n get(target, prop) {\n try {\n // Wrap workflow execution methods with tracing context\n if (WORKFLOW_METHODS_TO_WRAP.includes(prop as string)) {\n return (input: any, options: any = {}) => {\n return (target as any)[prop](input, {\n ...options,\n tracingContext,\n });\n };\n }\n\n return (target as any)[prop];\n } catch (error) {\n console.warn('AI Tracing: Failed to wrap workflow method, falling back to original', error);\n return (target as any)[prop];\n }\n },\n });\n } catch (error) {\n console.warn('AI Tracing: Failed to create workflow proxy, using original instance', error);\n return workflow;\n }\n}\n"]}