@mastra/server 1.58.0-alpha.8 → 1.58.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (354) hide show
  1. package/CHANGELOG.md +273 -0
  2. package/dist/{a2a-_D2EA4oa.js → a2a-CUkzkdTZ.js} +3 -3
  3. package/dist/{a2a-_D2EA4oa.js.map → a2a-CUkzkdTZ.js.map} +1 -1
  4. package/dist/{a2a-B6YkZ2i9.cjs → a2a-DzZHH3OH.cjs} +3 -3
  5. package/dist/{a2a-B6YkZ2i9.cjs.map → a2a-DzZHH3OH.cjs.map} +1 -1
  6. package/dist/{agent-versions-DBwhQgbJ.js → agent-versions-CWEnD62A.js} +3 -3
  7. package/dist/{agent-versions-DBwhQgbJ.js.map → agent-versions-CWEnD62A.js.map} +1 -1
  8. package/dist/{agent-versions-znzuht90.cjs → agent-versions-xeysPGel.cjs} +3 -3
  9. package/dist/{agent-versions-znzuht90.cjs.map → agent-versions-xeysPGel.cjs.map} +1 -1
  10. package/dist/{agents--m8fNv8n.cjs → agents-0Tw3kkD_.cjs} +8 -4
  11. package/dist/agents-0Tw3kkD_.cjs.map +1 -0
  12. package/dist/{agents-DpZKzU92.js → agents-uT8ZDE4k.js} +8 -4
  13. package/dist/agents-uT8ZDE4k.js.map +1 -0
  14. package/dist/{api-schema-manifest-ShM6oDjl.cjs → api-schema-manifest-BPk3u4B-.cjs} +3 -3
  15. package/dist/{api-schema-manifest-ShM6oDjl.cjs.map → api-schema-manifest-BPk3u4B-.cjs.map} +1 -1
  16. package/dist/{api-schema-manifest-BEbcI0wc.js → api-schema-manifest-DSelT9XK.js} +3 -3
  17. package/dist/{api-schema-manifest-BEbcI0wc.js.map → api-schema-manifest-DSelT9XK.js.map} +1 -1
  18. package/dist/{background-tasks-DnmhLalp.js → background-tasks-BtWM0sZs.js} +2 -2
  19. package/dist/{background-tasks-DnmhLalp.js.map → background-tasks-BtWM0sZs.js.map} +1 -1
  20. package/dist/{background-tasks-CYgzzUnb.cjs → background-tasks-C5G2jJax.cjs} +2 -2
  21. package/dist/{background-tasks-CYgzzUnb.cjs.map → background-tasks-C5G2jJax.cjs.map} +1 -1
  22. package/dist/{builder-registry-DE5w7bNk.js → builder-registry-B8KyPAOP.js} +3 -3
  23. package/dist/{builder-registry-DE5w7bNk.js.map → builder-registry-B8KyPAOP.js.map} +1 -1
  24. package/dist/{builder-registry-BoaXBdm_.cjs → builder-registry-Dcou-kzd.cjs} +3 -3
  25. package/dist/{builder-registry-BoaXBdm_.cjs.map → builder-registry-Dcou-kzd.cjs.map} +1 -1
  26. package/dist/{channels-BqkOxxEk.js → channels-B9yt3a2P.js} +2 -2
  27. package/dist/{channels-BqkOxxEk.js.map → channels-B9yt3a2P.js.map} +1 -1
  28. package/dist/{channels-BonQBJT0.cjs → channels-BRoq3VKR.cjs} +2 -2
  29. package/dist/{channels-BonQBJT0.cjs.map → channels-BRoq3VKR.cjs.map} +1 -1
  30. package/dist/{default-options-BcPyp2Gx.cjs → default-options-C9HZGjYi.cjs} +6 -3
  31. package/dist/{default-options-BcPyp2Gx.cjs.map → default-options-C9HZGjYi.cjs.map} +1 -1
  32. package/dist/{default-options-DGCDKR3I.js → default-options-C9JVjlto.js} +6 -3
  33. package/dist/{default-options-DGCDKR3I.js.map → default-options-C9JVjlto.js.map} +1 -1
  34. package/dist/{dist-D-2BtcNU.js → dist-7r8jzEWH.js} +68 -1303
  35. package/dist/dist-7r8jzEWH.js.map +1 -0
  36. package/dist/{dist-DhqgxyoU.cjs → dist-DEgLyP8h.cjs} +77 -1315
  37. package/dist/dist-DEgLyP8h.cjs.map +1 -0
  38. package/dist/docs/SKILL.md +2 -1
  39. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  40. package/dist/docs/references/docs-server-custom-adapters.md +1 -1
  41. package/dist/docs/references/docs-server-custom-api-routes.md +375 -0
  42. package/dist/docs/references/reference-server-create-route.md +27 -1
  43. package/dist/{dynamic-workflows-B4LI2B52.js → dynamic-workflows-B0TE8mjA.js} +2 -2
  44. package/dist/{dynamic-workflows-B4LI2B52.js.map → dynamic-workflows-B0TE8mjA.js.map} +1 -1
  45. package/dist/{dynamic-workflows-BXeywVEf.cjs → dynamic-workflows-C-6vmau5.cjs} +2 -2
  46. package/dist/{dynamic-workflows-BXeywVEf.cjs.map → dynamic-workflows-C-6vmau5.cjs.map} +1 -1
  47. package/dist/{editor-builder-DTC6ejp8.js → editor-builder-Byg6wbi6.js} +3 -3
  48. package/dist/{editor-builder-DTC6ejp8.js.map → editor-builder-Byg6wbi6.js.map} +1 -1
  49. package/dist/{editor-builder-CIKX5MYh.cjs → editor-builder-C3ZvffGu.cjs} +2 -2
  50. package/dist/{editor-builder-CIKX5MYh.cjs.map → editor-builder-C3ZvffGu.cjs.map} +1 -1
  51. package/dist/{editor-builder-D20yfDgw.js → editor-builder-DJUxdzC8.js} +2 -2
  52. package/dist/{editor-builder-D20yfDgw.js.map → editor-builder-DJUxdzC8.js.map} +1 -1
  53. package/dist/{editor-builder-B7yBsr6o.cjs → editor-builder-DT7ypWfa.cjs} +3 -3
  54. package/dist/{editor-builder-B7yBsr6o.cjs.map → editor-builder-DT7ypWfa.cjs.map} +1 -1
  55. package/dist/{observability-new-endpoints-Dk3oatL8.cjs → observability-new-endpoints-BC-dasRY.cjs} +2 -2
  56. package/dist/{observability-new-endpoints-Dk3oatL8.cjs.map → observability-new-endpoints-BC-dasRY.cjs.map} +1 -1
  57. package/dist/{observability-new-endpoints-YK2DjZto.js → observability-new-endpoints-Drx0C8uc.js} +2 -2
  58. package/dist/{observability-new-endpoints-YK2DjZto.js.map → observability-new-endpoints-Drx0C8uc.js.map} +1 -1
  59. package/dist/{probe-image-size-DYJVSL0b.cjs → probe-image-size-C2F59z8Z.cjs} +56 -1707
  60. package/dist/probe-image-size-C2F59z8Z.cjs.map +1 -0
  61. package/dist/{probe-image-size-BQgIJeY_.js → probe-image-size-mXCWYNrz.js} +22 -1673
  62. package/dist/probe-image-size-mXCWYNrz.js.map +1 -0
  63. package/dist/{route-builder-CgLVYL1c.cjs → route-builder-BAAedfru.cjs} +11 -2
  64. package/dist/route-builder-BAAedfru.cjs.map +1 -0
  65. package/dist/{route-builder-CIk5k35M.js → route-builder-YQ_gLIvW.js} +11 -2
  66. package/dist/route-builder-YQ_gLIvW.js.map +1 -0
  67. package/dist/{routes-UhNfqEIU.cjs → routes-0BEh3stO.cjs} +10 -10
  68. package/dist/{routes-UhNfqEIU.cjs.map → routes-0BEh3stO.cjs.map} +1 -1
  69. package/dist/{routes-CQgza68o.js → routes-BsMPy5bu.js} +10 -10
  70. package/dist/{routes-CQgza68o.js.map → routes-BsMPy5bu.js.map} +1 -1
  71. package/dist/{schedules-CK3-IE0h.cjs → schedules-DOK225ZZ.cjs} +2 -2
  72. package/dist/{schedules-CK3-IE0h.cjs.map → schedules-DOK225ZZ.cjs.map} +1 -1
  73. package/dist/{schedules-qxFoU-Tb.js → schedules-RjPcNOmY.js} +2 -2
  74. package/dist/{schedules-qxFoU-Tb.js.map → schedules-RjPcNOmY.js.map} +1 -1
  75. package/dist/{schema-Bv9OdW1f-BY6u3u8K.cjs → schema-Bv9OdW1f-CHHI-NTr.cjs} +2 -76
  76. package/dist/schema-Bv9OdW1f-CHHI-NTr.cjs.map +1 -0
  77. package/dist/{schema-Bv9OdW1f-CIOfv-3w.js → schema-Bv9OdW1f-DLSJSqQv.js} +2 -76
  78. package/dist/schema-Bv9OdW1f-DLSJSqQv.js.map +1 -0
  79. package/dist/schema-CGeYTFwm.js +2 -0
  80. package/dist/schema-DkBbires.cjs +1 -0
  81. package/dist/{scorer-versions-PL0wCOT-.cjs → scorer-versions-CYXtxMTU.cjs} +2 -2
  82. package/dist/{scorer-versions-PL0wCOT-.cjs.map → scorer-versions-CYXtxMTU.cjs.map} +1 -1
  83. package/dist/{scorer-versions-DNdVTLOq.js → scorer-versions-CdVjOtQO.js} +2 -2
  84. package/dist/{scorer-versions-DNdVTLOq.js.map → scorer-versions-CdVjOtQO.js.map} +1 -1
  85. package/dist/server/handlers/a2a.cjs +1 -1
  86. package/dist/server/handlers/a2a.d.ts +545 -505
  87. package/dist/server/handlers/a2a.d.ts.map +1 -1
  88. package/dist/server/handlers/a2a.js +1 -1
  89. package/dist/server/handlers/agent-builder.cjs +4 -4
  90. package/dist/server/handlers/agent-builder.d.ts +1069 -764
  91. package/dist/server/handlers/agent-builder.d.ts.map +1 -1
  92. package/dist/server/handlers/agent-builder.js +4 -4
  93. package/dist/server/handlers/agent-controller.cjs +61 -11
  94. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  95. package/dist/server/handlers/agent-controller.d.ts +1547 -893
  96. package/dist/server/handlers/agent-controller.d.ts.map +1 -1
  97. package/dist/server/handlers/agent-controller.js +61 -11
  98. package/dist/server/handlers/agent-controller.js.map +1 -1
  99. package/dist/server/handlers/agent-versions.cjs +3 -3
  100. package/dist/server/handlers/agent-versions.d.ts +8504 -8312
  101. package/dist/server/handlers/agent-versions.d.ts.map +1 -1
  102. package/dist/server/handlers/agent-versions.js +3 -3
  103. package/dist/server/handlers/agents.cjs +6 -6
  104. package/dist/server/handlers/agents.d.ts +9984 -9826
  105. package/dist/server/handlers/agents.d.ts.map +1 -1
  106. package/dist/server/handlers/agents.js +6 -6
  107. package/dist/server/handlers/auth.cjs +1 -1
  108. package/dist/server/handlers/auth.d.ts +693 -297
  109. package/dist/server/handlers/auth.d.ts.map +1 -1
  110. package/dist/server/handlers/auth.js +1 -1
  111. package/dist/server/handlers/background-tasks.cjs +1 -1
  112. package/dist/server/handlers/background-tasks.d.ts +190 -130
  113. package/dist/server/handlers/background-tasks.d.ts.map +1 -1
  114. package/dist/server/handlers/background-tasks.js +1 -1
  115. package/dist/server/handlers/builder-registry.cjs +1 -1
  116. package/dist/server/handlers/builder-registry.d.ts +218 -121
  117. package/dist/server/handlers/builder-registry.d.ts.map +1 -1
  118. package/dist/server/handlers/builder-registry.js +1 -1
  119. package/dist/server/handlers/channels.cjs +1 -1
  120. package/dist/server/handlers/channels.d.ts +157 -77
  121. package/dist/server/handlers/channels.d.ts.map +1 -1
  122. package/dist/server/handlers/channels.js +1 -1
  123. package/dist/server/handlers/conversations.cjs +1 -1
  124. package/dist/server/handlers/conversations.d.ts +221 -141
  125. package/dist/server/handlers/conversations.d.ts.map +1 -1
  126. package/dist/server/handlers/conversations.js +1 -1
  127. package/dist/server/handlers/datasets.cjs +1 -1
  128. package/dist/server/handlers/datasets.d.ts +2669 -2234
  129. package/dist/server/handlers/datasets.d.ts.map +1 -1
  130. package/dist/server/handlers/datasets.js +1 -1
  131. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  132. package/dist/server/handlers/dynamic-workflows.d.ts +506 -426
  133. package/dist/server/handlers/dynamic-workflows.d.ts.map +1 -1
  134. package/dist/server/handlers/dynamic-workflows.js +1 -1
  135. package/dist/server/handlers/editor-builder.cjs +1 -1
  136. package/dist/server/handlers/editor-builder.d.ts +305 -245
  137. package/dist/server/handlers/editor-builder.d.ts.map +1 -1
  138. package/dist/server/handlers/editor-builder.js +1 -1
  139. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  140. package/dist/server/handlers/favorites-enrichment.js +1 -1
  141. package/dist/server/handlers/logs.cjs +1 -1
  142. package/dist/server/handlers/logs.d.ts +245 -185
  143. package/dist/server/handlers/logs.d.ts.map +1 -1
  144. package/dist/server/handlers/logs.js +1 -1
  145. package/dist/server/handlers/mcp-client-versions.cjs +2 -2
  146. package/dist/server/handlers/mcp-client-versions.d.ts +447 -307
  147. package/dist/server/handlers/mcp-client-versions.d.ts.map +1 -1
  148. package/dist/server/handlers/mcp-client-versions.js +2 -2
  149. package/dist/server/handlers/mcp.cjs +1 -1
  150. package/dist/server/handlers/mcp.d.ts +357 -156
  151. package/dist/server/handlers/mcp.d.ts.map +1 -1
  152. package/dist/server/handlers/mcp.js +1 -1
  153. package/dist/server/handlers/memory.cjs +1 -1
  154. package/dist/server/handlers/memory.d.ts +1723 -1223
  155. package/dist/server/handlers/memory.d.ts.map +1 -1
  156. package/dist/server/handlers/memory.js +1 -1
  157. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  158. package/dist/server/handlers/observability-new-endpoints.d.ts +3239 -2158
  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 +1 -1
  162. package/dist/server/handlers/observability-shared.js +1 -1
  163. package/dist/server/handlers/observability.cjs +2 -2
  164. package/dist/server/handlers/observability.d.ts +267 -149
  165. package/dist/server/handlers/observability.d.ts.map +1 -1
  166. package/dist/server/handlers/observability.js +2 -2
  167. package/dist/server/handlers/processor-providers.cjs +1 -1
  168. package/dist/server/handlers/processor-providers.d.ts +74 -34
  169. package/dist/server/handlers/processor-providers.d.ts.map +1 -1
  170. package/dist/server/handlers/processor-providers.js +1 -1
  171. package/dist/server/handlers/processors.cjs +1 -1
  172. package/dist/server/handlers/processors.d.ts +222 -173
  173. package/dist/server/handlers/processors.d.ts.map +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.d.ts +646 -506
  177. package/dist/server/handlers/prompt-block-versions.d.ts.map +1 -1
  178. package/dist/server/handlers/prompt-block-versions.js +2 -2
  179. package/dist/server/handlers/responses.cjs +1 -1
  180. package/dist/server/handlers/responses.d.ts +352 -362
  181. package/dist/server/handlers/responses.d.ts.map +1 -1
  182. package/dist/server/handlers/responses.js +1 -1
  183. package/dist/server/handlers/schedules.cjs +1 -1
  184. package/dist/server/handlers/schedules.d.ts +1190 -1028
  185. package/dist/server/handlers/schedules.d.ts.map +1 -1
  186. package/dist/server/handlers/schedules.js +1 -1
  187. package/dist/server/handlers/scorer-versions.cjs +3 -3
  188. package/dist/server/handlers/scorer-versions.d.ts +551 -411
  189. package/dist/server/handlers/scorer-versions.d.ts.map +1 -1
  190. package/dist/server/handlers/scorer-versions.js +3 -3
  191. package/dist/server/handlers/scores.cjs +1 -1
  192. package/dist/server/handlers/scores.d.ts +287 -167
  193. package/dist/server/handlers/scores.d.ts.map +1 -1
  194. package/dist/server/handlers/scores.js +1 -1
  195. package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
  196. package/dist/server/handlers/stored-agent-favorites.d.ts +62 -22
  197. package/dist/server/handlers/stored-agent-favorites.d.ts.map +1 -1
  198. package/dist/server/handlers/stored-agent-favorites.js +4 -4
  199. package/dist/server/handlers/stored-agents.cjs +4 -4
  200. package/dist/server/handlers/stored-agents.d.ts +12056 -16152
  201. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  202. package/dist/server/handlers/stored-agents.js +4 -4
  203. package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
  204. package/dist/server/handlers/stored-mcp-clients.d.ts +417 -324
  205. package/dist/server/handlers/stored-mcp-clients.d.ts.map +1 -1
  206. package/dist/server/handlers/stored-mcp-clients.js +2 -2
  207. package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
  208. package/dist/server/handlers/stored-prompt-blocks.d.ts +603 -555
  209. package/dist/server/handlers/stored-prompt-blocks.d.ts.map +1 -1
  210. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  211. package/dist/server/handlers/stored-scorers.cjs +3 -3
  212. package/dist/server/handlers/stored-scorers.d.ts +556 -472
  213. package/dist/server/handlers/stored-scorers.d.ts.map +1 -1
  214. package/dist/server/handlers/stored-scorers.js +3 -3
  215. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  216. package/dist/server/handlers/stored-skill-favorites.d.ts +62 -22
  217. package/dist/server/handlers/stored-skill-favorites.d.ts.map +1 -1
  218. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  219. package/dist/server/handlers/stored-skills.cjs +3 -3
  220. package/dist/server/handlers/stored-skills.d.ts +632 -515
  221. package/dist/server/handlers/stored-skills.d.ts.map +1 -1
  222. package/dist/server/handlers/stored-skills.js +3 -3
  223. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  224. package/dist/server/handlers/stored-workspaces.d.ts +646 -546
  225. package/dist/server/handlers/stored-workspaces.d.ts.map +1 -1
  226. package/dist/server/handlers/stored-workspaces.js +2 -2
  227. package/dist/server/handlers/system.cjs +2 -2
  228. package/dist/server/handlers/system.d.ts +146 -106
  229. package/dist/server/handlers/system.d.ts.map +1 -1
  230. package/dist/server/handlers/system.js +2 -2
  231. package/dist/server/handlers/tool-providers.cjs +1 -1
  232. package/dist/server/handlers/tool-providers.d.ts +580 -331
  233. package/dist/server/handlers/tool-providers.d.ts.map +1 -1
  234. package/dist/server/handlers/tool-providers.js +1 -1
  235. package/dist/server/handlers/tools.cjs +5 -5
  236. package/dist/server/handlers/tools.d.ts +177 -77
  237. package/dist/server/handlers/tools.d.ts.map +1 -1
  238. package/dist/server/handlers/tools.js +5 -5
  239. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  240. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  241. package/dist/server/handlers/vector.cjs +1 -1
  242. package/dist/server/handlers/vector.d.ts +282 -126
  243. package/dist/server/handlers/vector.d.ts.map +1 -1
  244. package/dist/server/handlers/vector.js +1 -1
  245. package/dist/server/handlers/workflows.cjs +3 -3
  246. package/dist/server/handlers/workflows.d.ts +1703 -1181
  247. package/dist/server/handlers/workflows.d.ts.map +1 -1
  248. package/dist/server/handlers/workflows.js +3 -3
  249. package/dist/server/handlers/workspace.cjs +1 -1
  250. package/dist/server/handlers/workspace.d.ts +1936 -1150
  251. package/dist/server/handlers/workspace.d.ts.map +1 -1
  252. package/dist/server/handlers/workspace.js +1 -1
  253. package/dist/server/handlers.cjs +2 -2
  254. package/dist/server/handlers.js +2 -2
  255. package/dist/server/schemas/agent-versions.d.ts +70 -10
  256. package/dist/server/schemas/agent-versions.d.ts.map +1 -1
  257. package/dist/server/schemas/agents.d.ts +23 -3
  258. package/dist/server/schemas/agents.d.ts.map +1 -1
  259. package/dist/server/schemas/default-options.d.ts +7 -1
  260. package/dist/server/schemas/default-options.d.ts.map +1 -1
  261. package/dist/server/schemas/index.cjs +7 -7
  262. package/dist/server/schemas/index.js +7 -7
  263. package/dist/server/schemas/stored-agents.d.ts +140 -20
  264. package/dist/server/schemas/stored-agents.d.ts.map +1 -1
  265. package/dist/server/server-adapter/index.cjs +28 -7
  266. package/dist/server/server-adapter/index.cjs.map +1 -1
  267. package/dist/server/server-adapter/index.d.ts +14 -1
  268. package/dist/server/server-adapter/index.d.ts.map +1 -1
  269. package/dist/server/server-adapter/index.js +28 -7
  270. package/dist/server/server-adapter/index.js.map +1 -1
  271. package/dist/server/server-adapter/openapi-utils.d.ts.map +1 -1
  272. package/dist/server/server-adapter/routes/a2a.d.ts +544 -504
  273. package/dist/server/server-adapter/routes/a2a.d.ts.map +1 -1
  274. package/dist/server/server-adapter/routes/agent-builder.d.ts +1054 -749
  275. package/dist/server/server-adapter/routes/agent-builder.d.ts.map +1 -1
  276. package/dist/server/server-adapter/routes/channels.d.ts +153 -73
  277. package/dist/server/server-adapter/routes/channels.d.ts.map +1 -1
  278. package/dist/server/server-adapter/routes/conversations.d.ts +218 -138
  279. package/dist/server/server-adapter/routes/conversations.d.ts.map +1 -1
  280. package/dist/server/server-adapter/routes/datasets.d.ts +2312 -1877
  281. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  282. package/dist/server/server-adapter/routes/editor-builder.d.ts +506 -349
  283. package/dist/server/server-adapter/routes/editor-builder.d.ts.map +1 -1
  284. package/dist/server/server-adapter/routes/legacy.d.ts +615 -629
  285. package/dist/server/server-adapter/routes/legacy.d.ts.map +1 -1
  286. package/dist/server/server-adapter/routes/logs.d.ts +243 -183
  287. package/dist/server/server-adapter/routes/logs.d.ts.map +1 -1
  288. package/dist/server/server-adapter/routes/mcp.d.ts +347 -147
  289. package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
  290. package/dist/server/server-adapter/routes/memory.d.ts +1699 -1199
  291. package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
  292. package/dist/server/server-adapter/routes/observability.d.ts +2761 -2103
  293. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  294. package/dist/server/server-adapter/routes/processor-providers.d.ts +70 -30
  295. package/dist/server/server-adapter/routes/processor-providers.d.ts.map +1 -1
  296. package/dist/server/server-adapter/routes/processors.d.ts +220 -171
  297. package/dist/server/server-adapter/routes/processors.d.ts.map +1 -1
  298. package/dist/server/server-adapter/routes/responses.d.ts +350 -360
  299. package/dist/server/server-adapter/routes/responses.d.ts.map +1 -1
  300. package/dist/server/server-adapter/routes/route-builder.d.ts +6 -2
  301. package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
  302. package/dist/server/server-adapter/routes/scorers.d.ts +282 -162
  303. package/dist/server/server-adapter/routes/scorers.d.ts.map +1 -1
  304. package/dist/server/server-adapter/routes/stored-mcp-clients.d.ts +821 -588
  305. package/dist/server/server-adapter/routes/stored-mcp-clients.d.ts.map +1 -1
  306. package/dist/server/server-adapter/routes/stored-prompt-blocks.d.ts +1252 -1064
  307. package/dist/server/server-adapter/routes/stored-prompt-blocks.d.ts.map +1 -1
  308. package/dist/server/server-adapter/routes/stored-scorers.d.ts +1046 -822
  309. package/dist/server/server-adapter/routes/stored-scorers.d.ts.map +1 -1
  310. package/dist/server/server-adapter/routes/stored-skills.d.ts +683 -526
  311. package/dist/server/server-adapter/routes/stored-skills.d.ts.map +1 -1
  312. package/dist/server/server-adapter/routes/stored-workspaces.d.ts +637 -537
  313. package/dist/server/server-adapter/routes/stored-workspaces.d.ts.map +1 -1
  314. package/dist/server/server-adapter/routes/system.d.ts +145 -105
  315. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  316. package/dist/server/server-adapter/routes/tool-providers.d.ts +566 -317
  317. package/dist/server/server-adapter/routes/tool-providers.d.ts.map +1 -1
  318. package/dist/server/server-adapter/routes/tools.d.ts +103 -43
  319. package/dist/server/server-adapter/routes/tools.d.ts.map +1 -1
  320. package/dist/server/server-adapter/routes/vectors.d.ts +275 -119
  321. package/dist/server/server-adapter/routes/vectors.d.ts.map +1 -1
  322. package/dist/server/server-adapter/routes/workflows.d.ts +1586 -1104
  323. package/dist/server/server-adapter/routes/workflows.d.ts.map +1 -1
  324. package/dist/server/server-adapter/routes/workspace.d.ts +1026 -613
  325. package/dist/server/server-adapter/routes/workspace.d.ts.map +1 -1
  326. package/dist/{stored-agents-CWC-Nj6N.js → stored-agents-BRBZM-Xl.js} +2 -2
  327. package/dist/{stored-agents-CWC-Nj6N.js.map → stored-agents-BRBZM-Xl.js.map} +1 -1
  328. package/dist/{stored-agents-d2kvyKAb.cjs → stored-agents-CPxfYRH9.cjs} +2 -2
  329. package/dist/{stored-agents-d2kvyKAb.cjs.map → stored-agents-CPxfYRH9.cjs.map} +1 -1
  330. package/dist/{stored-scorers-yaft2JFH.js → stored-scorers-B__LF0Cy.js} +2 -2
  331. package/dist/{stored-scorers-yaft2JFH.js.map → stored-scorers-B__LF0Cy.js.map} +1 -1
  332. package/dist/{stored-scorers-Dm0HwOZe.cjs → stored-scorers-Cml7jPJv.cjs} +2 -2
  333. package/dist/{stored-scorers-Dm0HwOZe.cjs.map → stored-scorers-Cml7jPJv.cjs.map} +1 -1
  334. package/dist/sync-BHatXKfg.cjs +1679 -0
  335. package/dist/sync-BHatXKfg.cjs.map +1 -0
  336. package/dist/sync-djJ8Lmds.js +1656 -0
  337. package/dist/sync-djJ8Lmds.js.map +1 -0
  338. package/dist/{utils-wESuBh27.cjs → utils-Bna_JCkb.cjs} +3 -3
  339. package/dist/{utils-wESuBh27.cjs.map → utils-Bna_JCkb.cjs.map} +1 -1
  340. package/dist/{utils-BUK03Frl.js → utils-QXKhjIm6.js} +3 -3
  341. package/dist/{utils-BUK03Frl.js.map → utils-QXKhjIm6.js.map} +1 -1
  342. package/package.json +9 -9
  343. package/dist/agents--m8fNv8n.cjs.map +0 -1
  344. package/dist/agents-DpZKzU92.js.map +0 -1
  345. package/dist/dist-D-2BtcNU.js.map +0 -1
  346. package/dist/dist-DhqgxyoU.cjs.map +0 -1
  347. package/dist/probe-image-size-BQgIJeY_.js.map +0 -1
  348. package/dist/probe-image-size-DYJVSL0b.cjs.map +0 -1
  349. package/dist/route-builder-CIk5k35M.js.map +0 -1
  350. package/dist/route-builder-CgLVYL1c.cjs.map +0 -1
  351. package/dist/schema-B8-5YCsA.js +0 -2
  352. package/dist/schema-BieM1qrc.cjs +0 -1
  353. package/dist/schema-Bv9OdW1f-BY6u3u8K.cjs.map +0 -1
  354. package/dist/schema-Bv9OdW1f-CIOfv-3w.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-workflows-BXeywVEf.cjs","names":["z","createRoute","HTTPException","handleError"],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The Zod schema output is structurally compatible with\n // DynamicWorkflowGraph but TS can't prove every arm:\n // - sleepUntil.date is an ISO string on the wire, Date on the\n // runtime type; the rehydrator parses it via `new Date(...)`.\n // - conditional/loop's `serializedConditions`/`serializedCondition`\n // debug labels are emitted by the fluent builder at rehydration\n // time; clients don't send them.\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration; the cast documents this boundary.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"dynamic-workflows-C-6vmau5.cjs","names":["z","createRoute","HTTPException","handleError"],"sources":["../src/server/schemas/dynamic-workflows.ts","../src/server/handlers/dynamic-workflows.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\n// ============================================================================\n// Serialized graph — discriminated union mirroring core's SerializedStepFlowEntry.\n// Duplicated locally rather than imported from @mastra/core/workflows because\n// this file's peer-dependency floor predates that export. Structurally\n// compatible with `Mastra.addDynamicWorkflow`'s input; the handler casts once\n// to bridge the remaining wire-vs-runtime divergences (sleepUntil.date as\n// ISO string, fluent-builder-only debug labels) that the core rehydrator\n// handles at runtime.\n// ============================================================================\n\nconst stepOptionsSchema = z\n .object({\n retries: z.number().int().nonnegative().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .optional();\n\n// ----------------------------------------------------------------------------\n// Predicate DSL — declarative condition for `conditional` / `loop` entries.\n// Mirrors `Predicate` in `@mastra/core/workflows/predicate`; duplicated\n// locally for the same peer-floor reason as the graph schema above.\n// ----------------------------------------------------------------------------\nconst literalScalar = z.union([z.string(), z.number(), z.boolean(), z.null()]);\nconst pathOrLiteral: z.ZodType = z.union([\n z.object({ path: z.string().min(1) }).strict(),\n z.object({ literal: literalScalar }).strict(),\n]);\nconst predicateSchema: z.ZodType = z.lazy(() =>\n z.union([\n z\n .object({\n op: z.enum(['eq', 'ne', 'lt', 'lte', 'gt', 'gte']),\n left: pathOrLiteral,\n right: pathOrLiteral,\n })\n .strict(),\n z\n .object({\n op: z.enum(['in', 'notIn']),\n value: pathOrLiteral,\n set: z.array(literalScalar).min(1),\n })\n .strict(),\n z.object({ op: z.enum(['exists', 'notExists']), path: z.string().min(1) }).strict(),\n z.object({ op: z.enum(['truthy', 'falsy']), value: pathOrLiteral }).strict(),\n z.object({ op: z.enum(['and', 'or']), args: z.array(predicateSchema).min(1) }).strict(),\n z.object({ op: z.literal('not'), arg: predicateSchema }).strict(),\n ]),\n);\n\nconst agentEntrySchema = z.object({\n type: z.literal('agent'),\n id: z.string(),\n agentId: z.string(),\n description: z.string().optional(),\n outputSchema: z.record(z.string(), z.unknown()).optional(),\n options: stepOptionsSchema,\n});\n\nconst toolEntrySchema = z.object({\n type: z.literal('tool'),\n id: z.string(),\n toolId: z.string(),\n description: z.string().optional(),\n options: stepOptionsSchema,\n});\n\nconst mappingEntrySchema = z.object({\n type: z.literal('mapping'),\n id: z.string(),\n mapConfig: z.string(),\n});\n\nconst workflowEntrySchema = z.object({\n type: z.literal('workflow'),\n id: z.string(),\n workflowId: z.string(),\n description: z.string().optional(),\n});\n\nconst singleStepEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n]);\n\nconst foreachInnerStepSchema = z.discriminatedUnion('type', [agentEntrySchema, toolEntrySchema, workflowEntrySchema]);\n\nconst graphEntrySchema = z.discriminatedUnion('type', [\n agentEntrySchema,\n toolEntrySchema,\n mappingEntrySchema,\n workflowEntrySchema,\n z.object({\n type: z.literal('parallel'),\n steps: z.array(singleStepEntrySchema),\n }),\n z.object({\n type: z.literal('foreach'),\n step: foreachInnerStepSchema,\n opts: z.object({ concurrency: z.number().int().positive() }).optional(),\n }),\n z.object({\n type: z.literal('sleep'),\n id: z.string(),\n duration: z.number(),\n }),\n z.object({\n type: z.literal('sleepUntil'),\n id: z.string(),\n date: z.string(),\n }),\n z\n .object({\n // Declarative-only conditional. Inbound dynamic workflows must ship a\n // `predicates` array aligned with `steps`; closure-based branches are not\n // accepted over the wire (they'd be arbitrary JS strings we can't\n // safely rehydrate).\n type: z.literal('conditional'),\n steps: z.array(singleStepEntrySchema),\n predicates: z.array(predicateSchema),\n })\n .refine(entry => entry.predicates.length === entry.steps.length, {\n message:\n 'conditional entries must have exactly one predicate per branch (`predicates` and `steps` must be the same length)',\n path: ['predicates'],\n }),\n z.object({\n // Declarative-only loop. Same rationale as `conditional`.\n type: z.literal('loop'),\n step: singleStepEntrySchema,\n loopType: z.enum(['dowhile', 'dountil']),\n predicate: predicateSchema,\n }),\n]);\n\n// ============================================================================\n// Path params\n// ============================================================================\n\nexport const dynamicWorkflowIdPathParams = z.object({\n dynamicWorkflowId: z.string().describe('Unique identifier for the dynamic workflow definition'),\n});\n\n// ============================================================================\n// Query params\n// ============================================================================\n\nexport const listDynamicWorkflowsQuerySchema = z.object({\n status: z\n .enum(['active', 'archived'])\n .optional()\n .describe('Filter dynamic workflows by status (defaults to active when omitted by the handler)'),\n authorId: z.string().optional().describe('Filter dynamic workflows by author identifier'),\n});\n\n// ============================================================================\n// Body schemas\n// ============================================================================\n\n/**\n * One static workflow definition on the wire. Matches the input shape of\n * `mastra.addDynamicWorkflow()`.\n */\nexport const dynamicWorkflowDefinitionBodySchema = z.object({\n id: z.string().describe('Workflow id — kebab-case, descriptive'),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n // Schemas are loose object bags by design: different JSON Schema producers\n // emit slightly different shapes and core's `JsonSchema` type is\n // `Record<string, any>`. Using `z.record` here aligns with that shape so\n // no cast is needed at the handler boundary.\n inputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow input'),\n outputSchema: z.record(z.string(), z.unknown()).describe('JSON Schema (Draft 2020-12) for the workflow output'),\n stateSchema: z.record(z.string(), z.unknown()).optional(),\n requestContextSchema: z.record(z.string(), z.unknown()).optional(),\n graph: z\n .array(graphEntrySchema)\n .describe('Static workflow graph — ordered array of serialized step entries with all refs as ids.'),\n});\n\n/**\n * Body for `POST /stored/workflows` — upsert a static workflow definition,\n * optionally together with the helper workflows it nests.\n */\nexport const upsertDynamicWorkflowBodySchema = dynamicWorkflowDefinitionBodySchema.extend({\n // Deliberately a FLAT list rather than a recursive tree: helpers are peers\n // of each other, hydration order is derived from the graphs, and a\n // self-referential Zod schema would not survive OpenAPI generation.\n dependencies: z\n .array(dynamicWorkflowDefinitionBodySchema)\n .optional()\n .describe(\n 'Helper workflow definitions this workflow nests. Saved with it as one unit — the whole set is validated together, ' +\n 'hydrated in derived dependency order, and rejected together, so a failed save never leaves orphaned helpers behind. ' +\n 'Each helper becomes an ordinary dynamic workflow in its own right.',\n ),\n});\n\n// ============================================================================\n// Response schemas\n// ============================================================================\n\n/**\n * Shape returned for any single dynamic workflow row.\n */\nexport const dynamicWorkflowResponseSchema = z.object({\n id: z.string(),\n description: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n inputSchema: z.unknown(),\n outputSchema: z.unknown(),\n stateSchema: z.unknown().optional(),\n requestContextSchema: z.unknown().optional(),\n graph: z.array(z.unknown()),\n status: z.enum(['active', 'archived']),\n source: z.literal('storage'),\n authorId: z.string().optional(),\n createdAt: z.union([z.date(), z.string()]),\n updatedAt: z.union([z.date(), z.string()]),\n});\n\nexport const listDynamicWorkflowsResponseSchema = z.object({\n workflows: z.array(dynamicWorkflowResponseSchema),\n total: z.number(),\n});\n\nexport const getDynamicWorkflowResponseSchema = dynamicWorkflowResponseSchema;\n\nexport const upsertDynamicWorkflowResponseSchema = z.object({\n ok: z.literal(true),\n id: z.string(),\n dependencyIds: z\n .array(z.string())\n .optional()\n .describe('Ids of the helper workflows saved alongside this one. Present only when dependencies were supplied.'),\n});\n\nexport const deleteDynamicWorkflowResponseSchema = z.object({\n success: z.literal(true),\n message: z.string(),\n});\n","import type { Mastra } from '@mastra/core/mastra';\n\nimport { HTTPException } from '../http-exception';\nimport {\n dynamicWorkflowIdPathParams,\n listDynamicWorkflowsQuerySchema,\n upsertDynamicWorkflowBodySchema,\n listDynamicWorkflowsResponseSchema,\n getDynamicWorkflowResponseSchema,\n upsertDynamicWorkflowResponseSchema,\n deleteDynamicWorkflowResponseSchema,\n} from '../schemas/dynamic-workflows';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\n\n/**\n * GET /stored/workflows — list stored static workflow definitions.\n *\n * Mirrors `LIST_STORED_AGENTS_ROUTE` but without favorites/visibility/authorship\n * scoping (which the workflow-definitions domain doesn't carry in v1).\n */\nexport const LIST_DYNAMIC_WORKFLOWS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows',\n responseType: 'json',\n queryParamSchema: listDynamicWorkflowsQuerySchema,\n responseSchema: listDynamicWorkflowsResponseSchema,\n summary: 'List dynamic workflow definitions',\n description: 'Returns workflow definitions persisted to storage. Filterable by status and authorId.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, status, authorId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const result = await store.list({ status: status ?? 'active', authorId });\n return { workflows: result.definitions, total: result.total };\n } catch (error) {\n return handleError(error, 'Error listing dynamic workflows');\n }\n },\n});\n\n/**\n * GET /stored/workflows/:dynamicWorkflowId — get one dynamic workflow.\n */\nexport const GET_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: getDynamicWorkflowResponseSchema,\n summary: 'Get a dynamic workflow definition by id',\n description: 'Returns a single workflow definition persisted to storage.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:read',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n const def = await store.get(dynamicWorkflowId);\n if (!def) throw new HTTPException(404, { message: `Dynamic workflow \"${dynamicWorkflowId}\" not found` });\n return def;\n } catch (error) {\n return handleError(error, 'Error getting dynamic workflow');\n }\n },\n});\n\n/**\n * POST /stored/workflows — upsert a static workflow definition and live-register\n * it on the Mastra instance.\n *\n * Calls `mastra.addDynamicWorkflow(def)` which persists the row + rehydrates a\n * runnable workflow + registers it via `mastra.addWorkflow(workflow, id)`.\n * After this returns, `GET /workflows/:id` and `POST /workflows/:id/run` work\n * immediately — no server restart needed.\n */\nexport const UPSERT_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/workflows',\n responseType: 'json',\n bodySchema: upsertDynamicWorkflowBodySchema,\n responseSchema: upsertDynamicWorkflowResponseSchema,\n summary: 'Upsert a dynamic workflow definition and live-register it',\n description:\n 'Persists a static workflow definition and live-registers it on the running Mastra instance. Idempotent — same id updates in place.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({\n mastra,\n id,\n description,\n metadata,\n inputSchema,\n outputSchema,\n stateSchema,\n requestContextSchema,\n graph,\n dependencies,\n }) => {\n try {\n // Pick the body fields explicitly — handler args also carry server\n // context (requestContext, abortSignal, ...) which must not leak into\n // the stored definition.\n const def = { id, description, metadata, inputSchema, outputSchema, stateSchema, requestContextSchema, graph };\n // Helpers are saved with the root as one unit so a nested workflow that\n // does not exist yet resolves, and so a rejected root can never leave\n // its helpers behind as orphans. Order within the bundle is derived\n // from the graphs, not from the order the client sent them in.\n const bundle = [...(dependencies ?? []), def];\n // The wire schema is deliberately looser than the core authoring type:\n // it admits `mapping` entries as children of parallel/conditional/loop,\n // which `WorkflowBuilderExecutableInnerEntry` excludes. That is not\n // drift. Letting those through means a misplaced mapping surfaces from\n // the validation domain as a structured `invalid-map-placement` issue —\n // pointed at the offending path and carrying a machine-applicable\n // `remove-workflow-step` repair action that Studio's draft UI consumes —\n // instead of dying at the boundary as an opaque discriminated-union\n // error. `foreach` is excluded from this on purpose: core rejects a\n // foreach mapping body with an unstructured throw during rehydration,\n // so there is no repairable issue to preserve and the wire schema is\n // the better place to catch it.\n //\n // `addDynamicWorkflows` runs a full registry pre-flight before\n // rehydration, so nothing reaches the engine unvalidated; the cast\n // documents this boundary. Narrowing the schema to delete the cast\n // would trade a repairable issue for a generic 400.\n await mastra.addDynamicWorkflows(bundle as Parameters<Mastra['addDynamicWorkflows']>[0]);\n return {\n ok: true as const,\n id: def.id,\n ...(dependencies?.length ? { dependencyIds: dependencies.map(dependency => dependency.id) } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error upserting dynamic workflow');\n }\n },\n});\n\n/**\n * DELETE /stored/workflows/:dynamicWorkflowId — delete a dynamic workflow.\n *\n * Removes the row from storage AND un-registers the live Workflow instance so\n * a subsequent POST with the same id starts from a clean slate. Idempotent.\n */\nexport const DELETE_DYNAMIC_WORKFLOW_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/workflows/:dynamicWorkflowId',\n responseType: 'json',\n pathParamSchema: dynamicWorkflowIdPathParams,\n responseSchema: deleteDynamicWorkflowResponseSchema,\n summary: 'Delete a dynamic workflow definition',\n description: 'Removes a dynamic workflow definition and unregisters the live workflow instance. Idempotent.',\n tags: ['Dynamic Workflows'],\n requiresAuth: true,\n requiresPermission: 'stored-workflows:write',\n handler: async ({ mastra, dynamicWorkflowId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) throw new HTTPException(500, { message: 'Storage is not configured' });\n\n const store = await storage.getStore('workflowDefinitions');\n if (!store) throw new HTTPException(500, { message: 'workflowDefinitions storage domain is not available' });\n\n await store.delete(dynamicWorkflowId);\n (mastra as Mastra).removeWorkflow(dynamicWorkflowId);\n return { success: true as const, message: `Workflow ${dynamicWorkflowId} deleted` };\n } catch (error) {\n return handleError(error, 'Error deleting dynamic workflow');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { t as HTTPException } from "./http-exception-CyfxZB6W.js";
2
- import { n as createRoute } from "./route-builder-CIk5k35M.js";
2
+ import { n as createRoute } from "./route-builder-YQ_gLIvW.js";
3
3
  import { handleError } from "./server/handlers/error.js";
4
4
  import { buildProvidersList } from "./server/handlers/agents.js";
5
- import { i as builderAvailableModelsResponseSchema, l as infrastructureStatusResponseSchema, n as agentFeaturesSchema, s as builderSettingsResponseSchema } from "./editor-builder-D20yfDgw.js";
5
+ import { i as builderAvailableModelsResponseSchema, l as infrastructureStatusResponseSchema, n as agentFeaturesSchema, s as builderSettingsResponseSchema } from "./editor-builder-DJUxdzC8.js";
6
6
  //#region src/server/utils/resolve-builder-model-policy.ts
7
7
  /**
8
8
  * Server-side wrapper around `builderToModelPolicy`.
@@ -334,4 +334,4 @@ const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({
334
334
  //#endregion
335
335
  export { requireBuilderFeature as a, isBuilderFeatureEnabled as i, GET_EDITOR_BUILDER_SETTINGS_ROUTE as n, GET_INFRASTRUCTURE_STATUS_ROUTE as r, GET_EDITOR_BUILDER_AVAILABLE_MODELS_ROUTE as t };
336
336
 
337
- //# sourceMappingURL=editor-builder-DTC6ejp8.js.map
337
+ //# sourceMappingURL=editor-builder-Byg6wbi6.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-DTC6ejp8.js","names":[],"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';\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 const channelProviders = 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-Byg6wbi6.js","names":[],"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';\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 const channelProviders = 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":";;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,eAAsB,0BAA0B,QAAgE;CAC9G,IAAI,CAAC,QAAQ,OAAO,EAAE,QAAQ,MAAM;CACpC,IAAI,OAAO,OAAO,mBAAmB,YAAY,OAAO,EAAE,QAAQ,MAAM;CACxE,IAAI,OAAO,OAAO,4BAA4B,cAAc,CAAC,OAAO,wBAAwB,GAC1F,OAAO,EAAE,QAAQ,MAAM;CAMzB,IAAI;EACF,MAAM,UAAU,MAAM,OAAO,eAAe;EAC5C,MAAM,EAAE,yBAAyB,MAAM,OAAO;EAC9C,OAAO,qBAAqB,OAAO;CACrC,QAAQ;EACN,OAAO,EAAE,QAAQ,MAAM;CACzB;AACF;;;;;;;ACpBA,eAAe,uBAAuB,QAA+C;CACnF,MAAM,SAAS,OAAO,UAAU;CAChC,IAAI,CAAC,UAAU,OAAO,OAAO,mBAAmB,YAAY,OAAO;CACnE,IAAI,CAAC,OAAO,0BAA0B,GAAG,OAAO;CAChD,MAAM,UAAU,MAAM,OAAO,eAAe;CAC5C,IAAI,CAAC,WAAW,CAAC,QAAQ,SAAS,OAAO;CACzC,MAAM,WAAW,QAAQ,cAAc,CAAC,EAAE;CAC1C,IAAI,CAAC,UAAU,OAAO;CAEtB,MAAM,SAAS,oBAAoB,UAAU,QAAQ;CACrD,OAAO,OAAO,UAAU,OAAO,OAAO;AACxC;;;;;;AAOA,eAAsB,wBAAwB,QAAgB,SAAgD;CAE5G,QAAO,MADgB,uBAAuB,MAAM,EAAA,GAClC,aAAa;AACjC;;;;;;AAOA,eAAsB,sBAAsB,QAAgB,SAA6C;CACvG,IAAI,CAAE,MAAM,wBAAwB,QAAQ,OAAO,GACjD,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,YAAY,CAAC;AAEzD;;;;;;;AAQA,MAAa,oCAAoC,YAAY;CAC3D,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,QAAQ;CACf,cAAc;CACd,oBAAoB;CACpB,SAAS,OAAO,EAAE,aAAa;EAC7B,IAAI;GACF,MAAM,SAAS,OAAO,UAAU;GAGhC,IAAI,CAAC,QACH,OAAO;IAAE,SAAS;IAAO,aAAa,EAAE,QAAQ,MAAM;GAAE;GAI1D,IAAI,OAAO,OAAO,mBAAmB,YACnC,OAAO;IAAE,SAAS;IAAO,aAAa,EAAE,QAAQ,MAAM;GAAE;GAI1D,IAAI,CAAC,OAAO,0BAA0B,GACpC,OAAO;IAAE,SAAS;IAAO,aAAa,EAAE,QAAQ,MAAM;GAAE;GAI1D,MAAM,UAAU,MAAM,OAAO,eAAe;GAC5C,IAAI,CAAC,WAAW,CAAC,QAAQ,SACvB,OAAO;IAAE,SAAS;IAAO,aAAa,EAAE,QAAQ,MAAM;GAAE;GAG1D,MAAM,eAAe,QAAQ,yBAAyB,KAAK,CAAC;GAC5D,MAAM,gBAAgB,QAAQ,iBAAiB;GAY/C,MAAM,kBAAkB,aACtB,OAAO,QAAQ,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,aAAa;IAC/C,IAAK,OAA2B,MAAM;IACtC;GACF,EAAE;GAEJ,MAAM,cAAc,eAAe,OAAO,UAAU,KAAK,CAAC,CAAC;GAC3D,MAAM,eAAe,eAAe,OAAO,WAAW,KAAK,CAAC,CAAC;GAC7D,MAAM,kBAAkB,eAAe,OAAO,cAAc,KAAK,CAAC,CAAC;GAInE,MAAM,iBAAiB,SAAsB,SAAuB;IAClE,MAAM,sBAAM,IAAI,IAAoB;IACpC,KAAK,MAAM,KAAK,SAAS;KACvB,IAAI,IAAI,EAAE,IAAI,SAAS,OAAO,EAAE,KAAK,EAAE,GAAG;KAC1C,IAAI,IAAI,EAAE,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,GAAG;IAC7C;IACA,OAAO;GACT;GACA,MAAM,aAAa,cAAc,aAAa,KAAK;GACnD,MAAM,cAAc,cAAc,cAAc,IAAI;GACpD,MAAM,iBAAiB,cAAc,iBAAiB,KAAK;GAM3D,MAAM,EAAE,sBAAsB,4BAA4B,MAAM,OAAO;GAEvE,MAAM,SAAS,wBAAwB;IACrC,QAAQ,eAAe;IACvB,mBAAmB,YAAY,SAAQ,MAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;IACzD,oBAAoB,aAAa,SAAQ,MAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;IAC3D,uBAAuB,gBAAgB,SAAQ,MAAK,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC;GACnE,CAAC;GAED,MAAM,aAAa,SAA0B,QAA8C;IACzF,IAAI,YAAY,MAAM,OAAO;IAC7B,MAAM,MAAgB,CAAC;IACvB,MAAM,uBAAO,IAAI,IAAY;IAC7B,KAAK,MAAM,MAAM,SAAS;KACxB,MAAM,SAAS,IAAI,IAAI,EAAE;KACzB,IAAI,UAAU,CAAC,KAAK,IAAI,MAAM,GAAG;MAC/B,KAAK,IAAI,MAAM;MACf,IAAI,KAAK,MAAM;KACjB;IACF;IACA,OAAO;GACT;GAEA,MAAM,sBAAsB,CAAC,GAAG,cAAc,GAAG,OAAO,QAAQ;GAEhE,OAAO;IACL,SAAS;IACT,UAAU,QAAQ,YAAY;IAC9B;IACA,aAAa,qBAAqB,OAAO;IACzC,QAAQ;KACN,cAAc,UAAU,OAAO,cAAc,UAAU;KACvD,eAAe,UAAU,OAAO,eAAe,WAAW;KAC1D,kBAAkB,UAAU,OAAO,kBAAkB,cAAc;IACrE;IACA,GAAI,oBAAoB,SAAS,IAAI,EAAE,oBAAoB,IAAI,CAAC;GAClE;EACF,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,gCAAgC;EAC5D;CACF;AACF,CAAC;;;;;;;;;;;;;;;;;AAkBD,MAAa,4CAA4C,YAAY;CACnE,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,QAAQ;CACf,cAAc;CACd,oBAAoB;CACpB,SAAS,OAAO,EAAE,aAAa;EAC7B,IAAI;GAKF,MAAM,aAAa,MAAM,mBAAmB,MAAM,EAAA,CAAG,QAAO,aAAY,SAAS,SAAS;GAC1F,MAAM,SAAS,MAAM,0BAA0B,OAAO,UAAU,CAAC;GAGjE,IAAI,CAAC,OAAO,UAAU,CAAC,OAAO,WAAW,OAAO,QAAQ,WAAW,GACjE,OAAO,EAAE,UAAU;GAKrB,MAAM,EAAE,mBAAmB,MAAM,OAAO;GASxC,OAAO,EAAE,WAPQ,UACd,KAAI,cAAa;IAChB,GAAG;IACH,QAAQ,SAAS,OAAO,QAAO,YAAW,eAAe,OAAO,SAAS;KAAE,UAAU,SAAS;KAAI;IAAQ,CAAC,CAAC;GAC9G,EAAE,CAAC,CACF,QAAO,aAAY,SAAS,OAAO,SAAS,CAEpB,EAAE;EAC/B,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,iCAAiC;EAC7D;CACF;AACF,CAAC;;;;;;;;AASD,MAAa,kCAAkC,YAAY;CACzD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,QAAQ;CACf,cAAc;CACd,oBAAoB;CACpB,SAAS,OAAO,EAAE,aAAa;EAC7B,IAAI;GACF,MAAM,qBAAqB,UAA2B;IACpD,IAAI,UAAU,QAAQ,UAAU,KAAA,GAAW,OAAO;IAClD,IAAI,OAAO,UAAU,YAAY,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW,OAAO,OAAO,KAAK;IAC7G,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,GAAG,MAAM,OAAO,OAAO,MAAM,WAAW,IAAI,KAAK;IAClF,OAAO,MAAM,aAAa,QAAQ,MAAM,YAAY,SAAS,WAAW,MAAM,YAAY,OAAO;GACnG;GAEA,MAAM,mBAAmB,UAAkC;IACzD,IAAI,CAAC,OAAO,OAAO;IACnB,IAAI,OAAO,UAAU,YAAY,cAAc,SAAS,OAAO,MAAM,aAAa,UAChF,OAAO,MAAM;IACf,IAAI,OAAO,UAAU,YAAY,iBAAiB,OAAO;KACvD,MAAM,OAAQ,MAA8C,aAAa;KACzE,OAAO,QAAQ,SAAS,WAAW,OAAO;IAC5C;IACA,OAAO;GACT;GAEA,MAAM,oBAAoB,QAAiC,cAAwB,CAAC,MAClF,OAAO,QAAQ,MAAM,CAAC,CACnB,QAAQ,CAAC,KAAK,WAAW,CAAC,YAAY,SAAS,GAAG,KAAK,UAAU,KAAA,KAAa,UAAU,IAAI,CAAC,CAC7F,KAAK,CAAC,KAAK,YAAY;IAAE;IAAK,OAAO,kBAAkB,KAAK;GAAE,EAAE;GAErE,MAAM,mBAAmB,OAAO,oBAAoB,KAAK,CAAC;GAC1D,MAAM,WAA6C,EACjD,WAAW,OAAO,QAAQ,gBAAgB,CAAC,CACxC,KAAK,CAAC,IAAI,cAAc;IACvB,MAAM,OAAO,SAAS,UAAU;IAChC,MAAM,SAAS,SAAS,YAAY,KAAK,CAAC;IAC1C,OAAO;KACL,IAAI,MAAM,MAAM;KAChB,MAAM,MAAM,QAAQ;KACpB,cAAc,MAAM,gBAAgB;KACpC,YAAY,OAAO;IACrB;GACF,CAAC,CAAC,CACD,QAAO,aAAY,SAAS,YAAY,EAC7C;GAEA,MAAM,SAAS,OAAO,UAAU;GAChC,IAAI,UAA2C;IAC7C,MAAM;IACN,UAAU;IACV,KAAK;IACL,YAAY;IACZ,oBAAoB,CAAC;IACrB,QAAQ,CAAC;GACX;GACA,IAAI,YAA+C;IACjD,MAAM;IACN,aAAa;IACb,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,eAAe;IACf,YAAY;IACZ,oBAAoB;IACpB,iBAAiB;IACjB,QAAQ,CAAC;GACX;GACA,IAAI,aAAiD,EACnD,UAAU,EAAE,SAAS,MAAM,EAC7B;GAEA,IAAI,QAAQ,gBAAgB;IAC1B,MAAM,WAAY,OAA4D;IAC9E,MAAM,UAAU,MAAM,OAAO,eAAe;IAE5C,aAAa,EACX,UAAU,EAAE,UAFY,SAAS,gBAAgB,EAAA,EAET,UAAU,YAAY,KAAK,EACrE;IACA,MAAM,gBAAgB,SAAS,mBAAmB,CAAC,EAAE;IAWrD,MAAM,aAAa,eAAe;IAClC,MAAM,gBAAgB,YAAY,UAAU,CAAC;IAC7C,MAAM,aAAa,cAAc,YAAY;IAC7C,UAAU;KACR,MAAM,YAAY,QAAQ;KAC1B,UAAU;KACV,KAAK,cAAc,OAAO;KAC1B,YAAY,aAAa,CAAC,CAAC,UAAU,IAAI,UAAU,IAAI;KACvD,oBAAoB,WAAW,MAAM,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC;KAC9D,QAAQ,iBAAiB,eAAe,CAAC,YAAY,KAAK,CAAC;IAC7D;IAEA,MAAM,eAAe,eAAe;IACpC,MAAM,kBAAkB,cAAc,UAAU,CAAC;IACjD,MAAM,uBAAuB,OAAO,eAAe;IACnD,MAAM,sBAAsB,cAAc,cACtC,qBAAqB,aAAa,eAClC,KAAA;IACJ,MAAM,aAAa,qBAAqB,UAAU,cAAc,gBAAgB;IAChF,MAAM,UAAU,qBAAqB,UAAU,WAAW,gBAAgB;IAC1E,MAAM,mBACJ,OAAO,gBAAgB,eAAe,YACtC,gBAAgB,cAChB,YAAY,gBAAgB,aACvB,gBAAgB,WAAW,SAC5B,CAAC;IACP,MAAM,gBACJ,OAAO,gBAAgB,YAAY,YAAY,gBAAgB,WAAW,YAAY,gBAAgB,UACjG,gBAAgB,QAAQ,SACzB,CAAC;IACP,YAAY;KACV,MAAM,cAAc,QAAQ;KAC5B,aAAa,cAAc,eAAe;KAC1C,MAAM,gBAAgB,QAAQ,qBAAqB,UAAU,QAAQ;KACrE,QAAQ,qBAAqB,UAAU;KACvC,YAAY,CAAC,CAAC;KACd,eAAe,CAAC,CAAC;KACjB,YAAY,CAAC,CAAC;KACd,oBAAoB,gBAAgB,UAAU;KAC9C,iBAAiB,gBAAgB,OAAO;KACxC,QAAQ,CACN,GAAG,iBAAiB,gBAAgB,CAAC,CAAC,KAAI,WAAU;MAAE,GAAG;MAAO,KAAK,cAAc,MAAM;KAAM,EAAE,GACjG,GAAG,iBAAiB,aAAa,CAAC,CAAC,KAAI,WAAU;MAAE,GAAG;MAAO,KAAK,WAAW,MAAM;KAAM,EAAE,CAC7F;IACF;GACF;GAEA,OAAO;IAAE;IAAU;IAAS;IAAW;GAAW;EACpD,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,qCAAqC;EACjE;CACF;AACF,CAAC"}
@@ -1,4 +1,4 @@
1
- const require_agents = require("./agents--m8fNv8n.cjs");
1
+ const require_agents = require("./agents-0Tw3kkD_.cjs");
2
2
  let zod_v4 = require("zod/v4");
3
3
  //#region src/server/schemas/editor-builder.ts
4
4
  /**
@@ -256,4 +256,4 @@ Object.defineProperty(exports, "providerModelEntrySchema", {
256
256
  }
257
257
  });
258
258
 
259
- //# sourceMappingURL=editor-builder-CIKX5MYh.cjs.map
259
+ //# sourceMappingURL=editor-builder-C3ZvffGu.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-CIKX5MYh.cjs","names":["z","providerSchema"],"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-C3ZvffGu.cjs","names":["z","providerSchema"],"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,sBAAsBA,OAAAA,EAAE,OAAO;CAC1C,OAAOA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC5B,QAAQA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,WAAWA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,SAASA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC9B,QAAQA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,QAAQA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAC7B,WAAWA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,WAAWA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,cAAcA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CACnC,SAASA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;;;;;;CAM9B,OAAOA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;AAC9B,CAAC;;;;;;;;;;AAaD,MAAM,2BAA2BA,OAAAA,EAC9B,OAAO;CACN,UAAUA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAASA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AACtC,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,4BAA4BA,OAAAA,EAC/B,OAAO;CACN,MAAMA,OAAAA,EAAE,QAAQ,QAAQ;CACxB,UAAUA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAASA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;AACtC,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,+BAA+BA,OAAAA,EAClC,OAAO;CACN,UAAUA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAASA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CACD,OAAO;AAEV,MAAM,gCAAgCA,OAAAA,EACnC,OAAO;CACN,MAAMA,OAAAA,EAAE,QAAQ,QAAQ;CACxB,UAAUA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC1B,SAASA,OAAAA,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;AAC3B,CAAC,CAAC,CACD,OAAO;AAKV,MAAa,2BAA2BA,OAAAA,EAAE,MAAM,CAAC,2BAA2B,wBAAwB,CAAC;AACrG,MAAa,0BAA0BA,OAAAA,EAAE,MAAM,CAAC,+BAA+B,4BAA4B,CAAC;;;;AAK5G,MAAa,oBAAoBA,OAAAA,EAAE,OAAO;CACxC,SAASA,OAAAA,EAAE,MAAM,wBAAwB,CAAC,CAAC,SAAS;CACpD,SAAS,wBAAwB,SAAS;AAC5C,CAAC;;;;;;;;;AAUD,MAAa,wBAAwBA,OAAAA,EAClC,OAAO,EACN,SAASA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,EACxC,CAAC,CAAC,CACD,OAAO;;;;;;;AAQV,MAAa,2BAA2BA,OAAAA,EACrC,OAAO;CACN,QAAQ,kBAAkB,SAAS;CACnC,OAAO,sBAAsB,SAAS;CACtC,QAAQ,sBAAsB,SAAS;CACvC,WAAW,sBAAsB,SAAS;AAC5C,CAAC,CAAC,CACD,SAASA,OAAAA,EAAE,QAAQ,CAAC;;;;;;;;AASvB,MAAa,sBAAsBA,OAAAA,EAAE,OAAO;CAC1C,cAAcA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC3C,eAAeA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;CAC5C,kBAAkBA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACjD,CAAC;;;;;;;;;;AAWD,MAAa,2BAA2BA,OAAAA,EAAE,OAAO;CAC/C,QAAQA,OAAAA,EAAE,QAAQ;CAClB,eAAeA,OAAAA,EAAE,QAAQ,CAAC,CAAC,SAAS;CACpC,SAASA,OAAAA,EAAE,MAAM,wBAAwB,CAAC,CAAC,SAAS;CACpD,SAAS,wBAAwB,SAAS;AAC5C,CAAC;;;;AAKD,MAAa,gCAAgCA,OAAAA,EAAE,OAAO;CACpD,SAASA,OAAAA,EAAE,QAAQ;CACnB,UAAUA,OAAAA,EACP,OAAO,EACN,OAAO,oBAAoB,SAAS,EACtC,CAAC,CAAC,CACD,SAAS;CACZ,eAAeA,OAAAA,EACZ,OAAO,EACN,OAAO,yBAAyB,SAAS,EAC3C,CAAC,CAAC,CACD,SAAS;CACZ,aAAa,yBAAyB,SAAS;;;;;CAK/C,QAAQ,oBAAoB,SAAS;;;;;;;CAOrC,qBAAqBA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS;AACpD,CAAC;;;;;;;AAQD,MAAa,qCAAqCA,OAAAA,EAAE,OAAO;CACzD,UAAUA,OAAAA,EAAE,OAAO,EACjB,WAAWA,OAAAA,EAAE,MACXA,OAAAA,EAAE,OAAO;EACP,IAAIA,OAAAA,EAAE,OAAO;EACb,MAAMA,OAAAA,EAAE,OAAO;EACf,cAAcA,OAAAA,EAAE,QAAQ;EACxB,YAAYA,OAAAA,EAAE,OAAO;CACvB,CAAC,CACH,EACF,CAAC;CACD,SAASA,OAAAA,EAAE,OAAO;EAChB,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,UAAUA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC9B,KAAKA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACzB,YAAYA,OAAAA,EAAE,QAAQ;EACtB,oBAAoBA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO,CAAC;EACtC,QAAQA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO;GAAE,KAAKA,OAAAA,EAAE,OAAO;GAAG,OAAOA,OAAAA,EAAE,OAAO;EAAE,CAAC,CAAC;CAClE,CAAC;CACD,WAAWA,OAAAA,EAAE,OAAO;EAClB,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,aAAaA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACjC,MAAMA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC1B,QAAQA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,YAAYA,OAAAA,EAAE,QAAQ;EACtB,eAAeA,OAAAA,EAAE,QAAQ;EACzB,YAAYA,OAAAA,EAAE,QAAQ;EACtB,oBAAoBA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACxC,iBAAiBA,OAAAA,EAAE,OAAO,CAAC,CAAC,SAAS;EACrC,QAAQA,OAAAA,EAAE,MAAMA,OAAAA,EAAE,OAAO;GAAE,KAAKA,OAAAA,EAAE,OAAO;GAAG,OAAOA,OAAAA,EAAE,OAAO;EAAE,CAAC,CAAC;CAClE,CAAC;CACD,YAAYA,OAAAA,EAAE,OAAO,EACnB,UAAUA,OAAAA,EAAE,OAAO,EACjB,SAASA,OAAAA,EAAE,QAAQ,EACrB,CAAC,EACH,CAAC;AACH,CAAC;;;;;;;;;AAUD,MAAa,uCAAuCA,OAAAA,EAAE,OAAO,EAC3D,WAAWA,OAAAA,EAAE,MAAMC,eAAAA,cAAc,EACnC,CAAC"}
@@ -1,4 +1,4 @@
1
- import { D as providerSchema } from "./agents-DpZKzU92.js";
1
+ import { D as providerSchema } from "./agents-uT8ZDE4k.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-D20yfDgw.js.map
194
+ //# sourceMappingURL=editor-builder-DJUxdzC8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-D20yfDgw.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
+ {"version":3,"file":"editor-builder-DJUxdzC8.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,8 +1,8 @@
1
1
  const require_http_exception = require("./http-exception-CKDHupKw.cjs");
2
- const require_route_builder = require("./route-builder-CgLVYL1c.cjs");
2
+ const require_route_builder = require("./route-builder-BAAedfru.cjs");
3
3
  const require_server_handlers_error = require("./server/handlers/error.cjs");
4
4
  const require_server_handlers_agents = require("./server/handlers/agents.cjs");
5
- const require_editor_builder = require("./editor-builder-CIKX5MYh.cjs");
5
+ const require_editor_builder = require("./editor-builder-C3ZvffGu.cjs");
6
6
  //#region src/server/utils/resolve-builder-model-policy.ts
7
7
  /**
8
8
  * Server-side wrapper around `builderToModelPolicy`.
@@ -363,4 +363,4 @@ Object.defineProperty(exports, "requireBuilderFeature", {
363
363
  }
364
364
  });
365
365
 
366
- //# sourceMappingURL=editor-builder-B7yBsr6o.cjs.map
366
+ //# sourceMappingURL=editor-builder-DT7ypWfa.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-builder-B7yBsr6o.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';\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 const channelProviders = 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-DT7ypWfa.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';\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 const channelProviders = 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,5 +1,5 @@
1
1
  const require_http_exception = require("./http-exception-CKDHupKw.cjs");
2
- const require_route_builder = require("./route-builder-CgLVYL1c.cjs");
2
+ const require_route_builder = require("./route-builder-BAAedfru.cjs");
3
3
  const require_server_handlers_error = require("./server/handlers/error.cjs");
4
4
  const require_server_handlers_observability_list_query_schemas = require("./server/handlers/observability-list-query-schemas.cjs");
5
5
  const require_server_handlers_observability_shared = require("./server/handlers/observability-shared.cjs");
@@ -1352,4 +1352,4 @@ Object.defineProperty(exports, "NEW_ROUTES", {
1352
1352
  }
1353
1353
  });
1354
1354
 
1355
- //# sourceMappingURL=observability-new-endpoints-Dk3oatL8.cjs.map
1355
+ //# sourceMappingURL=observability-new-endpoints-BC-dasRY.cjs.map