@mastra/core 1.20.0 → 1.21.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +12 -2
  3. package/dist/agent/agent-legacy.d.ts +2 -1
  4. package/dist/agent/agent-legacy.d.ts.map +1 -1
  5. package/dist/agent/agent.d.ts +32 -2
  6. package/dist/agent/agent.d.ts.map +1 -1
  7. package/dist/agent/index.cjs +8 -8
  8. package/dist/agent/index.js +1 -1
  9. package/dist/{chunk-RB7WTRE2.js → chunk-2JJQDDEN.js} +8 -6
  10. package/dist/chunk-2JJQDDEN.js.map +1 -0
  11. package/dist/{chunk-2QO3IQWR.cjs → chunk-2STTKMFO.cjs} +82 -82
  12. package/dist/{chunk-2QO3IQWR.cjs.map → chunk-2STTKMFO.cjs.map} +1 -1
  13. package/dist/{chunk-3FW24B6P.cjs → chunk-3EPAGV3T.cjs} +4 -4
  14. package/dist/{chunk-3FW24B6P.cjs.map → chunk-3EPAGV3T.cjs.map} +1 -1
  15. package/dist/{chunk-F3OO446O.cjs → chunk-3OK3LWP4.cjs} +34 -32
  16. package/dist/chunk-3OK3LWP4.cjs.map +1 -0
  17. package/dist/{chunk-7JKIBZI7.js → chunk-5QQZSWLU.js} +4 -4
  18. package/dist/{chunk-7JKIBZI7.js.map → chunk-5QQZSWLU.js.map} +1 -1
  19. package/dist/{chunk-7URCVA7N.js → chunk-6PJQGNFV.js} +10 -10
  20. package/dist/chunk-6PJQGNFV.js.map +1 -0
  21. package/dist/{chunk-ED6CLXQI.cjs → chunk-75LYWKFT.cjs} +25 -25
  22. package/dist/chunk-75LYWKFT.cjs.map +1 -0
  23. package/dist/{chunk-53NCHPV5.cjs → chunk-AL5ACSAH.cjs} +7 -7
  24. package/dist/{chunk-53NCHPV5.cjs.map → chunk-AL5ACSAH.cjs.map} +1 -1
  25. package/dist/{chunk-S3JFAGMH.js → chunk-B4KB75RH.js} +67 -21
  26. package/dist/chunk-B4KB75RH.js.map +1 -0
  27. package/dist/{chunk-3R4YK3VD.js → chunk-CJA2FWKT.js} +3 -3
  28. package/dist/{chunk-3R4YK3VD.js.map → chunk-CJA2FWKT.js.map} +1 -1
  29. package/dist/{chunk-FQCASJGT.js → chunk-D7NEB3NV.js} +5 -5
  30. package/dist/{chunk-FQCASJGT.js.map → chunk-D7NEB3NV.js.map} +1 -1
  31. package/dist/{chunk-CRGRF7QL.cjs → chunk-E4TMODUG.cjs} +75 -29
  32. package/dist/chunk-E4TMODUG.cjs.map +1 -0
  33. package/dist/{chunk-Q4YIRO5A.js → chunk-ESQI2JRD.js} +5 -3
  34. package/dist/chunk-ESQI2JRD.js.map +1 -0
  35. package/dist/{chunk-57OYWNNV.cjs → chunk-EX2LVHTL.cjs} +97 -288
  36. package/dist/chunk-EX2LVHTL.cjs.map +1 -0
  37. package/dist/{chunk-J7AHOVB2.cjs → chunk-F6ZURDS4.cjs} +368 -218
  38. package/dist/chunk-F6ZURDS4.cjs.map +1 -0
  39. package/dist/chunk-FAULJTC5.js +290 -0
  40. package/dist/chunk-FAULJTC5.js.map +1 -0
  41. package/dist/{chunk-T72NHA2O.cjs → chunk-FJT6H2US.cjs} +3 -3
  42. package/dist/chunk-FJT6H2US.cjs.map +1 -0
  43. package/dist/{chunk-BCOOJFBB.js → chunk-GGJSRBFY.js} +13 -7
  44. package/dist/chunk-GGJSRBFY.js.map +1 -0
  45. package/dist/{chunk-CU6QKXLW.js → chunk-HU6OWHBI.js} +3 -3
  46. package/dist/{chunk-CU6QKXLW.js.map → chunk-HU6OWHBI.js.map} +1 -1
  47. package/dist/{chunk-JBOVTCTQ.cjs → chunk-I7AUCCNO.cjs} +69 -69
  48. package/dist/{chunk-JBOVTCTQ.cjs.map → chunk-I7AUCCNO.cjs.map} +1 -1
  49. package/dist/{chunk-GFRRPVRL.cjs → chunk-IG6JCDCL.cjs} +185 -185
  50. package/dist/{chunk-GFRRPVRL.cjs.map → chunk-IG6JCDCL.cjs.map} +1 -1
  51. package/dist/{chunk-UFXC6VJW.js → chunk-JB7HORUI.js} +3 -3
  52. package/dist/{chunk-UFXC6VJW.js.map → chunk-JB7HORUI.js.map} +1 -1
  53. package/dist/{chunk-2H6WEHWI.js → chunk-JBLN5IVV.js} +4 -4
  54. package/dist/{chunk-2H6WEHWI.js.map → chunk-JBLN5IVV.js.map} +1 -1
  55. package/dist/{chunk-HOAKFZ6P.js → chunk-JIA3SJK6.js} +198 -48
  56. package/dist/chunk-JIA3SJK6.js.map +1 -0
  57. package/dist/{chunk-MIWHSH7L.js → chunk-KLHD3PBK.js} +3 -3
  58. package/dist/chunk-KLHD3PBK.js.map +1 -0
  59. package/dist/{chunk-5PAHRQLU.js → chunk-ODUJYYA5.js} +32 -7
  60. package/dist/chunk-ODUJYYA5.js.map +1 -0
  61. package/dist/chunk-QRJSP5G2.cjs +300 -0
  62. package/dist/chunk-QRJSP5G2.cjs.map +1 -0
  63. package/dist/{chunk-7PYYVPF5.js → chunk-RF42EKVR.js} +6 -6
  64. package/dist/{chunk-7PYYVPF5.js.map → chunk-RF42EKVR.js.map} +1 -1
  65. package/dist/{chunk-L6AZQNL2.cjs → chunk-S6B5GIFC.cjs} +31 -25
  66. package/dist/chunk-S6B5GIFC.cjs.map +1 -0
  67. package/dist/{chunk-YEQJIM5W.cjs → chunk-TMRHUTY6.cjs} +15 -15
  68. package/dist/{chunk-YEQJIM5W.cjs.map → chunk-TMRHUTY6.cjs.map} +1 -1
  69. package/dist/{chunk-BZW4PQNA.cjs → chunk-UUNTJ256.cjs} +9 -7
  70. package/dist/chunk-UUNTJ256.cjs.map +1 -0
  71. package/dist/{chunk-RDHIVATT.cjs → chunk-VAACVUEO.cjs} +9 -9
  72. package/dist/{chunk-RDHIVATT.cjs.map → chunk-VAACVUEO.cjs.map} +1 -1
  73. package/dist/{chunk-UCCVELTP.js → chunk-VJKW6RRY.js} +7 -7
  74. package/dist/{chunk-UCCVELTP.js.map → chunk-VJKW6RRY.js.map} +1 -1
  75. package/dist/{chunk-2NISBCML.js → chunk-WG7QIVL7.js} +92 -280
  76. package/dist/chunk-WG7QIVL7.js.map +1 -0
  77. package/dist/{chunk-QG7NJ3JU.cjs → chunk-XANKVDSM.cjs} +10 -10
  78. package/dist/{chunk-QG7NJ3JU.cjs.map → chunk-XANKVDSM.cjs.map} +1 -1
  79. package/dist/{chunk-HVVHMUI4.cjs → chunk-Z745DCGY.cjs} +34 -9
  80. package/dist/chunk-Z745DCGY.cjs.map +1 -0
  81. package/dist/datasets/experiment/scorer.d.ts.map +1 -1
  82. package/dist/datasets/index.cjs +17 -17
  83. package/dist/datasets/index.js +2 -2
  84. package/dist/docs/SKILL.md +3 -3
  85. package/dist/docs/assets/SOURCE_MAP.json +522 -522
  86. package/dist/docs/references/docs-server-mastra-client.md +12 -10
  87. package/dist/docs/references/docs-server-mastra-server.md +13 -1
  88. package/dist/docs/references/docs-studio-observability.md +9 -1
  89. package/dist/docs/references/docs-studio-overview.md +1 -1
  90. package/dist/docs/references/reference-agents-getLLM.md +9 -3
  91. package/dist/docs/references/reference.md +2 -0
  92. package/dist/evals/base.d.ts +29 -6
  93. package/dist/evals/base.d.ts.map +1 -1
  94. package/dist/evals/index.cjs +23 -23
  95. package/dist/evals/index.js +3 -3
  96. package/dist/evals/scoreTraces/index.cjs +21 -37
  97. package/dist/evals/scoreTraces/index.cjs.map +1 -1
  98. package/dist/evals/scoreTraces/index.js +18 -34
  99. package/dist/evals/scoreTraces/index.js.map +1 -1
  100. package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts +2 -3
  101. package/dist/evals/scoreTraces/scoreTracesWorkflow.d.ts.map +1 -1
  102. package/dist/evals/types.d.ts.map +1 -1
  103. package/dist/harness/index.cjs +9 -9
  104. package/dist/harness/index.js +6 -6
  105. package/dist/index.cjs +2 -2
  106. package/dist/index.js +1 -1
  107. package/dist/llm/index.cjs +16 -16
  108. package/dist/llm/index.js +5 -5
  109. package/dist/llm/model/provider-types.generated.d.ts +1 -0
  110. package/dist/logger/index.cjs +6 -6
  111. package/dist/logger/index.js +1 -1
  112. package/dist/loop/index.cjs +14 -14
  113. package/dist/loop/index.js +1 -1
  114. package/dist/mastra/hooks.d.ts +3 -0
  115. package/dist/mastra/hooks.d.ts.map +1 -1
  116. package/dist/mastra/index.cjs +2 -2
  117. package/dist/mastra/index.d.ts +3 -3
  118. package/dist/mastra/index.d.ts.map +1 -1
  119. package/dist/mastra/index.js +1 -1
  120. package/dist/memory/index.cjs +14 -14
  121. package/dist/memory/index.js +1 -1
  122. package/dist/models-dev-4HBR4MAS.js +3 -0
  123. package/dist/{models-dev-WTF6UG4D.js.map → models-dev-4HBR4MAS.js.map} +1 -1
  124. package/dist/models-dev-W2D3QNCX.cjs +12 -0
  125. package/dist/{models-dev-TKKI7LVH.cjs.map → models-dev-W2D3QNCX.cjs.map} +1 -1
  126. package/dist/netlify-A6TIZLU7.cjs +12 -0
  127. package/dist/{netlify-QCPWAYI2.cjs.map → netlify-A6TIZLU7.cjs.map} +1 -1
  128. package/dist/netlify-YRVEP6E4.js +3 -0
  129. package/dist/{netlify-V6N4TT4H.js.map → netlify-YRVEP6E4.js.map} +1 -1
  130. package/dist/observability/index.cjs +36 -32
  131. package/dist/observability/index.js +2 -2
  132. package/dist/observability/no-op.d.ts +1 -1
  133. package/dist/observability/no-op.d.ts.map +1 -1
  134. package/dist/observability/types/core.d.ts +15 -1
  135. package/dist/observability/types/core.d.ts.map +1 -1
  136. package/dist/observability/types/feedback.d.ts +2 -2
  137. package/dist/observability/types/feedback.d.ts.map +1 -1
  138. package/dist/observability/types/scores.d.ts +16 -7
  139. package/dist/observability/types/scores.d.ts.map +1 -1
  140. package/dist/observability/types/tracing.d.ts +27 -1
  141. package/dist/observability/types/tracing.d.ts.map +1 -1
  142. package/dist/observability/utils.d.ts +12 -1
  143. package/dist/observability/utils.d.ts.map +1 -1
  144. package/dist/processor-provider/index.cjs +10 -10
  145. package/dist/processor-provider/index.js +1 -1
  146. package/dist/processors/index.cjs +44 -44
  147. package/dist/processors/index.js +1 -1
  148. package/dist/provider-registry-6ONBOGD7.cjs +40 -0
  149. package/dist/{provider-registry-C54SHAP6.cjs.map → provider-registry-6ONBOGD7.cjs.map} +1 -1
  150. package/dist/provider-registry-AIPF3CGZ.js +3 -0
  151. package/dist/{provider-registry-34O53EL4.js.map → provider-registry-AIPF3CGZ.js.map} +1 -1
  152. package/dist/provider-registry.json +4 -2
  153. package/dist/relevance/index.cjs +3 -3
  154. package/dist/relevance/index.js +1 -1
  155. package/dist/storage/constants.cjs +56 -56
  156. package/dist/storage/constants.js +1 -1
  157. package/dist/storage/domains/observability/base.d.ts +4 -0
  158. package/dist/storage/domains/observability/base.d.ts.map +1 -1
  159. package/dist/storage/domains/observability/record-builders.d.ts.map +1 -1
  160. package/dist/storage/index.cjs +286 -286
  161. package/dist/storage/index.js +3 -3
  162. package/dist/stream/index.cjs +8 -8
  163. package/dist/stream/index.js +1 -1
  164. package/dist/test-utils/llm-mock.cjs +4 -4
  165. package/dist/test-utils/llm-mock.js +1 -1
  166. package/dist/tool-loop-agent/index.cjs +4 -4
  167. package/dist/tool-loop-agent/index.js +1 -1
  168. package/dist/utils.cjs +25 -25
  169. package/dist/utils.js +1 -1
  170. package/dist/vector/index.cjs +7 -7
  171. package/dist/vector/index.js +1 -1
  172. package/dist/workflows/evented/index.cjs +10 -10
  173. package/dist/workflows/evented/index.js +1 -1
  174. package/dist/workflows/index.cjs +24 -24
  175. package/dist/workflows/index.js +1 -1
  176. package/package.json +4 -4
  177. package/src/llm/model/provider-types.generated.d.ts +1 -0
  178. package/dist/chunk-2NISBCML.js.map +0 -1
  179. package/dist/chunk-57OYWNNV.cjs.map +0 -1
  180. package/dist/chunk-5PAHRQLU.js.map +0 -1
  181. package/dist/chunk-7URCVA7N.js.map +0 -1
  182. package/dist/chunk-AC5GUOWY.js +0 -72
  183. package/dist/chunk-AC5GUOWY.js.map +0 -1
  184. package/dist/chunk-BCOOJFBB.js.map +0 -1
  185. package/dist/chunk-BZW4PQNA.cjs.map +0 -1
  186. package/dist/chunk-CRGRF7QL.cjs.map +0 -1
  187. package/dist/chunk-ED6CLXQI.cjs.map +0 -1
  188. package/dist/chunk-EZHHTAJU.cjs +0 -78
  189. package/dist/chunk-EZHHTAJU.cjs.map +0 -1
  190. package/dist/chunk-F3OO446O.cjs.map +0 -1
  191. package/dist/chunk-HOAKFZ6P.js.map +0 -1
  192. package/dist/chunk-HVVHMUI4.cjs.map +0 -1
  193. package/dist/chunk-J7AHOVB2.cjs.map +0 -1
  194. package/dist/chunk-L6AZQNL2.cjs.map +0 -1
  195. package/dist/chunk-MIWHSH7L.js.map +0 -1
  196. package/dist/chunk-Q4YIRO5A.js.map +0 -1
  197. package/dist/chunk-RB7WTRE2.js.map +0 -1
  198. package/dist/chunk-S3JFAGMH.js.map +0 -1
  199. package/dist/chunk-T72NHA2O.cjs.map +0 -1
  200. package/dist/models-dev-TKKI7LVH.cjs +0 -12
  201. package/dist/models-dev-WTF6UG4D.js +0 -3
  202. package/dist/netlify-QCPWAYI2.cjs +0 -12
  203. package/dist/netlify-V6N4TT4H.js +0 -3
  204. package/dist/provider-registry-34O53EL4.js +0 -3
  205. package/dist/provider-registry-C54SHAP6.cjs +0 -40
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tool-loop-agent/utils.ts","../src/tool-loop-agent/tool-loop-processor.ts","../src/tool-loop-agent/index.ts"],"names":["ToolLoopAgent","resolveModelConfig","isSupportedLanguageModel","generateId","Agent"],"mappings":"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","file":"chunk-53NCHPV5.cjs","sourcesContent":["import { ToolLoopAgent } from '@internal/ai-v6';\nimport type { ToolLoopAgentSettings } from '@internal/ai-v6';\n\n/**\n * Shape of a ToolLoopAgent-like object for runtime extraction.\n * We use this looser type because TypeScript's structural typing doesn't work\n * well with private properties across different package declarations.\n */\nexport interface ToolLoopAgentLike {\n readonly id?: string;\n readonly version?: string;\n // The settings property is private in ToolLoopAgent but accessible at runtime\n // We don't declare it here since we access it via type casting\n}\n\nexport function isToolLoopAgentLike(obj: any): obj is ToolLoopAgentLike {\n if (!obj) return false;\n if (obj instanceof ToolLoopAgent) return true;\n return (\n 'version' in obj &&\n typeof obj.version === 'string' &&\n (obj.version === 'agent-v1' || obj.version.startsWith('agent-v'))\n );\n}\n\n/**\n * Extracts the settings from a ToolLoopAgent instance.\n * ToolLoopAgent.settings is private in TypeScript but accessible at runtime.\n */\nexport function getSettings(agent: ToolLoopAgentLike): ToolLoopAgentSettings<any, any, any> {\n const settings = (agent as unknown as { settings: ToolLoopAgentSettings<any, any, any> }).settings;\n if (!settings) {\n throw new Error('Could not extract settings from ToolLoopAgent. The agent may be from an incompatible version.');\n }\n return settings;\n}\n","import type {\n ToolLoopAgent,\n AgentCallParameters,\n ModelMessage,\n StepResult,\n ToolLoopAgentSettings,\n} from '@internal/ai-v6';\nimport { isSupportedLanguageModel } from '../agent';\nimport type { AgentExecutionOptions, AgentInstructions } from '../agent';\nimport { resolveModelConfig } from '../llm/model/resolve-model';\nimport type { MastraLanguageModel } from '../llm/model/shared.types';\nimport type { ProcessInputStepArgs, ProcessInputStepResult, Processor } from '../processors';\nimport { getSettings as getToolLoopAgentSettings } from './utils';\nimport type { ToolLoopAgentLike } from './utils';\n\ntype PrepareCallInput = AgentCallParameters<never> &\n Pick<\n ToolLoopAgentSettings<never, any, any>,\n | 'model'\n | 'tools'\n | 'maxOutputTokens'\n | 'temperature'\n | 'topP'\n | 'topK'\n | 'presencePenalty'\n | 'frequencyPenalty'\n | 'stopSequences'\n | 'seed'\n | 'headers'\n | 'instructions'\n | 'stopWhen'\n | 'experimental_telemetry'\n | 'activeTools'\n | 'providerOptions'\n | 'experimental_context'\n | 'experimental_download'\n >;\n\nexport class ToolLoopAgentProcessor implements Processor<'tool-loop-agent-processor'> {\n readonly id = 'tool-loop-agent-processor';\n readonly name = 'ToolLoop to Mastra Agent Processor';\n\n private agent: ToolLoopAgentLike;\n private settings: ToolLoopAgentSettings<any, any, any>;\n private prepareCallResult?: Awaited<ReturnType<NonNullable<ToolLoopAgentSettings<any, any, any>['prepareCall']>>>;\n\n constructor(agent: ToolLoopAgentLike) {\n this.agent = agent;\n this.settings = getToolLoopAgentSettings(agent);\n }\n\n public getAgentConfig() {\n const tools = 'tools' in this.agent ? (this.agent as ToolLoopAgent).tools : undefined;\n\n // Build default options from ToolLoopAgent config params\n const defaultOptions: Omit<AgentExecutionOptions<unknown>, 'abortSignal'> = {};\n\n // AgentExecutionOptions\n if (this.settings.toolChoice) {\n defaultOptions.toolChoice = this.settings.toolChoice;\n }\n if (this.settings.providerOptions) {\n defaultOptions.providerOptions = this.settings.providerOptions;\n }\n // AgentExecutionOptions[\"modelSettings\"]\n if (this.settings.temperature !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n temperature: this.settings.temperature,\n };\n }\n if (this.settings.topP !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), topP: this.settings.topP };\n }\n if (this.settings.topK !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), topK: this.settings.topK };\n }\n if (this.settings.seed !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), seed: this.settings.seed };\n }\n if (this.settings.maxOutputTokens !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n maxOutputTokens: this.settings.maxOutputTokens,\n };\n }\n if (this.settings.presencePenalty !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n presencePenalty: this.settings.presencePenalty,\n };\n }\n if (this.settings.frequencyPenalty !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n frequencyPenalty: this.settings.frequencyPenalty,\n };\n }\n if (this.settings.stopSequences !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n stopSequences: this.settings.stopSequences,\n };\n }\n if (this.settings.stopWhen) {\n // TODO: The callback signatures differ (Types of parameters stepResult and event are incompatible)\n defaultOptions.stopWhen = this.settings.stopWhen as any;\n }\n if (this.settings.onStepFinish) {\n // TODO: The callback signatures differ (Types of parameters stepResult and event are incompatible)\n defaultOptions.onStepFinish = this.settings.onStepFinish as any;\n }\n if (this.settings.onFinish) {\n // TODO: The callback signatures differ (Types of parameters 'event' and 'event' are incompatible)\n defaultOptions.onFinish = this.settings.onFinish as any;\n }\n\n return {\n id: this.settings.id,\n name: this.settings.id,\n instructions: (this.settings.instructions as AgentInstructions) ?? '',\n model: this.settings.model,\n tools,\n maxRetries: this.settings.maxRetries,\n defaultOptions: Object.keys(defaultOptions).length > 0 ? defaultOptions : undefined,\n };\n }\n\n /**\n * Maps prepareCall or prepareStep result to ProcessInputStepResult.\n * Both hooks return similar structures that can override model, tools, activeTools, etc.\n */\n private mapToProcessInputStepResult(\n result: Awaited<ReturnType<NonNullable<ToolLoopAgentSettings<any, any, any>['prepareCall']>>> | undefined,\n ): ProcessInputStepResult {\n if (!result) {\n return {};\n }\n\n const stepResult: ProcessInputStepResult = {};\n\n // Map model (both prepareCall and prepareStep can return this)\n if (result.model) {\n stepResult.model = result.model;\n }\n\n // Map tools (prepareCall can return this)\n if ('tools' in result && result.tools) {\n stepResult.tools = result.tools as Record<string, unknown>;\n }\n\n // Map toolChoice (prepareStep can return this)\n if ('toolChoice' in result && result.toolChoice !== undefined) {\n stepResult.toolChoice = result.toolChoice as ProcessInputStepResult['toolChoice'];\n }\n\n // Map activeTools (both can return this)\n if (result.activeTools) {\n stepResult.activeTools = result.activeTools as string[];\n }\n\n // Map providerOptions (prepareCall can return this)\n if ('providerOptions' in result && result.providerOptions) {\n stepResult.providerOptions = result.providerOptions;\n }\n\n // Map model settings (prepareCall can return individual settings)\n const modelSettings: ProcessInputStepResult['modelSettings'] = {};\n if ('temperature' in result && result.temperature !== undefined) {\n modelSettings.temperature = result.temperature;\n }\n if ('topP' in result && result.topP !== undefined) {\n modelSettings.topP = result.topP;\n }\n if ('topK' in result && result.topK !== undefined) {\n modelSettings.topK = result.topK;\n }\n if ('maxOutputTokens' in result && result.maxOutputTokens !== undefined) {\n modelSettings.maxOutputTokens = result.maxOutputTokens;\n }\n if ('presencePenalty' in result && result.presencePenalty !== undefined) {\n modelSettings.presencePenalty = result.presencePenalty;\n }\n if ('frequencyPenalty' in result && result.frequencyPenalty !== undefined) {\n modelSettings.frequencyPenalty = result.frequencyPenalty;\n }\n if ('stopSequences' in result && result.stopSequences !== undefined) {\n modelSettings.stopSequences = result.stopSequences;\n }\n if ('seed' in result && result.seed !== undefined) {\n modelSettings.seed = result.seed;\n }\n\n if (Object.keys(modelSettings).length > 0) {\n stepResult.modelSettings = modelSettings;\n }\n\n // Map system/instructions to systemMessages\n // prepareCall returns 'instructions', prepareStep returns 'system'\n const systemContent =\n 'instructions' in result ? result.instructions : 'system' in result ? result.system : undefined;\n if (systemContent) {\n // Convert to CoreMessageV4 format\n if (typeof systemContent === 'string') {\n stepResult.systemMessages = [{ role: 'system', content: systemContent }];\n } else if (Array.isArray(systemContent)) {\n stepResult.systemMessages = systemContent.map(msg =>\n typeof msg === 'string' ? { role: 'system' as const, content: msg } : msg,\n );\n } else if (typeof systemContent === 'object' && 'role' in systemContent && 'content' in systemContent) {\n stepResult.systemMessages = [systemContent as { role: 'system'; content: string }];\n }\n }\n\n // Map messages if prepareStep returns them\n // Convert AI SDK ModelMessage[] to MastraDBMessage[]\n if ('messages' in result && result.messages && Array.isArray(result.messages)) {\n // AI SDK v6 ModelMessage is compatible with MessageListInput at runtime\n // stepResult.messages = convertMessages(result.messages as any).to('Mastra.V2');\n stepResult.messages = result.messages as any;\n }\n\n return stepResult;\n }\n\n private async handlePrepareCall(args: ProcessInputStepArgs) {\n if (this.settings.prepareCall) {\n const { model, messages, activeTools, providerOptions, modelSettings, tools } = args;\n // TODO: This should probably happen in processInput, currently calling in processInputStep if stepNumber === 0\n\n // Build the prepareCall input object\n // AI SDK prepareCall expects: AgentCallParameters & Pick<ToolLoopAgentSettings, ...settings>\n const prepareCallInput: PrepareCallInput = {\n // TODO: prepareCall expects messages in AI SDK format, we have them in Mastra format\n messages: messages as unknown as any,\n model,\n tools,\n instructions: this.settings.instructions,\n stopWhen: this.settings.stopWhen,\n activeTools,\n providerOptions,\n\n // Model settings\n temperature: modelSettings?.temperature,\n topP: modelSettings?.topP,\n topK: modelSettings?.topK,\n maxOutputTokens: modelSettings?.maxOutputTokens,\n presencePenalty: modelSettings?.presencePenalty,\n frequencyPenalty: modelSettings?.frequencyPenalty,\n stopSequences: modelSettings?.stopSequences,\n seed: modelSettings?.seed,\n\n // Experimental options\n // experimental_telemetry: this.settings.experimental_telemetry,\n // experimental_context: this.settings.experimental_context,\n // experimental_download: this.settings.experimental_download,\n };\n\n // Call prepareCall and apply any returned overrides\n const prepareCallResult = await this.settings.prepareCall(prepareCallInput as any); // TODO: types\n this.prepareCallResult = prepareCallResult;\n }\n }\n\n private async handlePrepareStep(args: ProcessInputStepArgs, currentResult: ProcessInputStepResult) {\n if (this.settings.prepareStep) {\n const { messages, steps, stepNumber } = args;\n\n let model = args.model;\n if (currentResult.model) {\n const resolvedModel = await resolveModelConfig(currentResult.model);\n if (!isSupportedLanguageModel(resolvedModel)) {\n throw new Error('prepareStep returned an unsupported model version');\n }\n model = resolvedModel;\n }\n\n // Use the model from currentResult if prepareCall overrode it, otherwise use args.model\n\n // Note: We pass messages and steps in Mastra format rather than converting to AI SDK format.\n // This is intentional - most prepareStep callbacks only return overrides and don't inspect\n // the message content. The type casts handle the format difference at runtime.\n const prepareStepInputArgs: {\n /**\n * The steps that have been executed so far.\n */\n steps: Array<StepResult<NoInfer<any>>>;\n /**\n * The number of the step that is being executed.\n */\n stepNumber: number;\n /**\n * The model instance that is being used for this step.\n */\n model: MastraLanguageModel;\n /**\n * The messages that will be sent to the model for the current step.\n * Note: These are in Mastra format (MastraDBMessage[]), not AI SDK ModelMessage format.\n */\n messages: Array<ModelMessage>;\n /**\n * The context passed via the experimental_context setting (experimental).\n */\n experimental_context: unknown;\n } = {\n model,\n // Messages are in Mastra format (MastraDBMessage[])\n messages: messages as any,\n // Steps may have minor type differences in usage properties (inputTokenDetails/outputTokenDetails)\n steps: steps as any,\n stepNumber,\n experimental_context: undefined,\n };\n\n const prepareStepResult = await this.settings.prepareStep(prepareStepInputArgs);\n return prepareStepResult;\n }\n }\n\n async processInputStep(args: ProcessInputStepArgs): Promise<ProcessInputStepResult | undefined | void> {\n const { stepNumber } = args;\n\n if (stepNumber === 0 && this.settings.prepareCall) {\n await this.handlePrepareCall(args);\n }\n\n let result: ProcessInputStepResult = {};\n\n // Apply prepareCall result (only on step 0, already called above)\n if (this.prepareCallResult) {\n const mappedResult = this.mapToProcessInputStepResult(this.prepareCallResult);\n if (Object.keys(mappedResult).length > 0) {\n result = { ...result, ...mappedResult };\n }\n }\n\n // Apply prepareStep result (called on every step)\n // Pass the current result so prepareStep sees any overrides from prepareCall\n if (this.settings.prepareStep) {\n const prepareStepResult = await this.handlePrepareStep(args, result);\n if (prepareStepResult) {\n const mappedResult = this.mapToProcessInputStepResult(prepareStepResult as any);\n // prepareStep overrides prepareCall for this step\n result = { ...result, ...mappedResult };\n }\n }\n\n return result;\n }\n}\n","import { generateId } from '@internal/ai-sdk-v5';\nimport { Agent } from '../agent';\nimport { ToolLoopAgentProcessor } from './tool-loop-processor';\nimport type { ToolLoopAgentLike } from './utils';\nexport { type ToolLoopAgentLike, isToolLoopAgentLike, getSettings } from './utils';\n\n/**\n * Converts an AI SDK v6 ToolLoopAgent instance into a Mastra Agent.\n *\n * This enables users to create a ToolLoopAgent using AI SDK's API\n * while gaining access to Mastra features like memory, processors, scorers, and observability.\n *\n * @example\n * ```typescript\n * import { ToolLoopAgent, tool } from 'ai';\n * import { openai } from '@ai-sdk/openai';\n * import { toolLoopAgentToMastraAgent } from '@mastra/core/tool-loop-agent';\n *\n * const toolLoopAgent = new ToolLoopAgent({\n * id: 'weather-agent',\n * model: openai('gpt-4o'),\n * instructions: 'You are a helpful weather assistant.',\n * tools: { weather: weatherTool },\n * temperature: 0.7,\n * });\n *\n * const mastraAgent = toolLoopAgentToMastraAgent(toolLoopAgent);\n *\n * const result = await mastraAgent.generate({ prompt: 'What is the weather in NYC?' });\n * ```\n *\n * @param agent - The ToolLoopAgent instance\n * @param options - Optional name fallback since Mastra Agent requires id/name but ToolLoopAgent doesn't\n * @returns A Mastra Agent instance\n */\nexport function toolLoopAgentToMastraAgent(agent: ToolLoopAgentLike, options?: { fallbackName?: string }) {\n const processor = new ToolLoopAgentProcessor(agent);\n const agentConfig = processor.getAgentConfig();\n const id = agentConfig.id || options?.fallbackName || `tool-loop-agent-${generateId()}`;\n\n return new Agent({\n ...agentConfig,\n id,\n name: agentConfig.name || id,\n inputProcessors: [processor],\n });\n}\n"]}
1
+ {"version":3,"sources":["../src/tool-loop-agent/utils.ts","../src/tool-loop-agent/tool-loop-processor.ts","../src/tool-loop-agent/index.ts"],"names":["ToolLoopAgent","resolveModelConfig","isSupportedLanguageModel","generateId","Agent"],"mappings":"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","file":"chunk-AL5ACSAH.cjs","sourcesContent":["import { ToolLoopAgent } from '@internal/ai-v6';\nimport type { ToolLoopAgentSettings } from '@internal/ai-v6';\n\n/**\n * Shape of a ToolLoopAgent-like object for runtime extraction.\n * We use this looser type because TypeScript's structural typing doesn't work\n * well with private properties across different package declarations.\n */\nexport interface ToolLoopAgentLike {\n readonly id?: string;\n readonly version?: string;\n // The settings property is private in ToolLoopAgent but accessible at runtime\n // We don't declare it here since we access it via type casting\n}\n\nexport function isToolLoopAgentLike(obj: any): obj is ToolLoopAgentLike {\n if (!obj) return false;\n if (obj instanceof ToolLoopAgent) return true;\n return (\n 'version' in obj &&\n typeof obj.version === 'string' &&\n (obj.version === 'agent-v1' || obj.version.startsWith('agent-v'))\n );\n}\n\n/**\n * Extracts the settings from a ToolLoopAgent instance.\n * ToolLoopAgent.settings is private in TypeScript but accessible at runtime.\n */\nexport function getSettings(agent: ToolLoopAgentLike): ToolLoopAgentSettings<any, any, any> {\n const settings = (agent as unknown as { settings: ToolLoopAgentSettings<any, any, any> }).settings;\n if (!settings) {\n throw new Error('Could not extract settings from ToolLoopAgent. The agent may be from an incompatible version.');\n }\n return settings;\n}\n","import type {\n ToolLoopAgent,\n AgentCallParameters,\n ModelMessage,\n StepResult,\n ToolLoopAgentSettings,\n} from '@internal/ai-v6';\nimport { isSupportedLanguageModel } from '../agent';\nimport type { AgentExecutionOptions, AgentInstructions } from '../agent';\nimport { resolveModelConfig } from '../llm/model/resolve-model';\nimport type { MastraLanguageModel } from '../llm/model/shared.types';\nimport type { ProcessInputStepArgs, ProcessInputStepResult, Processor } from '../processors';\nimport { getSettings as getToolLoopAgentSettings } from './utils';\nimport type { ToolLoopAgentLike } from './utils';\n\ntype PrepareCallInput = AgentCallParameters<never> &\n Pick<\n ToolLoopAgentSettings<never, any, any>,\n | 'model'\n | 'tools'\n | 'maxOutputTokens'\n | 'temperature'\n | 'topP'\n | 'topK'\n | 'presencePenalty'\n | 'frequencyPenalty'\n | 'stopSequences'\n | 'seed'\n | 'headers'\n | 'instructions'\n | 'stopWhen'\n | 'experimental_telemetry'\n | 'activeTools'\n | 'providerOptions'\n | 'experimental_context'\n | 'experimental_download'\n >;\n\nexport class ToolLoopAgentProcessor implements Processor<'tool-loop-agent-processor'> {\n readonly id = 'tool-loop-agent-processor';\n readonly name = 'ToolLoop to Mastra Agent Processor';\n\n private agent: ToolLoopAgentLike;\n private settings: ToolLoopAgentSettings<any, any, any>;\n private prepareCallResult?: Awaited<ReturnType<NonNullable<ToolLoopAgentSettings<any, any, any>['prepareCall']>>>;\n\n constructor(agent: ToolLoopAgentLike) {\n this.agent = agent;\n this.settings = getToolLoopAgentSettings(agent);\n }\n\n public getAgentConfig() {\n const tools = 'tools' in this.agent ? (this.agent as ToolLoopAgent).tools : undefined;\n\n // Build default options from ToolLoopAgent config params\n const defaultOptions: Omit<AgentExecutionOptions<unknown>, 'abortSignal'> = {};\n\n // AgentExecutionOptions\n if (this.settings.toolChoice) {\n defaultOptions.toolChoice = this.settings.toolChoice;\n }\n if (this.settings.providerOptions) {\n defaultOptions.providerOptions = this.settings.providerOptions;\n }\n // AgentExecutionOptions[\"modelSettings\"]\n if (this.settings.temperature !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n temperature: this.settings.temperature,\n };\n }\n if (this.settings.topP !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), topP: this.settings.topP };\n }\n if (this.settings.topK !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), topK: this.settings.topK };\n }\n if (this.settings.seed !== undefined) {\n defaultOptions.modelSettings = { ...(defaultOptions.modelSettings ?? {}), seed: this.settings.seed };\n }\n if (this.settings.maxOutputTokens !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n maxOutputTokens: this.settings.maxOutputTokens,\n };\n }\n if (this.settings.presencePenalty !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n presencePenalty: this.settings.presencePenalty,\n };\n }\n if (this.settings.frequencyPenalty !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n frequencyPenalty: this.settings.frequencyPenalty,\n };\n }\n if (this.settings.stopSequences !== undefined) {\n defaultOptions.modelSettings = {\n ...(defaultOptions.modelSettings ?? {}),\n stopSequences: this.settings.stopSequences,\n };\n }\n if (this.settings.stopWhen) {\n // TODO: The callback signatures differ (Types of parameters stepResult and event are incompatible)\n defaultOptions.stopWhen = this.settings.stopWhen as any;\n }\n if (this.settings.onStepFinish) {\n // TODO: The callback signatures differ (Types of parameters stepResult and event are incompatible)\n defaultOptions.onStepFinish = this.settings.onStepFinish as any;\n }\n if (this.settings.onFinish) {\n // TODO: The callback signatures differ (Types of parameters 'event' and 'event' are incompatible)\n defaultOptions.onFinish = this.settings.onFinish as any;\n }\n\n return {\n id: this.settings.id,\n name: this.settings.id,\n instructions: (this.settings.instructions as AgentInstructions) ?? '',\n model: this.settings.model,\n tools,\n maxRetries: this.settings.maxRetries,\n defaultOptions: Object.keys(defaultOptions).length > 0 ? defaultOptions : undefined,\n };\n }\n\n /**\n * Maps prepareCall or prepareStep result to ProcessInputStepResult.\n * Both hooks return similar structures that can override model, tools, activeTools, etc.\n */\n private mapToProcessInputStepResult(\n result: Awaited<ReturnType<NonNullable<ToolLoopAgentSettings<any, any, any>['prepareCall']>>> | undefined,\n ): ProcessInputStepResult {\n if (!result) {\n return {};\n }\n\n const stepResult: ProcessInputStepResult = {};\n\n // Map model (both prepareCall and prepareStep can return this)\n if (result.model) {\n stepResult.model = result.model;\n }\n\n // Map tools (prepareCall can return this)\n if ('tools' in result && result.tools) {\n stepResult.tools = result.tools as Record<string, unknown>;\n }\n\n // Map toolChoice (prepareStep can return this)\n if ('toolChoice' in result && result.toolChoice !== undefined) {\n stepResult.toolChoice = result.toolChoice as ProcessInputStepResult['toolChoice'];\n }\n\n // Map activeTools (both can return this)\n if (result.activeTools) {\n stepResult.activeTools = result.activeTools as string[];\n }\n\n // Map providerOptions (prepareCall can return this)\n if ('providerOptions' in result && result.providerOptions) {\n stepResult.providerOptions = result.providerOptions;\n }\n\n // Map model settings (prepareCall can return individual settings)\n const modelSettings: ProcessInputStepResult['modelSettings'] = {};\n if ('temperature' in result && result.temperature !== undefined) {\n modelSettings.temperature = result.temperature;\n }\n if ('topP' in result && result.topP !== undefined) {\n modelSettings.topP = result.topP;\n }\n if ('topK' in result && result.topK !== undefined) {\n modelSettings.topK = result.topK;\n }\n if ('maxOutputTokens' in result && result.maxOutputTokens !== undefined) {\n modelSettings.maxOutputTokens = result.maxOutputTokens;\n }\n if ('presencePenalty' in result && result.presencePenalty !== undefined) {\n modelSettings.presencePenalty = result.presencePenalty;\n }\n if ('frequencyPenalty' in result && result.frequencyPenalty !== undefined) {\n modelSettings.frequencyPenalty = result.frequencyPenalty;\n }\n if ('stopSequences' in result && result.stopSequences !== undefined) {\n modelSettings.stopSequences = result.stopSequences;\n }\n if ('seed' in result && result.seed !== undefined) {\n modelSettings.seed = result.seed;\n }\n\n if (Object.keys(modelSettings).length > 0) {\n stepResult.modelSettings = modelSettings;\n }\n\n // Map system/instructions to systemMessages\n // prepareCall returns 'instructions', prepareStep returns 'system'\n const systemContent =\n 'instructions' in result ? result.instructions : 'system' in result ? result.system : undefined;\n if (systemContent) {\n // Convert to CoreMessageV4 format\n if (typeof systemContent === 'string') {\n stepResult.systemMessages = [{ role: 'system', content: systemContent }];\n } else if (Array.isArray(systemContent)) {\n stepResult.systemMessages = systemContent.map(msg =>\n typeof msg === 'string' ? { role: 'system' as const, content: msg } : msg,\n );\n } else if (typeof systemContent === 'object' && 'role' in systemContent && 'content' in systemContent) {\n stepResult.systemMessages = [systemContent as { role: 'system'; content: string }];\n }\n }\n\n // Map messages if prepareStep returns them\n // Convert AI SDK ModelMessage[] to MastraDBMessage[]\n if ('messages' in result && result.messages && Array.isArray(result.messages)) {\n // AI SDK v6 ModelMessage is compatible with MessageListInput at runtime\n // stepResult.messages = convertMessages(result.messages as any).to('Mastra.V2');\n stepResult.messages = result.messages as any;\n }\n\n return stepResult;\n }\n\n private async handlePrepareCall(args: ProcessInputStepArgs) {\n if (this.settings.prepareCall) {\n const { model, messages, activeTools, providerOptions, modelSettings, tools } = args;\n // TODO: This should probably happen in processInput, currently calling in processInputStep if stepNumber === 0\n\n // Build the prepareCall input object\n // AI SDK prepareCall expects: AgentCallParameters & Pick<ToolLoopAgentSettings, ...settings>\n const prepareCallInput: PrepareCallInput = {\n // TODO: prepareCall expects messages in AI SDK format, we have them in Mastra format\n messages: messages as unknown as any,\n model,\n tools,\n instructions: this.settings.instructions,\n stopWhen: this.settings.stopWhen,\n activeTools,\n providerOptions,\n\n // Model settings\n temperature: modelSettings?.temperature,\n topP: modelSettings?.topP,\n topK: modelSettings?.topK,\n maxOutputTokens: modelSettings?.maxOutputTokens,\n presencePenalty: modelSettings?.presencePenalty,\n frequencyPenalty: modelSettings?.frequencyPenalty,\n stopSequences: modelSettings?.stopSequences,\n seed: modelSettings?.seed,\n\n // Experimental options\n // experimental_telemetry: this.settings.experimental_telemetry,\n // experimental_context: this.settings.experimental_context,\n // experimental_download: this.settings.experimental_download,\n };\n\n // Call prepareCall and apply any returned overrides\n const prepareCallResult = await this.settings.prepareCall(prepareCallInput as any); // TODO: types\n this.prepareCallResult = prepareCallResult;\n }\n }\n\n private async handlePrepareStep(args: ProcessInputStepArgs, currentResult: ProcessInputStepResult) {\n if (this.settings.prepareStep) {\n const { messages, steps, stepNumber } = args;\n\n let model = args.model;\n if (currentResult.model) {\n const resolvedModel = await resolveModelConfig(currentResult.model);\n if (!isSupportedLanguageModel(resolvedModel)) {\n throw new Error('prepareStep returned an unsupported model version');\n }\n model = resolvedModel;\n }\n\n // Use the model from currentResult if prepareCall overrode it, otherwise use args.model\n\n // Note: We pass messages and steps in Mastra format rather than converting to AI SDK format.\n // This is intentional - most prepareStep callbacks only return overrides and don't inspect\n // the message content. The type casts handle the format difference at runtime.\n const prepareStepInputArgs: {\n /**\n * The steps that have been executed so far.\n */\n steps: Array<StepResult<NoInfer<any>>>;\n /**\n * The number of the step that is being executed.\n */\n stepNumber: number;\n /**\n * The model instance that is being used for this step.\n */\n model: MastraLanguageModel;\n /**\n * The messages that will be sent to the model for the current step.\n * Note: These are in Mastra format (MastraDBMessage[]), not AI SDK ModelMessage format.\n */\n messages: Array<ModelMessage>;\n /**\n * The context passed via the experimental_context setting (experimental).\n */\n experimental_context: unknown;\n } = {\n model,\n // Messages are in Mastra format (MastraDBMessage[])\n messages: messages as any,\n // Steps may have minor type differences in usage properties (inputTokenDetails/outputTokenDetails)\n steps: steps as any,\n stepNumber,\n experimental_context: undefined,\n };\n\n const prepareStepResult = await this.settings.prepareStep(prepareStepInputArgs);\n return prepareStepResult;\n }\n }\n\n async processInputStep(args: ProcessInputStepArgs): Promise<ProcessInputStepResult | undefined | void> {\n const { stepNumber } = args;\n\n if (stepNumber === 0 && this.settings.prepareCall) {\n await this.handlePrepareCall(args);\n }\n\n let result: ProcessInputStepResult = {};\n\n // Apply prepareCall result (only on step 0, already called above)\n if (this.prepareCallResult) {\n const mappedResult = this.mapToProcessInputStepResult(this.prepareCallResult);\n if (Object.keys(mappedResult).length > 0) {\n result = { ...result, ...mappedResult };\n }\n }\n\n // Apply prepareStep result (called on every step)\n // Pass the current result so prepareStep sees any overrides from prepareCall\n if (this.settings.prepareStep) {\n const prepareStepResult = await this.handlePrepareStep(args, result);\n if (prepareStepResult) {\n const mappedResult = this.mapToProcessInputStepResult(prepareStepResult as any);\n // prepareStep overrides prepareCall for this step\n result = { ...result, ...mappedResult };\n }\n }\n\n return result;\n }\n}\n","import { generateId } from '@internal/ai-sdk-v5';\nimport { Agent } from '../agent';\nimport { ToolLoopAgentProcessor } from './tool-loop-processor';\nimport type { ToolLoopAgentLike } from './utils';\nexport { type ToolLoopAgentLike, isToolLoopAgentLike, getSettings } from './utils';\n\n/**\n * Converts an AI SDK v6 ToolLoopAgent instance into a Mastra Agent.\n *\n * This enables users to create a ToolLoopAgent using AI SDK's API\n * while gaining access to Mastra features like memory, processors, scorers, and observability.\n *\n * @example\n * ```typescript\n * import { ToolLoopAgent, tool } from 'ai';\n * import { openai } from '@ai-sdk/openai';\n * import { toolLoopAgentToMastraAgent } from '@mastra/core/tool-loop-agent';\n *\n * const toolLoopAgent = new ToolLoopAgent({\n * id: 'weather-agent',\n * model: openai('gpt-4o'),\n * instructions: 'You are a helpful weather assistant.',\n * tools: { weather: weatherTool },\n * temperature: 0.7,\n * });\n *\n * const mastraAgent = toolLoopAgentToMastraAgent(toolLoopAgent);\n *\n * const result = await mastraAgent.generate({ prompt: 'What is the weather in NYC?' });\n * ```\n *\n * @param agent - The ToolLoopAgent instance\n * @param options - Optional name fallback since Mastra Agent requires id/name but ToolLoopAgent doesn't\n * @returns A Mastra Agent instance\n */\nexport function toolLoopAgentToMastraAgent(agent: ToolLoopAgentLike, options?: { fallbackName?: string }) {\n const processor = new ToolLoopAgentProcessor(agent);\n const agentConfig = processor.getAgentConfig();\n const id = agentConfig.id || options?.fallbackName || `tool-loop-agent-${generateId()}`;\n\n return new Agent({\n ...agentConfig,\n id,\n name: agentConfig.name || id,\n inputProcessors: [processor],\n });\n}\n"]}
@@ -1,9 +1,20 @@
1
- import { isSupportedLanguageModel, Workflow } from './chunk-HOAKFZ6P.js';
2
- import { saveScorePayloadSchema, extractTrajectory, extractWorkflowTrajectory, extractTrajectoryFromTrace } from './chunk-Q4YIRO5A.js';
3
- import { resolveObservabilityContext } from './chunk-2NISBCML.js';
1
+ import { isSupportedLanguageModel, Workflow } from './chunk-JIA3SJK6.js';
2
+ import { saveScorePayloadSchema, extractTrajectory, extractWorkflowTrajectory, extractTrajectoryFromTrace } from './chunk-ESQI2JRD.js';
3
+ import { resolveObservabilityContext } from './chunk-FAULJTC5.js';
4
+ import { EntityType } from './chunk-WG7QIVL7.js';
4
5
  import { MastraError } from './chunk-FJEVLHJT.js';
5
6
  import pMap from 'p-map';
6
7
 
8
+ function toScorerTargetEntityType(entityType) {
9
+ switch (entityType) {
10
+ case "AGENT":
11
+ return EntityType.AGENT;
12
+ case "WORKFLOW":
13
+ return EntityType.WORKFLOW_RUN;
14
+ default:
15
+ return void 0;
16
+ }
17
+ }
7
18
  function createOnScorerHook(mastra) {
8
19
  return async (hookData) => {
9
20
  const storage = mastra.getStorage();
@@ -32,18 +43,19 @@ function createOnScorerHook(mastra) {
32
43
  let input = hookData.input;
33
44
  let output = hookData.output;
34
45
  const { structuredOutput, ...rest } = hookData;
46
+ const currentSpan = hookData.tracingContext?.currentSpan;
47
+ const traceId = currentSpan?.isValid ? currentSpan.traceId : void 0;
48
+ const spanId = currentSpan?.isValid ? currentSpan.id : void 0;
35
49
  const runResult = await scorerToUse.scorer.run({
36
50
  ...rest,
37
51
  input,
38
- output
52
+ output,
53
+ scoreSource: "live",
54
+ targetScope: "span",
55
+ targetEntityType: toScorerTargetEntityType(entityType),
56
+ targetTraceId: traceId,
57
+ targetSpanId: spanId
39
58
  });
40
- let spanId;
41
- let traceId;
42
- const currentSpan = hookData.tracingContext?.currentSpan;
43
- if (currentSpan && currentSpan.isValid) {
44
- spanId = currentSpan.id;
45
- traceId = currentSpan.traceId;
46
- }
47
59
  const payload = {
48
60
  ...rest,
49
61
  ...runResult,
@@ -438,6 +450,7 @@ async function executeWorkflow(target, item, targetOptions) {
438
450
  return {
439
451
  traceId: workflowResult.traceId,
440
452
  spanId: workflowResult.spanId,
453
+ entityType: EntityType.WORKFLOW_RUN,
441
454
  scoringData: {
442
455
  input: item.input,
443
456
  output: workflowResult.status === "success" ? workflowResult.result : void 0,
@@ -458,14 +471,22 @@ async function executeAgent(agent, item, targetOptions) {
458
471
  returnScorerData: true,
459
472
  requestContext: item.requestContext
460
473
  };
461
- return structuredOutput ? await agent.generate(item.input, { ...baseOptions, structuredOutput }) : await agent.generate(item.input, baseOptions);
474
+ const result = structuredOutput ? await agent.generate(item.input, { ...baseOptions, structuredOutput }) : await agent.generate(item.input, baseOptions);
475
+ return {
476
+ ...result,
477
+ entityType: EntityType.AGENT
478
+ };
462
479
  } else {
463
- return await agent.generateLegacy(item.input, {
480
+ const result = await agent.generateLegacy(item.input, {
464
481
  scorers: {},
465
482
  returnScorerData: true,
466
483
  requestContext: item.requestContext,
467
484
  ...observabilityContext
468
485
  });
486
+ return {
487
+ ...result,
488
+ entityType: EntityType.AGENT
489
+ };
469
490
  }
470
491
  }
471
492
  async function extractTrajectoryFromTraceStore(storage, traceId, spanId) {
@@ -482,6 +503,8 @@ async function extractTrajectoryFromTraceStore(storage, traceId, spanId) {
482
503
  }
483
504
  async function runScorers(scorers, targetResult, item, storage) {
484
505
  const scorerResults = {};
506
+ const targetTraceId = targetResult.traceId;
507
+ const targetEntityType = targetResult.entityType;
485
508
  if (Array.isArray(scorers)) {
486
509
  for (const scorer of scorers) {
487
510
  try {
@@ -490,7 +513,11 @@ async function runScorers(scorers, targetResult, item, storage) {
490
513
  output: targetResult.scoringData?.output,
491
514
  groundTruth: item.groundTruth,
492
515
  requestContext: item.requestContext,
493
- ...resolveObservabilityContext(item)
516
+ scoreSource: "experiment",
517
+ targetScope: "span",
518
+ targetEntityType,
519
+ targetTraceId,
520
+ targetSpanId: targetResult.spanId
494
521
  });
495
522
  scorerResults[scorer.id] = score;
496
523
  } catch (error) {
@@ -519,7 +546,11 @@ async function runScorers(scorers, targetResult, item, storage) {
519
546
  output: targetResult.scoringData?.output,
520
547
  groundTruth: item.groundTruth,
521
548
  requestContext: item.requestContext,
522
- ...resolveObservabilityContext(item)
549
+ scoreSource: "experiment",
550
+ targetScope: "span",
551
+ targetEntityType,
552
+ targetTraceId,
553
+ targetSpanId: targetResult.spanId
523
554
  });
524
555
  agentScorerResults[scorer.id] = score;
525
556
  } catch (error) {
@@ -555,7 +586,11 @@ async function runScorers(scorers, targetResult, item, storage) {
555
586
  groundTruth: item.groundTruth,
556
587
  expectedTrajectory: item.expectedTrajectory,
557
588
  requestContext: item.requestContext,
558
- ...resolveObservabilityContext(item)
589
+ scoreSource: "experiment",
590
+ targetScope: "trajectory",
591
+ targetEntityType,
592
+ targetTraceId,
593
+ targetSpanId: targetResult.spanId
559
594
  });
560
595
  trajectoryScorerResults[scorer.id] = score;
561
596
  } catch (error) {
@@ -587,7 +622,11 @@ async function runScorers(scorers, targetResult, item, storage) {
587
622
  output: targetResult.scoringData.output,
588
623
  groundTruth: item.groundTruth,
589
624
  requestContext: item.requestContext,
590
- ...resolveObservabilityContext(item)
625
+ scoreSource: "experiment",
626
+ targetScope: "span",
627
+ targetEntityType,
628
+ targetTraceId,
629
+ targetSpanId: targetResult.spanId
591
630
  });
592
631
  workflowScorerResults[scorer.id] = score;
593
632
  }
@@ -608,7 +647,10 @@ async function runScorers(scorers, targetResult, item, storage) {
608
647
  output: stepResult.output,
609
648
  groundTruth: item.groundTruth,
610
649
  requestContext: item.requestContext,
611
- ...resolveObservabilityContext(item)
650
+ scoreSource: "experiment",
651
+ targetScope: "span",
652
+ targetEntityType: EntityType.WORKFLOW_STEP,
653
+ targetTraceId
612
654
  });
613
655
  stepResults[scorer.id] = score;
614
656
  } catch (error) {
@@ -653,7 +695,11 @@ async function runScorers(scorers, targetResult, item, storage) {
653
695
  groundTruth: item.groundTruth,
654
696
  expectedTrajectory: item.expectedTrajectory,
655
697
  requestContext: item.requestContext,
656
- ...resolveObservabilityContext(item)
698
+ scoreSource: "experiment",
699
+ targetScope: "trajectory",
700
+ targetEntityType: EntityType.TRAJECTORY,
701
+ targetTraceId,
702
+ targetSpanId: targetResult.spanId
657
703
  });
658
704
  trajectoryScorerResults[scorer.id] = score;
659
705
  } catch (error) {
@@ -840,5 +886,5 @@ async function saveSingleScore({
840
886
  }
841
887
 
842
888
  export { createOnScorerHook, runEvals, validateAndSaveScore };
843
- //# sourceMappingURL=chunk-S3JFAGMH.js.map
844
- //# sourceMappingURL=chunk-S3JFAGMH.js.map
889
+ //# sourceMappingURL=chunk-B4KB75RH.js.map
890
+ //# sourceMappingURL=chunk-B4KB75RH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/mastra/hooks.ts","../src/evals/run/scorerAccumulator.ts","../src/evals/run/index.ts"],"names":["pMap"],"mappings":";;;;;;;AAQA,SAAS,yBAAyB,UAAA,EAA4C;AAC5E,EAAA,QAAQ,UAAA;AAAY,IAClB,KAAK,OAAA;AACH,MAAA,OAAO,UAAA,CAAW,KAAA;AAAA,IACpB,KAAK,UAAA;AACH,MAAA,OAAO,UAAA,CAAW,YAAA;AAAA,IACpB;AACE,MAAA,OAAO,MAAA;AAAA;AAEb;AAEO,SAAS,mBAAmB,MAAA,EAAgB;AACjD,EAAA,OAAO,OAAO,QAAA,KAA+B;AAC3C,IAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAElC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA,CAAK,yDAAyD,CAAA;AAClF,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,SAAS,MAAA,CAAO,EAAA;AACjC,IAAA,MAAM,aAAa,QAAA,CAAS,UAAA;AAC5B,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,IAAA,MAAM,WAAW,MAAA,CAAO,EAAA;AAExB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,IAAA,CAAK,2DAA2D,CAAA;AACpF,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,MAAM,UAAA,CAAW,MAAA,EAAQ,QAAA,EAAU,YAAY,QAAQ,CAAA;AAE3E,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,IAAI,WAAA,CAAY;AAAA,UACpB,EAAA,EAAI,yBAAA;AAAA,UACJ,MAAA,EAAA,QAAA;AAAA,UACA,QAAA,EAAA,MAAA;AAAA,UACA,IAAA,EAAM,kBAAkB,QAAQ,CAAA,UAAA;AAAA,SACjC,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,QAAQ,QAAA,CAAS,KAAA;AACrB,MAAA,IAAI,SAAS,QAAA,CAAS,MAAA;AAEtB,MAAA,MAAM,EAAE,gBAAA,EAAkB,GAAG,IAAA,EAAK,GAAI,QAAA;AAEtC,MAAA,MAAM,WAAA,GAAc,SAAS,cAAA,EAAgB,WAAA;AAC7C,MAAA,MAAM,OAAA,GAAU,WAAA,EAAa,OAAA,GAAU,WAAA,CAAY,OAAA,GAAU,MAAA;AAC7D,MAAA,MAAM,MAAA,GAAS,WAAA,EAAa,OAAA,GAAU,WAAA,CAAY,EAAA,GAAK,MAAA;AACvD,MAAA,MAAM,SAAA,GAAa,MAAM,WAAA,CAAY,MAAA,CAAO,GAAA,CAAI;AAAA,QAC9C,GAAG,IAAA;AAAA,QACH,KAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA,EAAa,MAAA;AAAA,QACb,WAAA,EAAa,MAAA;AAAA,QACb,gBAAA,EAAkB,yBAAyB,UAAU,CAAA;AAAA,QACrD,aAAA,EAAe,OAAA;AAAA,QACf,YAAA,EAAc;AAAA,OACR,CAAA;AAER,MAAA,MAAM,OAAA,GAAU;AAAA,QACd,GAAG,IAAA;AAAA,QACH,GAAG,SAAA;AAAA,QACH,QAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA,EAAQ;AAAA,UACN,GAAG,IAAA,CAAK,MAAA;AAAA,UACR,QAAA,EAAU,CAAC,CAAC,WAAA,CAAY,MAAA,CAAO;AAAA,SACjC;AAAA,QACA,QAAA,EAAU;AAAA,UACR,gBAAA,EAAkB,CAAC,CAAC;AAAA;AACtB,OACF;AAEA,MAAA,MAAM,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAE3C,MAAA,IAAI,WAAA,IAAe,UAAU,OAAA,EAAS;AACpC,QAAA,MAAM,IAAA;AAAA,UACJ,WAAA,CAAY,sBAAsB,YAAA,EAAa;AAAA,UAC/C,OAAM,QAAA,KAAY;AAChB,YAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,cAAA,IAAI;AACF,gBAAA,MAAM,SAAS,eAAA,CAAgB;AAAA,kBAC7B,OAAA;AAAA,kBACA,MAAA;AAAA,kBACA,OAAO,SAAA,CAAU,KAAA;AAAA,kBACjB,QAAQ,SAAA,CAAU,MAAA;AAAA,kBAClB,UAAA,EAAY,YAAY,MAAA,CAAO,EAAA;AAAA,kBAC/B,QAAA,EAAU;AAAA,oBACR,GAAI,WAAA,CAAY,QAAA,IAAY;AAAC;AAC/B,iBACD,CAAA;AAAA,cACH,SAAS,KAAA,EAAO;AAEd,gBAAA,MAAA,CAAO,SAAA,EAAU,EAAG,KAAA,CAAM,CAAA,2CAAA,EAA8C,KAAK,CAAA,CAAE,CAAA;AAAA,cACjF;AAAA,YACF;AAAA,UACF,CAAA;AAAA,UACA,EAAE,aAAa,CAAA;AAAE,SACnB;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,cAAc,IAAI,WAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,kCAAA;AAAA,UACJ,MAAA,EAAA,QAAA;AAAA,UACA,QAAA,EAAA,MAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACP,QAAA;AAAA,YACA,QAAA;AAAA,YACA;AAAA;AACF,SACF;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAA,CAAO,SAAA,EAAU,EAAG,cAAA,CAAe,WAAW,CAAA;AAAA,IAChD;AAAA,EACF,CAAA;AACF;AAKA,eAAsB,oBAAA,CAAqB,SAAwB,OAAA,EAAkB;AACnF,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AACnD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,WAAA,CAAY;AAAA,MACpB,EAAA,EAAI,qCAAA;AAAA,MACJ,MAAA,EAAA,SAAA;AAAA,MACA,QAAA,EAAA,QAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,aAAA,GAAgB,sBAAA,CAAuB,KAAA,CAAM,OAAO,CAAA;AAC1D,EAAA,MAAM,WAAA,CAAY,UAAU,aAAa,CAAA;AAC3C;AAEA,eAAe,UAAA,CAAW,MAAA,EAAgB,QAAA,EAAkB,UAAA,EAAoB,QAAA,EAAkB;AAChG,EAAA,IAAI,WAAA;AACJ,EAAA,IAAI,eAAe,OAAA,EAAS;AAE1B,IAAA,IAAI;AACF,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,YAAA,CAAa,QAAQ,CAAA;AAC1C,MAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,WAAA,EAAY;AACxC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACjD,QAAA,IAAI,MAAA,CAAO,MAAA,CAAO,EAAA,KAAO,QAAA,EAAU;AACjC,UAAA,WAAA,GAAc,MAAA;AACd,UAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAe,MAAM,MAAA,CAAO,SAAA,IAAa,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAM,IAAA;AAC3E,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,WAAA,EAAY;AAC9C,UAAA,KAAA,MAAW,CAAC,CAAA,EAAG,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAsB;AACpE,YAAA,IAAI,MAAA,CAAO,MAAA,CAAO,EAAA,KAAO,QAAA,EAAU;AACjC,cAAA,WAAA,GAAc,MAAA;AACd,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,eAAe,UAAA,EAAY;AACpC,IAAA,MAAM,UAAU,MAAM,MAAA,CAAO,eAAA,CAAgB,QAAQ,EAAE,WAAA,EAAY;AACnE,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACjD,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,EAAA,KAAO,QAAA,EAAU;AACjC,QAAA,WAAA,GAAc,MAAA;AACd,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,aAAA,CAAc,QAAQ,CAAA;AAC5D,IAAA,WAAA,GAAc,sBAAA,GAAyB,EAAE,MAAA,EAAQ,sBAAA,EAAuB,GAAI,MAAA;AAAA,EAC9E;AAEA,EAAA,OAAO,WAAA;AACT;;;ACpMO,IAAM,mBAAN,MAAuB;AAAA,EACpB,aAAuC,EAAC;AAAA,EACxC,iBAA2C,EAAC;AAAA,EAC5C,aAAuD,EAAC;AAAA,EACxD,cAAwC,EAAC;AAAA,EACzC,mBAA6C,EAAC;AAAA,EAEtD,UAAU,aAAA,EAAoC;AAC5C,IAAA,MAAM,gBAAA,GAAmB,OAAA,IAAW,aAAA,IAAiB,UAAA,IAAc,aAAA;AACnE,IAAA,MAAM,gBAAgB,OAAA,IAAW,aAAA;AACjC,IAAA,MAAM,gBAAgB,YAAA,IAAgB,aAAA;AAKtC,IAAA,IAAI,gBAAA,EAAkB;AACpB,MAAA,IAAA,CAAK,kBAAkB,aAAa,CAAA;AAAA,IACtC,CAAA,MAAA,IAAW,iBAAiB,aAAA,EAAe;AACzC,MAAA,IAAA,CAAK,eAAe,aAAa,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,cAAc,aAAa,CAAA;AAAA,IAClC;AAAA,EACF;AAAA,EAEQ,cAAc,aAAA,EAAoC;AACxD,IAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AAChE,MAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,EAAG;AAChC,QAAA,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,GAAI,EAAC;AAAA,MACjC;AACA,MAAA,IAAA,CAAK,UAAA,CAAW,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,kBAAkB,aAAA,EAAoC;AAC5D,IAAA,IAAI,UAAA,IAAc,aAAA,IAAiB,aAAA,CAAc,QAAA,EAAU;AACzD,MAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,EAAG;AACzE,QAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,UAAU,CAAA,EAAG;AACpC,UAAA,IAAA,CAAK,cAAA,CAAe,UAAU,CAAA,GAAI,EAAC;AAAA,QACrC;AACA,QAAA,IAAA,CAAK,cAAA,CAAe,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,MAC1E;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,IAAW,aAAA,IAAiB,aAAA,CAAc,KAAA,EAAO;AACnD,MAAA,KAAA,MAAW,CAAC,QAAQ,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AACvE,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,UAAA,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAAI,EAAC;AAAA,QAC7B;AACA,QAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAkC,CAAA,EAAG;AACrF,UAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,CAAE,UAAU,CAAA,EAAG;AACxC,YAAA,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,CAAE,UAAU,IAAI,EAAC;AAAA,UACzC;AACA,UAAA,IAAA,CAAK,WAAW,MAAM,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,QAC9E;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,YAAA,IAAgB,aAAA,IAAiB,aAAA,CAAc,UAAA,EAAY;AAC7D,MAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,UAAU,CAAA,EAAG;AAC3E,QAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,EAAG;AACtC,UAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,GAAI,EAAC;AAAA,QACvC;AACA,QAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,eAAe,aAAA,EAAoC;AACzD,IAAA,IAAI,OAAA,IAAW,aAAA,IAAiB,aAAA,CAAc,KAAA,EAAO;AACnD,MAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AACtE,QAAA,IAAI,CAAC,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA,EAAG;AACjC,UAAA,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA,GAAI,EAAC;AAAA,QAClC;AACA,QAAA,IAAA,CAAK,WAAA,CAAY,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,IAAI,YAAA,IAAgB,aAAA,IAAiB,aAAA,CAAc,UAAA,EAAY;AAC7D,MAAA,KAAA,MAAW,CAAC,YAAY,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,UAAU,CAAA,EAAG;AAC3E,QAAA,IAAI,CAAC,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,EAAG;AACtC,UAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,GAAI,EAAC;AAAA,QACvC;AACA,QAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,MAC5E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,cAAc,iBAAA,EAAwD;AACpE,IAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,iBAAiB,CAAA,EAAG;AACrE,MAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAAI,EAAC;AAAA,MAC7B;AACA,MAAA,KAAA,MAAW,CAAC,UAAA,EAAY,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9D,QAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,CAAE,UAAU,CAAA,EAAG;AACxC,UAAA,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,CAAE,UAAU,IAAI,EAAC;AAAA,QACzC;AACA,QAAA,IAAA,CAAK,WAAW,MAAM,CAAA,CAAE,UAAU,CAAA,CAAE,IAAA,CAAM,OAA6B,KAAK,CAAA;AAAA,MAC9E;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAA,GAAwC;AACtC,IAAA,MAAM,SAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,CAAC,YAAY,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AACtE,MAAA,MAAA,CAAO,UAAU,CAAA,GAAI,IAAA,CAAK,eAAA,CAAgB,UAAU,CAAA;AAAA,IACtD;AAGA,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,cAAc,CAAA,CAAE,SAAS,CAAA,EAAG;AAC/C,MAAA,MAAA,CAAO,WAAW,EAAC;AACnB,MAAA,KAAA,MAAW,CAAC,YAAY,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,cAAc,CAAA,EAAG;AAC1E,QAAA,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,GAAI,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA,MAC/D;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,CAAE,SAAS,CAAA,EAAG;AAC3C,MAAA,MAAA,CAAO,QAAQ,EAAC;AAChB,MAAA,KAAA,MAAW,CAAC,QAAQ,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,EAAG;AACnE,QAAA,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,GAAI,EAAC;AACxB,QAAA,KAAA,MAAW,CAAC,UAAA,EAAY,UAAU,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAClE,UAAA,MAAA,CAAO,MAAM,MAAM,CAAA,CAAE,UAAU,CAAA,GAAI,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA,QACpE;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,CAAE,SAAS,CAAA,EAAG;AAC5C,MAAA,MAAA,CAAO,QAAQ,EAAC;AAChB,MAAA,KAAA,MAAW,CAAC,YAAY,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,EAAG;AACvE,QAAA,MAAA,CAAO,KAAA,CAAM,UAAU,CAAA,GAAI,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA,MAC5D;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA,CAAK,gBAAgB,CAAA,CAAE,SAAS,CAAA,EAAG;AACjD,MAAA,MAAA,CAAO,aAAa,EAAC;AACrB,MAAA,KAAA,MAAW,CAAC,YAAY,UAAU,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,gBAAgB,CAAA,EAAG;AAC5E,QAAA,MAAA,CAAO,UAAA,CAAW,UAAU,CAAA,GAAI,IAAA,CAAK,gBAAgB,UAAU,CAAA;AAAA,MACjE;AAAA,IACF;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,gBAAgB,UAAA,EAA8B;AACpD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,OAAO,UAAA,CAAW,OAAO,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,GAAI,UAAA,CAAW,MAAA;AAAA,IAC5D,CAAA,MAAO;AACL,MAAA,OAAO,CAAA;AAAA,IACT;AAAA,EACF;AACF,CAAA;;;ACpCA,eAAsB,SAAS,MAAA,EAaH;AAC1B,EAAA,MAAM,EAAE,MAAM,OAAA,EAAS,MAAA,EAAQ,eAAe,cAAA,EAAgB,WAAA,GAAc,GAAE,GAAI,MAAA;AAElF,EAAA,mBAAA,CAAoB,IAAA,EAAM,SAAS,MAAM,CAAA;AAEzC,EAAA,IAAI,UAAA,GAAa,CAAA;AACjB,EAAA,MAAM,gBAAA,GAAmB,IAAI,gBAAA,EAAiB;AAI9C,EAAA,MAAM,MAAA,GAAU,MAAA,CAAe,iBAAA,IAAoB,IAAM,MAAA,CAAe,MAAA;AACxE,EAAA,MAAM,OAAA,GAAU,QAAQ,UAAA,EAAW;AAEnC,EAAA,MAAMA,KAAAA,GAAAA,CAAQ,MAAM,OAAO,OAAO,CAAA,EAAG,OAAA;AACrC,EAAA,MAAMA,KAAAA;AAAA,IACJ,IAAA;AAAA,IACA,OAAO,IAAA,KAAgC;AACrC,MAAA,MAAM,YAAA,GAAe,MAAM,aAAA,CAAc,MAAA,EAAQ,MAAM,aAAa,CAAA;AACpE,MAAA,MAAM,gBAAgB,MAAM,UAAA,CAAW,OAAA,EAAS,YAAA,EAAc,MAAM,OAAO,CAAA;AAC3E,MAAA,gBAAA,CAAiB,UAAU,aAAa,CAAA;AAGxC,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,MAAM,mBAAA,CAAoB;AAAA,UACxB,OAAA;AAAA,UACA,aAAA;AAAA,UACA,MAAA;AAAA,UACA,IAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,cAAA,EAAgB;AAClB,QAAA,MAAM,cAAA,CAAe;AAAA,UACnB,IAAA;AAAA,UACA,YAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAEA,MAAA,UAAA,EAAA;AAAA,IACF,CAAA;AAAA,IACA,EAAE,WAAA;AAAY,GAChB;AAEA,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,iBAAiB,gBAAA,EAAiB;AAAA,IAC1C,OAAA,EAAS;AAAA,MACP;AAAA;AACF,GACF;AACF;AAEA,SAAS,WAAW,MAAA,EAA8C;AAChE,EAAA,OAAO,MAAA,YAAkB,QAAA;AAC3B;AAEA,SAAS,uBAAuB,OAAA,EAA+C;AAC7E,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,CAAC,MAAM,OAAA,CAAQ,OAAO,CAAA,KACrB,UAAA,IAAc,WAAW,OAAA,IAAW,OAAA,IAAY,YAAA,IAAgB,OAAA,IAAW,EAAE,OAAA,IAAW,OAAA,CAAA,CAAA;AAE7F;AAEA,SAAS,oBAAoB,OAAA,EAA4C;AACvE,EAAA,OACE,OAAO,OAAA,KAAY,QAAA,IACnB,CAAC,KAAA,CAAM,QAAQ,OAAO,CAAA,KACrB,OAAA,IAAW,OAAA,IAAY,gBAAgB,OAAA,IAAW,EAAE,UAAA,IAAc,OAAA,CAAA,IAAY,EAAE,OAAA,IAAW,OAAA,CAAA,CAAA;AAEhG;AAEA,SAAS,mBAAA,CACP,IAAA,EACA,OAAA,EACA,MAAA,EACM;AACN,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,WAAA,CAAY;AAAA,MACpB,MAAA,EAAQ,QAAA;AAAA,MACR,EAAA,EAAI,wCAAA;AAAA,MACJ,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,IAAA,GAAO,KAAK,CAAC,CAAA;AACnB,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,SAAS,QAAA,IAAY,EAAE,WAAW,IAAA,CAAA,EAAO;AAC3D,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,mBAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM,8BAA8B,CAAC,CAAA,8BAAA;AAAA,OACtC,CAAA;AAAA,IACH;AAAA,EACF;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,qBAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF,WAAW,UAAA,CAAW,MAAM,CAAA,IAAK,sBAAA,CAAuB,OAAO,CAAA,EAAG;AAChE,IAAA,MAAM,UAAA,GACH,QAAQ,QAAA,IAAY,OAAA,CAAQ,SAAS,MAAA,GAAS,CAAA,IAC9C,QAAQ,KAAA,IAAS,MAAA,CAAO,KAAK,OAAA,CAAQ,KAAK,EAAE,MAAA,GAAS,CAAA,IACrD,QAAQ,UAAA,IAAc,OAAA,CAAQ,WAAW,MAAA,GAAS,CAAA;AAErD,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,qBAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF,WAAW,CAAC,UAAA,CAAW,MAAM,CAAA,IAAK,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAC9D,IAAA,MAAM,UAAA,GACH,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,IAAO,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA,CAAW,MAAA,GAAS,CAAA;AAEpG,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,qBAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AAAA,EACF,CAAA,MAAA,IAAW,CAAC,UAAA,CAAW,MAAM,CAAA,IAAK,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,IAAK,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAC1F,IAAA,MAAM,IAAI,WAAA,CAAY;AAAA,MACpB,MAAA,EAAQ,QAAA;AAAA,MACR,EAAA,EAAI,uBAAA;AAAA,MACJ,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;AAEA,eAAe,aAAA,CACb,MAAA,EACA,IAAA,EACA,aAAA,EAGA;AACA,EAAA,IAAI;AACF,IAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,MAAA,OAAO,MAAM,eAAA,CAAgB,MAAA,EAAQ,IAAA,EAAM,aAAmC,CAAA;AAAA,IAChF,CAAA,MAAO;AACL,MAAA,OAAO,MAAM,YAAA;AAAA,QACX,MAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,WAAA;AAAA,MACR;AAAA,QACE,MAAA,EAAQ,QAAA;AAAA,QACR,EAAA,EAAI,iDAAA;AAAA,QACJ,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM,+DAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC3B,OACF;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACF;AAEA,eAAe,eAAA,CAAgB,MAAA,EAAkB,IAAA,EAA6B,aAAA,EAAoC;AAChH,EAAA,MAAM,oBAAA,GAAuB,4BAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,MAAM,MAAM,MAAA,CAAO,UAAU,EAAE,cAAA,EAAgB,MAAM,CAAA;AAC3D,EAAA,MAAM,cAAA,GAAiB,MAAM,GAAA,CAAI,KAAA,CAAM;AAAA,IACrC,GAAG,aAAA;AAAA,IACH,GAAG,IAAA,CAAK,YAAA;AAAA,IACR,WAAW,IAAA,CAAK,KAAA;AAAA,IAChB,gBAAgB,IAAA,CAAK,cAAA;AAAA,IACrB,GAAG;AAAA,GACJ,CAAA;AAED,EAAA,OAAO;AAAA,IACL,SAAS,cAAA,CAAe,OAAA;AAAA,IACxB,QAAQ,cAAA,CAAe,MAAA;AAAA,IACvB,YAAY,UAAA,CAAW,YAAA;AAAA,IACvB,WAAA,EAAa;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAA,EAAQ,cAAA,CAAe,MAAA,KAAW,SAAA,GAAY,eAAe,MAAA,GAAS,MAAA;AAAA,MACtE,aAAa,cAAA,CAAe,KAAA;AAAA,MAC5B,mBAAmB,cAAA,CAAe;AAAA;AACpC,GACF;AACF;AAEA,eAAe,YAAA,CACb,KAAA,EACA,IAAA,EACA,aAAA,EACA;AACA,EAAA,MAAM,oBAAA,GAAuB,4BAA4B,IAAI,CAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,QAAA,EAAS;AACnC,EAAA,IAAI,wBAAA,CAAyB,KAAK,CAAA,EAAG;AACnC,IAAA,MAAM,EAAE,gBAAA,EAAkB,GAAG,WAAA,EAAY,GAAI,iBAAiB,EAAC;AAC/D,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,GAAG,WAAA;AAAA,MACH,GAAG,oBAAA;AAAA,MACH,SAAS,EAAC;AAAA,MACV,gBAAA,EAAkB,IAAA;AAAA,MAClB,gBAAgB,IAAA,CAAK;AAAA,KACvB;AACA,IAAA,MAAM,SAAS,gBAAA,GACX,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,OAAO,EAAE,GAAG,WAAA,EAAa,gBAAA,EAAkB,CAAA,GACrE,MAAM,MAAM,QAAA,CAAS,IAAA,CAAK,OAAO,WAAW,CAAA;AAEhD,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,YAAY,UAAA,CAAW;AAAA,KACzB;AAAA,EACF,CAAA,MAAO;AACL,IAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,cAAA,CAAe,KAAK,KAAA,EAAO;AAAA,MACpD,SAAS,EAAC;AAAA,MACV,gBAAA,EAAkB,IAAA;AAAA,MAClB,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,GAAG;AAAA,KACJ,CAAA;AACD,IAAA,OAAO;AAAA,MACL,GAAG,MAAA;AAAA,MACH,YAAY,UAAA,CAAW;AAAA,KACzB;AAAA,EACF;AACF;AAMA,eAAe,+BAAA,CACb,OAAA,EACA,OAAA,EACA,MAAA,EACoE;AACpE,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,EAAS,OAAO,MAAA;AAEjC,EAAA,IAAI;AACF,IAAA,MAAM,kBAAA,GAAqB,MAAM,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA;AACjE,IAAA,IAAI,CAAC,oBAAoB,OAAO,MAAA;AAEhC,IAAA,MAAM,QAAQ,MAAM,kBAAA,CAAmB,QAAA,CAAS,EAAE,SAAS,CAAA;AAC3D,IAAA,IAAI,CAAC,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,OAAO,MAAA;AAElC,IAAA,OAAO,0BAAA,CAA2B,KAAA,CAAM,KAAA,EAAO,MAAM,CAAA;AAAA,EACvD,CAAA,CAAA,MAAQ;AAEN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGA,eAAe,UAAA,CACb,OAAA,EACA,YAAA,EACA,IAAA,EACA,OAAA,EAC8B;AAC9B,EAAA,MAAM,gBAAqC,EAAC;AAC5C,EAAA,MAAM,gBAAgB,YAAA,CAAa,OAAA;AACnC,EAAA,MAAM,mBAA+B,YAAA,CAAa,UAAA;AAElD,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,UAC7B,KAAA,EAAO,aAAa,WAAA,EAAa,KAAA;AAAA,UACjC,MAAA,EAAQ,aAAa,WAAA,EAAa,MAAA;AAAA,UAClC,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,WAAA,EAAa,YAAA;AAAA,UACb,WAAA,EAAa,MAAA;AAAA,UACb,gBAAA;AAAA,UACA,aAAA;AAAA,UACA,cAAc,YAAA,CAAa;AAAA,SAC5B,CAAA;AAED,QAAA,aAAA,CAAc,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,MAC7B,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,IAAI,WAAA;AAAA,UACR;AAAA,YACE,MAAA,EAAQ,QAAA;AAAA,YACR,EAAA,EAAI,8CAAA;AAAA,YACJ,QAAA,EAAU,MAAA;AAAA,YACV,IAAA,EAAM,CAAA,+CAAA,EAAkD,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,YACjE,OAAA,EAAS;AAAA,cACP,UAAU,MAAA,CAAO,EAAA;AAAA,cACjB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC3B,WACF;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,mBAAA,CAAoB,OAAO,CAAA,EAAG;AAEvC,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAM,qBAA0C,EAAC;AACjD,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,KAAA,EAAO;AAClC,QAAA,IAAI;AACF,UAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,YAC7B,KAAA,EAAO,aAAa,WAAA,EAAa,KAAA;AAAA,YACjC,MAAA,EAAQ,aAAa,WAAA,EAAa,MAAA;AAAA,YAClC,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,gBAAgB,IAAA,CAAK,cAAA;AAAA,YACrB,WAAA,EAAa,YAAA;AAAA,YACb,WAAA,EAAa,MAAA;AAAA,YACb,gBAAA;AAAA,YACA,aAAA;AAAA,YACA,cAAc,YAAA,CAAa;AAAA,WAC5B,CAAA;AACD,UAAA,kBAAA,CAAmB,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,QAClC,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,WAAA;AAAA,YACR;AAAA,cACE,MAAA,EAAQ,QAAA;AAAA,cACR,EAAA,EAAI,8CAAA;AAAA,cACJ,QAAA,EAAU,MAAA;AAAA,cACV,IAAA,EAAM,CAAA,qDAAA,EAAwD,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,cACvE,OAAA,EAAS;AAAA,gBACP,UAAU,MAAA,CAAO,EAAA;AAAA,gBACjB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC3B,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA,CAAE,SAAS,CAAA,EAAG;AAC9C,QAAA,aAAA,CAAc,KAAA,GAAQ,kBAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAM,0BAA+C,EAAC;AAGtD,MAAA,MAAM,kBAAkB,MAAM,+BAAA,CAAgC,SAAS,YAAA,CAAa,OAAA,EAAS,aAAa,MAAM,CAAA;AAGhH,MAAA,MAAM,SAAA,GAAY,aAAa,WAAA,EAAa,MAAA;AAC5C,MAAA,MAAM,UAAA,GAAa,oBAAoB,SAAA,GAAY,iBAAA,CAAkB,SAAS,CAAA,GAAI,EAAE,KAAA,EAAO,EAAC,EAAE,CAAA;AAE9F,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,UAAA,EAAY;AACvC,QAAA,IAAI;AACF,UAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,YAC7B,KAAA,EAAO,aAAa,WAAA,EAAa,KAAA;AAAA,YACjC,MAAA,EAAQ,UAAA;AAAA,YACR,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,YACzB,gBAAgB,IAAA,CAAK,cAAA;AAAA,YACrB,WAAA,EAAa,YAAA;AAAA,YACb,WAAA,EAAa,YAAA;AAAA,YACb,gBAAA;AAAA,YACA,aAAA;AAAA,YACA,cAAc,YAAA,CAAa;AAAA,WAC5B,CAAA;AACD,UAAA,uBAAA,CAAwB,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,QACvC,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,WAAA;AAAA,YACR;AAAA,cACE,MAAA,EAAQ,QAAA;AAAA,cACR,EAAA,EAAI,kDAAA;AAAA,cACJ,QAAA,EAAU,MAAA;AAAA,cACV,IAAA,EAAM,CAAA,0DAAA,EAA6D,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,cAC5E,OAAA,EAAS;AAAA,gBACP,UAAU,MAAA,CAAO,EAAA;AAAA,gBACjB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC3B,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,uBAAuB,CAAA,CAAE,SAAS,CAAA,EAAG;AACnD,QAAA,aAAA,CAAc,UAAA,GAAa,uBAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAM,wBAA6C,EAAC;AACpD,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,QAAA,EAAU;AACrC,QAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,UAC7B,KAAA,EAAO,aAAa,WAAA,CAAY,KAAA;AAAA,UAChC,MAAA,EAAQ,aAAa,WAAA,CAAY,MAAA;AAAA,UACjC,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,WAAA,EAAa,YAAA;AAAA,UACb,WAAA,EAAa,MAAA;AAAA,UACb,gBAAA;AAAA,UACA,aAAA;AAAA,UACA,cAAc,YAAA,CAAa;AAAA,SAC5B,CAAA;AACD,QAAA,qBAAA,CAAsB,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,MACrC;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAA,CAAE,SAAS,CAAA,EAAG;AACjD,QAAA,aAAA,CAAc,QAAA,GAAW,qBAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAM,oBAAyC,EAAC;AAChD,MAAA,KAAA,MAAW,CAAC,QAAQ,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AACjE,QAAA,MAAM,UAAA,GAAa,YAAA,CAAa,WAAA,CAAY,WAAA,GAAc,MAAM,CAAA;AAGhE,QAAA,IAAI,UAAA,EAAY,MAAA,KAAW,SAAA,IAAa,UAAA,CAAW,WAAW,MAAA,EAAW;AACvE,UAAA,MAAM,cAAmC,EAAC;AAC1C,UAAA,KAAA,MAAW,UAAU,WAAA,EAAa;AAChC,YAAA,IAAI;AACF,cAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,gBAC7B,OAAO,UAAA,CAAW,OAAA,KAAY,SAAY,UAAA,CAAW,OAAA,GAAU,aAAa,WAAA,CAAY,KAAA;AAAA,gBACxF,QAAQ,UAAA,CAAW,MAAA;AAAA,gBACnB,aAAa,IAAA,CAAK,WAAA;AAAA,gBAClB,gBAAgB,IAAA,CAAK,cAAA;AAAA,gBACrB,WAAA,EAAa,YAAA;AAAA,gBACb,WAAA,EAAa,MAAA;AAAA,gBACb,kBAAkB,UAAA,CAAW,aAAA;AAAA,gBAC7B;AAAA,eACD,CAAA;AACD,cAAA,WAAA,CAAY,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,YAC3B,SAAS,KAAA,EAAO;AACd,cAAA,MAAM,IAAI,WAAA;AAAA,gBACR;AAAA,kBACE,MAAA,EAAQ,QAAA;AAAA,kBACR,EAAA,EAAI,mDAAA;AAAA,kBACJ,QAAA,EAAU,MAAA;AAAA,kBACV,IAAA,EAAM,CAAA,+CAAA,EAAkD,MAAA,CAAO,EAAE,YAAY,MAAM,CAAA,CAAA;AAAA,kBACnF,OAAA,EAAS;AAAA,oBACP,UAAU,MAAA,CAAO,EAAA;AAAA,oBACjB;AAAA;AACF,iBACF;AAAA,gBACA;AAAA,eACF;AAAA,YACF;AAAA,UACF;AACA,UAAA,IAAI,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,SAAS,CAAA,EAAG;AACvC,YAAA,iBAAA,CAAkB,MAAM,CAAA,GAAI,WAAA;AAAA,UAC9B;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,SAAS,CAAA,EAAG;AAC7C,QAAA,aAAA,CAAc,KAAA,GAAQ,iBAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAM,0BAA+C,EAAC;AAGtD,MAAA,MAAM,kBAAkB,MAAM,+BAAA,CAAgC,SAAS,YAAA,CAAa,OAAA,EAAS,aAAa,MAAM,CAAA;AAGhH,MAAA,IAAI,UAAA,GAAa,eAAA;AACjB,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,WAAA,GAAc,aAAa,WAAA,EAAa,WAAA;AAC9C,QAAA,MAAM,iBAAA,GAAoB,aAAa,WAAA,EAAa,iBAAA;AACpD,QAAA,UAAA,GAAa,WAAA,GAAc,0BAA0B,WAAA,EAAa,iBAAiB,IAAI,EAAE,KAAA,EAAO,EAAC,EAAE;AAAA,MACrG;AAEA,MAAA,KAAA,MAAW,MAAA,IAAU,QAAQ,UAAA,EAAY;AACvC,QAAA,IAAI;AACF,UAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,GAAA,CAAI;AAAA,YAC7B,KAAA,EAAO,aAAa,WAAA,EAAa,KAAA;AAAA,YACjC,MAAA,EAAQ,UAAA;AAAA,YACR,aAAa,IAAA,CAAK,WAAA;AAAA,YAClB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,YACzB,gBAAgB,IAAA,CAAK,cAAA;AAAA,YACrB,WAAA,EAAa,YAAA;AAAA,YACb,WAAA,EAAa,YAAA;AAAA,YACb,kBAAkB,UAAA,CAAW,UAAA;AAAA,YAC7B,aAAA;AAAA,YACA,cAAc,YAAA,CAAa;AAAA,WAC5B,CAAA;AACD,UAAA,uBAAA,CAAwB,MAAA,CAAO,EAAE,CAAA,GAAI,KAAA;AAAA,QACvC,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,WAAA;AAAA,YACR;AAAA,cACE,MAAA,EAAQ,QAAA;AAAA,cACR,EAAA,EAAI,2DAAA;AAAA,cACJ,QAAA,EAAU,MAAA;AAAA,cACV,IAAA,EAAM,CAAA,mEAAA,EAAsE,MAAA,CAAO,EAAE,CAAA,CAAA;AAAA,cACrF,OAAA,EAAS;AAAA,gBACP,UAAU,MAAA,CAAO,EAAA;AAAA,gBACjB,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA;AAC3B,aACF;AAAA,YACA;AAAA,WACF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,MAAA,CAAO,IAAA,CAAK,uBAAuB,CAAA,CAAE,SAAS,CAAA,EAAG;AACnD,QAAA,aAAA,CAAc,UAAA,GAAa,uBAAA;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,aAAA;AACT;AAQA,eAAe,mBAAA,CAAoB;AAAA,EACjC,OAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,EAMkB;AAChB,EAAA,MAAM,WAAW,MAAA,CAAO,EAAA;AACxB,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,MAAM,CAAA,GAAI,UAAA,GAAa,OAAA;AAErD,EAAA,MAAM,0BAAA,GAA6B,UAAA,IAAc,aAAA,IAAiB,OAAA,IAAW,aAAA;AAC7E,EAAA,MAAM,uBAAA,GAA0B,OAAA,IAAW,aAAA,IAAiB,YAAA,IAAgB,aAAA;AAE5E,EAAA,IAAI,CAAC,0BAAA,IAA8B,CAAC,uBAAA,EAAyB;AAE3D,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AACnE,MAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAW,WAAA,EAAa;AAC5E,QAAA,MAAM,eAAA,CAAgB;AAAA,UACpB,OAAA;AAAA,UACA,WAAA;AAAA,UACA,QAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF,WAAW,uBAAA,EAAyB;AAElC,IAAA,IAAI,cAAc,KAAA,EAAO;AACvB,MAAA,KAAA,MAAW,CAAC,UAAU,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AACzE,QAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAW,WAAA,EAAa;AAC5E,UAAA,MAAM,eAAA,CAAgB;AAAA,YACpB,OAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA,EAAY,OAAA;AAAA,YACZ,MAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,UAAA,EAAY;AAC5B,MAAA,KAAA,MAAW,CAAC,UAAU,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,UAAU,CAAA,EAAG;AAC9E,QAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAW,WAAA,EAAa;AAC5E,UAAA,MAAM,eAAA,CAAgB;AAAA,YACpB,OAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA,EAAY,YAAA;AAAA,YACZ,MAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAI,cAAc,QAAA,EAAU;AAC1B,MAAA,KAAA,MAAW,CAAC,UAAU,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,QAAQ,CAAA,EAAG;AAC5E,QAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAW,WAAA,EAAa;AAC5E,UAAA,MAAM,eAAA,CAAgB;AAAA,YACpB,OAAA;AAAA,YACA,WAAA;AAAA,YACA,QAAA;AAAA,YACA,QAAA;AAAA,YACA,UAAA,EAAY,UAAA;AAAA,YACZ,MAAA;AAAA,YACA,MAAA;AAAA,YACA;AAAA,WACD,CAAA;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAEA,IAAA,IAAI,cAAc,KAAA,EAAO;AACvB,MAAA,KAAA,MAAW,CAAC,QAAQ,WAAW,CAAA,IAAK,OAAO,OAAA,CAAQ,aAAA,CAAc,KAAK,CAAA,EAAG;AACvE,QAAA,KAAA,MAAW,CAAC,QAAA,EAAU,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAkC,CAAA,EAAG;AACxF,UAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,IAAY,WAAW,WAAA,EAAa;AAC5E,YAAA,MAAM,eAAA,CAAgB;AAAA,cACpB,OAAA;AAAA,cACA,WAAA;AAAA,cACA,QAAA;AAAA,cACA,QAAA,EAAU,MAAA;AAAA,cACV,UAAA,EAAY,MAAA;AAAA,cACZ,MAAA;AAAA,cACA,MAAA;AAAA,cACA;AAAA,aACD,CAAA;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAKA,eAAe,eAAA,CAAgB;AAAA,EAC7B,OAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EASkB;AAChB,EAAA,IAAI;AAEF,IAAA,IAAI,MAAA,GAAS,MAAA,EAAQ,aAAA,GAAgB,QAAQ,CAAA;AAE7C,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEX,MAAA,MAAM,aAAA,GAAgB,MAAO,MAAA,CAAe,WAAA,IAAc;AAC1D,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,KAAA,MAAW,CAAC,CAAA,EAAG,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,CAAA,EAAG;AAC5D,UAAA,IAAK,WAAA,CAAoB,MAAA,EAAQ,EAAA,KAAO,QAAA,EAAU;AAChD,YAAA,MAAA,GAAU,WAAA,CAAoB,MAAA;AAC9B,YAAA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAGA,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,KAAK,cAAA,EAAgB,WAAA,IAAe,IAAA,CAAK,cAAA,CAAe,YAAY,OAAA,EAAS;AAC/E,MAAA,MAAA,GAAS,IAAA,CAAK,eAAe,WAAA,CAAY,EAAA;AACzC,MAAA,OAAA,GAAU,IAAA,CAAK,eAAe,WAAA,CAAY,OAAA;AAAA,IAC5C;AAGA,IAAA,MAAM,oBAAyC,EAAC;AAChD,IAAA,IAAI,IAAA,CAAK,gBAAgB,MAAA,EAAW;AAClC,MAAA,iBAAA,CAAkB,cAAc,IAAA,CAAK,WAAA;AAAA,IACvC;AAEA,IAAA,MAAM,OAAA,GAAU;AAAA,MACd,GAAG,WAAA;AAAA,MACH,QAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EAAQ;AAAA,QACN,EAAA,EAAI,QAAQ,EAAA,IAAM,QAAA;AAAA,QAClB,IAAA,EAAM,QAAQ,IAAA,IAAQ,QAAA;AAAA,QACtB,WAAA,EAAa,QAAQ,WAAA,IAAe,EAAA;AAAA,QACpC,IAAA,EAAM,QAAQ,IAAA,IAAQ,SAAA;AAAA,QACtB,GAAI,SAAS,EAAE,QAAA,EAAU,CAAC,CAAC,MAAA,CAAO,KAAA,EAAM,GAAI;AAAC,OAC/C;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAI,MAAA,CAAO,EAAA;AAAA,QACX,IAAA,EAAO,MAAA,CAAe,IAAA,IAAQ,MAAA,CAAO;AAAA,OACvC;AAAA;AAAA,MAEA,cAAA,EAAgB,KAAK,cAAA,GAAiB,MAAA,CAAO,YAAY,IAAA,CAAK,cAAA,CAAe,OAAA,EAAS,CAAA,GAAI,MAAA;AAAA;AAAA,MAE1F,mBAAmB,MAAA,CAAO,IAAA,CAAK,iBAAiB,CAAA,CAAE,MAAA,GAAS,IAAI,iBAAA,GAAoB,MAAA;AAAA;AAAA,MAEnF,OAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,MAAM,oBAAA,CAAqB,SAAS,OAAO,CAAA;AAAA,EAC7C,SAAS,KAAA,EAAO;AAEd,IAAA,MAAA,EAAQ,aAAY,EAAG,IAAA,GAAO,CAAA,gCAAA,EAAmC,QAAQ,KAAK,KAAK,CAAA;AAAA,EACrF;AACF","file":"chunk-B4KB75RH.js","sourcesContent":["import pMap from 'p-map';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport { saveScorePayloadSchema } from '../evals';\nimport type { ScoringHookInput } from '../evals/types';\nimport type { Mastra } from '../mastra';\nimport { EntityType } from '../observability';\nimport type { MastraStorage } from '../storage';\n\nfunction toScorerTargetEntityType(entityType: string): EntityType | undefined {\n switch (entityType) {\n case 'AGENT':\n return EntityType.AGENT;\n case 'WORKFLOW':\n return EntityType.WORKFLOW_RUN;\n default:\n return undefined;\n }\n}\n\nexport function createOnScorerHook(mastra: Mastra) {\n return async (hookData: ScoringHookInput) => {\n const storage = mastra.getStorage();\n\n if (!storage) {\n mastra.getLogger()?.warn('Storage not found, skipping score validation and saving');\n return;\n }\n\n const entityId = hookData.entity.id as string;\n const entityType = hookData.entityType;\n const scorer = hookData.scorer;\n const scorerId = scorer.id as string;\n\n if (!scorerId) {\n mastra.getLogger()?.warn('Scorer ID not found, skipping score validation and saving');\n return;\n }\n\n try {\n const scorerToUse = await findScorer(mastra, entityId, entityType, scorerId);\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 ${scorerId} not found`,\n });\n }\n\n let input = hookData.input;\n let output = hookData.output;\n\n const { structuredOutput, ...rest } = hookData;\n\n const currentSpan = hookData.tracingContext?.currentSpan;\n const traceId = currentSpan?.isValid ? currentSpan.traceId : undefined;\n const spanId = currentSpan?.isValid ? currentSpan.id : undefined;\n const runResult = (await scorerToUse.scorer.run({\n ...rest,\n input,\n output,\n scoreSource: 'live',\n targetScope: 'span',\n targetEntityType: toScorerTargetEntityType(entityType),\n targetTraceId: traceId,\n targetSpanId: spanId,\n } as any)) as Record<string, unknown>;\n\n const payload = {\n ...rest,\n ...runResult,\n entityId,\n scorerId: scorerId,\n spanId,\n traceId,\n scorer: {\n ...rest.scorer,\n hasJudge: !!scorerToUse.scorer.judge,\n },\n metadata: {\n structuredOutput: !!structuredOutput,\n },\n };\n // Legacy score-store emission. This path is being deprecated.\n await validateAndSaveScore(storage, payload);\n\n if (currentSpan && spanId && traceId) {\n await pMap(\n currentSpan.observabilityInstance.getExporters(),\n async exporter => {\n if (exporter.addScoreToTrace) {\n try {\n await exporter.addScoreToTrace({\n traceId: traceId,\n spanId: spanId,\n score: runResult.score as number,\n reason: runResult.reason as string,\n scorerName: scorerToUse.scorer.id,\n metadata: {\n ...(currentSpan.metadata ?? {}),\n },\n });\n } catch (error) {\n // Log error but don't fail the hook if exporter fails\n mastra.getLogger()?.error(`Failed to add score to trace via exporter: ${error}`);\n }\n }\n },\n { concurrency: 3 },\n );\n }\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,\n entityId,\n entityType,\n },\n },\n error,\n );\n\n mastra.getLogger()?.trackException(mastraError);\n }\n };\n}\n\n/**\n * @deprecated Legacy scores-store path. New score emission should use `mastra.observability.addScore()`.\n */\nexport async function validateAndSaveScore(storage: MastraStorage, payload: unknown) {\n const scoresStore = await storage.getStore('scores');\n if (!scoresStore) {\n throw new MastraError({\n id: 'MASTRA_SCORES_STORAGE_NOT_AVAILABLE',\n domain: ErrorDomain.STORAGE,\n category: ErrorCategory.SYSTEM,\n text: 'Scores storage domain is not available',\n });\n }\n const payloadToSave = saveScorePayloadSchema.parse(payload);\n await scoresStore.saveScore(payloadToSave);\n}\n\nasync function findScorer(mastra: Mastra, entityId: string, entityType: string, scorerId: string) {\n let scorerToUse;\n if (entityType === 'AGENT') {\n // Try code-defined agents first\n try {\n const agent = mastra.getAgentById(entityId);\n const scorers = await agent.listScorers();\n for (const [_, scorer] of Object.entries(scorers)) {\n if (scorer.scorer.id === scorerId) {\n scorerToUse = scorer;\n break;\n }\n }\n } catch {\n // Agent not found in code-defined agents, try stored agents via editor\n try {\n const storedAgent = (await mastra.getEditor()?.agent.getById(entityId)) ?? null;\n if (storedAgent) {\n const scorers = await storedAgent.listScorers();\n for (const [_, scorer] of Object.entries(scorers) as [string, any][]) {\n if (scorer.scorer.id === scorerId) {\n scorerToUse = scorer;\n break;\n }\n }\n }\n } catch {\n // Stored agent also not found, will fall back to mastra-registered scorer\n }\n }\n } else if (entityType === 'WORKFLOW') {\n const scorers = await mastra.getWorkflowById(entityId).listScorers();\n for (const [_, scorer] of Object.entries(scorers)) {\n if (scorer.scorer.id === scorerId) {\n scorerToUse = scorer;\n break;\n }\n }\n }\n\n // Fallback to mastra-registered scorer\n if (!scorerToUse) {\n const mastraRegisteredScorer = mastra.getScorerById(scorerId);\n scorerToUse = mastraRegisteredScorer ? { scorer: mastraRegisteredScorer } : undefined;\n }\n\n return scorerToUse;\n}\n","export class ScoreAccumulator {\n private flatScores: Record<string, number[]> = {};\n private workflowScores: Record<string, number[]> = {};\n private stepScores: Record<string, Record<string, number[]>> = {};\n private agentScores: Record<string, number[]> = {};\n private trajectoryScores: Record<string, number[]> = {};\n\n addScores(scorerResults: Record<string, any>) {\n const isWorkflowScores = 'steps' in scorerResults || 'workflow' in scorerResults;\n const isAgentScores = 'agent' in scorerResults;\n const hasTrajectory = 'trajectory' in scorerResults;\n\n // Routing priority: workflow configs take precedence (they may also include\n // trajectory scores), then agent configs (agent or trajectory-only), then\n // flat scores for simple scorer arrays.\n if (isWorkflowScores) {\n this.addWorkflowScores(scorerResults);\n } else if (isAgentScores || hasTrajectory) {\n this.addAgentScores(scorerResults);\n } else {\n this.addFlatScores(scorerResults);\n }\n }\n\n private addFlatScores(scorerResults: Record<string, any>) {\n for (const [scorerName, result] of Object.entries(scorerResults)) {\n if (!this.flatScores[scorerName]) {\n this.flatScores[scorerName] = [];\n }\n this.flatScores[scorerName].push((result as { score: number }).score);\n }\n }\n\n private addWorkflowScores(scorerResults: Record<string, any>) {\n if ('workflow' in scorerResults && scorerResults.workflow) {\n for (const [scorerName, result] of Object.entries(scorerResults.workflow)) {\n if (!this.workflowScores[scorerName]) {\n this.workflowScores[scorerName] = [];\n }\n this.workflowScores[scorerName].push((result as { score: number }).score);\n }\n }\n\n if ('steps' in scorerResults && scorerResults.steps) {\n for (const [stepId, stepResults] of Object.entries(scorerResults.steps)) {\n if (!this.stepScores[stepId]) {\n this.stepScores[stepId] = {};\n }\n for (const [scorerName, result] of Object.entries(stepResults as Record<string, any>)) {\n if (!this.stepScores[stepId][scorerName]) {\n this.stepScores[stepId][scorerName] = [];\n }\n this.stepScores[stepId][scorerName].push((result as { score: number }).score);\n }\n }\n }\n\n // Trajectory scores can come from workflow scorer configs too\n if ('trajectory' in scorerResults && scorerResults.trajectory) {\n for (const [scorerName, result] of Object.entries(scorerResults.trajectory)) {\n if (!this.trajectoryScores[scorerName]) {\n this.trajectoryScores[scorerName] = [];\n }\n this.trajectoryScores[scorerName].push((result as { score: number }).score);\n }\n }\n }\n\n private addAgentScores(scorerResults: Record<string, any>) {\n if ('agent' in scorerResults && scorerResults.agent) {\n for (const [scorerName, result] of Object.entries(scorerResults.agent)) {\n if (!this.agentScores[scorerName]) {\n this.agentScores[scorerName] = [];\n }\n this.agentScores[scorerName].push((result as { score: number }).score);\n }\n }\n\n if ('trajectory' in scorerResults && scorerResults.trajectory) {\n for (const [scorerName, result] of Object.entries(scorerResults.trajectory)) {\n if (!this.trajectoryScores[scorerName]) {\n this.trajectoryScores[scorerName] = [];\n }\n this.trajectoryScores[scorerName].push((result as { score: number }).score);\n }\n }\n }\n\n addStepScores(stepScorerResults: Record<string, Record<string, any>>) {\n for (const [stepId, stepResults] of Object.entries(stepScorerResults)) {\n if (!this.stepScores[stepId]) {\n this.stepScores[stepId] = {};\n }\n for (const [scorerName, result] of Object.entries(stepResults)) {\n if (!this.stepScores[stepId][scorerName]) {\n this.stepScores[stepId][scorerName] = [];\n }\n this.stepScores[stepId][scorerName].push((result as { score: number }).score);\n }\n }\n }\n\n getAverageScores(): Record<string, any> {\n const result: Record<string, any> = {};\n\n for (const [scorerName, scoreArray] of Object.entries(this.flatScores)) {\n result[scorerName] = this.getAverageScore(scoreArray);\n }\n\n // Add workflow scores\n if (Object.keys(this.workflowScores).length > 0) {\n result.workflow = {};\n for (const [scorerName, scoreArray] of Object.entries(this.workflowScores)) {\n result.workflow[scorerName] = this.getAverageScore(scoreArray);\n }\n }\n\n if (Object.keys(this.stepScores).length > 0) {\n result.steps = {};\n for (const [stepId, stepScorers] of Object.entries(this.stepScores)) {\n result.steps[stepId] = {};\n for (const [scorerName, scoreArray] of Object.entries(stepScorers)) {\n result.steps[stepId][scorerName] = this.getAverageScore(scoreArray);\n }\n }\n }\n\n // Add agent scores\n if (Object.keys(this.agentScores).length > 0) {\n result.agent = {};\n for (const [scorerName, scoreArray] of Object.entries(this.agentScores)) {\n result.agent[scorerName] = this.getAverageScore(scoreArray);\n }\n }\n\n // Add trajectory scores\n if (Object.keys(this.trajectoryScores).length > 0) {\n result.trajectory = {};\n for (const [scorerName, scoreArray] of Object.entries(this.trajectoryScores)) {\n result.trajectory[scorerName] = this.getAverageScore(scoreArray);\n }\n }\n\n return result;\n }\n\n private getAverageScore(scoreArray: number[]): number {\n if (scoreArray.length > 0) {\n return scoreArray.reduce((a, b) => a + b, 0) / scoreArray.length;\n } else {\n return 0;\n }\n }\n}\n","import type { CoreMessage } from '@internal/ai-sdk-v4';\nimport type { Agent, AgentExecutionOptions, AiMessageType, UIMessageWithMetadata } from '../../agent';\nimport { isSupportedLanguageModel } from '../../agent';\nimport { MastraError } from '../../error';\nimport { validateAndSaveScore } from '../../mastra/hooks';\nimport type { ObservabilityContext } from '../../observability';\nimport { EntityType, resolveObservabilityContext } from '../../observability';\nimport type { RequestContext } from '../../request-context';\nimport type { MastraCompositeStore } from '../../storage';\nimport { Workflow } from '../../workflows';\nimport type { AnyWorkflow, WorkflowResult, WorkflowRunStartOptions, StepResult } from '../../workflows';\nimport type { MastraScorer } from '../base';\nimport { extractTrajectory, extractTrajectoryFromTrace, extractWorkflowTrajectory } from '../types';\nimport { ScoreAccumulator } from './scorerAccumulator';\n\ntype WorkflowRunOptions = WorkflowRunStartOptions & {\n initialState?: any;\n};\n\ntype RunEvalsDataItem<TTarget = unknown> = {\n input: TTarget extends Workflow<any, any>\n ? any\n : TTarget extends Agent\n ? string | string[] | CoreMessage[] | AiMessageType[] | UIMessageWithMetadata[]\n : unknown;\n groundTruth?: any;\n expectedTrajectory?: any;\n requestContext?: RequestContext;\n startOptions?: WorkflowRunOptions;\n} & Partial<ObservabilityContext>;\n\nexport type WorkflowScorerConfig = {\n /** Scorers that evaluate the overall workflow input/output */\n workflow?: MastraScorer<any, any, any, any>[];\n /** Scorers that evaluate individual workflow steps by step ID */\n steps?: Record<string, MastraScorer<any, any, any, any>[]>;\n /** Scorers that evaluate the workflow's step execution trajectory */\n trajectory?: MastraScorer<any, any, any, any>[];\n};\n\nexport type AgentScorerConfig = {\n /** Scorers that evaluate the full agent input/output */\n agent?: MastraScorer<any, any, any, any>[];\n /** Scorers that evaluate the agent's tool call trajectory */\n trajectory?: MastraScorer<any, any, any, any>[];\n};\n\ntype RunEvalsResult = {\n scores: Record<string, any>;\n summary: {\n totalItems: number;\n };\n};\n\n// Agent with scorers array\nexport function runEvals<TAgent extends Agent>(config: {\n data: RunEvalsDataItem<TAgent>[];\n scorers: MastraScorer<any, any, any, any>[];\n target: TAgent;\n targetOptions?: Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TAgent>;\n targetResult: Awaited<ReturnType<Agent['generate']>>;\n scorerResults: Record<string, any>; // Flat structure: { scorerName: result }\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\n// Workflow with scorers array\nexport function runEvals<TWorkflow extends AnyWorkflow>(config: {\n data: RunEvalsDataItem<TWorkflow>[];\n scorers: MastraScorer<any, any, any, any>[];\n target: TWorkflow;\n targetOptions?: WorkflowRunOptions;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TWorkflow>;\n targetResult: WorkflowResult<any, any, any, any>;\n scorerResults: Record<string, any>; // Flat structure: { scorerName: result }\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\n// Workflow with workflow configuration\nexport function runEvals<TWorkflow extends AnyWorkflow>(config: {\n data: RunEvalsDataItem<TWorkflow>[];\n scorers: WorkflowScorerConfig;\n target: TWorkflow;\n targetOptions?: WorkflowRunOptions;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TWorkflow>;\n targetResult: WorkflowResult<any, any, any, any>;\n scorerResults: {\n workflow?: Record<string, any>;\n steps?: Record<string, Record<string, any>>;\n trajectory?: Record<string, any>;\n };\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\n// Agent with agent scorer configuration (agent-level + trajectory scorers)\nexport function runEvals<TAgent extends Agent>(config: {\n data: RunEvalsDataItem<TAgent>[];\n scorers: AgentScorerConfig;\n target: TAgent;\n targetOptions?: Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<TAgent>;\n targetResult: Awaited<ReturnType<Agent['generate']>>;\n scorerResults: {\n agent?: Record<string, any>;\n trajectory?: Record<string, any>;\n };\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult>;\n\nexport async function runEvals(config: {\n data: RunEvalsDataItem<any>[];\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig | AgentScorerConfig;\n target: Agent | Workflow;\n targetOptions?:\n | Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>\n | WorkflowRunOptions;\n onItemComplete?: (params: {\n item: RunEvalsDataItem<any>;\n targetResult: any;\n scorerResults: any;\n }) => void | Promise<void>;\n concurrency?: number;\n}): Promise<RunEvalsResult> {\n const { data, scorers, target, targetOptions, onItemComplete, concurrency = 1 } = config;\n\n validateEvalsInputs(data, scorers, target);\n\n let totalItems = 0;\n const scoreAccumulator = new ScoreAccumulator();\n\n // Get storage from target's Mastra instance if available\n // Agent uses getMastraInstance(), Workflow uses .mastra getter\n const mastra = (target as any).getMastraInstance?.() || (target as any).mastra;\n const storage = mastra?.getStorage();\n\n const pMap = (await import('p-map')).default;\n await pMap(\n data,\n async (item: RunEvalsDataItem<any>) => {\n const targetResult = await executeTarget(target, item, targetOptions);\n const scorerResults = await runScorers(scorers, targetResult, item, storage);\n scoreAccumulator.addScores(scorerResults);\n\n // Save scores to storage if available\n if (storage) {\n await saveScoresToStorage({\n storage,\n scorerResults,\n target,\n item,\n mastra,\n });\n }\n\n if (onItemComplete) {\n await onItemComplete({\n item,\n targetResult: targetResult as any,\n scorerResults: scorerResults as any,\n });\n }\n\n totalItems++;\n },\n { concurrency },\n );\n\n return {\n scores: scoreAccumulator.getAverageScores(),\n summary: {\n totalItems,\n },\n };\n}\n\nfunction isWorkflow(target: Agent | Workflow): target is Workflow {\n return target instanceof Workflow;\n}\n\nfunction isWorkflowScorerConfig(scorers: any): scorers is WorkflowScorerConfig {\n return (\n typeof scorers === 'object' &&\n !Array.isArray(scorers) &&\n ('workflow' in scorers || 'steps' in scorers || ('trajectory' in scorers && !('agent' in scorers)))\n );\n}\n\nfunction isAgentScorerConfig(scorers: any): scorers is AgentScorerConfig {\n return (\n typeof scorers === 'object' &&\n !Array.isArray(scorers) &&\n ('agent' in scorers || ('trajectory' in scorers && !('workflow' in scorers) && !('steps' in scorers)))\n );\n}\n\nfunction validateEvalsInputs(\n data: RunEvalsDataItem<any>[],\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig | AgentScorerConfig,\n target: Agent | Workflow,\n): void {\n if (data.length === 0) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_FAILED_NO_DATA_PROVIDED',\n category: 'USER',\n text: 'Failed to run experiment: Data array is empty',\n });\n }\n\n for (let i = 0; i < data.length; i++) {\n const item = data[i];\n if (!item || typeof item !== 'object' || !('input' in item)) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'INVALID_DATA_ITEM',\n category: 'USER',\n text: `Invalid data item at index ${i}: must have 'input' properties`,\n });\n }\n }\n\n // Validate scorers\n if (Array.isArray(scorers)) {\n if (scorers.length === 0) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'NO_SCORERS_PROVIDED',\n category: 'USER',\n text: 'At least one scorer must be provided',\n });\n }\n } else if (isWorkflow(target) && isWorkflowScorerConfig(scorers)) {\n const hasScorers =\n (scorers.workflow && scorers.workflow.length > 0) ||\n (scorers.steps && Object.keys(scorers.steps).length > 0) ||\n (scorers.trajectory && scorers.trajectory.length > 0);\n\n if (!hasScorers) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'NO_SCORERS_PROVIDED',\n category: 'USER',\n text: 'At least one workflow, step, or trajectory scorer must be provided',\n });\n }\n } else if (!isWorkflow(target) && isAgentScorerConfig(scorers)) {\n const hasScorers =\n (scorers.agent && scorers.agent.length > 0) || (scorers.trajectory && scorers.trajectory.length > 0);\n\n if (!hasScorers) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'NO_SCORERS_PROVIDED',\n category: 'USER',\n text: 'At least one agent or trajectory scorer must be provided',\n });\n }\n } else if (!isWorkflow(target) && !Array.isArray(scorers) && !isAgentScorerConfig(scorers)) {\n throw new MastraError({\n domain: 'SCORER',\n id: 'INVALID_AGENT_SCORERS',\n category: 'USER',\n text: 'Agent scorers must be an array of scorers or an AgentScorerConfig',\n });\n }\n}\n\nasync function executeTarget(\n target: Agent | Workflow,\n item: RunEvalsDataItem<any>,\n targetOptions?:\n | Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>\n | WorkflowRunOptions,\n) {\n try {\n if (isWorkflow(target)) {\n return await executeWorkflow(target, item, targetOptions as WorkflowRunOptions);\n } else {\n return await executeAgent(\n target,\n item,\n targetOptions as Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>,\n );\n }\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_TARGET_FAILED_TO_GENERATE_RESULT',\n category: 'USER',\n text: 'Failed to run experiment: Error generating result from target',\n details: {\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n}\n\nasync function executeWorkflow(target: Workflow, item: RunEvalsDataItem<any>, targetOptions?: WorkflowRunOptions) {\n const observabilityContext = resolveObservabilityContext(item);\n const run = await target.createRun({ disableScorers: true });\n const workflowResult = await run.start({\n ...targetOptions,\n ...item.startOptions,\n inputData: item.input,\n requestContext: item.requestContext,\n ...observabilityContext,\n });\n\n return {\n traceId: workflowResult.traceId,\n spanId: workflowResult.spanId,\n entityType: EntityType.WORKFLOW_RUN,\n scoringData: {\n input: item.input,\n output: workflowResult.status === 'success' ? workflowResult.result : undefined,\n stepResults: workflowResult.steps as Record<string, StepResult<any, any, any, any>>,\n stepExecutionPath: workflowResult.stepExecutionPath,\n },\n };\n}\n\nasync function executeAgent(\n agent: Agent,\n item: RunEvalsDataItem<any>,\n targetOptions?: Omit<AgentExecutionOptions<any>, 'scorers' | 'returnScorerData' | 'requestContext'>,\n) {\n const observabilityContext = resolveObservabilityContext(item);\n const model = await agent.getModel();\n if (isSupportedLanguageModel(model)) {\n const { structuredOutput, ...restOptions } = targetOptions ?? {};\n const baseOptions = {\n ...restOptions,\n ...observabilityContext,\n scorers: {},\n returnScorerData: true,\n requestContext: item.requestContext,\n };\n const result = structuredOutput\n ? await agent.generate(item.input, { ...baseOptions, structuredOutput })\n : await agent.generate(item.input, baseOptions);\n\n return {\n ...result,\n entityType: EntityType.AGENT,\n };\n } else {\n const result = await agent.generateLegacy(item.input, {\n scorers: {},\n returnScorerData: true,\n requestContext: item.requestContext,\n ...observabilityContext,\n });\n return {\n ...result,\n entityType: EntityType.AGENT,\n };\n }\n}\n\n/**\n * Attempts to extract a hierarchical trajectory from observability traces.\n * Falls back to undefined if storage is not available or trace cannot be fetched.\n */\nasync function extractTrajectoryFromTraceStore(\n storage: MastraCompositeStore | undefined,\n traceId: string | undefined,\n spanId: string | undefined,\n): Promise<ReturnType<typeof extractTrajectoryFromTrace> | undefined> {\n if (!storage || !traceId) return undefined;\n\n try {\n const observabilityStore = await storage.getStore('observability');\n if (!observabilityStore) return undefined;\n\n const trace = await observabilityStore.getTrace({ traceId });\n if (!trace?.spans?.length) return undefined;\n\n return extractTrajectoryFromTrace(trace.spans, spanId);\n } catch {\n // Trace-based extraction is best-effort; fall back to existing extraction\n return undefined;\n }\n}\n\n//TODO: Ideally this would run on trace data instead of targetResult data\nasync function runScorers(\n scorers: MastraScorer<any, any, any, any>[] | WorkflowScorerConfig | AgentScorerConfig,\n targetResult: any,\n item: RunEvalsDataItem<any>,\n storage?: MastraCompositeStore,\n): Promise<Record<string, any>> {\n const scorerResults: Record<string, any> = {};\n const targetTraceId = targetResult.traceId;\n const targetEntityType: EntityType = targetResult.entityType;\n\n if (Array.isArray(scorers)) {\n for (const scorer of scorers) {\n try {\n const score = await scorer.run({\n input: targetResult.scoringData?.input,\n output: targetResult.scoringData?.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'span',\n targetEntityType,\n targetTraceId,\n targetSpanId: targetResult.spanId,\n });\n\n scorerResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_RESULT',\n category: 'USER',\n text: `Failed to run experiment: Error running scorer ${scorer.id}`,\n details: {\n scorerId: scorer.id,\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n }\n } else if (isAgentScorerConfig(scorers)) {\n // Handle agent scorer config (agent-level + trajectory scorers)\n if (scorers.agent) {\n const agentScorerResults: Record<string, any> = {};\n for (const scorer of scorers.agent) {\n try {\n const score = await scorer.run({\n input: targetResult.scoringData?.input,\n output: targetResult.scoringData?.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'span',\n targetEntityType,\n targetTraceId,\n targetSpanId: targetResult.spanId,\n });\n agentScorerResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_RESULT',\n category: 'USER',\n text: `Failed to run experiment: Error running agent scorer ${scorer.id}`,\n details: {\n scorerId: scorer.id,\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n }\n if (Object.keys(agentScorerResults).length > 0) {\n scorerResults.agent = agentScorerResults;\n }\n }\n\n if (scorers.trajectory) {\n const trajectoryScorerResults: Record<string, any> = {};\n\n // Prefer hierarchical trace-based extraction when storage + traceId are available\n const traceTrajectory = await extractTrajectoryFromTraceStore(storage, targetResult.traceId, targetResult.spanId);\n\n // Fall back to flat extraction from MastraDBMessage[] tool invocations\n const rawOutput = targetResult.scoringData?.output;\n const trajectory = traceTrajectory ?? (rawOutput ? extractTrajectory(rawOutput) : { steps: [] });\n\n for (const scorer of scorers.trajectory) {\n try {\n const score = await scorer.run({\n input: targetResult.scoringData?.input,\n output: trajectory,\n groundTruth: item.groundTruth,\n expectedTrajectory: item.expectedTrajectory,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'trajectory',\n targetEntityType,\n targetTraceId,\n targetSpanId: targetResult.spanId,\n });\n trajectoryScorerResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_TRAJECTORY',\n category: 'USER',\n text: `Failed to run experiment: Error running trajectory scorer ${scorer.id}`,\n details: {\n scorerId: scorer.id,\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n }\n if (Object.keys(trajectoryScorerResults).length > 0) {\n scorerResults.trajectory = trajectoryScorerResults;\n }\n }\n } else {\n // Handle workflow scorer config\n if (scorers.workflow) {\n const workflowScorerResults: Record<string, any> = {};\n for (const scorer of scorers.workflow) {\n const score = await scorer.run({\n input: targetResult.scoringData.input,\n output: targetResult.scoringData.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'span',\n targetEntityType,\n targetTraceId,\n targetSpanId: targetResult.spanId,\n });\n workflowScorerResults[scorer.id] = score;\n }\n if (Object.keys(workflowScorerResults).length > 0) {\n scorerResults.workflow = workflowScorerResults;\n }\n }\n\n if (scorers.steps) {\n const stepScorerResults: Record<string, any> = {};\n for (const [stepId, stepScorers] of Object.entries(scorers.steps)) {\n const stepResult = targetResult.scoringData.stepResults?.[stepId];\n // TODO : Ideally this would run on the trace.WORKFLOW_STEP span...\n // then we could directly add the score to that span\n if (stepResult?.status === 'success' && stepResult.output !== undefined) {\n const stepResults: Record<string, any> = {};\n for (const scorer of stepScorers) {\n try {\n const score = await scorer.run({\n input: stepResult.payload !== undefined ? stepResult.payload : targetResult.scoringData.input,\n output: stepResult.output,\n groundTruth: item.groundTruth,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'span',\n targetEntityType: EntityType.WORKFLOW_STEP,\n targetTraceId,\n });\n stepResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_STEP_RESULT',\n category: 'USER',\n text: `Failed to run experiment: Error running scorer ${scorer.id} on step ${stepId}`,\n details: {\n scorerId: scorer.id,\n stepId,\n },\n },\n error,\n );\n }\n }\n if (Object.keys(stepResults).length > 0) {\n stepScorerResults[stepId] = stepResults;\n }\n }\n }\n if (Object.keys(stepScorerResults).length > 0) {\n scorerResults.steps = stepScorerResults;\n }\n }\n\n if (scorers.trajectory) {\n const trajectoryScorerResults: Record<string, any> = {};\n\n // Prefer hierarchical trace-based extraction when storage + traceId are available\n const traceTrajectory = await extractTrajectoryFromTraceStore(storage, targetResult.traceId, targetResult.spanId);\n\n // Fall back to flat extraction from step results\n let trajectory = traceTrajectory;\n if (!trajectory) {\n const stepResults = targetResult.scoringData?.stepResults;\n const stepExecutionPath = targetResult.scoringData?.stepExecutionPath;\n trajectory = stepResults ? extractWorkflowTrajectory(stepResults, stepExecutionPath) : { steps: [] };\n }\n\n for (const scorer of scorers.trajectory) {\n try {\n const score = await scorer.run({\n input: targetResult.scoringData?.input,\n output: trajectory,\n groundTruth: item.groundTruth,\n expectedTrajectory: item.expectedTrajectory,\n requestContext: item.requestContext,\n scoreSource: 'experiment',\n targetScope: 'trajectory',\n targetEntityType: EntityType.TRAJECTORY,\n targetTraceId,\n targetSpanId: targetResult.spanId,\n });\n trajectoryScorerResults[scorer.id] = score;\n } catch (error) {\n throw new MastraError(\n {\n domain: 'SCORER',\n id: 'RUN_EXPERIMENT_SCORER_FAILED_TO_SCORE_WORKFLOW_TRAJECTORY',\n category: 'USER',\n text: `Failed to run experiment: Error running workflow trajectory scorer ${scorer.id}`,\n details: {\n scorerId: scorer.id,\n item: JSON.stringify(item),\n },\n },\n error,\n );\n }\n }\n if (Object.keys(trajectoryScorerResults).length > 0) {\n scorerResults.trajectory = trajectoryScorerResults;\n }\n }\n }\n\n return scorerResults;\n}\n\n/**\n * Saves scorer results to storage when running evaluations.\n * This makes scores visible in Studio's observability section.\n *\n * @deprecated Legacy scores-store path. New score emission should use `mastra.observability.addScore().\n */\nasync function saveScoresToStorage({\n storage,\n scorerResults,\n target,\n item,\n mastra,\n}: {\n storage: any;\n scorerResults: Record<string, any>;\n target: Agent | Workflow;\n item: RunEvalsDataItem<any>;\n mastra: any;\n}): Promise<void> {\n const entityId = target.id;\n const entityType = isWorkflow(target) ? 'WORKFLOW' : 'AGENT';\n\n const isStructuredWorkflowResult = 'workflow' in scorerResults || 'steps' in scorerResults;\n const isStructuredAgentResult = 'agent' in scorerResults || 'trajectory' in scorerResults;\n\n if (!isStructuredWorkflowResult && !isStructuredAgentResult) {\n // Handle flat scorer results (simple array of scorers for agents or workflows)\n for (const [scorerId, scoreResult] of Object.entries(scorerResults)) {\n if (scoreResult && typeof scoreResult === 'object' && 'score' in scoreResult) {\n await saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId,\n entityType,\n mastra,\n target,\n item,\n });\n }\n }\n } else if (isStructuredAgentResult) {\n // Handle agent scorer config with agent-level and trajectory scorers\n if (scorerResults.agent) {\n for (const [scorerId, scoreResult] of Object.entries(scorerResults.agent)) {\n if (scoreResult && typeof scoreResult === 'object' && 'score' in scoreResult) {\n await saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId,\n entityType: 'AGENT',\n mastra,\n target,\n item,\n });\n }\n }\n }\n\n if (scorerResults.trajectory) {\n for (const [scorerId, scoreResult] of Object.entries(scorerResults.trajectory)) {\n if (scoreResult && typeof scoreResult === 'object' && 'score' in scoreResult) {\n await saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId,\n entityType: 'TRAJECTORY',\n mastra,\n target,\n item,\n });\n }\n }\n }\n } else {\n // Handle workflow scorer config with workflow and step scorers\n if (scorerResults.workflow) {\n for (const [scorerId, scoreResult] of Object.entries(scorerResults.workflow)) {\n if (scoreResult && typeof scoreResult === 'object' && 'score' in scoreResult) {\n await saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId,\n entityType: 'WORKFLOW',\n mastra,\n target,\n item,\n });\n }\n }\n }\n\n if (scorerResults.steps) {\n for (const [stepId, stepScorers] of Object.entries(scorerResults.steps)) {\n for (const [scorerId, scoreResult] of Object.entries(stepScorers as Record<string, any>)) {\n if (scoreResult && typeof scoreResult === 'object' && 'score' in scoreResult) {\n await saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId: stepId,\n entityType: 'STEP',\n mastra,\n target,\n item,\n });\n }\n }\n }\n }\n }\n}\n\n/**\n * Saves a single scorer result to storage\n */\nasync function saveSingleScore({\n storage,\n scoreResult,\n scorerId,\n entityId,\n entityType,\n mastra,\n target,\n item,\n}: {\n storage: any;\n scoreResult: any;\n scorerId: string;\n entityId: string;\n entityType: string;\n mastra: any;\n target: Agent | Workflow;\n item: RunEvalsDataItem<any>;\n}): Promise<void> {\n try {\n // Get scorer information\n let scorer = mastra?.getScorerById?.(scorerId);\n\n if (!scorer) {\n // Try to get from target's scorers\n const targetScorers = await (target as any).listScorers?.();\n if (targetScorers) {\n for (const [_, scorerEntry] of Object.entries(targetScorers)) {\n if ((scorerEntry as any).scorer?.id === scorerId) {\n scorer = (scorerEntry as any).scorer;\n break;\n }\n }\n }\n }\n\n // Extract tracing context if available\n let traceId: string | undefined;\n let spanId: string | undefined;\n if (item.tracingContext?.currentSpan && item.tracingContext.currentSpan.isValid) {\n spanId = item.tracingContext.currentSpan.id;\n traceId = item.tracingContext.currentSpan.traceId;\n }\n\n // Build additional context with groundTruth if available\n const additionalContext: Record<string, any> = {};\n if (item.groundTruth !== undefined) {\n additionalContext.groundTruth = item.groundTruth;\n }\n\n const payload = {\n ...scoreResult,\n scorerId,\n entityId,\n entityType,\n source: 'TEST' as const,\n scorer: {\n id: scorer?.id || scorerId,\n name: scorer?.name || scorerId,\n description: scorer?.description || '',\n type: scorer?.type || 'unknown',\n ...(scorer ? { hasJudge: !!scorer.judge } : {}),\n },\n entity: {\n id: target.id,\n name: (target as any).name || target.id,\n },\n // Include requestContext from item\n requestContext: item.requestContext ? Object.fromEntries(item.requestContext.entries()) : undefined,\n // Include additionalContext with groundTruth\n additionalContext: Object.keys(additionalContext).length > 0 ? additionalContext : undefined,\n // Include tracing information\n traceId,\n spanId,\n };\n\n // Legacy score-store emission. This path is being deprecated.\n await validateAndSaveScore(storage, payload);\n } catch (error) {\n // Log error but don't fail the evaluation\n mastra?.getLogger?.()?.warn?.(`Failed to save score for scorer ${scorerId}:`, error);\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { getCurrentSpan } from './chunk-AC5GUOWY.js';
1
+ import { getCurrentSpan } from './chunk-WG7QIVL7.js';
2
2
  import { Transform } from 'stream';
3
3
 
4
4
  // src/logger/multi-logger.ts
@@ -186,5 +186,5 @@ var createCustomTransport = (stream, listLogs, listLogsByRunId) => {
186
186
  };
187
187
 
188
188
  export { DualLogger, LoggerTransport, MultiLogger, createCustomTransport, noopLogger };
189
- //# sourceMappingURL=chunk-3R4YK3VD.js.map
190
- //# sourceMappingURL=chunk-3R4YK3VD.js.map
189
+ //# sourceMappingURL=chunk-CJA2FWKT.js.map
190
+ //# sourceMappingURL=chunk-CJA2FWKT.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger/multi-logger.ts","../src/logger/dual-logger.ts","../src/logger/noop-logger.ts","../src/logger/transport.ts"],"names":[],"mappings":"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","file":"chunk-3R4YK3VD.js","sourcesContent":["import type { MastraError } from '../error';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { LoggerTransport } from './transport';\n\nexport class MultiLogger implements IMastraLogger {\n private loggers: IMastraLogger[];\n\n constructor(loggers: IMastraLogger[]) {\n this.loggers = loggers;\n }\n\n debug(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.debug(message, ...args));\n }\n\n info(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.info(message, ...args));\n }\n\n warn(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.warn(message, ...args));\n }\n\n error(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.error(message, ...args));\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.loggers.forEach(logger => logger.trackException(error, metadata));\n }\n\n getTransports(): Map<string, LoggerTransport> {\n const transports: [string, LoggerTransport][] = [];\n this.loggers.forEach(logger => transports.push(...logger.getTransports().entries()));\n return new Map(transports);\n }\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n },\n ) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogs(transportId, params);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogsByRunId(args);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: args.page ?? 1, perPage: args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { MastraError } from '../error';\nimport type { LoggerContext } from '../observability/types/logging';\nimport { getCurrentSpan } from '../observability/utils';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { BaseLogMessage, LoggerTransport } from './transport';\n\n/**\n * A transparent wrapper around IMastraLogger that also forwards log calls\n * to a LoggerContext (loggerVNext) for observability dual-write.\n *\n * All existing `this.logger.info(...)` call sites automatically get\n * dual-write when this wrapper is injected via `__setLogger()`.\n *\n * Span-aware: when called inside an executeWithContext() scope, forwards to\n * a span-correlated loggerVNext (with traceId/spanId). Otherwise falls back\n * to the global loggerVNext (no correlation, still persisted to storage).\n *\n * Uses a lazy getter function for loggerVNext so it always resolves the\n * current LoggerContext at call time (observability may initialize after the logger).\n */\nexport class DualLogger implements IMastraLogger {\n #inner: IMastraLogger;\n #getLoggerVNext: (() => LoggerContext | undefined) | undefined;\n\n constructor(inner: IMastraLogger, getLoggerVNext?: () => LoggerContext | undefined) {\n this.#inner = inner;\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n /**\n * Set or update the loggerVNext getter.\n * Called after observability initializes (which may happen after logger creation).\n */\n setLoggerVNext(getLoggerVNext: (() => LoggerContext | undefined) | undefined): void {\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n debug(message: string, ...args: any[]): void {\n this.#inner.debug(message, ...args);\n this.#forwardToVNext('debug', message, args);\n }\n\n info(message: string, ...args: any[]): void {\n this.#inner.info(message, ...args);\n this.#forwardToVNext('info', message, args);\n }\n\n warn(message: string, ...args: any[]): void {\n this.#inner.warn(message, ...args);\n this.#forwardToVNext('warn', message, args);\n }\n\n error(message: string, ...args: any[]): void {\n this.#inner.error(message, ...args);\n this.#forwardToVNext('error', message, args);\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.#inner.trackException(error, metadata);\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n loggerVNext?.error(error.message, {\n errorId: error.id,\n domain: error.domain,\n category: error.category,\n details: error.details,\n cause: error.cause?.message,\n ...metadata,\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n\n getTransports(): Map<string, LoggerTransport> {\n return this.#inner.getTransports();\n }\n\n async listLogs(\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 ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogs(transportId, params);\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogsByRunId(args);\n }\n\n /**\n * Resolve the best available LoggerContext:\n * 1. Span-correlated loggerVNext from AsyncLocalStorage (has traceId/spanId)\n * 2. Global loggerVNext from the lazy getter (no correlation, still persisted)\n */\n #resolveLoggerVNext(): LoggerContext | undefined {\n // Check for a span in async context (set by executeWithContext)\n const span = getCurrentSpan();\n if (span) {\n const correlated = span.observabilityInstance?.getLoggerContext?.(span);\n if (correlated) return correlated;\n }\n\n // Fall back to global loggerVNext (no trace correlation)\n return this.#getLoggerVNext?.();\n }\n\n /**\n * Adapt IMastraLogger's variadic args to LoggerContext's structured data param.\n * Extracts the first plain object as `data`, serializes Error args, and\n * collects any remaining primitives so the dual write preserves all context.\n */\n #forwardToVNext(level: 'debug' | 'info' | 'warn' | 'error', message: string, args: any[]): void {\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n if (!loggerVNext) return;\n\n const objectData = args.find(\n (arg): arg is Record<string, unknown> =>\n arg !== null && typeof arg === 'object' && !Array.isArray(arg) && !(arg instanceof Error),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const extraArgs = args.filter(arg => arg !== objectData && arg !== errorArg);\n\n loggerVNext[level](message, {\n ...(objectData ?? {}),\n ...(errorArg\n ? {\n error: {\n name: errorArg.name,\n message: errorArg.message,\n stack: errorArg.stack,\n },\n }\n : {}),\n ...(extraArgs.length > 0 ? { args: extraArgs } : {}),\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n}\n","import type { IMastraLogger } from './logger';\n\nexport const noopLogger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n cleanup: async () => {},\n getTransports: () => new Map(),\n trackException: () => {},\n listLogs: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n listLogsByRunId: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n} as IMastraLogger;\n","import { Transform } from 'node:stream';\nimport type { LogLevel } from './constants';\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n"]}
1
+ {"version":3,"sources":["../src/logger/multi-logger.ts","../src/logger/dual-logger.ts","../src/logger/noop-logger.ts","../src/logger/transport.ts"],"names":[],"mappings":"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","file":"chunk-CJA2FWKT.js","sourcesContent":["import type { MastraError } from '../error';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { LoggerTransport } from './transport';\n\nexport class MultiLogger implements IMastraLogger {\n private loggers: IMastraLogger[];\n\n constructor(loggers: IMastraLogger[]) {\n this.loggers = loggers;\n }\n\n debug(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.debug(message, ...args));\n }\n\n info(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.info(message, ...args));\n }\n\n warn(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.warn(message, ...args));\n }\n\n error(message: string, ...args: any[]): void {\n this.loggers.forEach(logger => logger.error(message, ...args));\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.loggers.forEach(logger => logger.trackException(error, metadata));\n }\n\n getTransports(): Map<string, LoggerTransport> {\n const transports: [string, LoggerTransport][] = [];\n this.loggers.forEach(logger => transports.push(...logger.getTransports().entries()));\n return new Map(transports);\n }\n\n async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n },\n ) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogs(transportId, params);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n for (const logger of this.loggers) {\n const logs = await logger.listLogsByRunId(args);\n if (logs.total > 0) {\n return logs;\n }\n }\n\n return { logs: [], total: 0, page: args.page ?? 1, perPage: args.perPage ?? 100, hasMore: false };\n }\n}\n","import type { MastraError } from '../error';\nimport type { LoggerContext } from '../observability/types/logging';\nimport { getCurrentSpan } from '../observability/utils';\nimport type { LogLevel } from './constants';\nimport type { IMastraLogger } from './logger';\nimport type { BaseLogMessage, LoggerTransport } from './transport';\n\n/**\n * A transparent wrapper around IMastraLogger that also forwards log calls\n * to a LoggerContext (loggerVNext) for observability dual-write.\n *\n * All existing `this.logger.info(...)` call sites automatically get\n * dual-write when this wrapper is injected via `__setLogger()`.\n *\n * Span-aware: when called inside an executeWithContext() scope, forwards to\n * a span-correlated loggerVNext (with traceId/spanId). Otherwise falls back\n * to the global loggerVNext (no correlation, still persisted to storage).\n *\n * Uses a lazy getter function for loggerVNext so it always resolves the\n * current LoggerContext at call time (observability may initialize after the logger).\n */\nexport class DualLogger implements IMastraLogger {\n #inner: IMastraLogger;\n #getLoggerVNext: (() => LoggerContext | undefined) | undefined;\n\n constructor(inner: IMastraLogger, getLoggerVNext?: () => LoggerContext | undefined) {\n this.#inner = inner;\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n /**\n * Set or update the loggerVNext getter.\n * Called after observability initializes (which may happen after logger creation).\n */\n setLoggerVNext(getLoggerVNext: (() => LoggerContext | undefined) | undefined): void {\n this.#getLoggerVNext = getLoggerVNext;\n }\n\n debug(message: string, ...args: any[]): void {\n this.#inner.debug(message, ...args);\n this.#forwardToVNext('debug', message, args);\n }\n\n info(message: string, ...args: any[]): void {\n this.#inner.info(message, ...args);\n this.#forwardToVNext('info', message, args);\n }\n\n warn(message: string, ...args: any[]): void {\n this.#inner.warn(message, ...args);\n this.#forwardToVNext('warn', message, args);\n }\n\n error(message: string, ...args: any[]): void {\n this.#inner.error(message, ...args);\n this.#forwardToVNext('error', message, args);\n }\n\n trackException(error: MastraError, metadata?: Record<string, unknown>): void {\n this.#inner.trackException(error, metadata);\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n loggerVNext?.error(error.message, {\n errorId: error.id,\n domain: error.domain,\n category: error.category,\n details: error.details,\n cause: error.cause?.message,\n ...metadata,\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n\n getTransports(): Map<string, LoggerTransport> {\n return this.#inner.getTransports();\n }\n\n async listLogs(\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 ): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogs(transportId, params);\n }\n\n async listLogsByRunId(args: {\n transportId: string;\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{ logs: BaseLogMessage[]; total: number; page: number; perPage: number; hasMore: boolean }> {\n return this.#inner.listLogsByRunId(args);\n }\n\n /**\n * Resolve the best available LoggerContext:\n * 1. Span-correlated loggerVNext from AsyncLocalStorage (has traceId/spanId)\n * 2. Global loggerVNext from the lazy getter (no correlation, still persisted)\n */\n #resolveLoggerVNext(): LoggerContext | undefined {\n // Check for a span in async context (set by executeWithContext)\n const span = getCurrentSpan();\n if (span) {\n const correlated = span.observabilityInstance?.getLoggerContext?.(span);\n if (correlated) return correlated;\n }\n\n // Fall back to global loggerVNext (no trace correlation)\n return this.#getLoggerVNext?.();\n }\n\n /**\n * Adapt IMastraLogger's variadic args to LoggerContext's structured data param.\n * Extracts the first plain object as `data`, serializes Error args, and\n * collects any remaining primitives so the dual write preserves all context.\n */\n #forwardToVNext(level: 'debug' | 'info' | 'warn' | 'error', message: string, args: any[]): void {\n try {\n const loggerVNext = this.#resolveLoggerVNext();\n if (!loggerVNext) return;\n\n const objectData = args.find(\n (arg): arg is Record<string, unknown> =>\n arg !== null && typeof arg === 'object' && !Array.isArray(arg) && !(arg instanceof Error),\n );\n const errorArg = args.find((arg): arg is Error => arg instanceof Error);\n const extraArgs = args.filter(arg => arg !== objectData && arg !== errorArg);\n\n loggerVNext[level](message, {\n ...(objectData ?? {}),\n ...(errorArg\n ? {\n error: {\n name: errorArg.name,\n message: errorArg.message,\n stack: errorArg.stack,\n },\n }\n : {}),\n ...(extraArgs.length > 0 ? { args: extraArgs } : {}),\n });\n } catch {\n // Never let loggerVNext errors break the primary logger\n }\n }\n}\n","import type { IMastraLogger } from './logger';\n\nexport const noopLogger = {\n debug: () => {},\n info: () => {},\n warn: () => {},\n error: () => {},\n cleanup: async () => {},\n getTransports: () => new Map(),\n trackException: () => {},\n listLogs: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n listLogsByRunId: async () => ({ logs: [], total: 0, page: 1, perPage: 100, hasMore: false }),\n} as IMastraLogger;\n","import { Transform } from 'node:stream';\nimport type { LogLevel } from './constants';\n\nexport interface BaseLogMessage {\n runId?: string;\n msg: string;\n level: LogLevel;\n time: Date;\n pid: number;\n hostname: string;\n name: string;\n}\n\nexport abstract class LoggerTransport extends Transform {\n constructor(opts: any = {}) {\n super({ ...opts, objectMode: true });\n }\n\n async listLogsByRunId(_args: {\n runId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n async listLogs(_args?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n returnPaginationResults?: boolean;\n page?: number;\n perPage?: number;\n }): Promise<{\n logs: BaseLogMessage[];\n total: number;\n page: number;\n perPage: number;\n hasMore: boolean;\n }> {\n return { logs: [], total: 0, page: _args?.page ?? 1, perPage: _args?.perPage ?? 100, hasMore: false };\n }\n}\n\nexport const createCustomTransport = (\n stream: Transform,\n listLogs?: LoggerTransport['listLogs'],\n listLogsByRunId?: LoggerTransport['listLogsByRunId'],\n) => {\n let transport = stream as LoggerTransport;\n if (listLogs) {\n transport.listLogs = listLogs;\n }\n if (listLogsByRunId) {\n transport.listLogsByRunId = listLogsByRunId;\n }\n return transport as LoggerTransport;\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  import { output_exports, generateText, generateObject, streamText, streamObject } from './chunk-EB2EH2RY.js';
2
- import { isZodType, delay } from './chunk-2H6WEHWI.js';
3
- import { resolveObservabilityContext } from './chunk-2NISBCML.js';
2
+ import { isZodType, delay } from './chunk-JBLN5IVV.js';
3
+ import { resolveObservabilityContext } from './chunk-FAULJTC5.js';
4
4
  import { isZodArray, getZodDef } from './chunk-RT2LCNDN.js';
5
5
  import { toStandardSchema, standardSchemaToJSONSchema, isStandardSchemaWithJSON } from './chunk-6SRTDZ7S.js';
6
- import { executeWithContext, executeWithContextSync } from './chunk-AC5GUOWY.js';
6
+ import { executeWithContext, executeWithContextSync } from './chunk-WG7QIVL7.js';
7
7
  import { MastraError } from './chunk-FJEVLHJT.js';
8
8
  import { MastraBase } from './chunk-S36QLQEK.js';
9
9
  import { OpenAIReasoningSchemaCompatLayer, OpenAISchemaCompatLayer, GoogleSchemaCompatLayer, AnthropicSchemaCompatLayer, DeepSeekSchemaCompatLayer, MetaSchemaCompatLayer, applyCompatLayer, jsonSchema } from '@mastra/schema-compat';
@@ -1070,5 +1070,5 @@ var AISDKV5LanguageModel = class {
1070
1070
  };
1071
1071
 
1072
1072
  export { AISDKV5LanguageModel, MastraLLMV1, createStreamFromGenerateResult };
1073
- //# sourceMappingURL=chunk-FQCASJGT.js.map
1074
- //# sourceMappingURL=chunk-FQCASJGT.js.map
1073
+ //# sourceMappingURL=chunk-D7NEB3NV.js.map
1074
+ //# sourceMappingURL=chunk-D7NEB3NV.js.map