@mastra/server 1.78.1-alpha.0 → 1.79.0-alpha.10

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 (288) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +11 -1
  2. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/schemas.d.ts +3 -1
  3. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/util.d.ts +2 -0
  4. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +206 -873
  5. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-v6/dist/index.d.ts +851 -1176
  6. package/dist/{a2a-D5CGFO8W.cjs → a2a-B465DD1u.cjs} +3 -3
  7. package/dist/a2a-B465DD1u.cjs.map +1 -0
  8. package/dist/{a2a-Dg3ylOKc.js → a2a-CHBSYHxu.js} +3 -3
  9. package/dist/{a2a-D5CGFO8W.cjs.map → a2a-CHBSYHxu.js.map} +1 -1
  10. package/dist/{agents-D9vpLghy.cjs → agents-DoNMSCMt.cjs} +4 -2
  11. package/dist/agents-DoNMSCMt.cjs.map +1 -0
  12. package/dist/{agents-DNWDET4U.js → agents-X1E7fW3p.js} +4 -2
  13. package/dist/agents-X1E7fW3p.js.map +1 -0
  14. package/dist/{api-schema-manifest-aur2BK6a.js → api-schema-manifest-CWRIJP-B.js} +9 -3
  15. package/dist/api-schema-manifest-CWRIJP-B.js.map +1 -0
  16. package/dist/{api-schema-manifest-Dr8PM4Qj.cjs → api-schema-manifest-DUseI2VG.cjs} +9 -3
  17. package/dist/api-schema-manifest-DUseI2VG.cjs.map +1 -0
  18. package/dist/{background-tasks-BbYzMhlD.cjs → background-tasks-CabImVak.cjs} +3 -3
  19. package/dist/{background-tasks-BbYzMhlD.cjs.map → background-tasks-CabImVak.cjs.map} +1 -1
  20. package/dist/{background-tasks-zvlIcbhg.js → background-tasks-oBaLtnCn.js} +3 -3
  21. package/dist/{background-tasks-zvlIcbhg.js.map → background-tasks-oBaLtnCn.js.map} +1 -1
  22. package/dist/{builder-registry-DagCZI4A.cjs → builder-registry-D0frV8lQ.cjs} +3 -3
  23. package/dist/{builder-registry-DagCZI4A.cjs.map → builder-registry-D0frV8lQ.cjs.map} +1 -1
  24. package/dist/{builder-registry-1GwmVVwr.js → builder-registry-DOkLe8ES.js} +3 -3
  25. package/dist/{builder-registry-1GwmVVwr.js.map → builder-registry-DOkLe8ES.js.map} +1 -1
  26. package/dist/{channels-B3aoI-f1.js → channels-BOxgHvzI.js} +2 -2
  27. package/dist/{channels-B3aoI-f1.js.map → channels-BOxgHvzI.js.map} +1 -1
  28. package/dist/{channels-5J7CTFyY.cjs → channels-CBIopVWd.cjs} +2 -2
  29. package/dist/{channels-5J7CTFyY.cjs.map → channels-CBIopVWd.cjs.map} +1 -1
  30. package/dist/{datasets-BdD8JWhx.cjs → datasets-BUC5T-fd.cjs} +6 -1
  31. package/dist/datasets-BUC5T-fd.cjs.map +1 -0
  32. package/dist/{datasets-CKwh-k4I.js → datasets-CCWuznUu.js} +6 -1
  33. package/dist/datasets-CCWuznUu.js.map +1 -0
  34. package/dist/{dist-D5O8s1u2.cjs → dist-3FPW9nVj.cjs} +3 -3
  35. package/dist/{dist-D5O8s1u2.cjs.map → dist-3FPW9nVj.cjs.map} +1 -1
  36. package/dist/{dist-B8rA8_Wt.cjs → dist-9c3PXXpk.cjs} +36612 -30313
  37. package/dist/dist-9c3PXXpk.cjs.map +1 -0
  38. package/dist/{dist-Bw2XgCSY.cjs → dist-B5OwHWTo.cjs} +3 -3
  39. package/dist/{dist-Bw2XgCSY.cjs.map → dist-B5OwHWTo.cjs.map} +1 -1
  40. package/dist/{dist-C5TZXkhS.js → dist-B_bet8uz.js} +2 -2
  41. package/dist/{dist-C5TZXkhS.js.map → dist-B_bet8uz.js.map} +1 -1
  42. package/dist/{dist-8fx1_bLF.js → dist-BwYL7Ykb.js} +3 -3
  43. package/dist/{dist-8fx1_bLF.js.map → dist-BwYL7Ykb.js.map} +1 -1
  44. package/dist/{dist-_RnqhYfY.js → dist-BxMmGD3n.js} +3 -3
  45. package/dist/{dist-_RnqhYfY.js.map → dist-BxMmGD3n.js.map} +1 -1
  46. package/dist/{dist-D1oSHJhK.js → dist-CBRJax5e.js} +3 -3
  47. package/dist/{dist-D1oSHJhK.js.map → dist-CBRJax5e.js.map} +1 -1
  48. package/dist/{dist-D5mpJHHH.cjs → dist-CQ3FSKT-.cjs} +3 -3
  49. package/dist/{dist-D5mpJHHH.cjs.map → dist-CQ3FSKT-.cjs.map} +1 -1
  50. package/dist/{dist-CgemVduI.cjs → dist-DC1Pewf5.cjs} +4 -4
  51. package/dist/{dist-CgemVduI.cjs.map → dist-DC1Pewf5.cjs.map} +1 -1
  52. package/dist/{dist-CdMzvOLk.js → dist-DGCnbhNe.js} +36547 -30248
  53. package/dist/dist-DGCnbhNe.js.map +1 -0
  54. package/dist/{dist-BCTqy9i3.js → dist-DOWsEmo6.js} +4 -4
  55. package/dist/{dist-BCTqy9i3.js.map → dist-DOWsEmo6.js.map} +1 -1
  56. package/dist/{dist-Bz4l8I_x.js → dist-DcoIg_tp.js} +3 -3
  57. package/dist/{dist-Bz4l8I_x.js.map → dist-DcoIg_tp.js.map} +1 -1
  58. package/dist/{dist-UACuV_1t.cjs → dist-UKEksCGq.cjs} +3 -3
  59. package/dist/{dist-UACuV_1t.cjs.map → dist-UKEksCGq.cjs.map} +1 -1
  60. package/dist/{dist-tYOY8gEs.cjs → dist-rDRetJVY.cjs} +2 -2
  61. package/dist/{dist-tYOY8gEs.cjs.map → dist-rDRetJVY.cjs.map} +1 -1
  62. package/dist/docs/SKILL.md +2 -2
  63. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  64. package/dist/docs/references/docs-guides-mcp-authentication-authorization.md +2 -2
  65. package/dist/docs/references/{reference-observability-tracing-trace-query.md → reference-observability-tracing-advanced-queries.md} +486 -158
  66. package/dist/{dynamic-workflows-BL3eD0zL.cjs → dynamic-workflows-DXlkr-jK.cjs} +2 -2
  67. package/dist/{dynamic-workflows-BL3eD0zL.cjs.map → dynamic-workflows-DXlkr-jK.cjs.map} +1 -1
  68. package/dist/{dynamic-workflows-BJfoQMo8.js → dynamic-workflows-Rr_6ac1y.js} +2 -2
  69. package/dist/{dynamic-workflows-BJfoQMo8.js.map → dynamic-workflows-Rr_6ac1y.js.map} +1 -1
  70. package/dist/{editor-builder-DqHKoEDx.cjs → editor-builder-BclcHxN6.cjs} +2 -2
  71. package/dist/{editor-builder-DqHKoEDx.cjs.map → editor-builder-BclcHxN6.cjs.map} +1 -1
  72. package/dist/{editor-builder-CeLVu_FT.js → editor-builder-D16kc1P6.js} +3 -3
  73. package/dist/{editor-builder-CeLVu_FT.js.map → editor-builder-D16kc1P6.js.map} +1 -1
  74. package/dist/{editor-builder-BOmAPurW.cjs → editor-builder-DXHiPX1A.cjs} +3 -3
  75. package/dist/{editor-builder-BOmAPurW.cjs.map → editor-builder-DXHiPX1A.cjs.map} +1 -1
  76. package/dist/{editor-builder-DHqCWGd2.js → editor-builder-s9WqPJgA.js} +2 -2
  77. package/dist/{editor-builder-DHqCWGd2.js.map → editor-builder-s9WqPJgA.js.map} +1 -1
  78. package/dist/{observability-new-endpoints-BoALDMSi.cjs → observability-new-endpoints-AMp9bnMV.cjs} +85 -17
  79. package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +1 -0
  80. package/dist/{observability-new-endpoints-CB7T6Z7c.js → observability-new-endpoints-BU8JYPfh.js} +86 -18
  81. package/dist/observability-new-endpoints-BU8JYPfh.js.map +1 -0
  82. package/dist/{route-builder-2yrD15TL.cjs → route-builder-BNZs643f.cjs} +123 -17
  83. package/dist/{route-builder-2yrD15TL.cjs.map → route-builder-BNZs643f.cjs.map} +1 -1
  84. package/dist/{route-builder-lBil8Cvo.js → route-builder-BfQYtclb.js} +125 -19
  85. package/dist/route-builder-BfQYtclb.js.map +1 -0
  86. package/dist/{routes-CuJPLAh8.cjs → routes-DPojsNf1.cjs} +16 -15
  87. package/dist/routes-DPojsNf1.cjs.map +1 -0
  88. package/dist/{routes-BhI1lW_W.js → routes-rwufkyUe.js} +17 -16
  89. package/dist/routes-rwufkyUe.js.map +1 -0
  90. package/dist/{schedules-CrAmZ2gu.js → schedules-BQYgaz66.js} +3 -3
  91. package/dist/{schedules-CrAmZ2gu.js.map → schedules-BQYgaz66.js.map} +1 -1
  92. package/dist/{schedules-B0g72u5Y.cjs → schedules-Bj-giFbc.cjs} +3 -3
  93. package/dist/{schedules-B0g72u5Y.cjs.map → schedules-Bj-giFbc.cjs.map} +1 -1
  94. package/dist/schema-Drf2W04o.js +2 -0
  95. package/dist/schema-EQanefYq.cjs +1 -0
  96. package/dist/{schema-e0VHpMt0-BS9KHnuT.cjs → schema-e0VHpMt0-C0452jOk.cjs} +2 -2
  97. package/dist/{schema-e0VHpMt0-BS9KHnuT.cjs.map → schema-e0VHpMt0-C0452jOk.cjs.map} +1 -1
  98. package/dist/{schema-e0VHpMt0-CvPvLS06.js → schema-e0VHpMt0-CVP5Hnxy.js} +2 -2
  99. package/dist/{schema-e0VHpMt0-CvPvLS06.js.map → schema-e0VHpMt0-CVP5Hnxy.js.map} +1 -1
  100. package/dist/server/a2a/tasks.d.ts +2 -2
  101. package/dist/server/a2a/tasks.d.ts.map +1 -1
  102. package/dist/server/handlers/a2a.cjs +1 -1
  103. package/dist/server/handlers/a2a.d.ts +2 -2
  104. package/dist/server/handlers/a2a.d.ts.map +1 -1
  105. package/dist/server/handlers/a2a.js +1 -1
  106. package/dist/server/handlers/agent-builder.cjs +4 -4
  107. package/dist/server/handlers/agent-builder.js +4 -4
  108. package/dist/server/handlers/agent-controller.cjs +259 -156
  109. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  110. package/dist/server/handlers/agent-controller.d.ts +201 -150
  111. package/dist/server/handlers/agent-controller.d.ts.map +1 -1
  112. package/dist/server/handlers/agent-controller.js +259 -157
  113. package/dist/server/handlers/agent-controller.js.map +1 -1
  114. package/dist/server/handlers/agent-versions.cjs +2 -2
  115. package/dist/server/handlers/agent-versions.js +2 -2
  116. package/dist/server/handlers/agents.cjs +47 -27
  117. package/dist/server/handlers/agents.cjs.map +1 -1
  118. package/dist/server/handlers/agents.d.ts +14 -0
  119. package/dist/server/handlers/agents.d.ts.map +1 -1
  120. package/dist/server/handlers/agents.js +47 -27
  121. package/dist/server/handlers/agents.js.map +1 -1
  122. package/dist/server/handlers/auth.cjs +1 -1
  123. package/dist/server/handlers/auth.js +1 -1
  124. package/dist/server/handlers/background-tasks.cjs +1 -1
  125. package/dist/server/handlers/background-tasks.js +1 -1
  126. package/dist/server/handlers/builder-registry.cjs +1 -1
  127. package/dist/server/handlers/builder-registry.js +1 -1
  128. package/dist/server/handlers/channels.cjs +1 -1
  129. package/dist/server/handlers/channels.js +1 -1
  130. package/dist/server/handlers/conversations.cjs +2 -2
  131. package/dist/server/handlers/conversations.js +2 -2
  132. package/dist/server/handlers/datasets.cjs +12 -6
  133. package/dist/server/handlers/datasets.cjs.map +1 -1
  134. package/dist/server/handlers/datasets.d.ts +4 -0
  135. package/dist/server/handlers/datasets.d.ts.map +1 -1
  136. package/dist/server/handlers/datasets.js +12 -6
  137. package/dist/server/handlers/datasets.js.map +1 -1
  138. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  139. package/dist/server/handlers/dynamic-workflows.js +1 -1
  140. package/dist/server/handlers/editor-builder.cjs +1 -1
  141. package/dist/server/handlers/editor-builder.js +1 -1
  142. package/dist/server/handlers/error.cjs +14 -5
  143. package/dist/server/handlers/error.cjs.map +1 -1
  144. package/dist/server/handlers/error.d.ts.map +1 -1
  145. package/dist/server/handlers/error.js +14 -5
  146. package/dist/server/handlers/error.js.map +1 -1
  147. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  148. package/dist/server/handlers/favorites-enrichment.js +1 -1
  149. package/dist/server/handlers/logs.cjs +2 -2
  150. package/dist/server/handlers/logs.js +2 -2
  151. package/dist/server/handlers/mcp-client-versions.cjs +2 -2
  152. package/dist/server/handlers/mcp-client-versions.js +2 -2
  153. package/dist/server/handlers/mcp.cjs +1 -1
  154. package/dist/server/handlers/mcp.js +1 -1
  155. package/dist/server/handlers/memory.cjs +2 -2
  156. package/dist/server/handlers/memory.js +2 -2
  157. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  158. package/dist/server/handlers/observability-new-endpoints.d.ts +443 -83
  159. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  160. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  161. package/dist/server/handlers/observability-shared.cjs +125 -9
  162. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  163. package/dist/server/handlers/observability-shared.d.ts +38 -2
  164. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  165. package/dist/server/handlers/observability-shared.js +118 -10
  166. package/dist/server/handlers/observability-shared.js.map +1 -1
  167. package/dist/server/handlers/observability.cjs +2 -2
  168. package/dist/server/handlers/observability.js +2 -2
  169. package/dist/server/handlers/plans.cjs +3 -3
  170. package/dist/server/handlers/plans.js +3 -3
  171. package/dist/server/handlers/processor-providers.cjs +1 -1
  172. package/dist/server/handlers/processor-providers.js +1 -1
  173. package/dist/server/handlers/processors.cjs +1 -1
  174. package/dist/server/handlers/processors.js +1 -1
  175. package/dist/server/handlers/prompt-block-versions.cjs +2 -2
  176. package/dist/server/handlers/prompt-block-versions.js +2 -2
  177. package/dist/server/handlers/responses.cjs +2 -2
  178. package/dist/server/handlers/responses.js +2 -2
  179. package/dist/server/handlers/responses.storage.cjs +1 -1
  180. package/dist/server/handlers/responses.storage.js +1 -1
  181. package/dist/server/handlers/schedules.cjs +1 -1
  182. package/dist/server/handlers/schedules.js +1 -1
  183. package/dist/server/handlers/scorer-versions.cjs +2 -2
  184. package/dist/server/handlers/scorer-versions.js +2 -2
  185. package/dist/server/handlers/scores.cjs +1 -1
  186. package/dist/server/handlers/scores.js +1 -1
  187. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  188. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  189. package/dist/server/handlers/stored-agents.cjs +3 -3
  190. package/dist/server/handlers/stored-agents.js +3 -3
  191. package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
  192. package/dist/server/handlers/stored-mcp-clients.js +2 -2
  193. package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
  194. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  195. package/dist/server/handlers/stored-scorers.cjs +2 -2
  196. package/dist/server/handlers/stored-scorers.js +2 -2
  197. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  198. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  199. package/dist/server/handlers/stored-skills.cjs +3 -3
  200. package/dist/server/handlers/stored-skills.js +3 -3
  201. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  202. package/dist/server/handlers/stored-workspaces.js +2 -2
  203. package/dist/server/handlers/system.cjs +3 -3
  204. package/dist/server/handlers/system.d.ts +12 -0
  205. package/dist/server/handlers/system.d.ts.map +1 -1
  206. package/dist/server/handlers/system.js +3 -3
  207. package/dist/server/handlers/tool-providers.cjs +1 -1
  208. package/dist/server/handlers/tool-providers.js +1 -1
  209. package/dist/server/handlers/tools.cjs +6 -6
  210. package/dist/server/handlers/tools.js +6 -6
  211. package/dist/server/handlers/utils.cjs +2 -1
  212. package/dist/server/handlers/utils.d.ts +9 -0
  213. package/dist/server/handlers/utils.d.ts.map +1 -1
  214. package/dist/server/handlers/utils.js +2 -2
  215. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  216. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  217. package/dist/server/handlers/vector.cjs +1 -1
  218. package/dist/server/handlers/vector.js +1 -1
  219. package/dist/server/handlers/workflow-builder.cjs +1 -1
  220. package/dist/server/handlers/workflow-builder.d.ts.map +1 -1
  221. package/dist/server/handlers/workflow-builder.js +1 -1
  222. package/dist/server/handlers/workflows.cjs +4 -4
  223. package/dist/server/handlers/workflows.js +4 -4
  224. package/dist/server/handlers/workspace.cjs +1 -1
  225. package/dist/server/handlers/workspace.js +1 -1
  226. package/dist/server/handlers.cjs +2 -2
  227. package/dist/server/handlers.js +2 -2
  228. package/dist/server/schemas/agents.d.ts +5 -0
  229. package/dist/server/schemas/agents.d.ts.map +1 -1
  230. package/dist/server/schemas/datasets.d.ts +2 -0
  231. package/dist/server/schemas/datasets.d.ts.map +1 -1
  232. package/dist/server/schemas/index.cjs +8 -8
  233. package/dist/server/schemas/index.js +8 -8
  234. package/dist/server/schemas/system.d.ts +12 -0
  235. package/dist/server/schemas/system.d.ts.map +1 -1
  236. package/dist/server/server-adapter/api-schema-manifest.d.ts +2 -0
  237. package/dist/server/server-adapter/api-schema-manifest.d.ts.map +1 -1
  238. package/dist/server/server-adapter/index.cjs +9 -4
  239. package/dist/server/server-adapter/index.cjs.map +1 -1
  240. package/dist/server/server-adapter/index.d.ts.map +1 -1
  241. package/dist/server/server-adapter/index.js +9 -4
  242. package/dist/server/server-adapter/index.js.map +1 -1
  243. package/dist/server/server-adapter/openapi-utils.d.ts +19 -1
  244. package/dist/server/server-adapter/openapi-utils.d.ts.map +1 -1
  245. package/dist/server/server-adapter/routes/agent-controller.d.ts.map +1 -1
  246. package/dist/server/server-adapter/routes/datasets.d.ts +4 -0
  247. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  248. package/dist/server/server-adapter/routes/observability.d.ts +221 -41
  249. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  250. package/dist/server/server-adapter/routes/system.d.ts +12 -0
  251. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  252. package/dist/{system-DY6UweSl.cjs → system-BvpFMIJB.cjs} +7 -1
  253. package/dist/system-BvpFMIJB.cjs.map +1 -0
  254. package/dist/{system-MGpkVA20.js → system-CpzPxRRq.js} +7 -1
  255. package/dist/system-CpzPxRRq.js.map +1 -0
  256. package/dist/{utils-D5DHrO3K.js → utils-BBJlS81s.js} +19 -2
  257. package/dist/{utils-D5DHrO3K.js.map → utils-BBJlS81s.js.map} +1 -1
  258. package/dist/{utils-tmrFs-gf.js → utils-DCAUeb6M.js} +3 -3
  259. package/dist/{utils-tmrFs-gf.js.map → utils-DCAUeb6M.js.map} +1 -1
  260. package/dist/{utils-BZdnPmsW.cjs → utils-DCgeTrq2.cjs} +3 -3
  261. package/dist/{utils-BZdnPmsW.cjs.map → utils-DCgeTrq2.cjs.map} +1 -1
  262. package/dist/{utils-CczRcgHQ.cjs → utils-Du-EpvDs.cjs} +24 -1
  263. package/dist/{utils-CczRcgHQ.cjs.map → utils-Du-EpvDs.cjs.map} +1 -1
  264. package/dist/{workflow-builder-DdSutoga.cjs → workflow-builder-Brj3IArM.cjs} +6 -6
  265. package/dist/workflow-builder-Brj3IArM.cjs.map +1 -0
  266. package/dist/{workflow-builder-DJ0eeJuG.js → workflow-builder-DOa1Vx6w.js} +6 -6
  267. package/dist/workflow-builder-DOa1Vx6w.js.map +1 -0
  268. package/package.json +10 -11
  269. package/dist/a2a-Dg3ylOKc.js.map +0 -1
  270. package/dist/agents-D9vpLghy.cjs.map +0 -1
  271. package/dist/agents-DNWDET4U.js.map +0 -1
  272. package/dist/api-schema-manifest-Dr8PM4Qj.cjs.map +0 -1
  273. package/dist/api-schema-manifest-aur2BK6a.js.map +0 -1
  274. package/dist/datasets-BdD8JWhx.cjs.map +0 -1
  275. package/dist/datasets-CKwh-k4I.js.map +0 -1
  276. package/dist/dist-B8rA8_Wt.cjs.map +0 -1
  277. package/dist/dist-CdMzvOLk.js.map +0 -1
  278. package/dist/observability-new-endpoints-BoALDMSi.cjs.map +0 -1
  279. package/dist/observability-new-endpoints-CB7T6Z7c.js.map +0 -1
  280. package/dist/route-builder-lBil8Cvo.js.map +0 -1
  281. package/dist/routes-BhI1lW_W.js.map +0 -1
  282. package/dist/routes-CuJPLAh8.cjs.map +0 -1
  283. package/dist/schema-BVcoNfni.cjs +0 -1
  284. package/dist/schema-Xxr5X5Je.js +0 -2
  285. package/dist/system-DY6UweSl.cjs.map +0 -1
  286. package/dist/system-MGpkVA20.js.map +0 -1
  287. package/dist/workflow-builder-DJ0eeJuG.js.map +0 -1
  288. package/dist/workflow-builder-DdSutoga.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-BOmAPurW.cjs","names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor-builder-DXHiPX1A.cjs","names":["agentFeaturesSchema","HTTPException","createRoute","builderSettingsResponseSchema","handleError","builderAvailableModelsResponseSchema","buildProvidersList","infrastructureStatusResponseSchema"],"sources":["../src/server/utils/resolve-builder-model-policy.ts","../src/server/handlers/editor-builder.ts"],"sourcesContent":["import type { BuilderModelPolicy } from '@mastra/core/agent-builder/ee';\nimport type { IMastraEditor } from '@mastra/core/editor';\n\n/**\n * Server-side wrapper around `builderToModelPolicy`.\n *\n * Handles the optional `IMastraEditor` builder API surface (older / OSS editors\n * may not implement `hasEnabledBuilderConfig` / `resolveBuilder`) and returns\n * a uniform `BuilderModelPolicy` to every call site.\n *\n * Returns `{ active: false }` whenever:\n * - no editor is configured,\n * - the editor doesn't expose builder methods,\n * - the builder config is disabled, or\n * - resolving the builder fails / yields nothing.\n *\n * The `@mastra/core/agent-builder/ee` subpath is loaded lazily so this module\n * remains importable on `@mastra/core` versions that pre-date the subpath\n * (the subpath was added in core 1.34.0). The dynamic import is only reached\n * once an editor is actually configured, by which point a compatible core is\n * guaranteed.\n */\nexport async function resolveBuilderModelPolicy(editor: IMastraEditor | undefined): Promise<BuilderModelPolicy> {\n if (!editor) return { active: false };\n if (typeof editor.resolveBuilder !== 'function') return { active: false };\n if (typeof editor.hasEnabledBuilderConfig === 'function' && !editor.hasEnabledBuilderConfig()) {\n return { active: false };\n }\n\n // Degrade to inactive on builder-resolution failure rather than letting the\n // rejection escape: agent execution routes seed this on every request, so a\n // transient failure must not 500 the entire route.\n try {\n const builder = await editor.resolveBuilder();\n const { builderToModelPolicy } = await import('@mastra/core/agent-builder/ee');\n return builderToModelPolicy(builder);\n } catch {\n return { active: false };\n }\n}\n","import type { Mastra } from '@mastra/core';\nimport type { ChannelProvider } from '@mastra/core/channels';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderAvailableModelsResponseSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { resolveBuilderModelPolicy } from '../utils/resolve-builder-model-policy';\nimport { buildProvidersList } from './agents';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n // Lazy-load the EE subpath so this module remains importable on\n // `@mastra/core` versions that pre-date it (added in core 1.34.0).\n // We only reach here after `builder.enabled` is true, which guarantees\n // a compatible core.\n const { builderToModelPolicy, resolvePickerVisibility } = await import('@mastra/core/agent-builder/ee');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/models/available\n *\n * Returns the configured AI providers/models the agent builder may use. The\n * server is the single authority: it scopes the list to providers with a\n * configured API key (`connected`) and applies the active builder model\n * policy via `isModelAllowed`, so the Studio surfaces can render the response\n * verbatim without importing any EE matcher into the browser.\n *\n * - Providers without a configured API key are always omitted — the builder\n * decides the agent's model from this list, so an unconnected provider would\n * produce an agent that can never run.\n * - Policy inactive (or no allowlist) ⇒ all connected providers are returned.\n * - Policy active with an allowlist ⇒ each connected provider's models are\n * filtered, and providers left with no allowed models are omitted entirely.\n */\nexport const GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/models/available',\n responseType: 'json',\n responseSchema: builderAvailableModelsResponseSchema,\n summary: 'List builder-available AI models',\n description: 'Returns AI providers/models filtered by the active agent-builder model policy.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n // Only surface providers whose API key is configured (`connected`). The\n // agent builder decides the agent's model from this list, so including\n // providers without a key lets it pick a model that can never run. We\n // scope to connected providers so every choice is actually usable.\n const providers = (await buildProvidersList(mastra)).filter(provider => provider.connected);\n const policy = await resolveBuilderModelPolicy(mastra.getEditor());\n\n // Inactive policy (or no allowlist) ⇒ no allowlist filtering to apply.\n if (!policy.active || !policy.allowed || policy.allowed.length === 0) {\n return { providers };\n }\n\n // Lazy-load the EE matcher (server-only); mirrors the convention used by\n // resolve-builder-model-policy and the settings handler.\n const { isModelAllowed } = await import('@mastra/core/agent-builder/ee');\n\n const filtered = providers\n .map(provider => ({\n ...provider,\n models: provider.models.filter(modelId => isModelAllowed(policy.allowed, { provider: provider.id, modelId })),\n }))\n .filter(provider => provider.models.length > 0);\n\n return { providers: filtered };\n } catch (error) {\n return handleError(error, 'Error fetching available models');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n // Prefer resolveChannels() so a live channels resolver (e.g. @mastra/connect's\n // channels()) reports connections added after boot; older cores lack the method.\n const mastraWithResolver = mastra as typeof mastra & {\n resolveChannels?: () => Promise<Record<string, ChannelProvider>>;\n };\n const channelProviders =\n typeof mastraWithResolver.resolveChannels === 'function'\n ? await mastraWithResolver.resolveChannels()\n : (mastra.getChannelProviders() ?? {});\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { j as providerSchema } from "./agents-DNWDET4U.js";
1
+ import { j as providerSchema } from "./agents-X1E7fW3p.js";
2
2
  import { z } from "zod/v4";
3
3
  //#region src/server/schemas/editor-builder.ts
4
4
  /**
@@ -191,4 +191,4 @@ const builderAvailableModelsResponseSchema = z.object({ providers: z.array(provi
191
191
  //#endregion
192
192
  export { builderModelPolicySchema as a, defaultModelEntrySchema as c, providerModelEntrySchema as d, builderAvailableModelsResponseSchema as i, infrastructureStatusResponseSchema as l, agentFeaturesSchema as n, builderPickerSchema as o, agentModelsSchema as r, builderSettingsResponseSchema as s, agentConfigurationSchema as t, pickerAllowlistSchema as u };
193
193
 
194
- //# sourceMappingURL=editor-builder-DHqCWGd2.js.map
194
+ //# sourceMappingURL=editor-builder-s9WqPJgA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-DHqCWGd2.js","names":[],"sources":["../src/server/schemas/editor-builder.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"],"mappings":"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"}
1
+ {"version":3,"file":"editor-builder-s9WqPJgA.js","names":[],"sources":["../src/server/schemas/editor-builder.ts"],"sourcesContent":["import { z } from 'zod/v4';\nimport { providerSchema } from './agents';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\n/**\n * Response schema for GET /editor/builder/models/available.\n *\n * Same provider shape as GET /agents/providers, but each provider's `models`\n * list is already filtered by the active builder model policy (server applies\n * the EE allowlist). Providers with no allowed models are omitted entirely so\n * the Studio model picker can render the response verbatim.\n */\nexport const builderAvailableModelsResponseSchema = z.object({\n providers: z.array(providerSchema),\n});\n\nexport type BuilderAvailableModelsResponse = z.infer<typeof builderAvailableModelsResponseSchema>;\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n"],"mappings":";;;;;;;;;;;;;;;;;AAiBA,MAAa,sBAAsB,EAAE,OAAO;CAC1C,OAAO,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC5B,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,WAAW,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC9B,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,QAAQ,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,WAAW,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,WAAW,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,cAAc,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;;;;;;CAM9B,OAAO,EAAE,QAAQ,CAAC,CAAC,SAAS;AAC9B,CAAC;;;;;;;;;;AAaD,MAAM,2BAA2B,EAC9B,OAAO;CACN,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AACtC,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,4BAA4B,EAC/B,OAAO;CACN,MAAM,EAAE,QAAQ,QAAQ;CACxB,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AACtC,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,+BAA+B,EAClC,OAAO;CACN,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,gCAAgC,EACnC,OAAO;CACN,MAAM,EAAE,QAAQ,QAAQ;CACxB,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CACD,OAAO;AAKV,MAAa,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,wBAAwB,CAAC;AACrG,MAAa,0BAA0B,EAAE,MAAM,CAAC,+BAA+B,4BAA4B,CAAC;;;;AAK5G,MAAa,oBAAoB,EAAE,OAAO;CACxC,SAAS,EAAE,MAAM,wBAAwB,CAAC,CAAC,SAAS;CACpD,SAAS,wBAAwB,SAAS;AAC5C,CAAC;;;;;;;;;AAUD,MAAa,wBAAwB,EAClC,OAAO,EACN,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EACxC,CAAC,CAAC,CACD,OAAO;;;;;;;AAQV,MAAa,2BAA2B,EACrC,OAAO;CACN,QAAQ,kBAAkB,SAAS;CACnC,OAAO,sBAAsB,SAAS;CACtC,QAAQ,sBAAsB,SAAS;CACvC,WAAW,sBAAsB,SAAS;AAC5C,CAAC,CAAC,CACD,SAAS,EAAE,QAAQ,CAAC;;;;;;;;AASvB,MAAa,sBAAsB,EAAE,OAAO;CAC1C,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC3C,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC5C,kBAAkB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACjD,CAAC;;;;;;;;;;AAWD,MAAa,2BAA2B,EAAE,OAAO;CAC/C,QAAQ,EAAE,QAAQ;CAClB,eAAe,EAAE,QAAQ,CAAC,CAAC,SAAS;CACpC,SAAS,EAAE,MAAM,wBAAwB,CAAC,CAAC,SAAS;CACpD,SAAS,wBAAwB,SAAS;AAC5C,CAAC;;;;AAKD,MAAa,gCAAgC,EAAE,OAAO;CACpD,SAAS,EAAE,QAAQ;CACnB,UAAU,EACP,OAAO,EACN,OAAO,oBAAoB,SAAS,EACtC,CAAC,CAAC,CACD,SAAS;CACZ,eAAe,EACZ,OAAO,EACN,OAAO,yBAAyB,SAAS,EAC3C,CAAC,CAAC,CACD,SAAS;CACZ,aAAa,yBAAyB,SAAS;;;;;CAK/C,QAAQ,oBAAoB,SAAS;;;;;;;CAOrC,qBAAqB,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACpD,CAAC;;;;;;;AAQD,MAAa,qCAAqC,EAAE,OAAO;CACzD,UAAU,EAAE,OAAO,EACjB,WAAW,EAAE,MACX,EAAE,OAAO;EACP,IAAI,EAAE,OAAO;EACb,MAAM,EAAE,OAAO;EACf,cAAc,EAAE,QAAQ;EACxB,YAAY,EAAE,OAAO;CACvB,CAAC,CACH,EACF,CAAC;CACD,SAAS,EAAE,OAAO;EAChB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;EAC9B,KAAK,EAAE,OAAO,CAAC,CAAC,SAAS;EACzB,YAAY,EAAE,QAAQ;EACtB,oBAAoB,EAAE,MAAM,EAAE,OAAO,CAAC;EACtC,QAAQ,EAAE,MAAM,EAAE,OAAO;GAAE,KAAK,EAAE,OAAO;GAAG,OAAO,EAAE,OAAO;EAAE,CAAC,CAAC;CAClE,CAAC;CACD,WAAW,EAAE,OAAO;EAClB,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,MAAM,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,YAAY,EAAE,QAAQ;EACtB,eAAe,EAAE,QAAQ;EACzB,YAAY,EAAE,QAAQ;EACtB,oBAAoB,EAAE,OAAO,CAAC,CAAC,SAAS;EACxC,iBAAiB,EAAE,OAAO,CAAC,CAAC,SAAS;EACrC,QAAQ,EAAE,MAAM,EAAE,OAAO;GAAE,KAAK,EAAE,OAAO;GAAG,OAAO,EAAE,OAAO;EAAE,CAAC,CAAC;CAClE,CAAC;CACD,YAAY,EAAE,OAAO,EACnB,UAAU,EAAE,OAAO,EACjB,SAAS,EAAE,QAAQ,EACrB,CAAC,EACH,CAAC;AACH,CAAC;;;;;;;;;AAUD,MAAa,uCAAuC,EAAE,OAAO,EAC3D,WAAW,EAAE,MAAM,cAAc,EACnC,CAAC"}
@@ -1,11 +1,11 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-Bd6kNlEP.cjs");
2
2
  const require_http_exception = require("./http-exception-CKDHupKw.cjs");
3
- const require_route_builder = require("./route-builder-2yrD15TL.cjs");
3
+ const require_route_builder = require("./route-builder-BNZs643f.cjs");
4
4
  const require_constants = require("./constants-e7aaPCLj.cjs");
5
5
  const require_server_handlers_error = require("./server/handlers/error.cjs");
6
6
  const require_server_handlers_observability_list_query_schemas = require("./server/handlers/observability-list-query-schemas.cjs");
7
7
  const require_server_handlers_observability_shared = require("./server/handlers/observability-shared.cjs");
8
- const require_system = require("./system-DY6UweSl.cjs");
8
+ const require_system = require("./system-BvpFMIJB.cjs");
9
9
  const require_server_handlers_author_enrichment = require("./server/handlers/author-enrichment.cjs");
10
10
  const require_server_handlers_authorship = require("./server/handlers/authorship.cjs");
11
11
  let zod_v4 = require("zod/v4");
@@ -44,6 +44,8 @@ let EntityType = /* @__PURE__ */ function(EntityType) {
44
44
  EntityType["WORKFLOW_RUN"] = "workflow_run";
45
45
  /** Memory */
46
46
  EntityType["MEMORY"] = "memory";
47
+ /** Classifier */
48
+ EntityType["CLASSIFIER"] = "classifier";
47
49
  return EntityType;
48
50
  }({});
49
51
  zod_v4.z.date().describe("Database record creation time"), zod_v4.z.date().describe("Database record last update time").nullable();
@@ -723,6 +725,7 @@ zod_v4.z.object({
723
725
  const metricsFilterSchema = zod_v4.z.object({
724
726
  ...commonFilterFields,
725
727
  traceIds: zod_v4.z.array(traceIdField).nonempty().max(1e3).optional().describe("Filter by one or more trace IDs"),
728
+ experimentIds: zod_v4.z.array(experimentIdField).nonempty().max(1e3).optional().describe("Filter by one or more experiment IDs"),
726
729
  name: zod_v4.z.array(zod_v4.z.string()).nonempty().optional().describe("Filter by metric name(s)"),
727
730
  /**
728
731
  * @deprecated Use `executionSource` instead.
@@ -1029,9 +1032,17 @@ const QUERY_TRACES = createNewRoute(require_server_handlers_observability_shared
1029
1032
  require_server_handlers_observability_shared.assertObservabilityTraceQuerySupported(observabilityStore);
1030
1033
  require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.where);
1031
1034
  require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.where);
1035
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSupported(observabilityStore, plan.where);
1036
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootSpanFieldsSupported(observabilityStore, plan);
1037
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSortSupported(observabilityStore, plan.orderBy);
1032
1038
  require_server_handlers_observability_shared.assertObservabilityTraceQueryTenantScopeSupported(observabilityStore, plan.scope);
1033
1039
  if (plan.paginationMode === "delta" && !observabilityStore.getFeatures()?.includes("delta-polling")) throw new require_http_exception.HTTPException(501, { message: "This storage provider does not support observability delta polling" });
1034
1040
  } catch (error) {
1041
+ if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1042
+ code: error.code,
1043
+ message: error.message,
1044
+ issues: error.issues
1045
+ });
1035
1046
  if (error instanceof require_http_exception.HTTPException && error.status === 501) throwTraceQueryError(501, {
1036
1047
  code: "TRACE_QUERY_UNSUPPORTED",
1037
1048
  message: error.message
@@ -1137,8 +1148,15 @@ const AGGREGATE_TRACES = createNewRoute(require_server_handlers_observability_sh
1137
1148
  require_server_handlers_observability_shared.assertObservabilityTraceAggregateSupported(observabilityStore);
1138
1149
  require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.where);
1139
1150
  require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.where);
1151
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSupported(observabilityStore, plan.where);
1152
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootSpanFieldsSupported(observabilityStore, plan);
1140
1153
  require_server_handlers_observability_shared.assertObservabilityTraceQueryTenantScopeSupported(observabilityStore, plan.scope);
1141
1154
  } catch (error) {
1155
+ if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1156
+ code: error.code,
1157
+ message: error.message,
1158
+ issues: error.issues
1159
+ });
1142
1160
  if (error instanceof require_http_exception.HTTPException && error.status === 501) throwTraceQueryError(501, {
1143
1161
  code: "TRACE_AGGREGATE_UNSUPPORTED",
1144
1162
  message: error.message
@@ -1230,8 +1248,16 @@ const QUERY_SPANS = createNewRoute(require_server_handlers_observability_shared.
1230
1248
  try {
1231
1249
  observabilityStore = await require_server_handlers_observability_shared.getObservabilityStore(mastra);
1232
1250
  require_server_handlers_observability_shared.assertObservabilitySpanQuerySupported(observabilityStore);
1251
+ require_server_handlers_observability_shared.assertObservabilitySpanQueryFieldsSupported(observabilityStore, plan.where);
1252
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSupported(observabilityStore, plan.where);
1253
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSortSupported(observabilityStore, plan.orderBy);
1233
1254
  require_server_handlers_observability_shared.assertObservabilityTraceQueryTenantScopeSupported(observabilityStore, plan.scope);
1234
1255
  } catch (error) {
1256
+ if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1257
+ code: error.code,
1258
+ message: "The span query is invalid",
1259
+ issues: error.issues
1260
+ });
1235
1261
  if (error instanceof require_http_exception.HTTPException && error.status === 501) throwTraceQueryError(501, {
1236
1262
  code: "SPAN_QUERY_UNSUPPORTED",
1237
1263
  message: error.message
@@ -1317,13 +1343,13 @@ const GET_TRACE_QUERY_FIELDS = createNewRoute(require_server_handlers_observabil
1317
1343
  }
1318
1344
  try {
1319
1345
  const observed = await observabilityStore.getTraceQueryObservedFields(plan);
1320
- const canonicalFields = _mastra_core_storage.getTraceQueryCanonicalFieldDescriptors(predicateScope, search).filter((field) => predicateScope !== "trace" || field.path !== "durationMs" || require_server_handlers_observability_shared.supportsObservabilityTraceQueryRootDuration(observabilityStore)).filter((field) => !require_server_handlers_observability_shared.isTraceQueryContextIdField(field.path) || require_server_handlers_observability_shared.supportsObservabilityTraceQueryContextIds(observabilityStore));
1346
+ const canonicalFields = _mastra_core_storage.getTraceQueryCanonicalFieldDescriptors(predicateScope, search).filter((field) => predicateScope !== "trace" || field.path !== "durationMs" || require_server_handlers_observability_shared.supportsObservabilityTraceQueryRootDuration(observabilityStore)).filter((field) => !require_server_handlers_observability_shared.isTraceQueryContextIdField(field.path) || require_server_handlers_observability_shared.supportsObservabilityTraceQueryContextIds(observabilityStore)).filter((field) => field.path !== "timeToFirstChunkMs" || require_server_handlers_observability_shared.supportsObservabilityTraceQueryTimeToFirstChunk(observabilityStore)).filter((field) => predicateScope !== "trace" || require_server_handlers_observability_shared.supportsObservabilityTraceQueryRootSpanField(observabilityStore, field.path));
1321
1347
  const describesAggregate = predicateScope === "trace" && require_server_handlers_observability_shared.supportsTraceAggregateCore() && _mastra_core_storage.traceAggregateDiscoverySchema !== void 0 && require_server_handlers_observability_shared.supportsObservabilityTraceAggregate(observabilityStore);
1322
1348
  return {
1323
1349
  canonicalFields,
1324
1350
  ...observed,
1325
1351
  ...describesAggregate && { aggregate: {
1326
- dimensions: _mastra_core_storage.getTraceAggregateDimensionDescriptors(),
1352
+ dimensions: _mastra_core_storage.getTraceAggregateDimensionDescriptors().filter((dimension) => require_server_handlers_observability_shared.supportsObservabilityTraceQueryRootSpanField(observabilityStore, dimension.path)),
1327
1353
  measures: _mastra_core_storage.getTraceAggregateMeasureDescriptors()
1328
1354
  } }
1329
1355
  };
@@ -1361,7 +1387,13 @@ const GET_TRACE_QUERY_VALUES = createNewRoute(require_server_handlers_observabil
1361
1387
  observabilityStore = await require_server_handlers_observability_shared.getObservabilityStore(mastra);
1362
1388
  require_server_handlers_observability_shared.assertObservabilityTraceQueryDiscoverySupported(observabilityStore);
1363
1389
  require_server_handlers_observability_shared.assertObservabilityTraceQueryTenantScopeSupported(observabilityStore, plan.scope);
1390
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootSpanValuesSupported(observabilityStore, plan);
1364
1391
  } catch (error) {
1392
+ if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1393
+ code: error.code,
1394
+ message: error.message,
1395
+ issues: error.issues
1396
+ });
1365
1397
  if (error instanceof require_http_exception.HTTPException && error.status === 501) throwTraceQueryError(501, {
1366
1398
  code: "TRACE_QUERY_DISCOVERY_UNSUPPORTED",
1367
1399
  message: error.message
@@ -1407,8 +1439,8 @@ for (const route of [GET_TRACE_QUERY_FIELDS, GET_TRACE_QUERY_VALUES]) {
1407
1439
  };
1408
1440
  }
1409
1441
  const QUERY_THREADS = createNewRoute(require_server_handlers_observability_shared.NEW_ROUTE_DEFS.QUERY_THREADS, {
1410
- bodySchema: _mastra_core_storage.queryThreadsInputSchema,
1411
- responseSchema: _mastra_core_storage.queryThreadsResultSchema,
1442
+ bodySchema: zod_v4.z.union([_mastra_core_storage.threadQueryRequestSchema ?? zod_v4.z.object({ timeRange: zod_v4.z.unknown() }).passthrough(), _mastra_core_storage.queryThreadsInputSchema]),
1443
+ responseSchema: _mastra_core_storage.threadQueryResponseSchema ? zod_v4.z.union([_mastra_core_storage.threadQueryResponseSchema, _mastra_core_storage.queryThreadsResultSchema]) : _mastra_core_storage.queryThreadsResultSchema,
1412
1444
  onValidationError: traceQueryValidationError,
1413
1445
  maxBodySize: 256 * 1024,
1414
1446
  preserveHttpExceptions: true,
@@ -1416,14 +1448,26 @@ const QUERY_THREADS = createNewRoute(require_server_handlers_observability_share
1416
1448
  code: "TRACE_QUERY_UNSUPPORTED",
1417
1449
  message: "Thread queries require a newer @mastra/core with observability thread-query support. Please upgrade."
1418
1450
  }),
1419
- handler: async ({ mastra, requestContext, traces, where, page }) => {
1451
+ handler: async (params) => {
1452
+ const { mastra, requestContext } = params;
1453
+ const rowsRequest = "timeRange" in params;
1454
+ if (rowsRequest && typeof _mastra_core_storage.planThreadRowsQuery !== "function") throwTraceQueryError(501, {
1455
+ code: "TRACE_QUERY_UNSUPPORTED",
1456
+ message: "Thread rows require a newer @mastra/core. Please upgrade."
1457
+ });
1420
1458
  let plan;
1421
1459
  try {
1422
- plan = _mastra_core_storage.planThreadQuery({
1423
- traces,
1424
- where,
1425
- page
1426
- }, { scope: resolveTraceQueryScope(requestContext) });
1460
+ const options = { scope: resolveTraceQueryScope(requestContext) };
1461
+ plan = rowsRequest ? _mastra_core_storage.planThreadRowsQuery({
1462
+ timeRange: params.timeRange,
1463
+ where: params.where,
1464
+ page: params.page,
1465
+ orderBy: params.orderBy
1466
+ }, options) : _mastra_core_storage.planThreadQuery({
1467
+ traces: params.traces,
1468
+ where: params.where,
1469
+ page: params.page
1470
+ }, options);
1427
1471
  } catch (error) {
1428
1472
  if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1429
1473
  code: error.code,
@@ -1440,12 +1484,28 @@ const QUERY_THREADS = createNewRoute(require_server_handlers_observability_share
1440
1484
  try {
1441
1485
  observabilityStore = await require_server_handlers_observability_shared.getObservabilityStore(mastra);
1442
1486
  require_server_handlers_observability_shared.assertObservabilityThreadQuerySupported(observabilityStore);
1443
- require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.traces.where);
1444
- require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.traces.where);
1445
- require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.where);
1446
- require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.where);
1487
+ if (plan.result === "threadRows") {
1488
+ if (!observabilityStore.getFeatures()?.includes("thread-query-rows")) throwTraceQueryError(501, {
1489
+ code: "TRACE_QUERY_UNSUPPORTED",
1490
+ message: "Thread rows require an updated observability storage adapter. Please upgrade."
1491
+ });
1492
+ } else {
1493
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.traces.where);
1494
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.traces.where);
1495
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSupported(observabilityStore, plan.traces.where);
1496
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootDurationSupported(observabilityStore, plan.where);
1497
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryContextIdsSupported(observabilityStore, plan.where);
1498
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryTimeToFirstChunkSupported(observabilityStore, plan.where);
1499
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootSpanFieldsSupported(observabilityStore, plan.traces);
1500
+ require_server_handlers_observability_shared.assertObservabilityTraceQueryRootSpanFieldsSupported(observabilityStore, plan);
1501
+ }
1447
1502
  require_server_handlers_observability_shared.assertObservabilityTraceQueryTenantScopeSupported(observabilityStore, plan.scope);
1448
1503
  } catch (error) {
1504
+ if (error instanceof _mastra_core_storage.TraceQueryValidationError) throwTraceQueryError(422, {
1505
+ code: error.code,
1506
+ message: error.message,
1507
+ issues: error.issues
1508
+ });
1449
1509
  if (error instanceof require_http_exception.HTTPException && error.status === 501) throwTraceQueryError(501, {
1450
1510
  code: "TRACE_QUERY_UNSUPPORTED",
1451
1511
  message: error.message
@@ -1455,6 +1515,10 @@ const QUERY_THREADS = createNewRoute(require_server_handlers_observability_share
1455
1515
  try {
1456
1516
  return await observabilityStore.queryThreads(plan);
1457
1517
  } catch (error) {
1518
+ if (typeof _mastra_core_storage.TraceQueryResourceLimitError === "function" && error instanceof _mastra_core_storage.TraceQueryResourceLimitError) throwTraceQueryError(503, {
1519
+ code: error.code,
1520
+ message: error.message
1521
+ });
1458
1522
  if (error instanceof _mastra_core_storage.TraceQueryExecutionError) throwTraceQueryError(504, {
1459
1523
  code: error.code,
1460
1524
  message: error.message
@@ -1484,6 +1548,10 @@ if (QUERY_THREADS.openapi) {
1484
1548
  description: "The configured observability store does not support thread queries",
1485
1549
  content: { "application/json": { schema: traceQueryUnsupportedErrorSchema } }
1486
1550
  };
1551
+ QUERY_THREADS.openapi.responses[503] = {
1552
+ description: "Thread query exceeded the database resource limit",
1553
+ content: { "application/json": { schema: traceQueryResourceLimitErrorSchema } }
1554
+ };
1487
1555
  QUERY_THREADS.openapi.responses[504] = {
1488
1556
  description: "Thread query exceeded the configured database execution timeout",
1489
1557
  content: { "application/json": { schema: traceQueryTimeoutErrorSchema } }
@@ -2133,4 +2201,4 @@ Object.defineProperty(exports, "UPDATE_FEEDBACK_REVIEW_STATUS", {
2133
2201
  }
2134
2202
  });
2135
2203
 
2136
- //# sourceMappingURL=observability-new-endpoints-BoALDMSi.cjs.map
2204
+ //# sourceMappingURL=observability-new-endpoints-AMp9bnMV.cjs.map