@mastra/server 1.79.0-alpha.10 → 1.79.0-alpha.12

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 (401) hide show
  1. package/dist/{a2a-CHBSYHxu.js → a2a-BqLB3McP.js} +17 -16
  2. package/dist/a2a-BqLB3McP.js.map +1 -0
  3. package/dist/{a2a-B465DD1u.cjs → a2a-Uood_0DN.cjs} +19 -18
  4. package/dist/a2a-Uood_0DN.cjs.map +1 -0
  5. package/dist/agent-builder-CuBD1tpv.cjs +728 -0
  6. package/dist/agent-builder-CuBD1tpv.cjs.map +1 -0
  7. package/dist/agent-builder-VhM8ADW-.js +627 -0
  8. package/dist/agent-builder-VhM8ADW-.js.map +1 -0
  9. package/dist/{agents-X1E7fW3p.js → agents-BHLTMBff.js} +2 -2
  10. package/dist/{agents-X1E7fW3p.js.map → agents-BHLTMBff.js.map} +1 -1
  11. package/dist/agents-BOWEUKyV.cjs +3127 -0
  12. package/dist/agents-BOWEUKyV.cjs.map +1 -0
  13. package/dist/agents-DRQ3ScbX.js +2828 -0
  14. package/dist/agents-DRQ3ScbX.js.map +1 -0
  15. package/dist/{agents-DoNMSCMt.cjs → agents-T-OIM9IK.cjs} +2 -2
  16. package/dist/{agents-DoNMSCMt.cjs.map → agents-T-OIM9IK.cjs.map} +1 -1
  17. package/dist/{api-schema-manifest-CWRIJP-B.js → api-schema-manifest-CI90M4sX.js} +3 -3
  18. package/dist/{api-schema-manifest-CWRIJP-B.js.map → api-schema-manifest-CI90M4sX.js.map} +1 -1
  19. package/dist/{api-schema-manifest-DUseI2VG.cjs → api-schema-manifest-DIlNfbyw.cjs} +4 -4
  20. package/dist/{api-schema-manifest-DUseI2VG.cjs.map → api-schema-manifest-DIlNfbyw.cjs.map} +1 -1
  21. package/dist/{background-tasks-CabImVak.cjs → background-tasks-B3VAKTJh.cjs} +3 -3
  22. package/dist/{background-tasks-CabImVak.cjs.map → background-tasks-B3VAKTJh.cjs.map} +1 -1
  23. package/dist/{background-tasks-oBaLtnCn.js → background-tasks-Du2zYOPl.js} +2 -2
  24. package/dist/{background-tasks-oBaLtnCn.js.map → background-tasks-Du2zYOPl.js.map} +1 -1
  25. package/dist/{builder-registry-DOkLe8ES.js → builder-registry-DLdu9bWH.js} +3 -3
  26. package/dist/{builder-registry-DOkLe8ES.js.map → builder-registry-DLdu9bWH.js.map} +1 -1
  27. package/dist/{builder-registry-D0frV8lQ.cjs → builder-registry-DaFAaMTf.cjs} +3 -3
  28. package/dist/{builder-registry-D0frV8lQ.cjs.map → builder-registry-DaFAaMTf.cjs.map} +1 -1
  29. package/dist/{channels-CBIopVWd.cjs → channels-BnVRmnzK.cjs} +6 -3
  30. package/dist/{channels-CBIopVWd.cjs.map → channels-BnVRmnzK.cjs.map} +1 -1
  31. package/dist/{channels-BOxgHvzI.js → channels-Db-4pXVZ.js} +6 -3
  32. package/dist/{channels-BOxgHvzI.js.map → channels-Db-4pXVZ.js.map} +1 -1
  33. package/dist/conversations-8BWryNlF.js +165 -0
  34. package/dist/conversations-8BWryNlF.js.map +1 -0
  35. package/dist/conversations-C5MkQBB8.cjs +194 -0
  36. package/dist/conversations-C5MkQBB8.cjs.map +1 -0
  37. package/dist/{conversations-Bj5TLNqF.cjs → conversations-DasqEDCF.cjs} +3 -3
  38. package/dist/{conversations-Bj5TLNqF.cjs.map → conversations-DasqEDCF.cjs.map} +1 -1
  39. package/dist/{dist-9c3PXXpk.cjs → dist-B-bEVWlJ.cjs} +4733 -1251
  40. package/dist/dist-B-bEVWlJ.cjs.map +1 -0
  41. package/dist/dist-B3kC8Yd0.cjs +3 -0
  42. package/dist/{dist-CQ3FSKT-.cjs → dist-B9ery9Zw.cjs} +38 -35
  43. package/dist/{dist-CQ3FSKT-.cjs.map → dist-B9ery9Zw.cjs.map} +1 -1
  44. package/dist/{dist-BxMmGD3n.js → dist-BBOnrL_A.js} +10 -12
  45. package/dist/{dist-BxMmGD3n.js.map → dist-BBOnrL_A.js.map} +1 -1
  46. package/dist/{dist-DOWsEmo6.js → dist-BIrQLUV9.js} +20 -20
  47. package/dist/{dist-DOWsEmo6.js.map → dist-BIrQLUV9.js.map} +1 -1
  48. package/dist/dist-BM9J-PTK.js +1 -0
  49. package/dist/{dist-DC1Pewf5.cjs → dist-Bo3GdQwf.cjs} +21 -21
  50. package/dist/{dist-DC1Pewf5.cjs.map → dist-Bo3GdQwf.cjs.map} +1 -1
  51. package/dist/{dist-BwYL7Ykb.js → dist-CREG82cy.js} +37 -34
  52. package/dist/{dist-BwYL7Ykb.js.map → dist-CREG82cy.js.map} +1 -1
  53. package/dist/{dist-rDRetJVY.cjs → dist-CeTLA-e5.cjs} +2 -3
  54. package/dist/{dist-rDRetJVY.cjs.map → dist-CeTLA-e5.cjs.map} +1 -1
  55. package/dist/{dist-CBRJax5e.js → dist-DLld1qjf.js} +25 -31
  56. package/dist/{dist-CBRJax5e.js.map → dist-DLld1qjf.js.map} +1 -1
  57. package/dist/{dist-B_bet8uz.js → dist-DjkPkAzV.js} +2 -3
  58. package/dist/{dist-B_bet8uz.js.map → dist-DjkPkAzV.js.map} +1 -1
  59. package/dist/{dist-UKEksCGq.cjs → dist-DsrJXwic.cjs} +11 -13
  60. package/dist/{dist-UKEksCGq.cjs.map → dist-DsrJXwic.cjs.map} +1 -1
  61. package/dist/{dist-DGCnbhNe.js → dist-k77XQGUn.js} +4493 -1043
  62. package/dist/dist-k77XQGUn.js.map +1 -0
  63. package/dist/{dist-3FPW9nVj.cjs → dist-lT2rqyY9.cjs} +26 -32
  64. package/dist/{dist-3FPW9nVj.cjs.map → dist-lT2rqyY9.cjs.map} +1 -1
  65. package/dist/docs/SKILL.md +1 -1
  66. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  67. package/dist/{dynamic-workflows-Rr_6ac1y.js → dynamic-workflows-CTUO0SFu.js} +3 -3
  68. package/dist/{dynamic-workflows-Rr_6ac1y.js.map → dynamic-workflows-CTUO0SFu.js.map} +1 -1
  69. package/dist/{dynamic-workflows-DXlkr-jK.cjs → dynamic-workflows-HwPX3mcf.cjs} +3 -3
  70. package/dist/{dynamic-workflows-DXlkr-jK.cjs.map → dynamic-workflows-HwPX3mcf.cjs.map} +1 -1
  71. package/dist/{editor-builder-BclcHxN6.cjs → editor-builder-BDtiWw0f.cjs} +2 -2
  72. package/dist/{editor-builder-BclcHxN6.cjs.map → editor-builder-BDtiWw0f.cjs.map} +1 -1
  73. package/dist/{editor-builder-D16kc1P6.js → editor-builder-ClFlGXoX.js} +4 -4
  74. package/dist/{editor-builder-D16kc1P6.js.map → editor-builder-ClFlGXoX.js.map} +1 -1
  75. package/dist/{editor-builder-s9WqPJgA.js → editor-builder-DnLCfqnY.js} +2 -2
  76. package/dist/{editor-builder-s9WqPJgA.js.map → editor-builder-DnLCfqnY.js.map} +1 -1
  77. package/dist/{editor-builder-DXHiPX1A.cjs → editor-builder-DtpP1FtW.cjs} +5 -5
  78. package/dist/{editor-builder-DXHiPX1A.cjs.map → editor-builder-DtpP1FtW.cjs.map} +1 -1
  79. package/dist/{helpers-ElhPeCSK.cjs → helpers-CAcEhq38.cjs} +21 -17
  80. package/dist/{helpers-ElhPeCSK.cjs.map → helpers-CAcEhq38.cjs.map} +1 -1
  81. package/dist/{helpers-DLhX1fqc.js → helpers-vrqddDd5.js} +21 -17
  82. package/dist/{helpers-DLhX1fqc.js.map → helpers-vrqddDd5.js.map} +1 -1
  83. package/dist/index.cjs +1 -1
  84. package/dist/logs-CiSw7r0s.cjs +119 -0
  85. package/dist/logs-CiSw7r0s.cjs.map +1 -0
  86. package/dist/logs-CxfPk-iL.js +96 -0
  87. package/dist/logs-CxfPk-iL.js.map +1 -0
  88. package/dist/mcp-CWDfSu7w.js +474 -0
  89. package/dist/mcp-CWDfSu7w.js.map +1 -0
  90. package/dist/mcp-CWGJRqkC.cjs +563 -0
  91. package/dist/mcp-CWGJRqkC.cjs.map +1 -0
  92. package/dist/{mcp-DzpwLXEY.js → mcp-Drqt0GqD.js} +79 -4
  93. package/dist/mcp-Drqt0GqD.js.map +1 -0
  94. package/dist/{mcp-ShaKO7gA.cjs → mcp-ziWVk7Ol.cjs} +126 -3
  95. package/dist/mcp-ziWVk7Ol.cjs.map +1 -0
  96. package/dist/memory-BHtTSzvJ.js +1739 -0
  97. package/dist/memory-BHtTSzvJ.js.map +1 -0
  98. package/dist/memory-CwwkVDh1.cjs +1906 -0
  99. package/dist/memory-CwwkVDh1.cjs.map +1 -0
  100. package/dist/observability-BBMCMeT-.cjs +502 -0
  101. package/dist/observability-BBMCMeT-.cjs.map +1 -0
  102. package/dist/observability-ZRgRcvoX.js +431 -0
  103. package/dist/observability-ZRgRcvoX.js.map +1 -0
  104. package/dist/{observability-new-endpoints-BU8JYPfh.js → observability-new-endpoints-fjoZzEtk.js} +10 -9
  105. package/dist/{observability-new-endpoints-BU8JYPfh.js.map → observability-new-endpoints-fjoZzEtk.js.map} +1 -1
  106. package/dist/{observability-new-endpoints-AMp9bnMV.cjs → observability-new-endpoints-tG3-odLa.cjs} +11 -10
  107. package/dist/observability-new-endpoints-tG3-odLa.cjs.map +1 -0
  108. package/dist/plans-CiPgWBhO.cjs +68 -0
  109. package/dist/plans-CiPgWBhO.cjs.map +1 -0
  110. package/dist/plans-DCepEY7n.js +57 -0
  111. package/dist/plans-DCepEY7n.js.map +1 -0
  112. package/dist/{probe-image-size-DBGjhUtJ.cjs → probe-image-size-Alv3gwKl.cjs} +194 -184
  113. package/dist/probe-image-size-Alv3gwKl.cjs.map +1 -0
  114. package/dist/{probe-image-size-Dmoxv93t.js → probe-image-size-BdfbUHxx.js} +158 -148
  115. package/dist/probe-image-size-BdfbUHxx.js.map +1 -0
  116. package/dist/responses-4FwMNxoJ.js +628 -0
  117. package/dist/responses-4FwMNxoJ.js.map +1 -0
  118. package/dist/responses-CCRijwDF.cjs +651 -0
  119. package/dist/responses-CCRijwDF.cjs.map +1 -0
  120. package/dist/{responses-CKNdSRkS.cjs → responses-CfcIc53b.cjs} +2 -2
  121. package/dist/{responses-CKNdSRkS.cjs.map → responses-CfcIc53b.cjs.map} +1 -1
  122. package/dist/{rolldown-runtime-Bd6kNlEP.cjs → rolldown-runtime-BwC_XMyb.cjs} +2 -2
  123. package/dist/{rolldown-runtime-maW3aOIk.js → rolldown-runtime-D3Hj5m0v.js} +2 -2
  124. package/dist/{route-builder-BNZs643f.cjs → route-builder-B2Qhhd7C.cjs} +52 -66
  125. package/dist/route-builder-B2Qhhd7C.cjs.map +1 -0
  126. package/dist/{route-builder-BfQYtclb.js → route-builder-CjkWxv4E.js} +51 -65
  127. package/dist/route-builder-CjkWxv4E.js.map +1 -0
  128. package/dist/{routes-rwufkyUe.js → routes-BC20mdNN.js} +30 -26
  129. package/dist/routes-BC20mdNN.js.map +1 -0
  130. package/dist/{routes-Dl6_kWm7.js → routes-CKfXiwRc.js} +5 -3
  131. package/dist/routes-CKfXiwRc.js.map +1 -0
  132. package/dist/{routes-DPojsNf1.cjs → routes-DGLJyqjD.cjs} +203 -199
  133. package/dist/routes-DGLJyqjD.cjs.map +1 -0
  134. package/dist/{routes-BULZI-PU.cjs → routes-jXksmX9G.cjs} +5 -3
  135. package/dist/routes-jXksmX9G.cjs.map +1 -0
  136. package/dist/{schedules-Bj-giFbc.cjs → schedules-GokZKBYg.cjs} +6 -4
  137. package/dist/schedules-GokZKBYg.cjs.map +1 -0
  138. package/dist/{schedules-BQYgaz66.js → schedules-_3zPKyqm.js} +5 -3
  139. package/dist/schedules-_3zPKyqm.js.map +1 -0
  140. package/dist/{schema-e0VHpMt0-C0452jOk.cjs → schema-CzbEIyhE-20gGIWkz.cjs} +83 -88
  141. package/dist/schema-CzbEIyhE-20gGIWkz.cjs.map +1 -0
  142. package/dist/{schema-e0VHpMt0-CVP5Hnxy.js → schema-CzbEIyhE-BsMcj9Ws.js} +82 -87
  143. package/dist/schema-CzbEIyhE-BsMcj9Ws.js.map +1 -0
  144. package/dist/scores-D9UgETt_.js +288 -0
  145. package/dist/scores-D9UgETt_.js.map +1 -0
  146. package/dist/scores-DRdtS7NT.cjs +329 -0
  147. package/dist/scores-DRdtS7NT.cjs.map +1 -0
  148. package/dist/server/a2a/store.cjs +1 -1
  149. package/dist/server/auth/index.cjs +2 -2
  150. package/dist/server/auth/index.js +1 -1
  151. package/dist/server/browser-stream/index.cjs +9 -11
  152. package/dist/server/browser-stream/index.cjs.map +1 -1
  153. package/dist/server/browser-stream/index.js +8 -10
  154. package/dist/server/browser-stream/index.js.map +1 -1
  155. package/dist/server/handlers/a2a.cjs +2 -2
  156. package/dist/server/handlers/a2a.js +1 -2
  157. package/dist/server/handlers/agent-builder.cjs +18 -648
  158. package/dist/server/handlers/agent-builder.js +1 -627
  159. package/dist/server/handlers/agent-controller.cjs +5 -5
  160. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  161. package/dist/server/handlers/agent-controller.js +11 -9
  162. package/dist/server/handlers/agent-controller.js.map +1 -1
  163. package/dist/server/handlers/agent-versions.cjs +15 -8
  164. package/dist/server/handlers/agent-versions.cjs.map +1 -1
  165. package/dist/server/handlers/agent-versions.js +14 -7
  166. package/dist/server/handlers/agent-versions.js.map +1 -1
  167. package/dist/server/handlers/agents.cjs +51 -2860
  168. package/dist/server/handlers/agents.js +1 -2806
  169. package/dist/server/handlers/auth.cjs +14 -12
  170. package/dist/server/handlers/auth.cjs.map +1 -1
  171. package/dist/server/handlers/auth.js +20 -16
  172. package/dist/server/handlers/auth.js.map +1 -1
  173. package/dist/server/handlers/author-enrichment.cjs +1 -1
  174. package/dist/server/handlers/authorship.cjs +1 -1
  175. package/dist/server/handlers/authorship.cjs.map +1 -1
  176. package/dist/server/handlers/background-tasks.cjs +2 -2
  177. package/dist/server/handlers/background-tasks.js +1 -2
  178. package/dist/server/handlers/builder-registry.cjs +2 -2
  179. package/dist/server/handlers/builder-registry.js +1 -2
  180. package/dist/server/handlers/channels.cjs +2 -2
  181. package/dist/server/handlers/channels.js +1 -2
  182. package/dist/server/handlers/conversations.cjs +6 -171
  183. package/dist/server/handlers/conversations.js +1 -162
  184. package/dist/server/handlers/datasets.cjs +2 -2
  185. package/dist/server/handlers/datasets.cjs.map +1 -1
  186. package/dist/server/handlers/datasets.js +1 -1
  187. package/dist/server/handlers/dynamic-workflows.cjs +2 -2
  188. package/dist/server/handlers/dynamic-workflows.js +1 -2
  189. package/dist/server/handlers/editor-builder.cjs +2 -2
  190. package/dist/server/handlers/editor-builder.js +1 -2
  191. package/dist/server/handlers/error.cjs +18 -13
  192. package/dist/server/handlers/error.cjs.map +1 -1
  193. package/dist/server/handlers/error.js +17 -12
  194. package/dist/server/handlers/error.js.map +1 -1
  195. package/dist/server/handlers/favorites-enrichment.cjs +2 -2
  196. package/dist/server/handlers/favorites-enrichment.js +1 -1
  197. package/dist/server/handlers/gateway-memory-client.cjs +1 -1
  198. package/dist/server/handlers/logs.cjs +5 -104
  199. package/dist/server/handlers/logs.js +1 -96
  200. package/dist/server/handlers/mcp-client-versions.cjs +15 -8
  201. package/dist/server/handlers/mcp-client-versions.cjs.map +1 -1
  202. package/dist/server/handlers/mcp-client-versions.js +14 -7
  203. package/dist/server/handlers/mcp-client-versions.js.map +1 -1
  204. package/dist/server/handlers/mcp.cjs +16 -289
  205. package/dist/server/handlers/mcp.d.ts +219 -0
  206. package/dist/server/handlers/mcp.d.ts.map +1 -1
  207. package/dist/server/handlers/mcp.js +1 -274
  208. package/dist/server/handlers/memory.cjs +29 -1763
  209. package/dist/server/handlers/memory.js +1 -1731
  210. package/dist/server/handlers/observability-list-query-schemas.cjs +1 -1
  211. package/dist/server/handlers/observability-new-endpoints.cjs +2 -2
  212. package/dist/server/handlers/observability-new-endpoints.js +1 -2
  213. package/dist/server/handlers/observability-shared.cjs +2 -2
  214. package/dist/server/handlers/observability-shared.js +1 -1
  215. package/dist/server/handlers/observability-storage-schemas.cjs +1 -1
  216. package/dist/server/handlers/observability.cjs +14 -445
  217. package/dist/server/handlers/observability.js +3 -429
  218. package/dist/server/handlers/plans.cjs +3 -63
  219. package/dist/server/handlers/plans.js +1 -57
  220. package/dist/server/handlers/processor-providers.cjs +2 -2
  221. package/dist/server/handlers/processor-providers.cjs.map +1 -1
  222. package/dist/server/handlers/processor-providers.js +1 -1
  223. package/dist/server/handlers/processors.cjs +13 -15
  224. package/dist/server/handlers/processors.cjs.map +1 -1
  225. package/dist/server/handlers/processors.js +12 -14
  226. package/dist/server/handlers/processors.js.map +1 -1
  227. package/dist/server/handlers/prompt-block-versions.cjs +15 -8
  228. package/dist/server/handlers/prompt-block-versions.cjs.map +1 -1
  229. package/dist/server/handlers/prompt-block-versions.js +14 -7
  230. package/dist/server/handlers/prompt-block-versions.js.map +1 -1
  231. package/dist/server/handlers/responses.adapter.cjs +1 -1
  232. package/dist/server/handlers/responses.adapter.cjs.map +1 -1
  233. package/dist/server/handlers/responses.cjs +5 -632
  234. package/dist/server/handlers/responses.js +1 -624
  235. package/dist/server/handlers/responses.storage.cjs +2 -2
  236. package/dist/server/handlers/schedules-workflows-shim.cjs +1 -1
  237. package/dist/server/handlers/schedules.cjs +2 -2
  238. package/dist/server/handlers/schedules.d.ts +16 -0
  239. package/dist/server/handlers/schedules.d.ts.map +1 -1
  240. package/dist/server/handlers/schedules.js +1 -2
  241. package/dist/server/handlers/scorer-versions.cjs +15 -8
  242. package/dist/server/handlers/scorer-versions.cjs.map +1 -1
  243. package/dist/server/handlers/scorer-versions.js +14 -7
  244. package/dist/server/handlers/scorer-versions.js.map +1 -1
  245. package/dist/server/handlers/scores.cjs +8 -299
  246. package/dist/server/handlers/scores.js +1 -288
  247. package/dist/server/handlers/skills-sh-shared.cjs +1 -1
  248. package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
  249. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  250. package/dist/server/handlers/stored-agents.cjs +19 -13
  251. package/dist/server/handlers/stored-agents.cjs.map +1 -1
  252. package/dist/server/handlers/stored-agents.js +18 -12
  253. package/dist/server/handlers/stored-agents.js.map +1 -1
  254. package/dist/server/handlers/stored-mcp-clients.cjs +8 -6
  255. package/dist/server/handlers/stored-mcp-clients.cjs.map +1 -1
  256. package/dist/server/handlers/stored-mcp-clients.js +7 -5
  257. package/dist/server/handlers/stored-mcp-clients.js.map +1 -1
  258. package/dist/server/handlers/stored-prompt-blocks.cjs +3 -3
  259. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  260. package/dist/server/handlers/stored-scorers.cjs +3 -3
  261. package/dist/server/handlers/stored-scorers.js +2 -2
  262. package/dist/server/handlers/stored-skill-favorites.cjs +4 -4
  263. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  264. package/dist/server/handlers/stored-skills.cjs +6 -5
  265. package/dist/server/handlers/stored-skills.cjs.map +1 -1
  266. package/dist/server/handlers/stored-skills.js +5 -4
  267. package/dist/server/handlers/stored-skills.js.map +1 -1
  268. package/dist/server/handlers/stored-workspaces.cjs +3 -3
  269. package/dist/server/handlers/stored-workspaces.js +2 -2
  270. package/dist/server/handlers/system.cjs +3 -3
  271. package/dist/server/handlers/system.cjs.map +1 -1
  272. package/dist/server/handlers/system.js +2 -2
  273. package/dist/server/handlers/test-utils.cjs +1 -1
  274. package/dist/server/handlers/tool-providers.cjs +2 -2
  275. package/dist/server/handlers/tool-providers.js +1 -1
  276. package/dist/server/handlers/tool-schema-overrides.cjs +1 -1
  277. package/dist/server/handlers/tools.cjs +7 -267
  278. package/dist/server/handlers/tools.js +1 -257
  279. package/dist/server/handlers/utils.cjs +2 -2
  280. package/dist/server/handlers/utils.js +1 -2
  281. package/dist/server/handlers/validate-agent-instructions.cjs +2 -2
  282. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  283. package/dist/server/handlers/validate-avatar.cjs +2 -2
  284. package/dist/server/handlers/validate-avatar.cjs.map +1 -1
  285. package/dist/server/handlers/validate-avatar.js +1 -1
  286. package/dist/server/handlers/validate-avatar.js.map +1 -1
  287. package/dist/server/handlers/vector.cjs +17 -334
  288. package/dist/server/handlers/vector.js +1 -314
  289. package/dist/server/handlers/version-helpers.cjs +1 -1
  290. package/dist/server/handlers/voice.cjs +9 -35
  291. package/dist/server/handlers/voice.js +1 -23
  292. package/dist/server/handlers/workflow-builder.cjs +2 -2
  293. package/dist/server/handlers/workflow-builder.js +1 -2
  294. package/dist/server/handlers/workflows.cjs +30 -1293
  295. package/dist/server/handlers/workflows.js +1 -1257
  296. package/dist/server/handlers/workspace.cjs +27 -1176
  297. package/dist/server/handlers/workspace.js +1 -1146
  298. package/dist/server/handlers.cjs +33 -33
  299. package/dist/server/handlers.js +17 -17
  300. package/dist/server/schemas/index.cjs +7 -7
  301. package/dist/server/schemas/index.js +4 -4
  302. package/dist/server/schemas/mcp.d.ts +102 -0
  303. package/dist/server/schemas/mcp.d.ts.map +1 -1
  304. package/dist/server/schemas/schedules.d.ts +5 -0
  305. package/dist/server/schemas/schedules.d.ts.map +1 -1
  306. package/dist/server/server-adapter/index.cjs +5 -5
  307. package/dist/server/server-adapter/index.cjs.map +1 -1
  308. package/dist/server/server-adapter/index.js +4 -4
  309. package/dist/server/server-adapter/index.js.map +1 -1
  310. package/dist/server/server-adapter/routes/mcp.d.ts +214 -0
  311. package/dist/server/server-adapter/routes/mcp.d.ts.map +1 -1
  312. package/dist/tools-CmFSfDMn.js +256 -0
  313. package/dist/tools-CmFSfDMn.js.map +1 -0
  314. package/dist/tools-SPJtxG9N.cjs +291 -0
  315. package/dist/tools-SPJtxG9N.cjs.map +1 -0
  316. package/dist/{utils-DCgeTrq2.cjs → utils-CF76qzZR.cjs} +12 -17
  317. package/dist/{utils-DCgeTrq2.cjs.map → utils-CF76qzZR.cjs.map} +1 -1
  318. package/dist/{utils-DCAUeb6M.js → utils-aoLN3Wfi.js} +11 -16
  319. package/dist/{utils-DCAUeb6M.js.map → utils-aoLN3Wfi.js.map} +1 -1
  320. package/dist/{utils-Du-EpvDs.cjs → utils-dDLIDg8O.cjs} +2 -2
  321. package/dist/{utils-Du-EpvDs.cjs.map → utils-dDLIDg8O.cjs.map} +1 -1
  322. package/dist/vector-BKDD1kwc.cjs +409 -0
  323. package/dist/vector-BKDD1kwc.cjs.map +1 -0
  324. package/dist/vector-TWv4t-4g.js +314 -0
  325. package/dist/vector-TWv4t-4g.js.map +1 -0
  326. package/dist/voice-BnGwlZ75.cjs +70 -0
  327. package/dist/voice-BnGwlZ75.cjs.map +1 -0
  328. package/dist/voice-DjG8tBAD.js +23 -0
  329. package/dist/voice-DjG8tBAD.js.map +1 -0
  330. package/dist/{workflow-builder-Brj3IArM.cjs → workflow-builder-C9-8ZOWF.cjs} +5 -5
  331. package/dist/{workflow-builder-Brj3IArM.cjs.map → workflow-builder-C9-8ZOWF.cjs.map} +1 -1
  332. package/dist/{workflow-builder-DOa1Vx6w.js → workflow-builder-CjlLoQvo.js} +10 -8
  333. package/dist/{workflow-builder-DOa1Vx6w.js.map → workflow-builder-CjlLoQvo.js.map} +1 -1
  334. package/dist/workflows-DjqeJcdJ.cjs +1446 -0
  335. package/dist/workflows-DjqeJcdJ.cjs.map +1 -0
  336. package/dist/workflows-bb-otd2o.js +1273 -0
  337. package/dist/workflows-bb-otd2o.js.map +1 -0
  338. package/dist/workspace-B6kzp-bo.js +1154 -0
  339. package/dist/workspace-B6kzp-bo.js.map +1 -0
  340. package/dist/workspace-COKR1SxH.cjs +1309 -0
  341. package/dist/workspace-COKR1SxH.cjs.map +1 -0
  342. package/package.json +4 -4
  343. package/dist/a2a-B465DD1u.cjs.map +0 -1
  344. package/dist/a2a-CHBSYHxu.js.map +0 -1
  345. package/dist/dist-9c3PXXpk.cjs.map +0 -1
  346. package/dist/dist-B5OwHWTo.cjs +0 -2294
  347. package/dist/dist-B5OwHWTo.cjs.map +0 -1
  348. package/dist/dist-DGCnbhNe.js.map +0 -1
  349. package/dist/dist-DcoIg_tp.js +0 -2293
  350. package/dist/dist-DcoIg_tp.js.map +0 -1
  351. package/dist/mcp-DzpwLXEY.js.map +0 -1
  352. package/dist/mcp-ShaKO7gA.cjs.map +0 -1
  353. package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +0 -1
  354. package/dist/probe-image-size-DBGjhUtJ.cjs.map +0 -1
  355. package/dist/probe-image-size-Dmoxv93t.js.map +0 -1
  356. package/dist/route-builder-BNZs643f.cjs.map +0 -1
  357. package/dist/route-builder-BfQYtclb.js.map +0 -1
  358. package/dist/routes-BULZI-PU.cjs.map +0 -1
  359. package/dist/routes-DPojsNf1.cjs.map +0 -1
  360. package/dist/routes-Dl6_kWm7.js.map +0 -1
  361. package/dist/routes-rwufkyUe.js.map +0 -1
  362. package/dist/schedules-BQYgaz66.js.map +0 -1
  363. package/dist/schedules-Bj-giFbc.cjs.map +0 -1
  364. package/dist/schema-Drf2W04o.js +0 -2
  365. package/dist/schema-EQanefYq.cjs +0 -1
  366. package/dist/schema-e0VHpMt0-C0452jOk.cjs.map +0 -1
  367. package/dist/schema-e0VHpMt0-CVP5Hnxy.js.map +0 -1
  368. package/dist/server/handlers/agent-builder.cjs.map +0 -1
  369. package/dist/server/handlers/agent-builder.js.map +0 -1
  370. package/dist/server/handlers/agents.cjs.map +0 -1
  371. package/dist/server/handlers/agents.js.map +0 -1
  372. package/dist/server/handlers/conversations.cjs.map +0 -1
  373. package/dist/server/handlers/conversations.js.map +0 -1
  374. package/dist/server/handlers/logs.cjs.map +0 -1
  375. package/dist/server/handlers/logs.js.map +0 -1
  376. package/dist/server/handlers/mcp.cjs.map +0 -1
  377. package/dist/server/handlers/mcp.js.map +0 -1
  378. package/dist/server/handlers/memory.cjs.map +0 -1
  379. package/dist/server/handlers/memory.js.map +0 -1
  380. package/dist/server/handlers/observability.cjs.map +0 -1
  381. package/dist/server/handlers/observability.js.map +0 -1
  382. package/dist/server/handlers/plans.cjs.map +0 -1
  383. package/dist/server/handlers/plans.js.map +0 -1
  384. package/dist/server/handlers/responses.cjs.map +0 -1
  385. package/dist/server/handlers/responses.js.map +0 -1
  386. package/dist/server/handlers/scores.cjs.map +0 -1
  387. package/dist/server/handlers/scores.js.map +0 -1
  388. package/dist/server/handlers/tools.cjs.map +0 -1
  389. package/dist/server/handlers/tools.js.map +0 -1
  390. package/dist/server/handlers/vector.cjs.map +0 -1
  391. package/dist/server/handlers/vector.js.map +0 -1
  392. package/dist/server/handlers/voice.cjs.map +0 -1
  393. package/dist/server/handlers/voice.js.map +0 -1
  394. package/dist/server/handlers/workflows.cjs.map +0 -1
  395. package/dist/server/handlers/workflows.js.map +0 -1
  396. package/dist/server/handlers/workspace.cjs.map +0 -1
  397. package/dist/server/handlers/workspace.js.map +0 -1
  398. package/dist/sync-Ai_ZDz7U.js +0 -1700
  399. package/dist/sync-Ai_ZDz7U.js.map +0 -1
  400. package/dist/sync-BrO5MtSe.cjs +0 -1729
  401. package/dist/sync-BrO5MtSe.cjs.map +0 -1
@@ -1,16 +1,16 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
3
  const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
4
4
  const require_common = require("../../common-DhKNoXGp.cjs");
5
- const require_route_builder = require("../../route-builder-BNZs643f.cjs");
6
- const require_utils = require("../../utils-DCgeTrq2.cjs");
5
+ const require_route_builder = require("../../route-builder-B2Qhhd7C.cjs");
6
+ const require_utils = require("../../utils-CF76qzZR.cjs");
7
7
  const require_server_handlers_error = require("./error.cjs");
8
8
  const require_stored_agents = require("../../stored-agents-BTL-o6aM.cjs");
9
9
  const require_server_handlers_author_enrichment = require("./author-enrichment.cjs");
10
10
  const require_server_handlers_authorship = require("./authorship.cjs");
11
11
  const require_server_handlers_validate_agent_instructions = require("./validate-agent-instructions.cjs");
12
12
  const require_server_handlers_version_helpers = require("./version-helpers.cjs");
13
- const require_editor_builder = require("../../editor-builder-DXHiPX1A.cjs");
13
+ const require_editor_builder = require("../../editor-builder-DtpP1FtW.cjs");
14
14
  const require_server_handlers_favorites_enrichment = require("./favorites-enrichment.cjs");
15
15
  const require_server_handlers_validate_avatar = require("./validate-avatar.cjs");
16
16
  //#region src/server/handlers/stored-agents.ts
@@ -159,7 +159,8 @@ const LIST_STORED_AGENTS_ROUTE = require_route_builder.createRoute({
159
159
  queryAuthorId: authorId,
160
160
  queryVisibility: visibility === "public" ? "public" : void 0
161
161
  });
162
- const scopedMetadata = require_utils.scopeStoredResourceMetadata(metadata, await require_utils.getStoredResourceScope(mastra, requestContext));
162
+ const scope = await require_utils.getStoredResourceScope(mastra, requestContext);
163
+ const scopedMetadata = require_utils.scopeStoredResourceMetadata(metadata, scope);
163
164
  const callerId = require_server_handlers_authorship.getCallerAuthorId(requestContext);
164
165
  const favoritesEnabled = await require_editor_builder.isBuilderFeatureEnabled(mastra, "favorites");
165
166
  const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
@@ -376,7 +377,8 @@ const GET_STORED_AGENT_ROUTE = require_route_builder.createRoute({
376
377
  record: agent
377
378
  });
378
379
  const authors = await require_server_handlers_author_enrichment.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
379
- return require_server_handlers_author_enrichment.attachAuthor(await require_server_handlers_favorites_enrichment.enrichOrStripFavorites(mastra, requestContext, "agent", agent), authors);
380
+ const withFavorite = await require_server_handlers_favorites_enrichment.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
381
+ return require_server_handlers_author_enrichment.attachAuthor(withFavorite, authors);
380
382
  } catch (error) {
381
383
  return require_server_handlers_error.handleError(error, "Error getting stored agent");
382
384
  }
@@ -537,15 +539,19 @@ const UPDATE_STORED_AGENT_ROUTE = require_route_builder.createRoute({
537
539
  mcpClients = void 0;
538
540
  }
539
541
  }
540
- if (shouldValidateStoredInstructions) await require_server_handlers_validate_agent_instructions.validateAgentInstructionReferences({
541
- instructions: instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: "draft" }))?.instructions,
542
- mastra,
543
- requestContext
544
- });
545
- const scopedMetadata = require_utils.scopeStoredResourceMetadata({
542
+ if (shouldValidateStoredInstructions) {
543
+ const effectiveInstructions = instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: "draft" }))?.instructions;
544
+ await require_server_handlers_validate_agent_instructions.validateAgentInstructionReferences({
545
+ instructions: effectiveInstructions,
546
+ mastra,
547
+ requestContext
548
+ });
549
+ }
550
+ const mergedMetadata = {
546
551
  ...existing.metadata ?? {},
547
552
  ...metadata ?? {}
548
- }, scope);
553
+ };
554
+ const scopedMetadata = require_utils.scopeStoredResourceMetadata(mergedMetadata, scope);
549
555
  const updatedAgent = await agentsStore.update({
550
556
  id: storedAgentId,
551
557
  authorId,
@@ -1 +1 @@
1
- {"version":3,"file":"stored-agents.cjs","names":["HTTPException","createRoute","listStoredAgentsQuerySchema","listStoredAgentsResponseSchema","resolveAuthorFilter","scopeStoredResourceMetadata","getStoredResourceScope","getCallerAuthorId","isBuilderFeatureEnabled","matchesAuthorFilter","prepareAuthorEnrichment","attachAuthor","stripFavoriteFields","prepareFavoritesEnrichment","handleError","storedAgentIdPathParams","exportStoredAgentBodySchema","exportStoredAgentResponseSchema","openStoredAgentChangeRequestBodySchema","openStoredAgentChangeRequestResponseSchema","statusQuerySchema","getStoredAgentResponseSchema","enrichOrStripFavorites","createStoredAgentBodySchema","createStoredAgentResponseSchema","toSlug","validateAgentInstructionReferences","updateStoredAgentBodySchema","updateStoredAgentResponseSchema","handleAutoVersioning","deleteStoredAgentResponseSchema","getStoredAgentDependentsResponseSchema","previewInstructionsBodySchema","previewInstructionsResponseSchema"],"sources":["../../../src/server/handlers/stored-agents.ts"],"sourcesContent":["import type { StorageCreateAgentInput, StorageUpdateAgentInput } from '@mastra/core/storage';\nimport type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedAgentIdPathParams,\n statusQuerySchema,\n listStoredAgentsQuerySchema,\n createStoredAgentBodySchema,\n updateStoredAgentBodySchema,\n listStoredAgentsResponseSchema,\n getStoredAgentResponseSchema,\n createStoredAgentResponseSchema,\n updateStoredAgentResponseSchema,\n deleteStoredAgentResponseSchema,\n getStoredAgentDependentsResponseSchema,\n exportStoredAgentBodySchema,\n openStoredAgentChangeRequestBodySchema,\n exportStoredAgentResponseSchema,\n openStoredAgentChangeRequestResponseSchema,\n previewInstructionsBodySchema,\n previewInstructionsResponseSchema,\n} from '../schemas/stored-agents';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { attachAuthor, prepareAuthorEnrichment } from './author-enrichment';\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport { validateMetadataAvatarUrl } from './validate-avatar';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * Resolve a `browser` field that may be a boolean shorthand from the UI.\n * - `true` → look up the admin's builder default browser config\n * - `false` → `null` (explicit clear)\n * - object/null/undefined → pass through unchanged\n */\nasync function resolveBrowserField(browser: unknown, mastra: { getEditor?: () => unknown }): Promise<unknown> {\n if (browser === true) {\n const editor = mastra.getEditor?.() as any;\n const builder = await editor?.resolveBuilder?.();\n const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;\n if (!defaultBrowser) {\n console.warn(\n '[mastra:server] Browser enabled (browser: true) but no default browser config found ' +\n 'in builder configuration. The agent will be created/updated without browser access. ' +\n 'Set `editor.builder.configuration.agent.browser` to fix this.',\n );\n }\n return defaultBrowser ?? undefined;\n }\n if (browser === false) {\n return null;\n }\n return browser;\n}\n\nconst AGENT_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'toolProviders',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n 'skills',\n 'workspace',\n 'browser',\n 'durable',\n] as const;\n\nconst CODE_AGENT_OVERRIDE_FIELDS = [\n 'instructions',\n 'tools',\n 'integrationTools',\n 'mcpClients',\n 'requestContextSchema',\n] as const;\n\n/**\n * Derive ownership flags from a code agent's editor config.\n * Mirrors the semantics of `editor.agent.applyStoredOverrides` so that\n * client save payloads, persisted snapshots, and export output all agree\n * on which fields Studio is allowed to own.\n */\nfunction getCodeAgentOwnership(editorConfig: unknown): {\n ownsInstructions: boolean;\n ownsTools: boolean;\n ownsToolDescriptionsOnly: boolean;\n} {\n if (editorConfig === false) {\n return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };\n }\n if (editorConfig === undefined || editorConfig === null) {\n // Legacy default: code agents without explicit editor config behave as fully editable.\n return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };\n }\n if (typeof editorConfig !== 'object') {\n return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };\n }\n const cfg = editorConfig as { instructions?: unknown; tools?: unknown };\n const ownsInstructions = cfg.instructions === true;\n const toolsCfg = cfg.tools;\n const ownsTools = toolsCfg === true;\n const ownsToolDescriptionsOnly =\n typeof toolsCfg === 'object' && toolsCfg !== null && (toolsCfg as { description?: unknown }).description === true;\n return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };\n}\n\nfunction hasNonEmptyInstructions(value: unknown): boolean {\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.some(block => {\n if (!block || typeof block !== 'object') {\n return false;\n }\n\n const typedBlock = block as { type?: unknown; id?: unknown; content?: unknown };\n if (typedBlock.type === 'prompt_block_ref') {\n return typeof typedBlock.id === 'string' && typedBlock.id.length > 0;\n }\n\n return typeof typedBlock.content === 'string' && typedBlock.content.trim().length > 0;\n });\n}\n\nfunction assertOwnedInstructionsNotEmpty(instructions: unknown) {\n if (!hasNonEmptyInstructions(instructions)) {\n throw new HTTPException(400, { message: 'Instructions are required' });\n }\n}\n\nfunction sortForStableJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortForStableJson);\n }\n\n if (value && typeof value === 'object' && !(value instanceof Date)) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, sortForStableJson(entry)]),\n );\n }\n\n return value;\n}\n\nfunction buildExportConfig(\n input: Record<string, unknown>,\n agent?: { __getEditorConfig?: () => unknown; source?: string },\n) {\n const editorConfig = agent?.__getEditorConfig?.();\n const isCodeAgent = agent?.source === 'code';\n const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;\n const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;\n const config: Record<string, unknown> = {};\n\n for (const field of allowedFields) {\n if (input[field] === undefined) continue;\n if (ownership) {\n if (field === 'instructions' && !ownership.ownsInstructions) continue;\n if (\n (field === 'tools' || field === 'integrationTools' || field === 'mcpClients') &&\n !ownership.ownsTools &&\n !ownership.ownsToolDescriptionsOnly\n ) {\n continue;\n }\n }\n config[field] = input[field];\n }\n\n return sortForStableJson(config) as Record<string, unknown>;\n}\n\nfunction agentExportFilename(agentId: string) {\n return `agents/${encodeURIComponent(agentId)}.json`;\n}\n\nfunction sourceChangeRequestHeadRef(agentId: string) {\n const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'agent';\n return `mastra/${safeAgentId}`;\n}\n\nfunction sourceChangeRequestMessage(agentId: string, userName?: string, changeMessage?: string) {\n const normalizedUserName = userName?.replace(/\\s+/g, ' ').trim();\n const normalizedMessage = changeMessage?.replace(/\\s+/g, ' ').trim();\n const message = normalizedMessage || `Update ${agentId} agent override`;\n return normalizedUserName ? `${message} by ${normalizedUserName}` : message;\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents - List all stored agents\n */\nexport const LIST_STORED_AGENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents',\n responseType: 'json',\n queryParamSchema: listStoredAgentsQuerySchema,\n responseSchema: listStoredAgentsResponseSchema,\n summary: 'List stored agents',\n description: 'Returns a paginated list of all agents stored in the database',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Resolve the visibility scope for this caller. Non-owner queries for\n // another author return only that author's public rows; default lists\n // return the caller's rows plus legacy unowned records.\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-agents',\n queryAuthorId: authorId,\n queryVisibility: visibility === 'public' ? 'public' : undefined,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true`: fetch caller's favorited IDs, then refilter + recompute total.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'agent' });\n if (starredIds.length === 0) {\n return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await agentsStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.agents.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const authors = await prepareAuthorEnrichment(\n mastra,\n requestContext,\n annotated.map(a => a.authorId),\n );\n const withAuthors = authors ? annotated.map(record => attachAuthor(record, authors)) : annotated;\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return { agents: withAuthors, total, page, perPage: effectivePerPage, hasMore };\n }\n\n const result = await agentsStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `total` is left as the storage-reported count to keep pagination\n // math working. For `unrestricted` / `exact` filters nothing is removed.\n // For `ownedOrPublic` / `publicOnly`, downstream UIs should treat the\n // filter as a view over the caller's scope — an approximation is OK.\n const visibleAgents = result.agents.filter(record => matchesAuthorFilter(record, filter));\n\n const authors = await prepareAuthorEnrichment(\n mastra,\n requestContext,\n visibleAgents.map(a => a.authorId),\n );\n\n if (!favoritesEnabled) {\n const stripped = visibleAgents.map(stripFavoriteFields);\n const withAuthors = authors ? stripped.map(record => attachAuthor(record, authors)) : stripped;\n return { ...result, agents: withAuthors };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'agent',\n visibleAgents.map(a => a.id),\n );\n const annotated = enrichment\n ? visibleAgents.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleAgents.map(stripFavoriteFields);\n const withAuthors = authors ? annotated.map(record => attachAuthor(record, authors)) : annotated;\n\n return { ...result, agents: withAuthors };\n } catch (error) {\n return handleError(error, 'Error listing stored agents');\n }\n },\n});\n\nasync function buildStoredAgentExport({\n mastra,\n requestContext,\n storedAgentId,\n body,\n}: {\n mastra: any;\n requestContext: any;\n storedAgentId: string;\n body: Record<string, unknown>;\n}) {\n const storage = mastra.getStorage();\n const agentsStore = storage ? await storage.getStore('agents') : undefined;\n const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: 'draft' });\n if (storedAgent) {\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: storedAgent });\n }\n\n let codeAgent: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n try {\n codeAgent = mastra.getAgentById?.(storedAgentId) as typeof codeAgent;\n } catch {\n codeAgent = undefined;\n }\n\n if (!storedAgent && !codeAgent) {\n throw new HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });\n }\n\n const config = buildExportConfig(body, codeAgent);\n const content = `${JSON.stringify(config, null, 2)}\\n`;\n\n return {\n agentId: storedAgentId,\n fileName: agentExportFilename(storedAgentId),\n content,\n config,\n };\n}\n\nexport const EXPORT_STORED_AGENT_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:storedAgentId/export',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: exportStoredAgentBodySchema,\n responseSchema: exportStoredAgentResponseSchema,\n summary: 'Export stored agent override JSON',\n description: 'Returns deterministic JSON for an agent configuration or code-agent override without mutating storage',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {\n try {\n return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });\n } catch (error) {\n return handleError(error, 'Error exporting stored agent');\n }\n },\n});\n\nexport const OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:storedAgentId/change-request',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: openStoredAgentChangeRequestBodySchema,\n responseSchema: openStoredAgentChangeRequestResponseSchema,\n summary: 'Open stored agent source change request',\n description: 'Opens a source-provider change request for deterministic agent override JSON without mutating storage',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {\n try {\n const provider = mastra.getEditor?.()?.getSourceControlProvider?.();\n if (!provider?.openChangeRequest) {\n throw new HTTPException(400, { message: 'Source control provider cannot open change requests' });\n }\n\n const openChangeRequest = provider.openChangeRequest.bind(provider);\n const { changeMessage, userName, inspectOnly, ...exportBody } = body;\n const headRef = sourceChangeRequestHeadRef(storedAgentId);\n const title = `Update ${storedAgentId} agent override`;\n const result = inspectOnly\n ? await openChangeRequest({\n title,\n headRef,\n files: [],\n })\n : await (async () => {\n const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });\n const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);\n return openChangeRequest({\n title,\n body: `Updates ${response.fileName} from Mastra Studio.`,\n headRef,\n files: [\n {\n path: response.fileName,\n content: response.content,\n message,\n },\n ],\n });\n })();\n\n const storage = mastra.getStorage();\n const agentsStore = storage ? await storage.getStore('agents') : undefined;\n await (\n agentsStore as { useProviderRef?: (agentId: string, ref: string) => Promise<void> } | undefined\n )?.useProviderRef?.(storedAgentId, result.ref ?? headRef);\n mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);\n\n return result;\n } catch (error) {\n return handleError(error, 'Error opening stored agent change request');\n }\n },\n});\n\n/**\n * GET /stored/agents/:storedAgentId - Get a stored agent by ID\n */\nexport const GET_STORED_AGENT_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredAgentResponseSchema,\n summary: 'Get stored agent by ID',\n description:\n 'Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, status }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const agent = await agentsStore.getByIdResolved(storedAgentId, { status });\n\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, `stored-agents:read[:<id>]`\n // holder, and the record isn't public/legacy-unowned.\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const authors = await prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);\n const withFavorite = await enrichOrStripFavorites(mastra, requestContext, 'agent', agent);\n return attachAuthor(withFavorite, authors);\n } catch (error) {\n return handleError(error, 'Error getting stored agent');\n }\n },\n});\n\n/**\n * POST /stored/agents - Create a new stored agent\n */\nexport const CREATE_STORED_AGENT_ROUTE: ServerRoute<\n InferParams<undefined, undefined, typeof createStoredAgentBodySchema>,\n z.infer<typeof createStoredAgentResponseSchema>,\n 'json',\n RouteSchemas<undefined, undefined, typeof createStoredAgentBodySchema, typeof createStoredAgentResponseSchema>,\n 'POST',\n '/stored/agents'\n> = createRoute({\n method: 'POST',\n path: '/stored/agents',\n responseType: 'json',\n bodySchema: createStoredAgentBodySchema,\n responseSchema: createStoredAgentResponseSchema,\n summary: 'Create stored agent',\n description: 'Creates a new agent in storage with the provided configuration',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n metadata,\n visibility: bodyVisibility,\n autoPublish,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser,\n durable,\n requestContextSchema,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive agent ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if agent with this ID already exists\n const existing = await agentsStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Agent with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Reject oversized avatar images before writing to storage.\n validateMetadataAvatarUrl(metadata);\n\n // Model policy enforcement is intentionally not done on save: each UI\n // surface gates its own model picker via ModelPolicyProvider, and the\n // policy is surface-scoped (builder vs editor). Re-introducing a single\n // server-side check here would either over-enforce on the editor or\n // under-enforce on the builder until per-surface enforcement lands.\n\n const resolvedBrowser = await resolveBrowserField(browser, mastra);\n\n let createInstructions: typeof instructions | undefined = instructions;\n let createTools = tools;\n let createIntegrationTools = integrationTools;\n let createMcpClients = mcpClients;\n let codeAgentForCreate: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n try {\n codeAgentForCreate = mastra.getAgentById?.(id) as typeof codeAgentForCreate;\n } catch {\n codeAgentForCreate = undefined;\n }\n if (codeAgentForCreate?.source === 'code') {\n const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());\n if (ownership.ownsInstructions) {\n assertOwnedInstructionsNotEmpty(createInstructions);\n } else {\n createInstructions = undefined;\n }\n if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {\n createTools = undefined;\n createIntegrationTools = undefined;\n createMcpClients = undefined;\n }\n }\n\n await validateAgentInstructionReferences({\n instructions: createInstructions,\n mastra,\n requestContext,\n });\n\n const input = {\n id,\n authorId,\n visibility,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n instructions: createInstructions,\n model,\n tools: createTools,\n defaultOptions,\n workflows,\n agents,\n integrationTools: createIntegrationTools,\n toolProviders,\n mcpClients: createMcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n } as StorageCreateAgentInput;\n\n // Use editor.agent.create() when available to apply builder defaults\n const editor = mastra.getEditor?.();\n if (editor) {\n await editor.agent.create(input);\n } else {\n // Fallback to direct storage create\n await agentsStore.create({ agent: input });\n }\n\n // Publish the initial version so the agent is immediately usable. Without this the\n // thin record stays at status='draft' with activeVersionId=null, which makes the\n // agent unreachable via status='published' resolution — a created agent that\n // resolves nowhere. That's why publishing is the default.\n //\n // Callers staging an agent for later review, and Studio when it saves an override\n // for a code-defined agent, pass autoPublish: false. In the override case the code\n // definition already serves traffic, so the first save must behave like every later\n // save and stay a draft until the user explicitly publishes.\n //\n // A code-source editor can't honour that: there is no draft/publish step there\n // (the save writes the override file, git is the version history) and filesystem\n // storage only persists published entities, so an unpublished record would never\n // reach disk. The editor's own source is server-side knowledge — a client can't\n // reliably determine it before saving — so the flag is overridden here.\n const isCodeSourceEditor = editor?.getSource?.() === 'code';\n const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });\n const initialVersion = versions[0];\n if (initialVersion && (autoPublish !== false || isCodeSourceEditor)) {\n await agentsStore.update({\n id,\n activeVersionId: initialVersion.id,\n status: 'published',\n });\n }\n editor?.agent.clearCache(id);\n\n // Return the resolved agent (thin record + version config). Published resolution falls\n // back to the latest version, so an unpublished code-agent override still returns the\n // config the caller just saved.\n const resolved = await agentsStore.getByIdResolved(id, { status: 'published' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created agent' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'agent', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored agent');\n }\n },\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update a stored agent\n */\nexport const UPDATE_STORED_AGENT_ROUTE: ServerRoute<\n InferParams<typeof storedAgentIdPathParams, undefined, typeof updateStoredAgentBodySchema>,\n z.infer<typeof updateStoredAgentResponseSchema>,\n 'json',\n RouteSchemas<\n typeof storedAgentIdPathParams,\n undefined,\n typeof updateStoredAgentBodySchema,\n typeof updateStoredAgentResponseSchema\n >,\n 'PATCH',\n '/stored/agents/:storedAgentId'\n> = createRoute({\n method: 'PATCH',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: updateStoredAgentBodySchema,\n responseSchema: updateStoredAgentResponseSchema,\n summary: 'Update stored agent',\n description: 'Updates an existing agent in storage with the provided fields',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedAgentId,\n // Metadata-level fields\n authorId,\n metadata,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser,\n durable,\n requestContextSchema,\n // Version options\n changeMessage,\n autoPublish = false,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getById(storedAgentId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `agents:edit[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-agents',\n resourceId: storedAgentId,\n action: 'edit',\n record: existing,\n });\n\n // Reject oversized avatar images before writing to storage.\n validateMetadataAvatarUrl(metadata);\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Model policy enforcement is intentionally not done on save: each UI\n // surface gates its own model picker via ModelPolicyProvider, and the\n // policy is surface-scoped (builder vs editor). Re-introducing a single\n // server-side check here would either over-enforce on the editor or\n // under-enforce on the builder until per-surface enforcement lands.\n\n // Resolve boolean browser shorthand from the UI\n const resolvedBrowser = await resolveBrowserField(browser, mastra);\n\n // For code-defined agents, strip fields the editor config does not allow\n // Studio to own. This keeps stored snapshots (and the per-entity files\n // they get persisted to) free of fields the server never reads back.\n let codeAgentForUpdate: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n let shouldValidateStoredInstructions = true;\n try {\n codeAgentForUpdate = mastra.getAgentById?.(storedAgentId) as typeof codeAgentForUpdate;\n } catch {\n codeAgentForUpdate = undefined;\n }\n if (codeAgentForUpdate?.source === 'code') {\n const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());\n if (ownership.ownsInstructions) {\n if (instructions !== undefined) {\n assertOwnedInstructionsNotEmpty(instructions);\n }\n } else {\n instructions = undefined;\n shouldValidateStoredInstructions = false;\n }\n if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {\n tools = undefined;\n integrationTools = undefined;\n mcpClients = undefined;\n }\n }\n\n if (shouldValidateStoredInstructions) {\n const effectiveInstructions =\n instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: 'draft' }))?.instructions;\n await validateAgentInstructionReferences({ instructions: effectiveInstructions, mastra, requestContext });\n }\n\n const mergedMetadata: Record<string, unknown> = { ...(existing.metadata ?? {}), ...(metadata ?? {}) };\n const scopedMetadata = scopeStoredResourceMetadata(mergedMetadata, scope);\n\n // Update the agent with both metadata-level and config-level fields\n // The storage layer handles separating these into agent-record updates vs new-version creation\n // Cast needed because Zod's passthrough() output types don't exactly match the handwritten TS interfaces\n const updatedAgent = await agentsStore.update({\n id: storedAgentId,\n authorId,\n metadata: scopedMetadata,\n visibility: resolvedVisibility,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n } as StorageUpdateAgentInput);\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n const autoVersionResult = await handleAutoVersioning(\n agentsStore as unknown as VersionedStoreInterface,\n storedAgentId,\n 'agentId',\n AGENT_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedAgent,\n providedConfigFields,\n changeMessage ? { changeMessage } : undefined,\n );\n\n if (!autoVersionResult) {\n throw new Error('handleAutoVersioning returned undefined');\n }\n\n // In code mode, local saves should overwrite the most recent saved\n // snapshot rather than creating new draft versions on every keystroke\n // batch. Version history is intended to track commits, not raw saves.\n // We collapse the freshly created version onto the previous one by\n // deleting the prior latest version, leaving a single rolling snapshot.\n // When the user explicitly provides a changeMessage we treat that as a\n // commit and keep the new version as a discrete history entry.\n const isCodeSource = mastra.getEditor?.()?.getSource?.() === 'code';\n if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {\n const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });\n const previousVersion = versions[1];\n const isPublishedVersion = previousVersion?.id === existing.activeVersionId;\n if (previousVersion && !isPublishedVersion) {\n await agentsStore.deleteVersion(previousVersion.id);\n }\n }\n\n // Publication remains opt-in so Classic Studio can save drafts without moving the active version,\n // while Agent Builder can preserve immediate runtime updates by sending autoPublish: true.\n // This flag is a bridge until version creation and publication move to dedicated APIs.\n if (autoVersionResult.versionCreated && autoPublish) {\n const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });\n const latestVersion = versions[0];\n if (latestVersion) {\n await agentsStore.update({\n id: storedAgentId,\n activeVersionId: latestVersion.id,\n });\n }\n }\n\n // Clear the cached agent instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.agent.clearCache(storedAgentId);\n }\n\n // Return the resolved agent with the latest version\n const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated agent' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'agent', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId - Delete a stored agent\n */\nexport const DELETE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: deleteStoredAgentResponseSchema,\n summary: 'Delete stored agent',\n description: 'Deletes an agent from storage by its unique identifier',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getById(storedAgentId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `agents:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-agents',\n resourceId: storedAgentId,\n action: 'delete',\n record: existing,\n });\n\n await agentsStore.delete(storedAgentId);\n\n // Cascade: drop any favorite rows referencing this agent so they don't\n // resurrect if the same id is reused. Failure must not abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'agent', entityId: storedAgentId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for agent', { storedAgentId, error: cascadeError });\n }\n\n // Clear the cached agent instance\n mastra.getEditor()?.agent.clearCache(storedAgentId);\n\n return { success: true, message: `Agent ${storedAgentId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored agent');\n }\n },\n});\n\n/**\n * GET /stored/agents/:storedAgentId/dependents - List agents that reference\n * the target agent as a sub-agent.\n *\n * Returns `dependents` for caller-visible references (named) and `hiddenCount`\n * for references from agents the caller can't read (count only, no leak).\n * `hiddenCount` is only populated when the target is public — private targets\n * can't legitimately be referenced from other workspaces.\n */\nexport const GET_STORED_AGENT_DEPENDENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:storedAgentId/dependents',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: getStoredAgentDependentsResponseSchema,\n summary: 'List dependents of a stored agent',\n description:\n 'Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Mirrors GET: 404 if the caller can't read the target. Prevents the\n // dependents endpoint from being usable as a sub-agent reference oracle.\n const target = await agentsStore.getById(storedAgentId);\n if (!target) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(target, await getStoredResourceScope(mastra, requestContext));\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: target });\n\n // Full scan (no authorId filter) so a public target can detect\n // cross-workspace private dependents. We split into caller-visible\n // `dependents` vs `hiddenCount` so private agents owned by other users\n // are counted but never named.\n const filter = resolveAuthorFilter({ requestContext, resource: 'stored-agents' });\n const all = await agentsStore.listResolved({\n perPage: false,\n status: 'published',\n });\n\n const targetIsPublic = (target as { visibility?: string }).visibility === 'public';\n\n // Caller-readable dependents are surfaced by name (the caller already\n // has access to them). Cross-workspace dependents the caller cannot\n // read are aggregated into hiddenCount, only when the target is public.\n const dependents: Array<{ id: string; name: string }> = [];\n let hiddenCount = 0;\n\n for (const record of all.agents) {\n if (record.id === storedAgentId) continue;\n if (!referencesTarget((record as { agents?: unknown }).agents, storedAgentId)) continue;\n\n if (matchesAuthorFilter(record, filter)) {\n dependents.push({\n id: record.id,\n name: (record as { name?: string }).name ?? record.id,\n });\n } else if (targetIsPublic) {\n hiddenCount += 1;\n }\n // Private target: drop hidden refs silently — they shouldn't exist\n // and surfacing the count would leak cross-workspace structure.\n }\n\n return { dependents, hiddenCount };\n } catch (error) {\n return handleError(error, 'Error listing stored agent dependents');\n }\n },\n});\n\n/**\n * Does the resolved `agents` snapshot field reference `targetId`?\n * The field can be either a static `Record<string, toolConfig>` or an array of\n * conditional variants (`{ value, rules? }`). Match if any variant's value\n * (or the static object) contains a matching key.\n */\nfunction referencesTarget(subAgents: unknown, targetId: string): boolean {\n if (!subAgents) return false;\n if (Array.isArray(subAgents)) {\n return subAgents.some(variant => {\n const value = (variant as { value?: unknown })?.value;\n return Boolean(value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, targetId));\n });\n }\n if (typeof subAgents === 'object') {\n return Object.prototype.hasOwnProperty.call(subAgents, targetId);\n }\n return false;\n}\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const PREVIEW_INSTRUCTIONS_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/preview-instructions',\n responseType: 'json',\n bodySchema: previewInstructionsBodySchema,\n responseSchema: previewInstructionsResponseSchema,\n summary: 'Preview resolved instructions',\n description:\n 'Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, blocks, context }) => {\n try {\n const editor = mastra.getEditor();\n if (!editor) {\n throw new HTTPException(500, { message: 'Editor is not configured' });\n }\n\n const result = await editor.prompt.preview(blocks, context ?? {});\n\n return { result };\n } catch (error) {\n return handleError(error, 'Error previewing instructions');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"stored-agents.cjs","names":["HTTPException","createRoute","listStoredAgentsQuerySchema","listStoredAgentsResponseSchema","resolveAuthorFilter","getStoredResourceScope","scopeStoredResourceMetadata","getCallerAuthorId","isBuilderFeatureEnabled","matchesAuthorFilter","prepareAuthorEnrichment","attachAuthor","stripFavoriteFields","prepareFavoritesEnrichment","handleError","storedAgentIdPathParams","exportStoredAgentBodySchema","exportStoredAgentResponseSchema","openStoredAgentChangeRequestBodySchema","openStoredAgentChangeRequestResponseSchema","statusQuerySchema","getStoredAgentResponseSchema","enrichOrStripFavorites","createStoredAgentBodySchema","createStoredAgentResponseSchema","toSlug","validateAgentInstructionReferences","updateStoredAgentBodySchema","updateStoredAgentResponseSchema","handleAutoVersioning","deleteStoredAgentResponseSchema","getStoredAgentDependentsResponseSchema","previewInstructionsBodySchema","previewInstructionsResponseSchema"],"sources":["../../../src/server/handlers/stored-agents.ts"],"sourcesContent":["import type { StorageCreateAgentInput, StorageUpdateAgentInput } from '@mastra/core/storage';\nimport type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n storedAgentIdPathParams,\n statusQuerySchema,\n listStoredAgentsQuerySchema,\n createStoredAgentBodySchema,\n updateStoredAgentBodySchema,\n listStoredAgentsResponseSchema,\n getStoredAgentResponseSchema,\n createStoredAgentResponseSchema,\n updateStoredAgentResponseSchema,\n deleteStoredAgentResponseSchema,\n getStoredAgentDependentsResponseSchema,\n exportStoredAgentBodySchema,\n openStoredAgentChangeRequestBodySchema,\n exportStoredAgentResponseSchema,\n openStoredAgentChangeRequestResponseSchema,\n previewInstructionsBodySchema,\n previewInstructionsResponseSchema,\n} from '../schemas/stored-agents';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope, scopeStoredResourceMetadata, toSlug } from '../utils';\n\nimport { attachAuthor, prepareAuthorEnrichment } from './author-enrichment';\nimport {\n assertReadAccess,\n assertWriteAccess,\n getCallerAuthorId,\n matchesAuthorFilter,\n resolveAuthorFilter,\n} from './authorship';\nimport { isBuilderFeatureEnabled } from './editor-builder';\nimport { handleError } from './error';\nimport { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from './favorites-enrichment';\nimport { validateAgentInstructionReferences } from './validate-agent-instructions';\nimport { validateMetadataAvatarUrl } from './validate-avatar';\nimport { handleAutoVersioning } from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * Resolve a `browser` field that may be a boolean shorthand from the UI.\n * - `true` → look up the admin's builder default browser config\n * - `false` → `null` (explicit clear)\n * - object/null/undefined → pass through unchanged\n */\nasync function resolveBrowserField(browser: unknown, mastra: { getEditor?: () => unknown }): Promise<unknown> {\n if (browser === true) {\n const editor = mastra.getEditor?.() as any;\n const builder = await editor?.resolveBuilder?.();\n const defaultBrowser = builder?.getConfiguration?.()?.agent?.browser;\n if (!defaultBrowser) {\n console.warn(\n '[mastra:server] Browser enabled (browser: true) but no default browser config found ' +\n 'in builder configuration. The agent will be created/updated without browser access. ' +\n 'Set `editor.builder.configuration.agent.browser` to fix this.',\n );\n }\n return defaultBrowser ?? undefined;\n }\n if (browser === false) {\n return null;\n }\n return browser;\n}\n\nconst AGENT_SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'toolProviders',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n 'skills',\n 'workspace',\n 'browser',\n 'durable',\n] as const;\n\nconst CODE_AGENT_OVERRIDE_FIELDS = [\n 'instructions',\n 'tools',\n 'integrationTools',\n 'mcpClients',\n 'requestContextSchema',\n] as const;\n\n/**\n * Derive ownership flags from a code agent's editor config.\n * Mirrors the semantics of `editor.agent.applyStoredOverrides` so that\n * client save payloads, persisted snapshots, and export output all agree\n * on which fields Studio is allowed to own.\n */\nfunction getCodeAgentOwnership(editorConfig: unknown): {\n ownsInstructions: boolean;\n ownsTools: boolean;\n ownsToolDescriptionsOnly: boolean;\n} {\n if (editorConfig === false) {\n return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };\n }\n if (editorConfig === undefined || editorConfig === null) {\n // Legacy default: code agents without explicit editor config behave as fully editable.\n return { ownsInstructions: true, ownsTools: true, ownsToolDescriptionsOnly: false };\n }\n if (typeof editorConfig !== 'object') {\n return { ownsInstructions: false, ownsTools: false, ownsToolDescriptionsOnly: false };\n }\n const cfg = editorConfig as { instructions?: unknown; tools?: unknown };\n const ownsInstructions = cfg.instructions === true;\n const toolsCfg = cfg.tools;\n const ownsTools = toolsCfg === true;\n const ownsToolDescriptionsOnly =\n typeof toolsCfg === 'object' && toolsCfg !== null && (toolsCfg as { description?: unknown }).description === true;\n return { ownsInstructions, ownsTools, ownsToolDescriptionsOnly };\n}\n\nfunction hasNonEmptyInstructions(value: unknown): boolean {\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (!Array.isArray(value)) {\n return false;\n }\n\n return value.some(block => {\n if (!block || typeof block !== 'object') {\n return false;\n }\n\n const typedBlock = block as { type?: unknown; id?: unknown; content?: unknown };\n if (typedBlock.type === 'prompt_block_ref') {\n return typeof typedBlock.id === 'string' && typedBlock.id.length > 0;\n }\n\n return typeof typedBlock.content === 'string' && typedBlock.content.trim().length > 0;\n });\n}\n\nfunction assertOwnedInstructionsNotEmpty(instructions: unknown) {\n if (!hasNonEmptyInstructions(instructions)) {\n throw new HTTPException(400, { message: 'Instructions are required' });\n }\n}\n\nfunction sortForStableJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(sortForStableJson);\n }\n\n if (value && typeof value === 'object' && !(value instanceof Date)) {\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, entry]) => [key, sortForStableJson(entry)]),\n );\n }\n\n return value;\n}\n\nfunction buildExportConfig(\n input: Record<string, unknown>,\n agent?: { __getEditorConfig?: () => unknown; source?: string },\n) {\n const editorConfig = agent?.__getEditorConfig?.();\n const isCodeAgent = agent?.source === 'code';\n const allowedFields = isCodeAgent ? CODE_AGENT_OVERRIDE_FIELDS : AGENT_SNAPSHOT_CONFIG_FIELDS;\n const ownership = isCodeAgent ? getCodeAgentOwnership(editorConfig) : null;\n const config: Record<string, unknown> = {};\n\n for (const field of allowedFields) {\n if (input[field] === undefined) continue;\n if (ownership) {\n if (field === 'instructions' && !ownership.ownsInstructions) continue;\n if (\n (field === 'tools' || field === 'integrationTools' || field === 'mcpClients') &&\n !ownership.ownsTools &&\n !ownership.ownsToolDescriptionsOnly\n ) {\n continue;\n }\n }\n config[field] = input[field];\n }\n\n return sortForStableJson(config) as Record<string, unknown>;\n}\n\nfunction agentExportFilename(agentId: string) {\n return `agents/${encodeURIComponent(agentId)}.json`;\n}\n\nfunction sourceChangeRequestHeadRef(agentId: string) {\n const safeAgentId = agentId.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '') || 'agent';\n return `mastra/${safeAgentId}`;\n}\n\nfunction sourceChangeRequestMessage(agentId: string, userName?: string, changeMessage?: string) {\n const normalizedUserName = userName?.replace(/\\s+/g, ' ').trim();\n const normalizedMessage = changeMessage?.replace(/\\s+/g, ' ').trim();\n const message = normalizedMessage || `Update ${agentId} agent override`;\n return normalizedUserName ? `${message} by ${normalizedUserName}` : message;\n}\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents - List all stored agents\n */\nexport const LIST_STORED_AGENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents',\n responseType: 'json',\n queryParamSchema: listStoredAgentsQuerySchema,\n responseSchema: listStoredAgentsResponseSchema,\n summary: 'List stored agents',\n description: 'Returns a paginated list of all agents stored in the database',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n page,\n perPage,\n orderBy,\n status,\n authorId,\n visibility,\n metadata,\n favoritedOnly,\n pinFavoritedFor,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Resolve the visibility scope for this caller. Non-owner queries for\n // another author return only that author's public rows; default lists\n // return the caller's rows plus legacy unowned records.\n const filter = resolveAuthorFilter({\n requestContext,\n resource: 'stored-agents',\n queryAuthorId: authorId,\n queryVisibility: visibility === 'public' ? 'public' : undefined,\n });\n\n const scope = await getStoredResourceScope(mastra, requestContext);\n const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);\n\n const callerId = getCallerAuthorId(requestContext);\n const favoritesEnabled = await isBuilderFeatureEnabled(mastra, 'favorites');\n const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;\n const favoriteSubjectId = pinFavoritedFor ?? callerId;\n\n // `?favoritedOnly=true`: fetch caller's favorited IDs, then refilter + recompute total.\n if (honoredStarredOnly) {\n const effectivePerPage: number = perPage ?? 100;\n if (!favoriteSubjectId) {\n return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const favoritesStore = await storage.getStore('favorites');\n if (!favoritesStore) {\n throw new HTTPException(500, { message: 'Favorites storage domain is not available' });\n }\n const starredIds = await favoritesStore.listFavoritedIds({ userId: favoriteSubjectId, entityType: 'agent' });\n if (starredIds.length === 0) {\n return { agents: [], total: 0, page, perPage: effectivePerPage, hasMore: false };\n }\n const allMatching = await agentsStore.listResolved({\n perPage: false,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n entityIds: starredIds,\n });\n const visible = allMatching.agents.filter(record => matchesAuthorFilter(record, filter));\n const total = visible.length;\n const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;\n const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;\n const sliced = effectivePerPage === 0 ? [] : visible.slice(startIdx, endIdx);\n const annotated = sliced.map(record => ({ ...record, isFavorited: true }));\n const authors = await prepareAuthorEnrichment(\n mastra,\n requestContext,\n annotated.map(a => a.authorId),\n );\n const withAuthors = authors ? annotated.map(record => attachAuthor(record, authors)) : annotated;\n const hasMore = effectivePerPage > 0 && endIdx < total;\n return { agents: withAuthors, total, page, perPage: effectivePerPage, hasMore };\n }\n\n const result = await agentsStore.listResolved({\n page,\n perPage,\n orderBy,\n status,\n authorId: filter.kind === 'exact' ? filter.authorId : undefined,\n metadata: scopedMetadata,\n });\n\n // Post-filter to enforce ownership + visibility rules across all backends.\n // Storage adapters can only do an equality filter on authorId, so we apply\n // the ownedOrPublic / publicOnly logic here.\n // Note: `total` is left as the storage-reported count to keep pagination\n // math working. For `unrestricted` / `exact` filters nothing is removed.\n // For `ownedOrPublic` / `publicOnly`, downstream UIs should treat the\n // filter as a view over the caller's scope — an approximation is OK.\n const visibleAgents = result.agents.filter(record => matchesAuthorFilter(record, filter));\n\n const authors = await prepareAuthorEnrichment(\n mastra,\n requestContext,\n visibleAgents.map(a => a.authorId),\n );\n\n if (!favoritesEnabled) {\n const stripped = visibleAgents.map(stripFavoriteFields);\n const withAuthors = authors ? stripped.map(record => attachAuthor(record, authors)) : stripped;\n return { ...result, agents: withAuthors };\n }\n\n const enrichment = await prepareFavoritesEnrichment(\n mastra,\n requestContext,\n 'agent',\n visibleAgents.map(a => a.id),\n );\n const annotated = enrichment\n ? visibleAgents.map(record => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) }))\n : visibleAgents.map(stripFavoriteFields);\n const withAuthors = authors ? annotated.map(record => attachAuthor(record, authors)) : annotated;\n\n return { ...result, agents: withAuthors };\n } catch (error) {\n return handleError(error, 'Error listing stored agents');\n }\n },\n});\n\nasync function buildStoredAgentExport({\n mastra,\n requestContext,\n storedAgentId,\n body,\n}: {\n mastra: any;\n requestContext: any;\n storedAgentId: string;\n body: Record<string, unknown>;\n}) {\n const storage = mastra.getStorage();\n const agentsStore = storage ? await storage.getStore('agents') : undefined;\n const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: 'draft' });\n if (storedAgent) {\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: storedAgent });\n }\n\n let codeAgent: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n try {\n codeAgent = mastra.getAgentById?.(storedAgentId) as typeof codeAgent;\n } catch {\n codeAgent = undefined;\n }\n\n if (!storedAgent && !codeAgent) {\n throw new HTTPException(404, { message: `Agent with id ${storedAgentId} not found` });\n }\n\n const config = buildExportConfig(body, codeAgent);\n const content = `${JSON.stringify(config, null, 2)}\\n`;\n\n return {\n agentId: storedAgentId,\n fileName: agentExportFilename(storedAgentId),\n content,\n config,\n };\n}\n\nexport const EXPORT_STORED_AGENT_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:storedAgentId/export',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: exportStoredAgentBodySchema,\n responseSchema: exportStoredAgentResponseSchema,\n summary: 'Export stored agent override JSON',\n description: 'Returns deterministic JSON for an agent configuration or code-agent override without mutating storage',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {\n try {\n return await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body });\n } catch (error) {\n return handleError(error, 'Error exporting stored agent');\n }\n },\n});\n\nexport const OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:storedAgentId/change-request',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: openStoredAgentChangeRequestBodySchema,\n responseSchema: openStoredAgentChangeRequestResponseSchema,\n summary: 'Open stored agent source change request',\n description: 'Opens a source-provider change request for deterministic agent override JSON without mutating storage',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, ...body }) => {\n try {\n const provider = mastra.getEditor?.()?.getSourceControlProvider?.();\n if (!provider?.openChangeRequest) {\n throw new HTTPException(400, { message: 'Source control provider cannot open change requests' });\n }\n\n const openChangeRequest = provider.openChangeRequest.bind(provider);\n const { changeMessage, userName, inspectOnly, ...exportBody } = body;\n const headRef = sourceChangeRequestHeadRef(storedAgentId);\n const title = `Update ${storedAgentId} agent override`;\n const result = inspectOnly\n ? await openChangeRequest({\n title,\n headRef,\n files: [],\n })\n : await (async () => {\n const response = await buildStoredAgentExport({ mastra, requestContext, storedAgentId, body: exportBody });\n const message = sourceChangeRequestMessage(storedAgentId, userName, changeMessage);\n return openChangeRequest({\n title,\n body: `Updates ${response.fileName} from Mastra Studio.`,\n headRef,\n files: [\n {\n path: response.fileName,\n content: response.content,\n message,\n },\n ],\n });\n })();\n\n const storage = mastra.getStorage();\n const agentsStore = storage ? await storage.getStore('agents') : undefined;\n await (\n agentsStore as { useProviderRef?: (agentId: string, ref: string) => Promise<void> } | undefined\n )?.useProviderRef?.(storedAgentId, result.ref ?? headRef);\n mastra.getEditor?.()?.agent?.clearCache?.(storedAgentId);\n\n return result;\n } catch (error) {\n return handleError(error, 'Error opening stored agent change request');\n }\n },\n});\n\n/**\n * GET /stored/agents/:storedAgentId - Get a stored agent by ID\n */\nexport const GET_STORED_AGENT_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n queryParamSchema: statusQuerySchema,\n responseSchema: getStoredAgentResponseSchema,\n summary: 'Get stored agent by ID',\n description:\n 'Returns a specific agent from storage by its unique identifier. Use ?status=draft to resolve with the latest (draft) version, or ?status=published (default) for the active published version.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId, status }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const agent = await agentsStore.getByIdResolved(storedAgentId, { status });\n\n if (!agent) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, `stored-agents:read[:<id>]`\n // holder, and the record isn't public/legacy-unowned.\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: agent });\n\n const authors = await prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);\n const withFavorite = await enrichOrStripFavorites(mastra, requestContext, 'agent', agent);\n return attachAuthor(withFavorite, authors);\n } catch (error) {\n return handleError(error, 'Error getting stored agent');\n }\n },\n});\n\n/**\n * POST /stored/agents - Create a new stored agent\n */\nexport const CREATE_STORED_AGENT_ROUTE: ServerRoute<\n InferParams<undefined, undefined, typeof createStoredAgentBodySchema>,\n z.infer<typeof createStoredAgentResponseSchema>,\n 'json',\n RouteSchemas<undefined, undefined, typeof createStoredAgentBodySchema, typeof createStoredAgentResponseSchema>,\n 'POST',\n '/stored/agents'\n> = createRoute({\n method: 'POST',\n path: '/stored/agents',\n responseType: 'json',\n bodySchema: createStoredAgentBodySchema,\n responseSchema: createStoredAgentResponseSchema,\n summary: 'Create stored agent',\n description: 'Creates a new agent in storage with the provided configuration',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n id: providedId,\n metadata,\n visibility: bodyVisibility,\n autoPublish,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser,\n durable,\n requestContextSchema,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Derive ID from name if not explicitly provided\n const id = providedId || toSlug(name);\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive agent ID from name. Please provide an explicit id.',\n });\n }\n\n // Check if agent with this ID already exists\n const existing = await agentsStore.getById(id);\n if (existing) {\n throw new HTTPException(409, { message: `Agent with id ${id} already exists` });\n }\n\n // Force authorId from the authenticated caller; ignore any body-provided value.\n // No owner = always public (no auth / no user context).\n // With an owner, respect the client's choice, defaulting to 'private'.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Reject oversized avatar images before writing to storage.\n validateMetadataAvatarUrl(metadata);\n\n // Model policy enforcement is intentionally not done on save: each UI\n // surface gates its own model picker via ModelPolicyProvider, and the\n // policy is surface-scoped (builder vs editor). Re-introducing a single\n // server-side check here would either over-enforce on the editor or\n // under-enforce on the builder until per-surface enforcement lands.\n\n const resolvedBrowser = await resolveBrowserField(browser, mastra);\n\n let createInstructions: typeof instructions | undefined = instructions;\n let createTools = tools;\n let createIntegrationTools = integrationTools;\n let createMcpClients = mcpClients;\n let codeAgentForCreate: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n try {\n codeAgentForCreate = mastra.getAgentById?.(id) as typeof codeAgentForCreate;\n } catch {\n codeAgentForCreate = undefined;\n }\n if (codeAgentForCreate?.source === 'code') {\n const ownership = getCodeAgentOwnership(codeAgentForCreate.__getEditorConfig?.());\n if (ownership.ownsInstructions) {\n assertOwnedInstructionsNotEmpty(createInstructions);\n } else {\n createInstructions = undefined;\n }\n if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {\n createTools = undefined;\n createIntegrationTools = undefined;\n createMcpClients = undefined;\n }\n }\n\n await validateAgentInstructionReferences({\n instructions: createInstructions,\n mastra,\n requestContext,\n });\n\n const input = {\n id,\n authorId,\n visibility,\n metadata: scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext)),\n name,\n description,\n instructions: createInstructions,\n model,\n tools: createTools,\n defaultOptions,\n workflows,\n agents,\n integrationTools: createIntegrationTools,\n toolProviders,\n mcpClients: createMcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n } as StorageCreateAgentInput;\n\n // Use editor.agent.create() when available to apply builder defaults\n const editor = mastra.getEditor?.();\n if (editor) {\n await editor.agent.create(input);\n } else {\n // Fallback to direct storage create\n await agentsStore.create({ agent: input });\n }\n\n // Publish the initial version so the agent is immediately usable. Without this the\n // thin record stays at status='draft' with activeVersionId=null, which makes the\n // agent unreachable via status='published' resolution — a created agent that\n // resolves nowhere. That's why publishing is the default.\n //\n // Callers staging an agent for later review, and Studio when it saves an override\n // for a code-defined agent, pass autoPublish: false. In the override case the code\n // definition already serves traffic, so the first save must behave like every later\n // save and stay a draft until the user explicitly publishes.\n //\n // A code-source editor can't honour that: there is no draft/publish step there\n // (the save writes the override file, git is the version history) and filesystem\n // storage only persists published entities, so an unpublished record would never\n // reach disk. The editor's own source is server-side knowledge — a client can't\n // reliably determine it before saving — so the flag is overridden here.\n const isCodeSourceEditor = editor?.getSource?.() === 'code';\n const { versions } = await agentsStore.listVersions({ agentId: id, perPage: 1 });\n const initialVersion = versions[0];\n if (initialVersion && (autoPublish !== false || isCodeSourceEditor)) {\n await agentsStore.update({\n id,\n activeVersionId: initialVersion.id,\n status: 'published',\n });\n }\n editor?.agent.clearCache(id);\n\n // Return the resolved agent (thin record + version config). Published resolution falls\n // back to the latest version, so an unpublished code-agent override still returns the\n // config the caller just saved.\n const resolved = await agentsStore.getByIdResolved(id, { status: 'published' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve created agent' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'agent', resolved);\n } catch (error) {\n return handleError(error, 'Error creating stored agent');\n }\n },\n});\n\n/**\n * PATCH /stored/agents/:storedAgentId - Update a stored agent\n */\nexport const UPDATE_STORED_AGENT_ROUTE: ServerRoute<\n InferParams<typeof storedAgentIdPathParams, undefined, typeof updateStoredAgentBodySchema>,\n z.infer<typeof updateStoredAgentResponseSchema>,\n 'json',\n RouteSchemas<\n typeof storedAgentIdPathParams,\n undefined,\n typeof updateStoredAgentBodySchema,\n typeof updateStoredAgentResponseSchema\n >,\n 'PATCH',\n '/stored/agents/:storedAgentId'\n> = createRoute({\n method: 'PATCH',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n bodySchema: updateStoredAgentBodySchema,\n responseSchema: updateStoredAgentResponseSchema,\n summary: 'Update stored agent',\n description: 'Updates an existing agent in storage with the provided fields',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({\n mastra,\n requestContext,\n storedAgentId,\n // Metadata-level fields\n authorId,\n metadata,\n visibility,\n // Config fields (snapshot-level)\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser,\n durable,\n requestContextSchema,\n // Version options\n changeMessage,\n autoPublish = false,\n }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getById(storedAgentId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n const scope = await getStoredResourceScope(mastra, requestContext);\n assertStoredResourceScope(existing, scope);\n\n // Throws 404 if the caller isn't the owner, admin, or `agents:edit[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-agents',\n resourceId: storedAgentId,\n action: 'edit',\n record: existing,\n });\n\n // Reject oversized avatar images before writing to storage.\n validateMetadataAvatarUrl(metadata);\n\n // No owner = always public, regardless of what the client sent.\n const callerAuthorId = getCallerAuthorId(requestContext) ?? undefined;\n const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? 'public' : undefined;\n\n // Model policy enforcement is intentionally not done on save: each UI\n // surface gates its own model picker via ModelPolicyProvider, and the\n // policy is surface-scoped (builder vs editor). Re-introducing a single\n // server-side check here would either over-enforce on the editor or\n // under-enforce on the builder until per-surface enforcement lands.\n\n // Resolve boolean browser shorthand from the UI\n const resolvedBrowser = await resolveBrowserField(browser, mastra);\n\n // For code-defined agents, strip fields the editor config does not allow\n // Studio to own. This keeps stored snapshots (and the per-entity files\n // they get persisted to) free of fields the server never reads back.\n let codeAgentForUpdate: { __getEditorConfig?: () => unknown; source?: string } | undefined;\n let shouldValidateStoredInstructions = true;\n try {\n codeAgentForUpdate = mastra.getAgentById?.(storedAgentId) as typeof codeAgentForUpdate;\n } catch {\n codeAgentForUpdate = undefined;\n }\n if (codeAgentForUpdate?.source === 'code') {\n const ownership = getCodeAgentOwnership(codeAgentForUpdate.__getEditorConfig?.());\n if (ownership.ownsInstructions) {\n if (instructions !== undefined) {\n assertOwnedInstructionsNotEmpty(instructions);\n }\n } else {\n instructions = undefined;\n shouldValidateStoredInstructions = false;\n }\n if (!ownership.ownsTools && !ownership.ownsToolDescriptionsOnly) {\n tools = undefined;\n integrationTools = undefined;\n mcpClients = undefined;\n }\n }\n\n if (shouldValidateStoredInstructions) {\n const effectiveInstructions =\n instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: 'draft' }))?.instructions;\n await validateAgentInstructionReferences({ instructions: effectiveInstructions, mastra, requestContext });\n }\n\n const mergedMetadata: Record<string, unknown> = { ...(existing.metadata ?? {}), ...(metadata ?? {}) };\n const scopedMetadata = scopeStoredResourceMetadata(mergedMetadata, scope);\n\n // Update the agent with both metadata-level and config-level fields\n // The storage layer handles separating these into agent-record updates vs new-version creation\n // Cast needed because Zod's passthrough() output types don't exactly match the handwritten TS interfaces\n const updatedAgent = await agentsStore.update({\n id: storedAgentId,\n authorId,\n metadata: scopedMetadata,\n visibility: resolvedVisibility,\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n } as StorageUpdateAgentInput);\n\n // Build the snapshot config for auto-versioning comparison\n const configFields = {\n name,\n description,\n instructions,\n model,\n tools,\n defaultOptions,\n workflows,\n agents,\n integrationTools,\n toolProviders,\n mcpClients,\n inputProcessors,\n outputProcessors,\n memory,\n scorers,\n skills,\n workspace,\n browser: resolvedBrowser,\n durable,\n requestContextSchema,\n };\n\n // Filter out undefined values to get only the config fields that were provided\n const providedConfigFields = Object.fromEntries(Object.entries(configFields).filter(([_, v]) => v !== undefined));\n\n // Handle auto-versioning with retry logic for race conditions\n // This creates a new version if there are meaningful config changes.\n const autoVersionResult = await handleAutoVersioning(\n agentsStore as unknown as VersionedStoreInterface,\n storedAgentId,\n 'agentId',\n AGENT_SNAPSHOT_CONFIG_FIELDS,\n existing,\n updatedAgent,\n providedConfigFields,\n changeMessage ? { changeMessage } : undefined,\n );\n\n if (!autoVersionResult) {\n throw new Error('handleAutoVersioning returned undefined');\n }\n\n // In code mode, local saves should overwrite the most recent saved\n // snapshot rather than creating new draft versions on every keystroke\n // batch. Version history is intended to track commits, not raw saves.\n // We collapse the freshly created version onto the previous one by\n // deleting the prior latest version, leaving a single rolling snapshot.\n // When the user explicitly provides a changeMessage we treat that as a\n // commit and keep the new version as a discrete history entry.\n const isCodeSource = mastra.getEditor?.()?.getSource?.() === 'code';\n if (isCodeSource && autoVersionResult.versionCreated && !changeMessage) {\n const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 2 });\n const previousVersion = versions[1];\n const isPublishedVersion = previousVersion?.id === existing.activeVersionId;\n if (previousVersion && !isPublishedVersion) {\n await agentsStore.deleteVersion(previousVersion.id);\n }\n }\n\n // Publication remains opt-in so Classic Studio can save drafts without moving the active version,\n // while Agent Builder can preserve immediate runtime updates by sending autoPublish: true.\n // This flag is a bridge until version creation and publication move to dedicated APIs.\n if (autoVersionResult.versionCreated && autoPublish) {\n const { versions } = await agentsStore.listVersions({ agentId: storedAgentId, perPage: 1 });\n const latestVersion = versions[0];\n if (latestVersion) {\n await agentsStore.update({\n id: storedAgentId,\n activeVersionId: latestVersion.id,\n });\n }\n }\n\n // Clear the cached agent instance so the next request gets the updated config\n const editor = mastra.getEditor();\n if (editor) {\n editor.agent.clearCache(storedAgentId);\n }\n\n // Return the resolved agent with the latest version\n const resolved = await agentsStore.getByIdResolved(storedAgentId, { status: 'draft' });\n if (!resolved) {\n throw new HTTPException(500, { message: 'Failed to resolve updated agent' });\n }\n\n return enrichOrStripFavorites(mastra, requestContext, 'agent', resolved);\n } catch (error) {\n return handleError(error, 'Error updating stored agent');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:storedAgentId - Delete a stored agent\n */\nexport const DELETE_STORED_AGENT_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:storedAgentId',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: deleteStoredAgentResponseSchema,\n summary: 'Delete stored agent',\n description: 'Deletes an agent from storage by its unique identifier',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Check if agent exists\n const existing = await agentsStore.getById(storedAgentId);\n if (!existing) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(existing, await getStoredResourceScope(mastra, requestContext));\n\n // Throws 404 if the caller isn't the owner, admin, or `agents:delete[:<id>]` holder.\n assertWriteAccess({\n requestContext,\n resource: 'stored-agents',\n resourceId: storedAgentId,\n action: 'delete',\n record: existing,\n });\n\n await agentsStore.delete(storedAgentId);\n\n // Cascade: drop any favorite rows referencing this agent so they don't\n // resurrect if the same id is reused. Failure must not abort the delete.\n try {\n const favoritesStore = await storage.getStore('favorites');\n await favoritesStore?.deleteFavoritesForEntity({ entityType: 'agent', entityId: storedAgentId });\n } catch (cascadeError) {\n mastra\n .getLogger?.()\n ?.warn?.('Failed to cascade-delete favorites for agent', { storedAgentId, error: cascadeError });\n }\n\n // Clear the cached agent instance\n mastra.getEditor()?.agent.clearCache(storedAgentId);\n\n return { success: true, message: `Agent ${storedAgentId} deleted successfully` };\n } catch (error) {\n return handleError(error, 'Error deleting stored agent');\n }\n },\n});\n\n/**\n * GET /stored/agents/:storedAgentId/dependents - List agents that reference\n * the target agent as a sub-agent.\n *\n * Returns `dependents` for caller-visible references (named) and `hiddenCount`\n * for references from agents the caller can't read (count only, no leak).\n * `hiddenCount` is only populated when the target is public — private targets\n * can't legitimately be referenced from other workspaces.\n */\nexport const GET_STORED_AGENT_DEPENDENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:storedAgentId/dependents',\n responseType: 'json',\n pathParamSchema: storedAgentIdPathParams,\n responseSchema: getStoredAgentDependentsResponseSchema,\n summary: 'List dependents of a stored agent',\n description:\n 'Returns agents that reference the target as a sub-agent. Used to warn before deleting or unsharing. Caller-readable references appear in `dependents` (id + name); cross-workspace references the caller cannot read are aggregated in `hiddenCount` and only surfaced when the target is public.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, storedAgentId }) => {\n try {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Mirrors GET: 404 if the caller can't read the target. Prevents the\n // dependents endpoint from being usable as a sub-agent reference oracle.\n const target = await agentsStore.getById(storedAgentId);\n if (!target) {\n throw new HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });\n }\n assertStoredResourceScope(target, await getStoredResourceScope(mastra, requestContext));\n assertReadAccess({ requestContext, resource: 'stored-agents', resourceId: storedAgentId, record: target });\n\n // Full scan (no authorId filter) so a public target can detect\n // cross-workspace private dependents. We split into caller-visible\n // `dependents` vs `hiddenCount` so private agents owned by other users\n // are counted but never named.\n const filter = resolveAuthorFilter({ requestContext, resource: 'stored-agents' });\n const all = await agentsStore.listResolved({\n perPage: false,\n status: 'published',\n });\n\n const targetIsPublic = (target as { visibility?: string }).visibility === 'public';\n\n // Caller-readable dependents are surfaced by name (the caller already\n // has access to them). Cross-workspace dependents the caller cannot\n // read are aggregated into hiddenCount, only when the target is public.\n const dependents: Array<{ id: string; name: string }> = [];\n let hiddenCount = 0;\n\n for (const record of all.agents) {\n if (record.id === storedAgentId) continue;\n if (!referencesTarget((record as { agents?: unknown }).agents, storedAgentId)) continue;\n\n if (matchesAuthorFilter(record, filter)) {\n dependents.push({\n id: record.id,\n name: (record as { name?: string }).name ?? record.id,\n });\n } else if (targetIsPublic) {\n hiddenCount += 1;\n }\n // Private target: drop hidden refs silently — they shouldn't exist\n // and surfacing the count would leak cross-workspace structure.\n }\n\n return { dependents, hiddenCount };\n } catch (error) {\n return handleError(error, 'Error listing stored agent dependents');\n }\n },\n});\n\n/**\n * Does the resolved `agents` snapshot field reference `targetId`?\n * The field can be either a static `Record<string, toolConfig>` or an array of\n * conditional variants (`{ value, rules? }`). Match if any variant's value\n * (or the static object) contains a matching key.\n */\nfunction referencesTarget(subAgents: unknown, targetId: string): boolean {\n if (!subAgents) return false;\n if (Array.isArray(subAgents)) {\n return subAgents.some(variant => {\n const value = (variant as { value?: unknown })?.value;\n return Boolean(value && typeof value === 'object' && Object.prototype.hasOwnProperty.call(value, targetId));\n });\n }\n if (typeof subAgents === 'object') {\n return Object.prototype.hasOwnProperty.call(subAgents, targetId);\n }\n return false;\n}\n\n/**\n * POST /stored/agents/preview-instructions - Preview resolved instructions\n */\nexport const PREVIEW_INSTRUCTIONS_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/preview-instructions',\n responseType: 'json',\n bodySchema: previewInstructionsBodySchema,\n responseSchema: previewInstructionsResponseSchema,\n summary: 'Preview resolved instructions',\n description:\n 'Resolves an array of instruction blocks against a request context, evaluating rules, fetching prompt block references, and rendering template variables. Returns the final concatenated instruction string.',\n tags: ['Stored Agents'],\n requiresAuth: true,\n handler: async ({ mastra, blocks, context }) => {\n try {\n const editor = mastra.getEditor();\n if (!editor) {\n throw new HTTPException(500, { message: 'Editor is not configured' });\n }\n\n const result = await editor.prompt.preview(blocks, context ?? {});\n\n return { result };\n } catch (error) {\n return handleError(error, 'Error previewing instructions');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
1
  import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
2
2
  import { d as statusQuerySchema } from "../../common-Y30XtCyr.js";
3
- import { n as createRoute } from "../../route-builder-BfQYtclb.js";
4
- import { c as toSlug, i as getStoredResourceScope, n as assertStoredResourceScope, s as scopeStoredResourceMetadata } from "../../utils-DCAUeb6M.js";
3
+ import { n as createRoute } from "../../route-builder-CjkWxv4E.js";
4
+ import { c as toSlug, i as getStoredResourceScope, n as assertStoredResourceScope, s as scopeStoredResourceMetadata } from "../../utils-aoLN3Wfi.js";
5
5
  import { handleError } from "./error.js";
6
6
  import { C as storedAgentIdPathParams, O as updateStoredAgentBodySchema, a as exportStoredAgentBodySchema, c as getStoredAgentResponseSchema, d as listStoredAgentsResponseSchema, g as previewInstructionsResponseSchema, h as previewInstructionsBodySchema, i as deleteStoredAgentResponseSchema, k as updateStoredAgentResponseSchema, m as openStoredAgentChangeRequestResponseSchema, n as createStoredAgentBodySchema, o as exportStoredAgentResponseSchema, p as openStoredAgentChangeRequestBodySchema, r as createStoredAgentResponseSchema, s as getStoredAgentDependentsResponseSchema, u as listStoredAgentsQuerySchema } from "../../stored-agents-BtaEzKfr.js";
7
7
  import { attachAuthor, prepareAuthorEnrichment } from "./author-enrichment.js";
8
8
  import { assertReadAccess, assertWriteAccess, getCallerAuthorId, matchesAuthorFilter, resolveAuthorFilter } from "./authorship.js";
9
9
  import { validateAgentInstructionReferences } from "./validate-agent-instructions.js";
10
10
  import { handleAutoVersioning } from "./version-helpers.js";
11
- import { i as isBuilderFeatureEnabled } from "../../editor-builder-D16kc1P6.js";
11
+ import { i as isBuilderFeatureEnabled } from "../../editor-builder-ClFlGXoX.js";
12
12
  import { enrichOrStripFavorites, prepareFavoritesEnrichment, stripFavoriteFields } from "./favorites-enrichment.js";
13
13
  import { validateMetadataAvatarUrl } from "./validate-avatar.js";
14
14
  //#region src/server/handlers/stored-agents.ts
@@ -157,7 +157,8 @@ const LIST_STORED_AGENTS_ROUTE = createRoute({
157
157
  queryAuthorId: authorId,
158
158
  queryVisibility: visibility === "public" ? "public" : void 0
159
159
  });
160
- const scopedMetadata = scopeStoredResourceMetadata(metadata, await getStoredResourceScope(mastra, requestContext));
160
+ const scope = await getStoredResourceScope(mastra, requestContext);
161
+ const scopedMetadata = scopeStoredResourceMetadata(metadata, scope);
161
162
  const callerId = getCallerAuthorId(requestContext);
162
163
  const favoritesEnabled = await isBuilderFeatureEnabled(mastra, "favorites");
163
164
  const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
@@ -374,7 +375,8 @@ const GET_STORED_AGENT_ROUTE = createRoute({
374
375
  record: agent
375
376
  });
376
377
  const authors = await prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
377
- return attachAuthor(await enrichOrStripFavorites(mastra, requestContext, "agent", agent), authors);
378
+ const withFavorite = await enrichOrStripFavorites(mastra, requestContext, "agent", agent);
379
+ return attachAuthor(withFavorite, authors);
378
380
  } catch (error) {
379
381
  return handleError(error, "Error getting stored agent");
380
382
  }
@@ -535,15 +537,19 @@ const UPDATE_STORED_AGENT_ROUTE = createRoute({
535
537
  mcpClients = void 0;
536
538
  }
537
539
  }
538
- if (shouldValidateStoredInstructions) await validateAgentInstructionReferences({
539
- instructions: instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: "draft" }))?.instructions,
540
- mastra,
541
- requestContext
542
- });
543
- const scopedMetadata = scopeStoredResourceMetadata({
540
+ if (shouldValidateStoredInstructions) {
541
+ const effectiveInstructions = instructions ?? (await agentsStore.getByIdResolved(storedAgentId, { status: "draft" }))?.instructions;
542
+ await validateAgentInstructionReferences({
543
+ instructions: effectiveInstructions,
544
+ mastra,
545
+ requestContext
546
+ });
547
+ }
548
+ const mergedMetadata = {
544
549
  ...existing.metadata ?? {},
545
550
  ...metadata ?? {}
546
- }, scope);
551
+ };
552
+ const scopedMetadata = scopeStoredResourceMetadata(mergedMetadata, scope);
547
553
  const updatedAgent = await agentsStore.update({
548
554
  id: storedAgentId,
549
555
  authorId,