@mastra/core 1.9.0 → 1.10.0

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 (438) hide show
  1. package/CHANGELOG.md +202 -0
  2. package/dist/agent/agent.d.ts +22 -3
  3. package/dist/agent/agent.d.ts.map +1 -1
  4. package/dist/agent/index.cjs +13 -13
  5. package/dist/agent/index.js +2 -2
  6. package/dist/agent/message-list/index.cjs +18 -18
  7. package/dist/agent/message-list/index.js +1 -1
  8. package/dist/agent/message-list/message-list.d.ts.map +1 -1
  9. package/dist/{chunk-IOY7Y5GV.js → chunk-3VVNJPTO.js} +602 -187
  10. package/dist/chunk-3VVNJPTO.js.map +1 -0
  11. package/dist/{chunk-VDKWYUGC.cjs → chunk-5WBEMKE2.cjs} +7 -3
  12. package/dist/chunk-5WBEMKE2.cjs.map +1 -0
  13. package/dist/{chunk-H5S4PS44.cjs → chunk-76Q75VI4.cjs} +602 -187
  14. package/dist/chunk-76Q75VI4.cjs.map +1 -0
  15. package/dist/{chunk-ZBESCKPX.cjs → chunk-7AHCLTZZ.cjs} +1572 -36
  16. package/dist/chunk-7AHCLTZZ.cjs.map +1 -0
  17. package/dist/{chunk-SEKQJ447.js → chunk-ACAILOJE.js} +166 -68
  18. package/dist/chunk-ACAILOJE.js.map +1 -0
  19. package/dist/{chunk-YIJZBU54.cjs → chunk-BCSVBOAN.cjs} +240 -463
  20. package/dist/chunk-BCSVBOAN.cjs.map +1 -0
  21. package/dist/{chunk-ZVWVQ6MG.js → chunk-CY4ZWL2X.js} +8 -3
  22. package/dist/chunk-CY4ZWL2X.js.map +1 -0
  23. package/dist/{chunk-ET7GXCHS.js → chunk-DIKRJVK6.js} +5 -5
  24. package/dist/{chunk-ET7GXCHS.js.map → chunk-DIKRJVK6.js.map} +1 -1
  25. package/dist/{chunk-P6ZX7OKT.cjs → chunk-E6I5LBDM.cjs} +7 -7
  26. package/dist/{chunk-P6ZX7OKT.cjs.map → chunk-E6I5LBDM.cjs.map} +1 -1
  27. package/dist/{chunk-BFV3GSGS.js → chunk-FT5Q6XTK.js} +1546 -22
  28. package/dist/chunk-FT5Q6XTK.js.map +1 -0
  29. package/dist/{chunk-K54LFB4P.js → chunk-FXOWXS4O.js} +3 -3
  30. package/dist/{chunk-K54LFB4P.js.map → chunk-FXOWXS4O.js.map} +1 -1
  31. package/dist/{chunk-QNXY3J6B.cjs → chunk-GCRPNAAR.cjs} +22 -19
  32. package/dist/chunk-GCRPNAAR.cjs.map +1 -0
  33. package/dist/{chunk-5M3RMO7U.js → chunk-GTA5BKXZ.js} +8 -8
  34. package/dist/{chunk-5M3RMO7U.js.map → chunk-GTA5BKXZ.js.map} +1 -1
  35. package/dist/{chunk-G5R2755Q.cjs → chunk-HAIQ57YB.cjs} +53 -20
  36. package/dist/chunk-HAIQ57YB.cjs.map +1 -0
  37. package/dist/{chunk-3ZBLD2Y4.cjs → chunk-HH76UOJL.cjs} +2 -2
  38. package/dist/{chunk-3ZBLD2Y4.cjs.map → chunk-HH76UOJL.cjs.map} +1 -1
  39. package/dist/{chunk-HAGCXIBX.cjs → chunk-HNYQITSV.cjs} +9 -9
  40. package/dist/{chunk-HAGCXIBX.cjs.map → chunk-HNYQITSV.cjs.map} +1 -1
  41. package/dist/{chunk-GJTLWOKJ.js → chunk-HQA3IBLZ.js} +51 -18
  42. package/dist/chunk-HQA3IBLZ.js.map +1 -0
  43. package/dist/{chunk-4BXXAZ75.js → chunk-HQTHWVAK.js} +15 -7
  44. package/dist/chunk-HQTHWVAK.js.map +1 -0
  45. package/dist/{chunk-CCLV5CAA.js → chunk-JGOH7RWL.js} +7 -3
  46. package/dist/chunk-JGOH7RWL.js.map +1 -0
  47. package/dist/{chunk-Y6TGIUGL.js → chunk-LSF5WJ6G.js} +2 -2
  48. package/dist/{chunk-Y6TGIUGL.js.map → chunk-LSF5WJ6G.js.map} +1 -1
  49. package/dist/{chunk-D6HO5QAM.cjs → chunk-M26GEN4C.cjs} +14 -9
  50. package/dist/chunk-M26GEN4C.cjs.map +1 -0
  51. package/dist/{chunk-4P35AVPE.cjs → chunk-MEMYFFOL.cjs} +256 -157
  52. package/dist/chunk-MEMYFFOL.cjs.map +1 -0
  53. package/dist/{chunk-BQ355Z3O.js → chunk-NUZWQA4J.js} +4 -4
  54. package/dist/{chunk-BQ355Z3O.js.map → chunk-NUZWQA4J.js.map} +1 -1
  55. package/dist/{chunk-JIRB5LX4.js → chunk-OHX36YXF.js} +5 -3
  56. package/dist/chunk-OHX36YXF.js.map +1 -0
  57. package/dist/{chunk-PKORY4ZZ.cjs → chunk-OOTLMVNN.cjs} +107 -7
  58. package/dist/chunk-OOTLMVNN.cjs.map +1 -0
  59. package/dist/{chunk-D4M6E4OQ.cjs → chunk-OWZ6QT24.cjs} +16 -8
  60. package/dist/chunk-OWZ6QT24.cjs.map +1 -0
  61. package/dist/{chunk-6OHS6ZQ3.js → chunk-PDJCIONR.js} +8 -8
  62. package/dist/{chunk-6OHS6ZQ3.js.map → chunk-PDJCIONR.js.map} +1 -1
  63. package/dist/{chunk-WU2P7XOU.cjs → chunk-PP4G2TZZ.cjs} +20 -20
  64. package/dist/{chunk-WU2P7XOU.cjs.map → chunk-PP4G2TZZ.cjs.map} +1 -1
  65. package/dist/{chunk-VWAK25TU.js → chunk-SBBWRNZA.js} +10 -7
  66. package/dist/chunk-SBBWRNZA.js.map +1 -0
  67. package/dist/{chunk-TU4YMXOQ.js → chunk-TJIFNVPX.js} +6 -6
  68. package/dist/{chunk-TU4YMXOQ.js.map → chunk-TJIFNVPX.js.map} +1 -1
  69. package/dist/{chunk-V5YNS2QO.cjs → chunk-XJNQHPBJ.cjs} +15 -15
  70. package/dist/{chunk-V5YNS2QO.cjs.map → chunk-XJNQHPBJ.cjs.map} +1 -1
  71. package/dist/{chunk-MVYP55NA.js → chunk-YC6Z75K2.js} +113 -336
  72. package/dist/chunk-YC6Z75K2.js.map +1 -0
  73. package/dist/{chunk-3ZF7IC6Q.cjs → chunk-YZMSJKAK.cjs} +5 -3
  74. package/dist/chunk-YZMSJKAK.cjs.map +1 -0
  75. package/dist/{chunk-L3WDI7HP.cjs → chunk-Z2X5VTYJ.cjs} +65 -65
  76. package/dist/{chunk-L3WDI7HP.cjs.map → chunk-Z2X5VTYJ.cjs.map} +1 -1
  77. package/dist/{chunk-BN5MV2QK.cjs → chunk-Z52OAJ73.cjs} +4 -4
  78. package/dist/{chunk-BN5MV2QK.cjs.map → chunk-Z52OAJ73.cjs.map} +1 -1
  79. package/dist/{chunk-WYPSC6CO.js → chunk-ZBU6P4JV.js} +104 -4
  80. package/dist/chunk-ZBU6P4JV.js.map +1 -0
  81. package/dist/datasets/experiment/index.d.ts.map +1 -1
  82. package/dist/datasets/experiment/scorer.d.ts.map +1 -1
  83. package/dist/datasets/index.cjs +17 -17
  84. package/dist/datasets/index.js +2 -2
  85. package/dist/di/index.cjs +4 -4
  86. package/dist/di/index.js +1 -1
  87. package/dist/docs/SKILL.md +1 -1
  88. package/dist/docs/assets/SOURCE_MAP.json +443 -384
  89. package/dist/docs/references/docs-agents-agent-approval.md +61 -31
  90. package/dist/docs/references/docs-agents-supervisor-agents.md +1 -1
  91. package/dist/docs/references/docs-memory-observational-memory.md +9 -0
  92. package/dist/docs/references/docs-memory-semantic-recall.md +17 -1
  93. package/dist/docs/references/docs-workspace-skills.md +7 -5
  94. package/dist/docs/references/reference-agents-agent.md +20 -20
  95. package/dist/docs/references/reference-agents-generate.md +200 -66
  96. package/dist/docs/references/reference-agents-generateLegacy.md +77 -35
  97. package/dist/docs/references/reference-agents-getDefaultGenerateOptions.md +4 -6
  98. package/dist/docs/references/reference-agents-getDefaultOptions.md +4 -6
  99. package/dist/docs/references/reference-agents-getDefaultStreamOptions.md +4 -6
  100. package/dist/docs/references/reference-agents-getDescription.md +1 -1
  101. package/dist/docs/references/reference-agents-getInstructions.md +4 -6
  102. package/dist/docs/references/reference-agents-getLLM.md +6 -8
  103. package/dist/docs/references/reference-agents-getMemory.md +4 -6
  104. package/dist/docs/references/reference-agents-getModel.md +4 -6
  105. package/dist/docs/references/reference-agents-getTools.md +5 -7
  106. package/dist/docs/references/reference-agents-getVoice.md +4 -6
  107. package/dist/docs/references/reference-agents-listAgents.md +4 -6
  108. package/dist/docs/references/reference-agents-listScorers.md +4 -6
  109. package/dist/docs/references/reference-agents-listTools.md +4 -6
  110. package/dist/docs/references/reference-agents-listWorkflows.md +4 -6
  111. package/dist/docs/references/reference-agents-network.md +69 -23
  112. package/dist/docs/references/reference-ai-sdk-chat-route.md +7 -7
  113. package/dist/docs/references/reference-ai-sdk-network-route.md +3 -3
  114. package/dist/docs/references/reference-ai-sdk-to-ai-sdk-stream.md +9 -9
  115. package/dist/docs/references/reference-ai-sdk-with-mastra.md +12 -12
  116. package/dist/docs/references/reference-ai-sdk-workflow-route.md +3 -3
  117. package/dist/docs/references/reference-auth-auth0.md +6 -6
  118. package/dist/docs/references/reference-auth-clerk.md +5 -5
  119. package/dist/docs/references/reference-auth-firebase.md +7 -7
  120. package/dist/docs/references/reference-auth-jwt.md +1 -1
  121. package/dist/docs/references/reference-auth-supabase.md +4 -4
  122. package/dist/docs/references/reference-auth-workos.md +6 -6
  123. package/dist/docs/references/reference-core-addGateway.md +2 -2
  124. package/dist/docs/references/reference-core-getAgent.md +2 -2
  125. package/dist/docs/references/reference-core-getAgentById.md +2 -2
  126. package/dist/docs/references/reference-core-getDeployer.md +1 -1
  127. package/dist/docs/references/reference-core-getGateway.md +2 -2
  128. package/dist/docs/references/reference-core-getGatewayById.md +2 -2
  129. package/dist/docs/references/reference-core-getLogger.md +1 -1
  130. package/dist/docs/references/reference-core-getMCPServer.md +2 -2
  131. package/dist/docs/references/reference-core-getMCPServerById.md +3 -3
  132. package/dist/docs/references/reference-core-getMemory.md +2 -2
  133. package/dist/docs/references/reference-core-getScorer.md +2 -2
  134. package/dist/docs/references/reference-core-getScorerById.md +2 -2
  135. package/dist/docs/references/reference-core-getServer.md +1 -1
  136. package/dist/docs/references/reference-core-getStorage.md +1 -1
  137. package/dist/docs/references/reference-core-getStoredAgentById.md +18 -20
  138. package/dist/docs/references/reference-core-getTelemetry.md +1 -1
  139. package/dist/docs/references/reference-core-getVector.md +2 -2
  140. package/dist/docs/references/reference-core-getWorkflow.md +3 -3
  141. package/dist/docs/references/reference-core-listAgents.md +1 -1
  142. package/dist/docs/references/reference-core-listGateways.md +1 -1
  143. package/dist/docs/references/reference-core-listLogs.md +9 -11
  144. package/dist/docs/references/reference-core-listLogsByRunId.md +9 -9
  145. package/dist/docs/references/reference-core-listMCPServers.md +1 -1
  146. package/dist/docs/references/reference-core-listMemory.md +1 -1
  147. package/dist/docs/references/reference-core-listScorers.md +1 -1
  148. package/dist/docs/references/reference-core-listStoredAgents.md +9 -11
  149. package/dist/docs/references/reference-core-listVectors.md +1 -1
  150. package/dist/docs/references/reference-core-listWorkflows.md +2 -2
  151. package/dist/docs/references/reference-core-mastra-class.md +17 -17
  152. package/dist/docs/references/reference-core-mastra-model-gateway.md +15 -15
  153. package/dist/docs/references/reference-core-setLogger.md +2 -4
  154. package/dist/docs/references/reference-core-setStorage.md +1 -1
  155. package/dist/docs/references/reference-datasets-addItem.md +20 -4
  156. package/dist/docs/references/reference-datasets-addItems.md +8 -2
  157. package/dist/docs/references/reference-datasets-compareExperiments.md +15 -3
  158. package/dist/docs/references/reference-datasets-create.md +6 -6
  159. package/dist/docs/references/reference-datasets-dataset.md +1 -1
  160. package/dist/docs/references/reference-datasets-delete.md +2 -2
  161. package/dist/docs/references/reference-datasets-deleteExperiment.md +2 -2
  162. package/dist/docs/references/reference-datasets-deleteItem.md +2 -2
  163. package/dist/docs/references/reference-datasets-deleteItems.md +2 -2
  164. package/dist/docs/references/reference-datasets-get.md +2 -2
  165. package/dist/docs/references/reference-datasets-getDetails.md +9 -9
  166. package/dist/docs/references/reference-datasets-getExperiment.md +2 -2
  167. package/dist/docs/references/reference-datasets-getItem.md +3 -3
  168. package/dist/docs/references/reference-datasets-getItemHistory.md +22 -2
  169. package/dist/docs/references/reference-datasets-list.md +7 -3
  170. package/dist/docs/references/reference-datasets-listExperimentResults.md +34 -4
  171. package/dist/docs/references/reference-datasets-listExperiments.md +41 -3
  172. package/dist/docs/references/reference-datasets-listItems.md +18 -6
  173. package/dist/docs/references/reference-datasets-listVersions.md +23 -3
  174. package/dist/docs/references/reference-datasets-startExperiment.md +62 -12
  175. package/dist/docs/references/reference-datasets-startExperimentAsync.md +5 -1
  176. package/dist/docs/references/reference-datasets-update.md +6 -6
  177. package/dist/docs/references/reference-datasets-updateItem.md +5 -5
  178. package/dist/docs/references/reference-evals-answer-relevancy.md +11 -11
  179. package/dist/docs/references/reference-evals-answer-similarity.md +17 -19
  180. package/dist/docs/references/reference-evals-bias.md +10 -10
  181. package/dist/docs/references/reference-evals-completeness.md +3 -3
  182. package/dist/docs/references/reference-evals-content-similarity.md +6 -6
  183. package/dist/docs/references/reference-evals-context-precision.md +4 -4
  184. package/dist/docs/references/reference-evals-create-scorer.md +47 -49
  185. package/dist/docs/references/reference-evals-faithfulness.md +11 -11
  186. package/dist/docs/references/reference-evals-hallucination.md +17 -21
  187. package/dist/docs/references/reference-evals-keyword-coverage.md +4 -4
  188. package/dist/docs/references/reference-evals-mastra-scorer.md +14 -14
  189. package/dist/docs/references/reference-evals-run-evals.md +16 -16
  190. package/dist/docs/references/reference-evals-scorer-utils.md +3 -3
  191. package/dist/docs/references/reference-evals-textual-difference.md +3 -3
  192. package/dist/docs/references/reference-evals-tone-consistency.md +3 -3
  193. package/dist/docs/references/reference-evals-toxicity.md +8 -8
  194. package/dist/docs/references/reference-harness-harness-class.md +34 -42
  195. package/dist/docs/references/reference-logging-pino-logger.md +5 -5
  196. package/dist/docs/references/reference-memory-deleteMessages.md +2 -2
  197. package/dist/docs/references/reference-memory-memory-class.md +12 -14
  198. package/dist/docs/references/reference-memory-observational-memory.md +102 -94
  199. package/dist/docs/references/reference-observability-tracing-configuration.md +27 -10
  200. package/dist/docs/references/reference-observability-tracing-exporters-console-exporter.md +4 -7
  201. package/dist/docs/references/reference-processors-batch-parts-processor.md +8 -10
  202. package/dist/docs/references/reference-processors-language-detector.md +14 -16
  203. package/dist/docs/references/reference-processors-message-history-processor.md +7 -9
  204. package/dist/docs/references/reference-processors-moderation-processor.md +13 -15
  205. package/dist/docs/references/reference-processors-pii-detector.md +14 -16
  206. package/dist/docs/references/reference-processors-processor-interface.md +62 -62
  207. package/dist/docs/references/reference-processors-prompt-injection-detector.md +11 -13
  208. package/dist/docs/references/reference-processors-semantic-recall-processor.md +14 -16
  209. package/dist/docs/references/reference-processors-system-prompt-scrubber.md +12 -14
  210. package/dist/docs/references/reference-processors-token-limiter-processor.md +11 -13
  211. package/dist/docs/references/reference-processors-tool-call-filter.md +5 -7
  212. package/dist/docs/references/reference-processors-tool-search-processor.md +9 -11
  213. package/dist/docs/references/reference-processors-unicode-normalizer.md +8 -10
  214. package/dist/docs/references/reference-processors-working-memory-processor.md +14 -18
  215. package/dist/docs/references/reference-rag-database-config.md +11 -7
  216. package/dist/docs/references/reference-rag-embeddings.md +12 -12
  217. package/dist/docs/references/reference-server-mastra-server.md +10 -10
  218. package/dist/docs/references/reference-server-register-api-route.md +13 -13
  219. package/dist/docs/references/reference-storage-cloudflare-d1.md +5 -5
  220. package/dist/docs/references/reference-storage-composite.md +9 -9
  221. package/dist/docs/references/reference-storage-lance.md +3 -3
  222. package/dist/docs/references/reference-storage-libsql.md +2 -2
  223. package/dist/docs/references/reference-storage-mongodb.md +5 -5
  224. package/dist/docs/references/reference-storage-mssql.md +2 -2
  225. package/dist/docs/references/reference-storage-postgresql.md +25 -25
  226. package/dist/docs/references/reference-storage-upstash.md +3 -3
  227. package/dist/docs/references/reference-streaming-ChunkType.md +251 -59
  228. package/dist/docs/references/reference-streaming-agents-MastraModelOutput.md +86 -16
  229. package/dist/docs/references/reference-streaming-agents-streamLegacy.md +79 -39
  230. package/dist/docs/references/reference-streaming-workflows-resumeStream.md +18 -8
  231. package/dist/docs/references/reference-streaming-workflows-stream.md +21 -9
  232. package/dist/docs/references/reference-streaming-workflows-timeTravelStream.md +4 -4
  233. package/dist/docs/references/reference-tools-create-tool.md +25 -21
  234. package/dist/docs/references/reference-tools-graph-rag-tool.md +16 -18
  235. package/dist/docs/references/reference-tools-mcp-client.md +38 -27
  236. package/dist/docs/references/reference-tools-mcp-server.md +45 -45
  237. package/dist/docs/references/reference-tools-vector-query-tool.md +34 -22
  238. package/dist/docs/references/reference-vectors-libsql.md +31 -31
  239. package/dist/docs/references/reference-vectors-mongodb.md +32 -32
  240. package/dist/docs/references/reference-vectors-pg.md +60 -44
  241. package/dist/docs/references/reference-vectors-upstash.md +25 -25
  242. package/dist/docs/references/reference-voice-composite-voice.md +10 -10
  243. package/dist/docs/references/reference-voice-mastra-voice.md +20 -20
  244. package/dist/docs/references/reference-voice-voice.addInstructions.md +1 -1
  245. package/dist/docs/references/reference-voice-voice.addTools.md +1 -1
  246. package/dist/docs/references/reference-voice-voice.connect.md +3 -3
  247. package/dist/docs/references/reference-voice-voice.events.md +11 -11
  248. package/dist/docs/references/reference-voice-voice.listen.md +9 -9
  249. package/dist/docs/references/reference-voice-voice.on.md +2 -2
  250. package/dist/docs/references/reference-voice-voice.speak.md +11 -11
  251. package/dist/docs/references/reference-workflows-run-methods-cancel.md +2 -2
  252. package/dist/docs/references/reference-workflows-run-methods-restart.md +17 -5
  253. package/dist/docs/references/reference-workflows-run-methods-resume.md +23 -9
  254. package/dist/docs/references/reference-workflows-run-methods-start.md +22 -8
  255. package/dist/docs/references/reference-workflows-run-methods-startAsync.md +12 -6
  256. package/dist/docs/references/reference-workflows-run-methods-timeTravel.md +29 -13
  257. package/dist/docs/references/reference-workflows-run.md +12 -12
  258. package/dist/docs/references/reference-workflows-step.md +24 -26
  259. package/dist/docs/references/reference-workflows-workflow-methods-branch.md +2 -2
  260. package/dist/docs/references/reference-workflows-workflow-methods-commit.md +1 -1
  261. package/dist/docs/references/reference-workflows-workflow-methods-create-run.md +4 -4
  262. package/dist/docs/references/reference-workflows-workflow-methods-dountil.md +3 -3
  263. package/dist/docs/references/reference-workflows-workflow-methods-dowhile.md +3 -3
  264. package/dist/docs/references/reference-workflows-workflow-methods-foreach.md +9 -9
  265. package/dist/docs/references/reference-workflows-workflow-methods-map.md +2 -2
  266. package/dist/docs/references/reference-workflows-workflow-methods-parallel.md +2 -2
  267. package/dist/docs/references/reference-workflows-workflow-methods-sleep.md +2 -2
  268. package/dist/docs/references/reference-workflows-workflow-methods-sleepUntil.md +2 -2
  269. package/dist/docs/references/reference-workflows-workflow-methods-then.md +2 -2
  270. package/dist/docs/references/reference-workflows-workflow.md +40 -50
  271. package/dist/docs/references/reference-workspace-filesystem.md +22 -22
  272. package/dist/docs/references/reference-workspace-local-filesystem.md +35 -35
  273. package/dist/docs/references/reference-workspace-local-sandbox.md +26 -26
  274. package/dist/docs/references/reference-workspace-sandbox.md +8 -8
  275. package/dist/docs/references/reference-workspace-workspace-class.md +30 -34
  276. package/dist/editor/types.d.ts +1 -0
  277. package/dist/editor/types.d.ts.map +1 -1
  278. package/dist/evals/index.cjs +20 -20
  279. package/dist/evals/index.js +3 -3
  280. package/dist/evals/scoreTraces/index.cjs +5 -5
  281. package/dist/evals/scoreTraces/index.js +2 -2
  282. package/dist/harness/harness.d.ts.map +1 -1
  283. package/dist/harness/index.cjs +25 -21
  284. package/dist/harness/index.cjs.map +1 -1
  285. package/dist/harness/index.js +15 -11
  286. package/dist/harness/index.js.map +1 -1
  287. package/dist/index.cjs +2 -2
  288. package/dist/index.js +1 -1
  289. package/dist/integration/index.cjs +2 -2
  290. package/dist/integration/index.js +1 -1
  291. package/dist/llm/index.cjs +12 -12
  292. package/dist/llm/index.js +3 -3
  293. package/dist/llm/model/model.d.ts.map +1 -1
  294. package/dist/llm/model/model.loop.d.ts.map +1 -1
  295. package/dist/llm/model/provider-types.generated.d.ts +5 -1
  296. package/dist/loop/index.cjs +14 -14
  297. package/dist/loop/index.js +1 -1
  298. package/dist/loop/workflows/agentic-loop/index.d.ts.map +1 -1
  299. package/dist/mastra/index.cjs +2 -2
  300. package/dist/mastra/index.js +1 -1
  301. package/dist/memory/index.cjs +14 -14
  302. package/dist/memory/index.js +1 -1
  303. package/dist/models-dev-2FJK72J2.cjs +12 -0
  304. package/dist/{models-dev-UVWCKPA2.cjs.map → models-dev-2FJK72J2.cjs.map} +1 -1
  305. package/dist/models-dev-CMQG6EMO.js +3 -0
  306. package/dist/{models-dev-W3LXZTEB.js.map → models-dev-CMQG6EMO.js.map} +1 -1
  307. package/dist/processor-provider/index.cjs +10 -10
  308. package/dist/processor-provider/index.js +1 -1
  309. package/dist/processors/index.cjs +42 -42
  310. package/dist/processors/index.js +1 -1
  311. package/dist/processors/processors/skills.d.ts +9 -42
  312. package/dist/processors/processors/skills.d.ts.map +1 -1
  313. package/dist/provider-registry-EHOAWHFE.cjs +40 -0
  314. package/dist/{provider-registry-4HLP2JRR.cjs.map → provider-registry-EHOAWHFE.cjs.map} +1 -1
  315. package/dist/provider-registry-LVP6T63V.js +3 -0
  316. package/dist/{provider-registry-K3DWQSMH.js.map → provider-registry-LVP6T63V.js.map} +1 -1
  317. package/dist/provider-registry.json +12 -4
  318. package/dist/relevance/index.cjs +3 -3
  319. package/dist/relevance/index.js +1 -1
  320. package/dist/request-context/index.cjs +4 -4
  321. package/dist/request-context/index.d.ts.map +1 -1
  322. package/dist/request-context/index.js +1 -1
  323. package/dist/storage/base.d.ts +34 -1
  324. package/dist/storage/base.d.ts.map +1 -1
  325. package/dist/storage/constants.cjs +56 -56
  326. package/dist/storage/constants.js +1 -1
  327. package/dist/storage/domains/agents/filesystem.d.ts +28 -0
  328. package/dist/storage/domains/agents/filesystem.d.ts.map +1 -0
  329. package/dist/storage/domains/agents/index.d.ts +1 -0
  330. package/dist/storage/domains/agents/index.d.ts.map +1 -1
  331. package/dist/storage/domains/experiments/inmemory.d.ts.map +1 -1
  332. package/dist/storage/domains/mcp-clients/filesystem.d.ts +28 -0
  333. package/dist/storage/domains/mcp-clients/filesystem.d.ts.map +1 -0
  334. package/dist/storage/domains/mcp-clients/index.d.ts +1 -0
  335. package/dist/storage/domains/mcp-clients/index.d.ts.map +1 -1
  336. package/dist/storage/domains/mcp-servers/filesystem.d.ts +28 -0
  337. package/dist/storage/domains/mcp-servers/filesystem.d.ts.map +1 -0
  338. package/dist/storage/domains/mcp-servers/index.d.ts +1 -0
  339. package/dist/storage/domains/mcp-servers/index.d.ts.map +1 -1
  340. package/dist/storage/domains/prompt-blocks/filesystem.d.ts +28 -0
  341. package/dist/storage/domains/prompt-blocks/filesystem.d.ts.map +1 -0
  342. package/dist/storage/domains/prompt-blocks/index.d.ts +1 -0
  343. package/dist/storage/domains/prompt-blocks/index.d.ts.map +1 -1
  344. package/dist/storage/domains/scorer-definitions/filesystem.d.ts +28 -0
  345. package/dist/storage/domains/scorer-definitions/filesystem.d.ts.map +1 -0
  346. package/dist/storage/domains/scorer-definitions/index.d.ts +1 -0
  347. package/dist/storage/domains/scorer-definitions/index.d.ts.map +1 -1
  348. package/dist/storage/domains/skills/filesystem.d.ts +28 -0
  349. package/dist/storage/domains/skills/filesystem.d.ts.map +1 -0
  350. package/dist/storage/domains/skills/index.d.ts +1 -0
  351. package/dist/storage/domains/skills/index.d.ts.map +1 -1
  352. package/dist/storage/domains/workspaces/filesystem.d.ts +28 -0
  353. package/dist/storage/domains/workspaces/filesystem.d.ts.map +1 -0
  354. package/dist/storage/domains/workspaces/index.d.ts +1 -0
  355. package/dist/storage/domains/workspaces/index.d.ts.map +1 -1
  356. package/dist/storage/filesystem-db.d.ts +82 -0
  357. package/dist/storage/filesystem-db.d.ts.map +1 -0
  358. package/dist/storage/filesystem-versioned.d.ts +148 -0
  359. package/dist/storage/filesystem-versioned.d.ts.map +1 -0
  360. package/dist/storage/filesystem.d.ts +39 -0
  361. package/dist/storage/filesystem.d.ts.map +1 -0
  362. package/dist/storage/git-history.d.ts +68 -0
  363. package/dist/storage/git-history.d.ts.map +1 -0
  364. package/dist/storage/index.cjs +208 -160
  365. package/dist/storage/index.d.ts +4 -0
  366. package/dist/storage/index.d.ts.map +1 -1
  367. package/dist/storage/index.js +2 -2
  368. package/dist/storage/types.d.ts +1 -0
  369. package/dist/storage/types.d.ts.map +1 -1
  370. package/dist/stream/RunOutput.d.ts +1 -1
  371. package/dist/stream/aisdk/v5/output-helpers.d.ts +6 -6
  372. package/dist/stream/base/output.d.ts +3 -3
  373. package/dist/stream/base/schema.d.ts +1 -1
  374. package/dist/stream/index.cjs +11 -11
  375. package/dist/stream/index.js +2 -2
  376. package/dist/test-utils/llm-mock.cjs +4 -4
  377. package/dist/test-utils/llm-mock.js +1 -1
  378. package/dist/tool-loop-agent/index.cjs +4 -4
  379. package/dist/tool-loop-agent/index.js +1 -1
  380. package/dist/tools/index.cjs +6 -6
  381. package/dist/tools/index.js +1 -1
  382. package/dist/tools/is-vercel-tool.cjs +2 -2
  383. package/dist/tools/is-vercel-tool.js +1 -1
  384. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  385. package/dist/tools/tool.d.ts +6 -0
  386. package/dist/tools/tool.d.ts.map +1 -1
  387. package/dist/tools/types.d.ts +27 -0
  388. package/dist/tools/types.d.ts.map +1 -1
  389. package/dist/utils.cjs +23 -23
  390. package/dist/utils.js +1 -1
  391. package/dist/vector/index.cjs +9 -9
  392. package/dist/vector/index.js +2 -2
  393. package/dist/workflows/evented/index.cjs +10 -10
  394. package/dist/workflows/evented/index.js +1 -1
  395. package/dist/workflows/index.cjs +25 -25
  396. package/dist/workflows/index.js +1 -1
  397. package/dist/workspace/index.cjs +70 -66
  398. package/dist/workspace/index.d.ts +1 -0
  399. package/dist/workspace/index.d.ts.map +1 -1
  400. package/dist/workspace/index.js +1 -1
  401. package/dist/workspace/sandbox/execa.d.ts +9 -0
  402. package/dist/workspace/sandbox/execa.d.ts.map +1 -0
  403. package/dist/workspace/sandbox/local-process-manager.d.ts.map +1 -1
  404. package/dist/workspace/skills/index.d.ts +1 -0
  405. package/dist/workspace/skills/index.d.ts.map +1 -1
  406. package/dist/workspace/skills/tools.d.ts +36 -0
  407. package/dist/workspace/skills/tools.d.ts.map +1 -0
  408. package/dist/workspace/tools/execute-command.d.ts.map +1 -1
  409. package/dist/workspace/tools/output-helpers.d.ts +4 -3
  410. package/dist/workspace/tools/output-helpers.d.ts.map +1 -1
  411. package/package.json +9 -9
  412. package/src/llm/model/provider-types.generated.d.ts +5 -1
  413. package/dist/chunk-3ZF7IC6Q.cjs.map +0 -1
  414. package/dist/chunk-4BXXAZ75.js.map +0 -1
  415. package/dist/chunk-4P35AVPE.cjs.map +0 -1
  416. package/dist/chunk-BFV3GSGS.js.map +0 -1
  417. package/dist/chunk-CCLV5CAA.js.map +0 -1
  418. package/dist/chunk-D4M6E4OQ.cjs.map +0 -1
  419. package/dist/chunk-D6HO5QAM.cjs.map +0 -1
  420. package/dist/chunk-G5R2755Q.cjs.map +0 -1
  421. package/dist/chunk-GJTLWOKJ.js.map +0 -1
  422. package/dist/chunk-H5S4PS44.cjs.map +0 -1
  423. package/dist/chunk-IOY7Y5GV.js.map +0 -1
  424. package/dist/chunk-JIRB5LX4.js.map +0 -1
  425. package/dist/chunk-MVYP55NA.js.map +0 -1
  426. package/dist/chunk-PKORY4ZZ.cjs.map +0 -1
  427. package/dist/chunk-QNXY3J6B.cjs.map +0 -1
  428. package/dist/chunk-SEKQJ447.js.map +0 -1
  429. package/dist/chunk-VDKWYUGC.cjs.map +0 -1
  430. package/dist/chunk-VWAK25TU.js.map +0 -1
  431. package/dist/chunk-WYPSC6CO.js.map +0 -1
  432. package/dist/chunk-YIJZBU54.cjs.map +0 -1
  433. package/dist/chunk-ZBESCKPX.cjs.map +0 -1
  434. package/dist/chunk-ZVWVQ6MG.js.map +0 -1
  435. package/dist/models-dev-UVWCKPA2.cjs +0 -12
  436. package/dist/models-dev-W3LXZTEB.js +0 -3
  437. package/dist/provider-registry-4HLP2JRR.cjs +0 -40
  438. package/dist/provider-registry-K3DWQSMH.js +0 -3
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var chunkYIJZBU54_cjs = require('./chunk-YIJZBU54.cjs');
3
+ var chunkBCSVBOAN_cjs = require('./chunk-BCSVBOAN.cjs');
4
4
  var chunkPM3UIIBK_cjs = require('./chunk-PM3UIIBK.cjs');
5
- var chunkWU2P7XOU_cjs = require('./chunk-WU2P7XOU.cjs');
6
- var chunkH5S4PS44_cjs = require('./chunk-H5S4PS44.cjs');
5
+ var chunkPP4G2TZZ_cjs = require('./chunk-PP4G2TZZ.cjs');
6
+ var chunk76Q75VI4_cjs = require('./chunk-76Q75VI4.cjs');
7
7
 
8
8
  // src/tool-loop-agent/utils.ts
9
9
  function isToolLoopAgentLike(obj) {
10
10
  if (!obj) return false;
11
- if (obj instanceof chunkH5S4PS44_cjs.ToolLoopAgent) return true;
11
+ if (obj instanceof chunk76Q75VI4_cjs.ToolLoopAgent) return true;
12
12
  return "version" in obj && typeof obj.version === "string" && (obj.version === "agent-v1" || obj.version.startsWith("agent-v"));
13
13
  }
14
14
  function getSettings(agent) {
@@ -201,8 +201,8 @@ var ToolLoopAgentProcessor = class {
201
201
  const { messages, steps, stepNumber } = args;
202
202
  let model = args.model;
203
203
  if (currentResult.model) {
204
- const resolvedModel = await chunkWU2P7XOU_cjs.resolveModelConfig(currentResult.model);
205
- if (!chunkYIJZBU54_cjs.isSupportedLanguageModel(resolvedModel)) {
204
+ const resolvedModel = await chunkPP4G2TZZ_cjs.resolveModelConfig(currentResult.model);
205
+ if (!chunkBCSVBOAN_cjs.isSupportedLanguageModel(resolvedModel)) {
206
206
  throw new Error("prepareStep returned an unsupported model version");
207
207
  }
208
208
  model = resolvedModel;
@@ -248,7 +248,7 @@ function toolLoopAgentToMastraAgent(agent, options) {
248
248
  const processor = new ToolLoopAgentProcessor(agent);
249
249
  const agentConfig = processor.getAgentConfig();
250
250
  const id = agentConfig.id || options?.fallbackName || `tool-loop-agent-${chunkPM3UIIBK_cjs.generateId()}`;
251
- return new chunkYIJZBU54_cjs.Agent({
251
+ return new chunkBCSVBOAN_cjs.Agent({
252
252
  ...agentConfig,
253
253
  id,
254
254
  name: agentConfig.name || id,
@@ -259,5 +259,5 @@ function toolLoopAgentToMastraAgent(agent, options) {
259
259
  exports.getSettings = getSettings;
260
260
  exports.isToolLoopAgentLike = isToolLoopAgentLike;
261
261
  exports.toolLoopAgentToMastraAgent = toolLoopAgentToMastraAgent;
262
- //# sourceMappingURL=chunk-HAGCXIBX.cjs.map
263
- //# sourceMappingURL=chunk-HAGCXIBX.cjs.map
262
+ //# sourceMappingURL=chunk-HNYQITSV.cjs.map
263
+ //# sourceMappingURL=chunk-HNYQITSV.cjs.map
@@ -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-HAGCXIBX.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-HNYQITSV.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,5 +1,5 @@
1
- import { validateAndSaveScore } from './chunk-BQ355Z3O.js';
2
- import { isSupportedLanguageModel } from './chunk-MVYP55NA.js';
1
+ import { validateAndSaveScore } from './chunk-NUZWQA4J.js';
2
+ import { isSupportedLanguageModel } from './chunk-YC6Z75K2.js';
3
3
  import { MastraError } from './chunk-FJEVLHJT.js';
4
4
  import { isZodType } from '@mastra/schema-compat';
5
5
  import { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';
@@ -184,7 +184,7 @@ async function runScorersForItem(scorers, item, output, storage, runId, targetTy
184
184
  if (scorers.length === 0) return [];
185
185
  const settled = await Promise.allSettled(
186
186
  scorers.map(async (scorer) => {
187
- const result = await runScorerSafe(scorer, item, output, scorerInput, scorerOutput);
187
+ const { result, promptMetadata } = await runScorerSafe(scorer, item, output, scorerInput, scorerOutput);
188
188
  if (storage && result.score !== null) {
189
189
  try {
190
190
  await validateAndSaveScore(storage, {
@@ -208,7 +208,8 @@ async function runScorersForItem(scorers, item, output, storage, runId, targetTy
208
208
  entity: {
209
209
  id: targetId,
210
210
  name: targetId
211
- }
211
+ },
212
+ ...promptMetadata
212
213
  });
213
214
  } catch (saveError) {
214
215
  console.warn(`Failed to save score for scorer ${scorer.id}:`, saveError);
@@ -228,22 +229,53 @@ async function runScorerSafe(scorer, item, output, scorerInput, scorerOutput) {
228
229
  output: scorerOutput ?? output,
229
230
  groundTruth: item.groundTruth
230
231
  });
231
- const score = scoreResult.score;
232
- const reason = scoreResult.reason;
232
+ if (typeof scoreResult !== "object" || scoreResult === null) {
233
+ return {
234
+ result: {
235
+ scorerId: scorer.id,
236
+ scorerName: scorer.name,
237
+ score: null,
238
+ reason: null,
239
+ error: `Scorer ${scorer.name} (${scorer.id}) returned invalid result: expected object, got ${scoreResult === null ? "null" : typeof scoreResult} (${String(scoreResult)})`
240
+ },
241
+ promptMetadata: {}
242
+ };
243
+ }
244
+ const fields = scoreResult;
245
+ const score = typeof fields.score === "number" ? fields.score : null;
246
+ const reason = typeof fields.reason === "string" ? fields.reason : null;
247
+ const str = (key) => typeof fields[key] === "string" ? fields[key] : void 0;
248
+ const obj = (key) => {
249
+ const val = fields[key];
250
+ return typeof val === "object" && val !== null ? val : void 0;
251
+ };
233
252
  return {
234
- scorerId: scorer.id,
235
- scorerName: scorer.name,
236
- score: typeof score === "number" ? score : null,
237
- reason: typeof reason === "string" ? reason : null,
238
- error: null
253
+ result: {
254
+ scorerId: scorer.id,
255
+ scorerName: scorer.name,
256
+ score,
257
+ reason,
258
+ error: null
259
+ },
260
+ promptMetadata: {
261
+ generateScorePrompt: str("generateScorePrompt"),
262
+ generateReasonPrompt: str("generateReasonPrompt"),
263
+ preprocessStepResult: obj("preprocessStepResult"),
264
+ preprocessPrompt: str("preprocessPrompt"),
265
+ analyzeStepResult: obj("analyzeStepResult"),
266
+ analyzePrompt: str("analyzePrompt")
267
+ }
239
268
  };
240
269
  } catch (error) {
241
270
  return {
242
- scorerId: scorer.id,
243
- scorerName: scorer.name,
244
- score: null,
245
- reason: null,
246
- error: error instanceof Error ? error.message : String(error)
271
+ result: {
272
+ scorerId: scorer.id,
273
+ scorerName: scorer.name,
274
+ score: null,
275
+ reason: null,
276
+ error: error instanceof Error ? error.message : String(error)
277
+ },
278
+ promptMetadata: {}
247
279
  };
248
280
  }
249
281
  }
@@ -569,6 +601,7 @@ async function runExperiment(mastra, config) {
569
601
  await experimentsStore.updateExperiment({
570
602
  id: experimentId,
571
603
  status: "running",
604
+ totalItems: items.length,
572
605
  startedAt
573
606
  });
574
607
  }
@@ -1206,5 +1239,5 @@ var DatasetsManager = class {
1206
1239
  };
1207
1240
 
1208
1241
  export { Dataset, DatasetsManager, compareExperiments, computeMean, computeScorerStats, executeTarget, isRegression, resolveScorers, runExperiment, runScorersForItem };
1209
- //# sourceMappingURL=chunk-GJTLWOKJ.js.map
1210
- //# sourceMappingURL=chunk-GJTLWOKJ.js.map
1242
+ //# sourceMappingURL=chunk-HQA3IBLZ.js.map
1243
+ //# sourceMappingURL=chunk-HQA3IBLZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/datasets/experiment/executor.ts","../src/datasets/experiment/scorer.ts","../src/datasets/experiment/analytics/aggregate.ts","../src/datasets/experiment/analytics/compare.ts","../src/datasets/experiment/index.ts","../src/datasets/dataset.ts","../src/datasets/manager.ts"],"names":["completedAt","skippedCount","isZodType","zodToJsonSchema"],"mappings":"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","file":"chunk-HQA3IBLZ.js","sourcesContent":["import type { Agent } from '../../agent';\nimport { isSupportedLanguageModel } from '../../agent';\nimport type { MessageListInput } from '../../agent/message-list';\nimport type { MastraScorer } from '../../evals/base';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../../evals/types';\nimport type { ScoringData } from '../../llm/model/base.types';\nimport type { TargetType } from '../../storage/types';\nimport type { Workflow } from '../../workflows';\n\n/**\n * Common fields extracted from both FullOutput (v2/v3) and GenerateTextResult/GenerateObjectResult (v1).\n * Used to type the agent result uniformly without coupling to the full return types.\n */\ninterface AgentGenerateResult {\n text?: string;\n object?: unknown;\n toolCalls?: unknown[];\n toolResults?: unknown[];\n sources?: unknown[];\n files?: unknown[];\n usage?: { promptTokens: number; completionTokens: number; totalTokens: number };\n reasoningText?: string;\n traceId?: string;\n error?: Error;\n scoringData?: ScoringData;\n}\n\n/**\n * Target types supported for dataset execution.\n * Agent and Workflow are Phase 2; scorer and processor are Phase 4.\n */\nexport type Target = Agent | Workflow | MastraScorer<any, any, any, any>;\n\n/**\n * Result from executing a target against a dataset item.\n */\nexport interface ExecutionResult {\n /** Output from the target (null if failed) */\n output: unknown;\n /** Structured error if execution failed */\n error: { message: string; stack?: string; code?: string } | null;\n /** Trace ID from agent/workflow execution (null for scorers or errors) */\n traceId: string | null;\n /** Structured input for scorers (extracted from agent scoring data) */\n scorerInput?: ScorerRunInputForAgent;\n /** Structured output for scorers (extracted from agent scoring data) */\n scorerOutput?: ScorerRunOutputForAgent;\n}\n\n/**\n * Execute a dataset item against a scorer (LLM-as-judge calibration).\n * item.input should contain exactly what the scorer expects - direct passthrough.\n * For calibration: item.input = { input, output, groundTruth } (user structures it)\n */\nasync function executeScorer(\n scorer: MastraScorer<any, any, any, any>,\n item: { input: unknown; groundTruth?: unknown },\n): Promise<ExecutionResult> {\n try {\n // Direct passthrough - scorer receives item.input exactly as provided\n // User structures item.input to match scorer's expected shape (e.g., { input, output, groundTruth })\n const result = await scorer.run(item.input as any);\n\n // Validate score is a number\n const score = typeof result.score === 'number' && !isNaN(result.score) ? result.score : null;\n\n if (score === null && result.score !== undefined) {\n console.warn(`Scorer ${scorer.id} returned invalid score: ${result.score}`);\n }\n\n return {\n output: {\n score,\n reason: typeof result.reason === 'string' ? result.reason : null,\n },\n error: null,\n traceId: null, // Scorers don't produce traces\n };\n } catch (error) {\n return {\n output: null,\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n traceId: null,\n };\n }\n}\n\n/**\n * Execute a dataset item against a target (agent, workflow, scorer, processor).\n * Phase 2: agent/workflow. Phase 4: scorer. Processor deferred.\n */\nexport async function executeTarget(\n target: Target,\n targetType: TargetType,\n item: { input: unknown; groundTruth?: unknown },\n options?: { signal?: AbortSignal },\n): Promise<ExecutionResult> {\n try {\n const signal = options?.signal;\n\n // Check if already aborted before starting\n if (signal?.aborted) {\n throw signal.reason ?? new DOMException('The operation was aborted.', 'AbortError');\n }\n\n let executionPromise: Promise<ExecutionResult>;\n switch (targetType) {\n case 'agent':\n executionPromise = executeAgent(target as Agent, item, signal);\n break;\n case 'workflow':\n executionPromise = executeWorkflow(target as Workflow, item);\n break;\n case 'scorer':\n executionPromise = executeScorer(target as MastraScorer<any, any, any, any>, item);\n break;\n case 'processor':\n // Processor targets dropped from roadmap - not a core use case\n throw new Error(`Target type '${targetType}' not yet supported.`);\n default:\n throw new Error(`Unknown target type: ${targetType}`);\n }\n\n // Race execution against signal abort (ensures timeout works even if target ignores signal)\n if (signal) {\n return await raceWithSignal(executionPromise, signal);\n }\n\n return await executionPromise;\n } catch (error) {\n return {\n output: null,\n error: {\n message: error instanceof Error ? error.message : String(error),\n stack: error instanceof Error ? error.stack : undefined,\n },\n traceId: null,\n };\n }\n}\n\n/**\n * Race a promise against an AbortSignal. Rejects with the signal's reason when aborted.\n */\nfunction raceWithSignal<T>(promise: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) {\n return Promise.reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));\n }\n\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => {\n reject(signal.reason ?? new DOMException('The operation was aborted.', 'AbortError'));\n };\n\n signal.addEventListener('abort', onAbort, { once: true });\n\n promise.then(\n value => {\n signal.removeEventListener('abort', onAbort);\n resolve(value);\n },\n err => {\n signal.removeEventListener('abort', onAbort);\n reject(err);\n },\n );\n });\n}\n\n/**\n * Execute a dataset item against an agent.\n * Uses generate() for both v1 and v2 models.\n */\nasync function executeAgent(\n agent: Agent,\n item: { input: unknown; groundTruth?: unknown },\n signal?: AbortSignal,\n): Promise<ExecutionResult> {\n const model = await agent.getModel();\n\n // Both generate() and generateLegacy() return different types (FullOutput vs GenerateTextResult)\n // but share the fields we extract. Cast input to MessageListInput at the boundary.\n const input = item.input as MessageListInput;\n\n const rawResult = isSupportedLanguageModel(model)\n ? await agent.generate(input, {\n scorers: {},\n returnScorerData: true,\n abortSignal: signal,\n })\n : await agent.generateLegacy(input, {\n scorers: {},\n returnScorerData: true,\n });\n\n // Narrow to the common fields we need — both v1 and v2 results share these\n const result = rawResult as AgentGenerateResult;\n\n const traceId = result.traceId ?? null;\n const scoringData = result.scoringData;\n\n // Only persist fields relevant to experiment evaluation — drop provider metadata,\n // duplicate messages, steps trace, and other debugging internals\n const trimmedOutput = {\n text: result.text,\n object: result.object,\n toolCalls: result.toolCalls,\n toolResults: result.toolResults,\n sources: result.sources,\n files: result.files,\n usage: result.usage,\n reasoningText: result.reasoningText,\n traceId,\n error: result.error ?? null,\n };\n\n return {\n output: trimmedOutput,\n error: null,\n traceId,\n scorerInput: scoringData?.input,\n scorerOutput: scoringData?.output,\n };\n}\n\n/**\n * Execute a dataset item against a workflow.\n * Creates a run with scorers disabled to avoid double-scoring.\n */\nasync function executeWorkflow(\n workflow: Workflow,\n item: { input: unknown; groundTruth?: unknown },\n): Promise<ExecutionResult> {\n const run = await workflow.createRun({ disableScorers: true });\n const result = await run.start({\n inputData: item.input,\n });\n\n // TracingProperties is intersected on every WorkflowResult variant\n const traceId = result.traceId ?? null;\n\n if (result.status === 'success') {\n return { output: result.result, error: null, traceId };\n }\n\n // Handle all non-success statuses (still include traceId for debugging)\n if (result.status === 'failed') {\n return {\n output: null,\n error: { message: result.error?.message ?? 'Workflow failed', stack: result.error?.stack },\n traceId,\n };\n }\n\n if (result.status === 'tripwire') {\n return {\n output: null,\n error: { message: `Workflow tripwire: ${result.tripwire?.reason ?? 'Unknown reason'}` },\n traceId,\n };\n }\n\n if (result.status === 'suspended') {\n return {\n output: null,\n error: { message: 'Workflow suspended - not yet supported in dataset experiments' },\n traceId,\n };\n }\n\n if (result.status === 'paused') {\n return { output: null, error: { message: 'Workflow paused - not yet supported in dataset experiments' }, traceId };\n }\n\n // Exhaustive check - should never reach here\n const _exhaustiveCheck: never = result;\n return {\n output: null,\n error: { message: `Workflow ended with unexpected status: ${(_exhaustiveCheck as any).status}` },\n traceId,\n };\n}\n","import type { MastraScorer } from '../../evals/base';\nimport type { ScorerRunInputForAgent, ScorerRunOutputForAgent } from '../../evals/types';\nimport type { Mastra } from '../../mastra';\nimport { validateAndSaveScore } from '../../mastra/hooks';\nimport type { MastraCompositeStore } from '../../storage/base';\nimport type { TargetType } from '../../storage/types';\nimport type { ScorerResult } from './types';\n\n/**\n * Resolve scorers from mixed array of instances and string IDs.\n * String IDs are looked up from Mastra's scorer registry.\n */\nexport function resolveScorers(\n mastra: Mastra,\n scorers?: (MastraScorer<any, any, any, any> | string)[],\n): MastraScorer<any, any, any, any>[] {\n if (!scorers || scorers.length === 0) return [];\n\n return scorers\n .map(scorer => {\n if (typeof scorer === 'string') {\n const resolved = mastra.getScorerById(scorer);\n if (!resolved) {\n console.warn(`Scorer not found: ${scorer}`);\n return null;\n }\n return resolved;\n }\n return scorer;\n })\n .filter((s): s is MastraScorer<any, any, any, any> => s !== null);\n}\n\n/**\n * Run all scorers for a single item result.\n * Errors are isolated per scorer - one failing scorer doesn't affect others.\n */\nexport async function runScorersForItem(\n scorers: MastraScorer<any, any, any, any>[],\n item: { input: unknown; groundTruth?: unknown; metadata?: Record<string, unknown> },\n output: unknown,\n storage: MastraCompositeStore | null,\n runId: string,\n targetType: TargetType,\n targetId: string,\n itemId: string,\n scorerInput?: ScorerRunInputForAgent,\n scorerOutput?: ScorerRunOutputForAgent,\n traceId?: string,\n): Promise<ScorerResult[]> {\n if (scorers.length === 0) return [];\n\n const settled = await Promise.allSettled(\n scorers.map(async scorer => {\n const { result, promptMetadata } = await runScorerSafe(scorer, item, output, scorerInput, scorerOutput);\n\n // Persist score if storage available and score was computed\n if (storage && result.score !== null) {\n try {\n await validateAndSaveScore(storage, {\n scorerId: scorer.id,\n score: result.score,\n reason: result.reason ?? undefined,\n input: item.input,\n output,\n additionalContext: item.metadata,\n entityType: targetType.toUpperCase(),\n entityId: itemId,\n source: 'TEST',\n runId,\n traceId,\n scorer: {\n id: scorer.id,\n name: scorer.name,\n description: scorer.description ?? '',\n hasJudge: !!scorer.judge,\n },\n entity: {\n id: targetId,\n name: targetId,\n },\n ...promptMetadata,\n });\n } catch (saveError) {\n // Log but don't fail - score persistence is best-effort\n console.warn(`Failed to save score for scorer ${scorer.id}:`, saveError);\n }\n }\n\n return result;\n }),\n );\n\n return settled.map((s, i) =>\n s.status === 'fulfilled'\n ? s.value\n : { scorerId: scorers[i]!.id, scorerName: scorers[i]!.name, score: null, reason: null, error: String(s.reason) },\n );\n}\n\n/** Prompt/step metadata returned by scorer.run() for DB persistence. */\ninterface ScorerPromptMetadata {\n generateScorePrompt?: string;\n generateReasonPrompt?: string;\n preprocessStepResult?: Record<string, unknown>;\n preprocessPrompt?: string;\n analyzeStepResult?: Record<string, unknown>;\n analyzePrompt?: string;\n}\n\n/**\n * Run a single scorer safely, catching any errors.\n * Returns both the ScorerResult and prompt metadata for DB persistence.\n */\nasync function runScorerSafe(\n scorer: MastraScorer<any, any, any, any>,\n item: { input: unknown; groundTruth?: unknown; metadata?: Record<string, unknown> },\n output: unknown,\n scorerInput?: ScorerRunInputForAgent,\n scorerOutput?: ScorerRunOutputForAgent,\n): Promise<{ result: ScorerResult; promptMetadata: ScorerPromptMetadata }> {\n try {\n const scoreResult: unknown = await scorer.run({\n input: scorerInput ?? item.input,\n output: scorerOutput ?? output,\n groundTruth: item.groundTruth,\n });\n\n // Extract fields with typeof guards — scorer run result types use complex\n // conditional generics that don't resolve cleanly with MastraScorer<any,…>.\n if (typeof scoreResult !== 'object' || scoreResult === null) {\n return {\n result: {\n scorerId: scorer.id,\n scorerName: scorer.name,\n score: null,\n reason: null,\n error: `Scorer ${scorer.name} (${scorer.id}) returned invalid result: expected object, got ${scoreResult === null ? 'null' : typeof scoreResult} (${String(scoreResult)})`,\n },\n promptMetadata: {},\n };\n }\n\n const fields = scoreResult as Record<string, unknown>;\n const score = typeof fields.score === 'number' ? fields.score : null;\n const reason = typeof fields.reason === 'string' ? fields.reason : null;\n\n const str = (key: string): string | undefined =>\n typeof fields[key] === 'string' ? (fields[key] as string) : undefined;\n const obj = (key: string): Record<string, unknown> | undefined => {\n const val = fields[key];\n return typeof val === 'object' && val !== null ? (val as Record<string, unknown>) : undefined;\n };\n\n return {\n result: {\n scorerId: scorer.id,\n scorerName: scorer.name,\n score,\n reason,\n error: null,\n },\n promptMetadata: {\n generateScorePrompt: str('generateScorePrompt'),\n generateReasonPrompt: str('generateReasonPrompt'),\n preprocessStepResult: obj('preprocessStepResult'),\n preprocessPrompt: str('preprocessPrompt'),\n analyzeStepResult: obj('analyzeStepResult'),\n analyzePrompt: str('analyzePrompt'),\n },\n };\n } catch (error) {\n return {\n result: {\n scorerId: scorer.id,\n scorerName: scorer.name,\n score: null,\n reason: null,\n error: error instanceof Error ? error.message : String(error),\n },\n promptMetadata: {},\n };\n }\n}\n","/**\n * Experiment Analytics Aggregation Helpers\n *\n * Pure functions for computing statistics from raw score data.\n * Used by compareExperiments to build ScorerStats and detect regressions.\n */\n\nimport type { ScoreRowData } from '../../../evals/types';\nimport type { ScorerStats } from './types';\n\n/**\n * Compute the arithmetic mean of an array of numbers.\n *\n * @param values - Array of numbers to average\n * @returns Mean value, or 0 if array is empty\n */\nexport function computeMean(values: number[]): number {\n if (values.length === 0) {\n return 0;\n }\n const sum = values.reduce((acc, val) => acc + val, 0);\n return sum / values.length;\n}\n\n/**\n * Compute aggregate statistics for a set of scores.\n *\n * Metrics:\n * - errorRate: proportion of items with null scores (errors)\n * - passRate: proportion of scored items meeting threshold\n * - avgScore: mean of non-null scores\n *\n * @param scores - Score records from storage\n * @param passThreshold - Absolute threshold for pass (score >= threshold)\n * @returns ScorerStats with all computed metrics\n */\nexport function computeScorerStats(scores: ScoreRowData[], passThreshold: number = 0.5): ScorerStats {\n const totalItems = scores.length;\n\n if (totalItems === 0) {\n return {\n errorRate: 0,\n errorCount: 0,\n passRate: 0,\n passCount: 0,\n avgScore: 0,\n scoreCount: 0,\n totalItems: 0,\n };\n }\n\n // Separate null scores (errors) from valid scores\n const validScores: number[] = [];\n let errorCount = 0;\n\n for (const score of scores) {\n if (score.score === null || score.score === undefined) {\n errorCount++;\n } else {\n validScores.push(score.score);\n }\n }\n\n const scoreCount = validScores.length;\n const errorRate = errorCount / totalItems;\n\n // Pass rate is computed over items with valid scores only\n const passCount = validScores.filter(s => s >= passThreshold).length;\n const passRate = scoreCount > 0 ? passCount / scoreCount : 0;\n\n // Average score excludes errors\n const avgScore = computeMean(validScores);\n\n return {\n errorRate,\n errorCount,\n passRate,\n passCount,\n avgScore,\n scoreCount,\n totalItems,\n };\n}\n\n/**\n * Determine if a score delta represents a regression.\n *\n * @param delta - Score difference (experiment B - experiment A)\n * @param threshold - Absolute threshold for regression detection\n * @param direction - Score direction ('higher-is-better' or 'lower-is-better')\n * @returns True if delta represents a regression\n *\n * @example\n * // Higher is better (default): negative delta is bad\n * isRegression(-0.1, 0.05, 'higher-is-better') // true (dropped more than 0.05)\n * isRegression(-0.01, 0.05, 'higher-is-better') // false (within tolerance)\n *\n * // Lower is better: positive delta is bad\n * isRegression(0.1, 0.05, 'lower-is-better') // true (increased more than 0.05)\n */\nexport function isRegression(\n delta: number,\n threshold: number,\n direction: 'higher-is-better' | 'lower-is-better' = 'higher-is-better',\n): boolean {\n if (direction === 'higher-is-better') {\n // Regression if score dropped below threshold\n // delta < -threshold means score dropped by more than threshold\n return delta < -threshold;\n } else {\n // Regression if score increased above threshold\n // delta > threshold means score increased by more than threshold\n return delta > threshold;\n }\n}\n","/**\n * Experiment Comparison\n *\n * Compare two experiments to detect score regressions.\n * Returns per-scorer deltas and per-item score diffs.\n */\n\nimport type { ScoreRowData } from '../../../evals/types';\nimport type { Mastra } from '../../../mastra';\nimport { computeScorerStats, isRegression } from './aggregate';\nimport type {\n CompareExperimentsConfig,\n ComparisonResult,\n ItemComparison,\n ScorerComparison,\n ScorerThreshold,\n} from './types';\n\n/**\n * Default threshold when not specified: no tolerance for regression.\n */\nconst DEFAULT_THRESHOLD: ScorerThreshold = {\n value: 0,\n direction: 'higher-is-better',\n};\n\n/**\n * Default pass threshold for computing pass rate.\n */\nconst DEFAULT_PASS_THRESHOLD = 0.5;\n\n/**\n * Compare two experiments to detect score regressions.\n *\n * @param mastra - Mastra instance for storage access\n * @param config - Comparison configuration\n * @returns ComparisonResult with per-scorer and per-item comparisons\n *\n * @example\n * ```typescript\n * const result = await compareExperiments(mastra, {\n * experimentIdA: 'baseline-experiment-id',\n * experimentIdB: 'candidate-experiment-id',\n * thresholds: {\n * 'accuracy': { value: 0.05, direction: 'higher-is-better' },\n * 'latency': { value: 100, direction: 'lower-is-better' },\n * },\n * });\n *\n * if (result.hasRegression) {\n * console.log('Quality regression detected!');\n * }\n * ```\n */\nexport async function compareExperiments(mastra: Mastra, config: CompareExperimentsConfig): Promise<ComparisonResult> {\n const { experimentIdA, experimentIdB, thresholds = {} } = config;\n const warnings: string[] = [];\n\n // 1. Get storage\n const storage = mastra.getStorage();\n if (!storage) {\n throw new Error('Storage not configured. Configure storage in Mastra instance.');\n }\n\n const experimentsStore = await storage.getStore('experiments');\n const scoresStore = await storage.getStore('scores');\n\n if (!experimentsStore) {\n throw new Error('ExperimentsStorage not configured.');\n }\n if (!scoresStore) {\n throw new Error('ScoresStorage not configured.');\n }\n\n // 2. Load both experiments\n const [experimentA, experimentB] = await Promise.all([\n experimentsStore.getExperimentById({ id: experimentIdA }),\n experimentsStore.getExperimentById({ id: experimentIdB }),\n ]);\n\n if (!experimentA) {\n throw new Error(`Experiment not found: ${experimentIdA}`);\n }\n if (!experimentB) {\n throw new Error(`Experiment not found: ${experimentIdB}`);\n }\n\n // 3. Check version mismatch\n const versionMismatch = experimentA.datasetVersion !== experimentB.datasetVersion;\n if (versionMismatch) {\n warnings.push(\n `Experiments have different dataset versions: ${experimentA.datasetVersion} vs ${experimentB.datasetVersion}`,\n );\n }\n\n // 4. Load results for both experiments\n const [resultsA, resultsB] = await Promise.all([\n experimentsStore.listExperimentResults({ experimentId: experimentIdA, pagination: { page: 0, perPage: false } }),\n experimentsStore.listExperimentResults({ experimentId: experimentIdB, pagination: { page: 0, perPage: false } }),\n ]);\n\n // 5. Load scores for both experiments\n const [scoresA, scoresB] = await Promise.all([\n scoresStore.listScoresByRunId({ runId: experimentIdA, pagination: { page: 0, perPage: false } }),\n scoresStore.listScoresByRunId({ runId: experimentIdB, pagination: { page: 0, perPage: false } }),\n ]);\n\n // 6. Handle empty experiments\n if (resultsA.results.length === 0 && resultsB.results.length === 0) {\n warnings.push('Both experiments have no results.');\n return buildEmptyResult(experimentA, experimentB, versionMismatch, warnings);\n }\n if (resultsA.results.length === 0) {\n warnings.push('Experiment A has no results.');\n }\n if (resultsB.results.length === 0) {\n warnings.push('Experiment B has no results.');\n }\n\n // 7. Find overlapping items\n const itemIdsA = new Set(resultsA.results.map(r => r.itemId));\n const itemIdsB = new Set(resultsB.results.map(r => r.itemId));\n const overlappingItemIds = [...itemIdsA].filter(id => itemIdsB.has(id));\n\n if (overlappingItemIds.length === 0) {\n warnings.push('No overlapping items between experiments.');\n }\n\n // 8. Group scores by scorer and item\n const scoresMapA = groupScoresByScorerAndItem(scoresA.scores);\n const scoresMapB = groupScoresByScorerAndItem(scoresB.scores);\n\n // 9. Find all unique scorers\n const allScorerIds = new Set([...Object.keys(scoresMapA), ...Object.keys(scoresMapB)]);\n\n // 10. Build per-scorer comparison\n const scorers: Record<string, ScorerComparison> = {};\n let hasRegression = false;\n\n for (const scorerId of allScorerIds) {\n const scorerScoresA = scoresMapA[scorerId] ?? {};\n const scorerScoresB = scoresMapB[scorerId] ?? {};\n\n // Get scores as arrays for stats computation\n const scoresArrayA = Object.values(scorerScoresA);\n const scoresArrayB = Object.values(scorerScoresB);\n\n // Get threshold config for this scorer\n const thresholdConfig = thresholds[scorerId] ?? DEFAULT_THRESHOLD;\n const threshold = thresholdConfig.value;\n const direction = thresholdConfig.direction ?? 'higher-is-better';\n\n // Compute stats\n const statsA = computeScorerStats(scoresArrayA, DEFAULT_PASS_THRESHOLD);\n const statsB = computeScorerStats(scoresArrayB, DEFAULT_PASS_THRESHOLD);\n\n // Compute delta and check regression\n const delta = statsB.avgScore - statsA.avgScore;\n const regressed = isRegression(delta, threshold, direction);\n\n if (regressed) {\n hasRegression = true;\n }\n\n scorers[scorerId] = {\n statsA,\n statsB,\n delta,\n regressed,\n threshold,\n };\n }\n\n // 11. Build per-item comparison\n const allItemIds = new Set([...itemIdsA, ...itemIdsB]);\n const items: ItemComparison[] = [];\n\n for (const itemId of allItemIds) {\n const inBothExperiments = itemIdsA.has(itemId) && itemIdsB.has(itemId);\n\n // Build scores for this item\n const itemScoresA: Record<string, number | null> = {};\n const itemScoresB: Record<string, number | null> = {};\n\n for (const scorerId of allScorerIds) {\n const scoreA = scoresMapA[scorerId]?.[itemId];\n const scoreB = scoresMapB[scorerId]?.[itemId];\n\n itemScoresA[scorerId] = scoreA?.score ?? null;\n itemScoresB[scorerId] = scoreB?.score ?? null;\n }\n\n items.push({\n itemId,\n inBothExperiments,\n scoresA: itemScoresA,\n scoresB: itemScoresB,\n });\n }\n\n return {\n experimentA: {\n id: experimentA.id,\n datasetVersion: experimentA.datasetVersion,\n },\n experimentB: {\n id: experimentB.id,\n datasetVersion: experimentB.datasetVersion,\n },\n versionMismatch,\n hasRegression,\n scorers,\n items,\n warnings,\n };\n}\n\n/**\n * Group scores by scorer ID, then by item ID.\n */\nfunction groupScoresByScorerAndItem(scores: ScoreRowData[]): Record<string, Record<string, ScoreRowData>> {\n const result: Record<string, Record<string, ScoreRowData>> = {};\n\n for (const score of scores) {\n const scorerId = score.scorerId;\n const itemId = score.entityId; // entityId is the item ID for experiment scores\n\n if (!result[scorerId]) {\n result[scorerId] = {};\n }\n result[scorerId][itemId] = score;\n }\n\n return result;\n}\n\n/**\n * Build an empty comparison result for edge cases.\n */\nfunction buildEmptyResult(\n experimentA: { id: string; datasetVersion: number | null },\n experimentB: { id: string; datasetVersion: number | null },\n versionMismatch: boolean,\n warnings: string[],\n): ComparisonResult {\n return {\n experimentA: {\n id: experimentA.id,\n datasetVersion: experimentA.datasetVersion,\n },\n experimentB: {\n id: experimentB.id,\n datasetVersion: experimentB.datasetVersion,\n },\n versionMismatch,\n hasRegression: false,\n scorers: {},\n items: [],\n warnings,\n };\n}\n","import type { Mastra } from '../../mastra';\n\n/** Unified item shape used within experiment execution (bridges inline + versioned data) */\ntype ExperimentItem = {\n id: string; // item id (or generated for inline)\n datasetVersion: number | null; // null for inline experiments\n input: unknown;\n groundTruth?: unknown;\n metadata?: Record<string, unknown>;\n};\nimport { executeTarget } from './executor';\nimport type { Target, ExecutionResult } from './executor';\nimport { resolveScorers, runScorersForItem } from './scorer';\nimport type { ExperimentConfig, ExperimentSummary, ItemWithScores, ItemResult } from './types';\n\n// Re-export types and helpers\nexport type {\n DataItem,\n ExperimentConfig,\n ExperimentSummary,\n ItemWithScores,\n ItemResult,\n ScorerResult,\n StartExperimentConfig,\n} from './types';\nexport { executeTarget, type Target, type ExecutionResult } from './executor';\nexport { resolveScorers, runScorersForItem } from './scorer';\n\n// Re-export analytics\nexport * from './analytics';\n\n/**\n * Run a dataset experiment against a target with optional scoring.\n *\n * Executes all items in the dataset concurrently (up to maxConcurrency) against\n * the specified target (agent or workflow). Optionally applies scorers to each\n * result and persists both results and scores to storage.\n *\n * @param mastra - Mastra instance for storage and target resolution\n * @param config - Experiment configuration\n * @returns ExperimentSummary with results and scores\n *\n * @example\n * ```typescript\n * const summary = await runExperiment(mastra, {\n * datasetId: 'my-dataset',\n * targetType: 'agent',\n * targetId: 'my-agent',\n * scorers: [accuracyScorer, latencyScorer],\n * maxConcurrency: 10,\n * });\n * console.log(`${summary.succeededCount}/${summary.totalItems} succeeded`);\n * ```\n */\nexport async function runExperiment(mastra: Mastra, config: ExperimentConfig): Promise<ExperimentSummary> {\n const {\n datasetId,\n targetType,\n targetId,\n scorers: scorerInput,\n version,\n maxConcurrency = 5,\n signal,\n itemTimeout,\n maxRetries = 0,\n experimentId: providedExperimentId,\n name,\n description,\n metadata,\n } = config;\n\n const startedAt = new Date();\n // Use provided experimentId (async trigger) or generate new one\n const experimentId = providedExperimentId ?? crypto.randomUUID();\n\n // 1. Get storage and resolve components\n const storage = mastra.getStorage();\n const datasetsStore = await storage?.getStore('datasets');\n const experimentsStore = await storage?.getStore('experiments');\n\n // Phase A — Resolve items\n let items: ExperimentItem[];\n let datasetVersion: number | null;\n\n if (config.data) {\n // Inline data path — array or factory function\n const rawData = typeof config.data === 'function' ? await config.data() : config.data;\n items = rawData.map(dataItem => {\n const id = dataItem.id ?? crypto.randomUUID();\n return {\n id,\n datasetVersion: null,\n input: dataItem.input,\n groundTruth: dataItem.groundTruth,\n metadata: dataItem.metadata,\n };\n });\n datasetVersion = null;\n } else if (datasetId) {\n // Storage-backed data path (existing)\n if (!datasetsStore) {\n throw new Error('DatasetsStorage not configured. Configure storage in Mastra instance.');\n }\n\n const dataset = await datasetsStore.getDatasetById({ id: datasetId });\n if (!dataset) {\n throw new Error(`Dataset not found: ${datasetId}`);\n }\n\n datasetVersion = version ?? dataset.version;\n const versionItems = await datasetsStore.getItemsByVersion({\n datasetId,\n version: datasetVersion,\n });\n\n if (versionItems.length === 0) {\n throw new Error(`No items in dataset ${datasetId} at version ${datasetVersion}`);\n }\n\n items = versionItems.map(v => ({\n id: v.id,\n datasetVersion: v.datasetVersion,\n input: v.input,\n groundTruth: v.groundTruth,\n metadata: v.metadata,\n }));\n } else {\n throw new Error('No data source: provide datasetId or data');\n }\n\n // Phase B — Resolve task function\n let execFn: (item: ExperimentItem, signal?: AbortSignal) => Promise<ExecutionResult>;\n\n if (config.task) {\n // Inline task path\n const taskFn = config.task;\n execFn = async (item, itemSignal) => {\n try {\n const result = await taskFn({\n input: item.input,\n mastra,\n groundTruth: item.groundTruth,\n metadata: item.metadata,\n signal: itemSignal,\n });\n return { output: result, error: null, traceId: null };\n } catch (err: unknown) {\n return {\n output: null,\n error: {\n message: err instanceof Error ? err.message : String(err),\n stack: err instanceof Error ? err.stack : undefined,\n },\n traceId: null,\n };\n }\n };\n } else if (targetType && targetId) {\n // Registry-based target path (existing)\n const target = resolveTarget(mastra, targetType, targetId);\n if (!target) {\n throw new Error(`Target not found: ${targetType}/${targetId}`);\n }\n execFn = (item, itemSignal) => executeTarget(target, targetType, item, { signal: itemSignal });\n } else {\n throw new Error('No task: provide targetType+targetId or task');\n }\n\n // Resolve scorers\n const scorers = resolveScorers(mastra, scorerInput);\n\n // 5. Create experiment record (if storage available and not pre-created)\n if (experimentsStore) {\n if (!providedExperimentId) {\n // Create new experiment record (sync trigger path)\n await experimentsStore.createExperiment({\n id: experimentId,\n name,\n description,\n metadata,\n datasetId: datasetId ?? null,\n datasetVersion,\n targetType: targetType ?? 'agent',\n targetId: targetId ?? 'inline',\n totalItems: items.length,\n });\n }\n // Update status to running (both sync and async paths)\n // Also set totalItems — needed for the async path where the experiment\n // was created with totalItems: 0 before items were resolved.\n await experimentsStore.updateExperiment({\n id: experimentId,\n status: 'running',\n totalItems: items.length,\n startedAt,\n });\n }\n\n // 6. Execute items with p-map\n let succeededCount = 0;\n let failedCount = 0;\n // Pre-allocate for deterministic ordering (results[i] matches items[i])\n const results: ItemWithScores[] = new Array(items.length);\n\n // Throttled progress updates\n const PROGRESS_UPDATE_INTERVAL = 2000;\n let lastProgressUpdate = 0;\n\n try {\n const pMap = (await import('p-map')).default;\n\n await pMap(\n items.map((item, idx) => ({ item, idx })),\n async ({ item, idx }) => {\n // Check for cancellation\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n const itemStartedAt = new Date();\n // Compose per-item signal (timeout + run-level abort)\n let itemSignal: AbortSignal | undefined = signal;\n if (itemTimeout) {\n const timeoutSignal = AbortSignal.timeout(itemTimeout);\n itemSignal = signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;\n }\n\n // Retry loop\n let retryCount = 0;\n let execResult = await execFn(item, itemSignal);\n\n while (execResult.error && retryCount < maxRetries) {\n // Don't retry abort errors\n if (execResult.error.message.toLowerCase().includes('abort')) break;\n\n retryCount++;\n const delay = Math.min(1000 * Math.pow(2, retryCount - 1), 30000);\n const jitter = delay * 0.2 * Math.random();\n await new Promise(r => setTimeout(r, delay + jitter));\n\n // Re-check cancellation before retry\n if (signal?.aborted) {\n throw new DOMException('Aborted', 'AbortError');\n }\n\n execResult = await execFn(item, itemSignal);\n }\n\n const itemCompletedAt = new Date();\n\n // Track success/failure\n if (execResult.error) {\n failedCount++;\n } else {\n succeededCount++;\n }\n\n // Build item result\n const itemResult: ItemResult = {\n itemId: item.id,\n itemVersion: item.datasetVersion ?? 0,\n input: item.input,\n output: execResult.output,\n groundTruth: item.groundTruth ?? null,\n error: execResult.error,\n startedAt: itemStartedAt,\n completedAt: itemCompletedAt,\n retryCount,\n };\n\n // Run scorers (inline, after target completes)\n const itemScores = await runScorersForItem(\n scorers,\n item,\n execResult.output,\n storage ?? null,\n experimentId,\n targetType ?? 'agent',\n targetId ?? 'inline',\n item.id,\n execResult.scorerInput,\n execResult.scorerOutput,\n execResult.traceId ?? undefined,\n );\n\n // Persist result with scores (if storage available)\n if (experimentsStore) {\n try {\n await experimentsStore.addExperimentResult({\n experimentId,\n itemId: item.id,\n itemDatasetVersion: item.datasetVersion,\n input: item.input,\n output: execResult.output,\n groundTruth: item.groundTruth ?? null,\n error: execResult.error,\n startedAt: itemStartedAt,\n completedAt: itemCompletedAt,\n retryCount,\n traceId: execResult.traceId,\n });\n } catch (persistError) {\n console.warn(`Failed to persist result for item ${item.id}:`, persistError);\n }\n\n // Throttled progress update\n const now = Date.now();\n if (now - lastProgressUpdate >= PROGRESS_UPDATE_INTERVAL) {\n lastProgressUpdate = now;\n try {\n await experimentsStore.updateExperiment({\n id: experimentId,\n succeededCount,\n failedCount,\n });\n } catch {\n // Non-fatal — progress updates are best-effort\n }\n }\n }\n\n // Store at original index for deterministic ordering\n results[idx] = {\n ...itemResult,\n scores: itemScores,\n };\n },\n { concurrency: maxConcurrency },\n );\n } catch {\n // Handle abort or other fatal errors — return partial summary instead of throwing\n const completedAt = new Date();\n const skippedCount = items.length - succeededCount - failedCount;\n\n if (experimentsStore) {\n await experimentsStore.updateExperiment({\n id: experimentId,\n status: 'failed',\n succeededCount,\n failedCount,\n skippedCount,\n completedAt,\n });\n }\n\n return {\n experimentId,\n status: 'failed' as const,\n totalItems: items.length,\n succeededCount,\n failedCount,\n skippedCount,\n completedWithErrors: false,\n startedAt,\n completedAt,\n results: results.filter(Boolean),\n };\n }\n\n // 7. Finalize experiment record\n const completedAt = new Date();\n const status = failedCount === items.length ? 'failed' : 'completed';\n const completedWithErrors = status === 'completed' && failedCount > 0;\n\n const skippedCount = items.length - succeededCount - failedCount;\n if (experimentsStore) {\n await experimentsStore.updateExperiment({\n id: experimentId,\n status,\n succeededCount,\n failedCount,\n skippedCount,\n completedAt,\n });\n }\n\n return {\n experimentId,\n status,\n totalItems: items.length,\n succeededCount,\n failedCount,\n skippedCount,\n completedWithErrors,\n startedAt,\n completedAt,\n results,\n };\n}\n\n/**\n * Resolve a target from Mastra's registries by type and ID.\n */\nfunction resolveTarget(mastra: Mastra, targetType: string, targetId: string): Target | null {\n switch (targetType) {\n case 'agent':\n try {\n return mastra.getAgentById(targetId as any);\n } catch {\n // Try by name if ID lookup fails\n try {\n return mastra.getAgent(targetId);\n } catch {\n return null;\n }\n }\n case 'workflow':\n try {\n return mastra.getWorkflowById(targetId as any);\n } catch {\n // Try by name if ID lookup fails\n try {\n return mastra.getWorkflow(targetId);\n } catch {\n return null;\n }\n }\n case 'scorer':\n try {\n return mastra.getScorerById(targetId as any) ?? null;\n } catch {\n return null;\n }\n case 'processor':\n // Processors not yet in registry - Phase 4\n return null;\n default:\n return null;\n }\n}\n","import { isZodType } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport { MastraError } from '../error/index.js';\nimport type { Mastra } from '../mastra/index.js';\nimport type { DatasetsStorage } from '../storage/domains/datasets/base.js';\nimport type { ExperimentsStorage } from '../storage/domains/experiments/base.js';\nimport type { DatasetRecord, DatasetItem, DatasetItemRow, DatasetVersion } from '../storage/types.js';\nimport { runExperiment } from './experiment/index.js';\nimport type { ExperimentConfig, StartExperimentConfig, ExperimentSummary } from './experiment/types.js';\n\n/**\n * Public API for interacting with a single dataset.\n *\n * Provides methods for item CRUD, versioning, and experiment management.\n * Obtained via `DatasetsManager.get()` or `DatasetsManager.create()`.\n */\nexport class Dataset {\n readonly id: string;\n #mastra: Mastra;\n #datasetsStore?: DatasetsStorage;\n #experimentsStore?: ExperimentsStorage;\n\n constructor(id: string, mastra: Mastra) {\n this.id = id;\n this.#mastra = mastra;\n }\n\n // ---------------------------------------------------------------------------\n // Lazy storage resolution\n // ---------------------------------------------------------------------------\n\n async #getDatasetsStore(): Promise<DatasetsStorage> {\n if (this.#datasetsStore) return this.#datasetsStore;\n\n const storage = this.#mastra.getStorage();\n if (!storage) {\n throw new MastraError({\n id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n text: 'Storage not configured. Configure storage in Mastra instance.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const store = await storage.getStore('datasets');\n if (!store) {\n throw new MastraError({\n id: 'DATASETS_STORE_NOT_AVAILABLE',\n text: 'Datasets store not available. Ensure your storage adapter provides a datasets domain.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n this.#datasetsStore = store;\n return store;\n }\n\n async #getExperimentsStore(): Promise<ExperimentsStorage> {\n if (this.#experimentsStore) return this.#experimentsStore;\n\n const storage = this.#mastra.getStorage();\n if (!storage) {\n throw new MastraError({\n id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n text: 'Storage not configured. Configure storage in Mastra instance.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const store = await storage.getStore('experiments');\n if (!store) {\n throw new MastraError({\n id: 'EXPERIMENTS_STORE_NOT_AVAILABLE',\n text: 'Experiments store not available. Ensure your storage adapter provides an experiments domain.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n this.#experimentsStore = store;\n return store;\n }\n\n // ---------------------------------------------------------------------------\n // Dataset metadata\n // ---------------------------------------------------------------------------\n\n /**\n * Get the full dataset record from storage.\n */\n async getDetails(): Promise<DatasetRecord> {\n const store = await this.#getDatasetsStore();\n const record = await store.getDatasetById({ id: this.id });\n if (!record) {\n throw new MastraError({\n id: 'DATASET_NOT_FOUND',\n text: `Dataset not found: ${this.id}`,\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n return record;\n }\n\n /**\n * Update dataset metadata and/or schemas.\n * Zod schemas are automatically converted to JSON Schema.\n */\n async update(input: {\n name?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n inputSchema?: unknown;\n groundTruthSchema?: unknown;\n }): Promise<DatasetRecord> {\n const store = await this.#getDatasetsStore();\n\n let { inputSchema, groundTruthSchema, ...rest } = input;\n\n if (inputSchema !== undefined && inputSchema !== null && isZodType(inputSchema)) {\n inputSchema = zodToJsonSchema(inputSchema);\n }\n if (groundTruthSchema !== undefined && groundTruthSchema !== null && isZodType(groundTruthSchema)) {\n groundTruthSchema = zodToJsonSchema(groundTruthSchema);\n }\n\n return store.updateDataset({\n id: this.id,\n ...rest,\n inputSchema: inputSchema as Record<string, unknown> | null | undefined,\n groundTruthSchema: groundTruthSchema as Record<string, unknown> | null | undefined,\n });\n }\n\n // ---------------------------------------------------------------------------\n // Item CRUD\n // ---------------------------------------------------------------------------\n\n /**\n * Add a single item to the dataset.\n */\n async addItem(input: {\n input: unknown;\n groundTruth?: unknown;\n metadata?: Record<string, unknown>;\n }): Promise<DatasetItem> {\n const store = await this.#getDatasetsStore();\n return store.addItem({\n datasetId: this.id,\n input: input.input,\n groundTruth: input.groundTruth,\n metadata: input.metadata,\n });\n }\n\n /**\n * Add multiple items to the dataset in bulk.\n */\n async addItems(input: {\n items: Array<{\n input: unknown;\n groundTruth?: unknown;\n metadata?: Record<string, unknown>;\n }>;\n }): Promise<DatasetItem[]> {\n const store = await this.#getDatasetsStore();\n return store.batchInsertItems({\n datasetId: this.id,\n items: input.items,\n });\n }\n\n /**\n * Get a single item by ID, optionally at a specific version.\n */\n async getItem(args: { itemId: string; version?: number }): Promise<DatasetItem | null> {\n const store = await this.#getDatasetsStore();\n return store.getItemById({ id: args.itemId, datasetVersion: args.version });\n }\n\n /**\n * List items in the dataset, optionally at a specific version.\n */\n async listItems(args?: {\n version?: number;\n page?: number;\n perPage?: number;\n search?: string;\n }): Promise<\n | DatasetItem[]\n | { items: DatasetItem[]; pagination: { total: number; page: number; perPage: number | false; hasMore: boolean } }\n > {\n const store = await this.#getDatasetsStore();\n if (args?.version) {\n return store.getItemsByVersion({ datasetId: this.id, version: args.version });\n }\n return store.listItems({\n datasetId: this.id,\n search: args?.search,\n pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n });\n }\n\n /**\n * Update an existing item in the dataset.\n */\n async updateItem(input: {\n itemId: string;\n input?: unknown;\n groundTruth?: unknown;\n metadata?: Record<string, unknown>;\n }): Promise<DatasetItem> {\n const store = await this.#getDatasetsStore();\n return store.updateItem({\n id: input.itemId,\n datasetId: this.id,\n input: input.input,\n groundTruth: input.groundTruth,\n metadata: input.metadata,\n });\n }\n\n /**\n * Delete a single item from the dataset.\n */\n async deleteItem(args: { itemId: string }): Promise<void> {\n const store = await this.#getDatasetsStore();\n return store.deleteItem({ id: args.itemId, datasetId: this.id });\n }\n\n /**\n * Delete multiple items from the dataset in bulk.\n */\n async deleteItems(args: { itemIds: string[] }): Promise<void> {\n const store = await this.#getDatasetsStore();\n return store.batchDeleteItems({ datasetId: this.id, itemIds: args.itemIds });\n }\n\n // ---------------------------------------------------------------------------\n // Versioning\n // ---------------------------------------------------------------------------\n\n /**\n * List all versions of this dataset.\n */\n async listVersions(args?: { page?: number; perPage?: number }): Promise<{\n versions: DatasetVersion[];\n pagination: { total: number; page: number; perPage: number | false; hasMore: boolean };\n }> {\n const store = await this.#getDatasetsStore();\n return store.listDatasetVersions({\n datasetId: this.id,\n pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n });\n }\n\n /**\n * Get full SCD-2 history of a specific item across all dataset versions.\n */\n async getItemHistory(args: { itemId: string }): Promise<DatasetItemRow[]> {\n const store = await this.#getDatasetsStore();\n return store.getItemHistory(args.itemId);\n }\n\n // ---------------------------------------------------------------------------\n // Experiments\n // ---------------------------------------------------------------------------\n\n /**\n * Run an experiment on this dataset and wait for completion.\n */\n async startExperiment<I = unknown, O = unknown, E = unknown>(\n config: StartExperimentConfig<I, O, E>,\n ): Promise<ExperimentSummary> {\n return runExperiment(this.#mastra, { datasetId: this.id, ...config } as ExperimentConfig);\n }\n\n /**\n * Start an experiment asynchronously (fire-and-forget).\n * Returns immediately with the experiment ID and pending status.\n */\n async startExperimentAsync<I = unknown, O = unknown, E = unknown>(\n config: StartExperimentConfig<I, O, E>,\n ): Promise<{ experimentId: string; status: 'pending' }> {\n const experimentsStore = await this.#getExperimentsStore();\n const datasetsStore = await this.#getDatasetsStore();\n\n const dataset = await datasetsStore.getDatasetById({ id: this.id });\n if (!dataset) {\n throw new MastraError({\n id: 'DATASET_NOT_FOUND',\n text: `Dataset not found: ${this.id}`,\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const run = await experimentsStore.createExperiment({\n datasetId: this.id,\n datasetVersion: dataset.version,\n targetType: config.targetType ?? 'agent',\n targetId: config.targetId ?? 'inline',\n totalItems: 0,\n name: config.name,\n description: config.description,\n metadata: config.metadata,\n });\n\n const experimentId = run.id;\n\n // Fire-and-forget — errors are silently caught\n void runExperiment(this.#mastra, {\n datasetId: this.id,\n experimentId,\n ...config,\n } as ExperimentConfig).catch(() => {});\n\n return { experimentId, status: 'pending' as const };\n }\n\n /**\n * List all experiments (runs) for this dataset.\n */\n async listExperiments(args?: { page?: number; perPage?: number }) {\n const experimentsStore = await this.#getExperimentsStore();\n return experimentsStore.listExperiments({\n datasetId: this.id,\n pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n });\n }\n\n /**\n * Get a specific experiment (run) by ID.\n */\n async getExperiment(args: { experimentId: string }) {\n const experimentsStore = await this.#getExperimentsStore();\n return experimentsStore.getExperimentById({ id: args.experimentId });\n }\n\n /**\n * List results for a specific experiment.\n */\n async listExperimentResults(args: { experimentId: string; page?: number; perPage?: number }) {\n const experimentsStore = await this.#getExperimentsStore();\n return experimentsStore.listExperimentResults({\n experimentId: args.experimentId,\n pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n });\n }\n\n /**\n * Delete an experiment (run) by ID.\n */\n async deleteExperiment(args: { experimentId: string }) {\n const experimentsStore = await this.#getExperimentsStore();\n return experimentsStore.deleteExperiment({ id: args.experimentId });\n }\n}\n","import { isZodType } from '@mastra/schema-compat';\nimport { zodToJsonSchema } from '@mastra/schema-compat/zod-to-json';\nimport { MastraError } from '../error/index.js';\nimport type { Mastra } from '../mastra/index.js';\nimport type { DatasetsStorage } from '../storage/domains/datasets/base.js';\nimport type { ExperimentsStorage } from '../storage/domains/experiments/base.js';\nimport { Dataset } from './dataset.js';\nimport { compareExperiments as compareExperimentsInternal } from './experiment/analytics/compare.js';\n\n/**\n * Public API for managing datasets.\n *\n * Provides methods for dataset CRUD and cross-dataset experiment operations.\n * Typically accessed via `mastra.datasets` (Phase 4).\n */\nexport class DatasetsManager {\n #mastra: Mastra;\n #datasetsStore?: DatasetsStorage;\n #experimentsStore?: ExperimentsStorage;\n\n constructor(mastra: Mastra) {\n this.#mastra = mastra;\n }\n\n // ---------------------------------------------------------------------------\n // Lazy storage resolution\n // ---------------------------------------------------------------------------\n\n async #getDatasetsStore(): Promise<DatasetsStorage> {\n if (this.#datasetsStore) return this.#datasetsStore;\n\n const storage = this.#mastra.getStorage();\n if (!storage) {\n throw new MastraError({\n id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n text: 'Storage not configured. Configure storage in Mastra instance.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const store = await storage.getStore('datasets');\n if (!store) {\n throw new MastraError({\n id: 'DATASETS_STORE_NOT_AVAILABLE',\n text: 'Datasets store not available. Ensure your storage adapter provides a datasets domain.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n this.#datasetsStore = store;\n return store;\n }\n\n async #getExperimentsStore(): Promise<ExperimentsStorage> {\n if (this.#experimentsStore) return this.#experimentsStore;\n\n const storage = this.#mastra.getStorage();\n if (!storage) {\n throw new MastraError({\n id: 'DATASETS_STORAGE_NOT_CONFIGURED',\n text: 'Storage not configured. Configure storage in Mastra instance.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const store = await storage.getStore('experiments');\n if (!store) {\n throw new MastraError({\n id: 'EXPERIMENTS_STORE_NOT_AVAILABLE',\n text: 'Experiments store not available. Ensure your storage adapter provides an experiments domain.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n this.#experimentsStore = store;\n return store;\n }\n\n // ---------------------------------------------------------------------------\n // Dataset CRUD\n // ---------------------------------------------------------------------------\n\n /**\n * Create a new dataset.\n * Zod schemas are automatically converted to JSON Schema.\n */\n async create(input: {\n name: string;\n description?: string;\n inputSchema?: unknown;\n groundTruthSchema?: unknown;\n metadata?: Record<string, unknown>;\n }): Promise<Dataset> {\n const store = await this.#getDatasetsStore();\n\n let { inputSchema, groundTruthSchema, ...rest } = input;\n\n if (inputSchema !== undefined && isZodType(inputSchema)) {\n inputSchema = zodToJsonSchema(inputSchema);\n }\n if (groundTruthSchema !== undefined && isZodType(groundTruthSchema)) {\n groundTruthSchema = zodToJsonSchema(groundTruthSchema);\n }\n\n const result = await store.createDataset({\n ...rest,\n inputSchema: inputSchema as Record<string, unknown> | undefined,\n groundTruthSchema: groundTruthSchema as Record<string, unknown> | undefined,\n });\n\n return new Dataset(result.id, this.#mastra);\n }\n\n /**\n * Get an existing dataset by ID.\n * Throws if the dataset does not exist.\n */\n async get(args: { id: string }): Promise<Dataset> {\n const store = await this.#getDatasetsStore();\n const record = await store.getDatasetById({ id: args.id });\n if (!record) {\n throw new MastraError({\n id: 'DATASET_NOT_FOUND',\n text: 'Dataset not found',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n return new Dataset(args.id, this.#mastra);\n }\n\n /**\n * List all datasets with pagination.\n */\n async list(args?: { page?: number; perPage?: number }) {\n const store = await this.#getDatasetsStore();\n return store.listDatasets({\n pagination: { page: args?.page ?? 0, perPage: args?.perPage ?? 20 },\n });\n }\n\n /**\n * Delete a dataset by ID.\n */\n async delete(args: { id: string }) {\n const store = await this.#getDatasetsStore();\n return store.deleteDataset({ id: args.id });\n }\n\n // ---------------------------------------------------------------------------\n // Cross-dataset experiment operations\n // ---------------------------------------------------------------------------\n\n /**\n * Get a specific experiment (run) by ID.\n */\n async getExperiment(args: { experimentId: string }) {\n const experimentsStore = await this.#getExperimentsStore();\n return experimentsStore.getExperimentById({ id: args.experimentId });\n }\n\n /**\n * Compare two or more experiments.\n *\n * Uses the internal `compareExperiments` function for pairwise comparison,\n * then enriches results with per-item input/groundTruth/output data.\n */\n async compareExperiments(args: { experimentIds: string[]; baselineId?: string }) {\n const { experimentIds, baselineId } = args;\n\n if (experimentIds.length < 2) {\n throw new MastraError({\n id: 'COMPARE_INVALID_INPUT',\n text: 'compareExperiments requires at least 2 experiment IDs.',\n domain: 'STORAGE',\n category: 'USER',\n });\n }\n\n const resolvedBaseline = baselineId ?? experimentIds[0]!;\n const otherExperimentId = experimentIds.find(id => id !== resolvedBaseline) ?? experimentIds[1]!;\n\n const internal = await compareExperimentsInternal(this.#mastra, {\n experimentIdA: resolvedBaseline,\n experimentIdB: otherExperimentId,\n });\n\n // Load results for both runs to get input/groundTruth/output\n const experimentsStore = await this.#getExperimentsStore();\n const [resultsA, resultsB] = await Promise.all([\n experimentsStore.listExperimentResults({\n experimentId: resolvedBaseline,\n pagination: { page: 0, perPage: false },\n }),\n experimentsStore.listExperimentResults({\n experimentId: otherExperimentId,\n pagination: { page: 0, perPage: false },\n }),\n ]);\n\n // Build results maps by itemId\n const resultsMapA = new Map(resultsA.results.map(r => [r.itemId, r]));\n const resultsMapB = new Map(resultsB.results.map(r => [r.itemId, r]));\n\n // Transform internal items to MVP shape\n const items = internal.items.map(item => {\n const resultA = resultsMapA.get(item.itemId);\n const resultB = resultsMapB.get(item.itemId);\n\n return {\n itemId: item.itemId,\n input: resultA?.input ?? resultB?.input ?? null,\n groundTruth: resultA?.groundTruth ?? resultB?.groundTruth ?? null,\n results: {\n [resolvedBaseline]: resultA ? { output: resultA.output, scores: item.scoresA } : null,\n [otherExperimentId]: resultB ? { output: resultB.output, scores: item.scoresB } : null,\n },\n };\n });\n\n return {\n baselineId: resolvedBaseline,\n items,\n };\n }\n}\n"]}
@@ -822,11 +822,11 @@ var provider_registry_default = {
822
822
  "gpt-5.2",
823
823
  "gpt-5.2-codex",
824
824
  "gpt-5.3-codex",
825
+ "gpt-5.4",
825
826
  "kimi-k2.5",
826
827
  "minimax-m2.1",
827
828
  "minimax-m2.5",
828
- "minimax-m2.5-free",
829
- "trinity-large-preview-free"
829
+ "minimax-m2.5-free"
830
830
  ],
831
831
  docUrl: "https://opencode.ai/docs/zen",
832
832
  gateway: "models.dev"
@@ -3398,6 +3398,10 @@ var provider_registry_default = {
3398
3398
  "openai/gpt-5.2-pro-2025-12-11",
3399
3399
  "openai/gpt-5.3-chat-latest",
3400
3400
  "openai/gpt-5.3-codex",
3401
+ "openai/gpt-5.4",
3402
+ "openai/gpt-5.4-2026-03-05",
3403
+ "openai/gpt-5.4-pro",
3404
+ "openai/gpt-5.4-pro-2026-03-05",
3401
3405
  "openai/o3",
3402
3406
  "openai/o3-mini",
3403
3407
  "openai/o4-mini"
@@ -4021,11 +4025,11 @@ var provider_registry_default = {
4021
4025
  "gpt-5.2",
4022
4026
  "gpt-5.2-codex",
4023
4027
  "gpt-5.3-codex",
4028
+ "gpt-5.4",
4024
4029
  "kimi-k2.5",
4025
4030
  "minimax-m2.1",
4026
4031
  "minimax-m2.5",
4027
- "minimax-m2.5-free",
4028
- "trinity-large-preview-free"
4032
+ "minimax-m2.5-free"
4029
4033
  ],
4030
4034
  poe: [
4031
4035
  "anthropic/claude-haiku-3",
@@ -6104,6 +6108,10 @@ var provider_registry_default = {
6104
6108
  "openai/gpt-5.2-pro-2025-12-11",
6105
6109
  "openai/gpt-5.3-chat-latest",
6106
6110
  "openai/gpt-5.3-codex",
6111
+ "openai/gpt-5.4",
6112
+ "openai/gpt-5.4-2026-03-05",
6113
+ "openai/gpt-5.4-pro",
6114
+ "openai/gpt-5.4-pro-2026-03-05",
6107
6115
  "openai/o3",
6108
6116
  "openai/o3-mini",
6109
6117
  "openai/o4-mini"
@@ -6415,7 +6423,7 @@ var GatewayRegistry = class _GatewayRegistry {
6415
6423
  }
6416
6424
  this.isRefreshing = true;
6417
6425
  try {
6418
- const { ModelsDevGateway } = await import('./models-dev-W3LXZTEB.js');
6426
+ const { ModelsDevGateway } = await import('./models-dev-CMQG6EMO.js');
6419
6427
  const { NetlifyGateway } = await import('./netlify-U7E6U3E4.js');
6420
6428
  const { fetchProvidersFromGateways, writeRegistryFiles } = await import('./registry-generator-NVVOHGRE.js');
6421
6429
  const defaultGateways = [new ModelsDevGateway({}), new NetlifyGateway()];
@@ -6534,5 +6542,5 @@ if (autoRefreshEnabled) {
6534
6542
  }
6535
6543
 
6536
6544
  export { GatewayRegistry, PROVIDER_MODELS, PROVIDER_REGISTRY, getProviderConfig, getRegisteredProviders, isProviderRegistered, isValidModelId, parseModelString };
6537
- //# sourceMappingURL=chunk-4BXXAZ75.js.map
6538
- //# sourceMappingURL=chunk-4BXXAZ75.js.map
6545
+ //# sourceMappingURL=chunk-HQTHWVAK.js.map
6546
+ //# sourceMappingURL=chunk-HQTHWVAK.js.map