@mastra/server 1.31.1-alpha.0 → 1.32.0-alpha.2

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 (323) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +82 -1
  3. package/dist/{chunk-7VXUWPHS.cjs → chunk-2REMDR2Q.cjs} +12 -12
  4. package/dist/{chunk-7VXUWPHS.cjs.map → chunk-2REMDR2Q.cjs.map} +1 -1
  5. package/dist/chunk-33USMBWV.js +250 -0
  6. package/dist/chunk-33USMBWV.js.map +1 -0
  7. package/dist/{chunk-KW2MZGRE.js → chunk-4JWF4VAL.js} +3 -3
  8. package/dist/{chunk-KW2MZGRE.js.map → chunk-4JWF4VAL.js.map} +1 -1
  9. package/dist/{chunk-53YFG5AY.js → chunk-4L2UVFJO.js} +8 -2
  10. package/dist/chunk-4L2UVFJO.js.map +1 -0
  11. package/dist/{chunk-CXBX2UAP.cjs → chunk-4UMO2IGR.cjs} +7 -7
  12. package/dist/{chunk-CXBX2UAP.cjs.map → chunk-4UMO2IGR.cjs.map} +1 -1
  13. package/dist/{chunk-5KM5P23Q.cjs → chunk-5VMRQT5S.cjs} +29 -29
  14. package/dist/{chunk-5KM5P23Q.cjs.map → chunk-5VMRQT5S.cjs.map} +1 -1
  15. package/dist/{chunk-FIP7YYSO.js → chunk-64M357LE.js} +6 -6
  16. package/dist/{chunk-FIP7YYSO.js.map → chunk-64M357LE.js.map} +1 -1
  17. package/dist/{chunk-CUIH4FYN.js → chunk-67TYG7WH.js} +3 -3
  18. package/dist/{chunk-CUIH4FYN.js.map → chunk-67TYG7WH.js.map} +1 -1
  19. package/dist/{chunk-65MQD7JR.js → chunk-6M7OOHNA.js} +6 -6
  20. package/dist/{chunk-65MQD7JR.js.map → chunk-6M7OOHNA.js.map} +1 -1
  21. package/dist/{chunk-HSU5D2KT.js → chunk-72RVQAAZ.js} +4 -4
  22. package/dist/{chunk-HSU5D2KT.js.map → chunk-72RVQAAZ.js.map} +1 -1
  23. package/dist/{chunk-5UKYK7YK.cjs → chunk-7LAFXMXB.cjs} +2 -2
  24. package/dist/{chunk-5UKYK7YK.cjs.map → chunk-7LAFXMXB.cjs.map} +1 -1
  25. package/dist/{chunk-2HIGXJMR.cjs → chunk-AF6AYXRW.cjs} +103 -103
  26. package/dist/{chunk-2HIGXJMR.cjs.map → chunk-AF6AYXRW.cjs.map} +1 -1
  27. package/dist/{chunk-Y2SA2JZT.cjs → chunk-ANEBYNP6.cjs} +89 -67
  28. package/dist/chunk-ANEBYNP6.cjs.map +1 -0
  29. package/dist/{chunk-YI2LXCWB.js → chunk-AOKUS5NX.js} +3 -3
  30. package/dist/{chunk-YI2LXCWB.js.map → chunk-AOKUS5NX.js.map} +1 -1
  31. package/dist/{chunk-MROI3O6S.cjs → chunk-ASVWXKET.cjs} +12 -12
  32. package/dist/{chunk-MROI3O6S.cjs.map → chunk-ASVWXKET.cjs.map} +1 -1
  33. package/dist/{chunk-XG2VRXG5.cjs → chunk-BK2PRWVJ.cjs} +22 -2
  34. package/dist/chunk-BK2PRWVJ.cjs.map +1 -0
  35. package/dist/{chunk-4GOK3PCO.js → chunk-CBSIIPHQ.js} +6 -6
  36. package/dist/{chunk-4GOK3PCO.js.map → chunk-CBSIIPHQ.js.map} +1 -1
  37. package/dist/{chunk-VGR4DSXQ.cjs → chunk-CEZZQMPM.cjs} +11 -11
  38. package/dist/{chunk-VGR4DSXQ.cjs.map → chunk-CEZZQMPM.cjs.map} +1 -1
  39. package/dist/{chunk-RPMBPQNO.cjs → chunk-CPZEA2XG.cjs} +10 -3
  40. package/dist/chunk-CPZEA2XG.cjs.map +1 -0
  41. package/dist/{chunk-OES3CANB.js → chunk-CR7RGILH.js} +3 -3
  42. package/dist/{chunk-OES3CANB.js.map → chunk-CR7RGILH.js.map} +1 -1
  43. package/dist/{chunk-ARZ6W3O3.cjs → chunk-CTYPGLJG.cjs} +46 -21
  44. package/dist/chunk-CTYPGLJG.cjs.map +1 -0
  45. package/dist/{chunk-H6NJWTER.cjs → chunk-CZU262RD.cjs} +20 -15
  46. package/dist/chunk-CZU262RD.cjs.map +1 -0
  47. package/dist/{chunk-4IYALPXO.js → chunk-DCMRHRHR.js} +4 -4
  48. package/dist/{chunk-4IYALPXO.js.map → chunk-DCMRHRHR.js.map} +1 -1
  49. package/dist/{chunk-B346SGRP.cjs → chunk-DIBOFJUK.cjs} +11 -11
  50. package/dist/{chunk-B346SGRP.cjs.map → chunk-DIBOFJUK.cjs.map} +1 -1
  51. package/dist/{chunk-DY6OYCMG.js → chunk-DOTOVTE2.js} +4 -4
  52. package/dist/{chunk-DY6OYCMG.js.map → chunk-DOTOVTE2.js.map} +1 -1
  53. package/dist/{chunk-VOAVPKTH.js → chunk-EAJSW5GK.js} +3 -3
  54. package/dist/{chunk-VOAVPKTH.js.map → chunk-EAJSW5GK.js.map} +1 -1
  55. package/dist/{chunk-S7REEERK.cjs → chunk-EWNTXTFB.cjs} +11 -11
  56. package/dist/{chunk-S7REEERK.cjs.map → chunk-EWNTXTFB.cjs.map} +1 -1
  57. package/dist/{chunk-DBPJYWAH.js → chunk-F23SQINQ.js} +30 -8
  58. package/dist/chunk-F23SQINQ.js.map +1 -0
  59. package/dist/{chunk-TKHLXCSZ.cjs → chunk-F5RU45N6.cjs} +7 -7
  60. package/dist/{chunk-TKHLXCSZ.cjs.map → chunk-F5RU45N6.cjs.map} +1 -1
  61. package/dist/{chunk-TNNU7IZK.cjs → chunk-FFDMYX2V.cjs} +25 -25
  62. package/dist/{chunk-TNNU7IZK.cjs.map → chunk-FFDMYX2V.cjs.map} +1 -1
  63. package/dist/{chunk-ANP3ESTF.js → chunk-FICILXAQ.js} +3 -3
  64. package/dist/{chunk-ANP3ESTF.js.map → chunk-FICILXAQ.js.map} +1 -1
  65. package/dist/{chunk-2QNJHTKM.cjs → chunk-GME2ZNSG.cjs} +11 -11
  66. package/dist/{chunk-2QNJHTKM.cjs.map → chunk-GME2ZNSG.cjs.map} +1 -1
  67. package/dist/{chunk-6SBH6SYP.js → chunk-GOFGQSF7.js} +20 -7
  68. package/dist/chunk-GOFGQSF7.js.map +1 -0
  69. package/dist/{chunk-PQETTP2F.js → chunk-GQOWV33T.js} +3 -3
  70. package/dist/{chunk-PQETTP2F.js.map → chunk-GQOWV33T.js.map} +1 -1
  71. package/dist/{chunk-OV64VJ5L.js → chunk-HBWNPGIL.js} +5 -5
  72. package/dist/{chunk-OV64VJ5L.js.map → chunk-HBWNPGIL.js.map} +1 -1
  73. package/dist/{chunk-H23VTK56.js → chunk-HKXIZNJC.js} +4 -4
  74. package/dist/{chunk-H23VTK56.js.map → chunk-HKXIZNJC.js.map} +1 -1
  75. package/dist/{chunk-EQR4MMSL.cjs → chunk-HN3V6UA4.cjs} +12 -12
  76. package/dist/{chunk-EQR4MMSL.cjs.map → chunk-HN3V6UA4.cjs.map} +1 -1
  77. package/dist/{chunk-OGV23F3H.cjs → chunk-IMPWOZUQ.cjs} +28 -15
  78. package/dist/chunk-IMPWOZUQ.cjs.map +1 -0
  79. package/dist/{chunk-AMC32S2M.js → chunk-IRKGFNRR.js} +34 -9
  80. package/dist/chunk-IRKGFNRR.js.map +1 -0
  81. package/dist/{chunk-EPM6ILRW.js → chunk-IYEGDP3G.js} +22 -3
  82. package/dist/chunk-IYEGDP3G.js.map +1 -0
  83. package/dist/{chunk-JZNOIGOQ.js → chunk-K2KWDOYR.js} +32 -5
  84. package/dist/chunk-K2KWDOYR.js.map +1 -0
  85. package/dist/{chunk-Q2N5GR7X.cjs → chunk-K745HNW2.cjs} +11 -11
  86. package/dist/{chunk-Q2N5GR7X.cjs.map → chunk-K745HNW2.cjs.map} +1 -1
  87. package/dist/{chunk-YJQYJ5WD.cjs → chunk-K7IVZQKI.cjs} +6 -6
  88. package/dist/{chunk-YJQYJ5WD.cjs.map → chunk-K7IVZQKI.cjs.map} +1 -1
  89. package/dist/{chunk-PA2BYLKF.js → chunk-KDUX3YN3.js} +2 -2
  90. package/dist/{chunk-PA2BYLKF.js.map → chunk-KDUX3YN3.js.map} +1 -1
  91. package/dist/{chunk-LVGLLXRY.cjs → chunk-KQU6VKAO.cjs} +7 -7
  92. package/dist/{chunk-LVGLLXRY.cjs.map → chunk-KQU6VKAO.cjs.map} +1 -1
  93. package/dist/{chunk-UZRD3SEA.js → chunk-KTTHNIBJ.js} +89 -26
  94. package/dist/chunk-KTTHNIBJ.js.map +1 -0
  95. package/dist/{chunk-LY6Q36YN.cjs → chunk-LGR7SFQ5.cjs} +38 -25
  96. package/dist/chunk-LGR7SFQ5.cjs.map +1 -0
  97. package/dist/{chunk-7GNVIWZY.js → chunk-LO7CBY5Q.js} +6 -6
  98. package/dist/{chunk-7GNVIWZY.js.map → chunk-LO7CBY5Q.js.map} +1 -1
  99. package/dist/{chunk-UQLJDNXU.cjs → chunk-M7L5EVQE.cjs} +12 -12
  100. package/dist/{chunk-UQLJDNXU.cjs.map → chunk-M7L5EVQE.cjs.map} +1 -1
  101. package/dist/{chunk-BMWSQ6HM.cjs → chunk-NIRJGDC6.cjs} +4 -4
  102. package/dist/{chunk-BMWSQ6HM.cjs.map → chunk-NIRJGDC6.cjs.map} +1 -1
  103. package/dist/{chunk-VZNOKYP5.js → chunk-NKD5XK43.js} +5 -5
  104. package/dist/{chunk-VZNOKYP5.js.map → chunk-NKD5XK43.js.map} +1 -1
  105. package/dist/{chunk-LTLTS3RN.js → chunk-NRKGN3C5.js} +4 -4
  106. package/dist/{chunk-LTLTS3RN.js.map → chunk-NRKGN3C5.js.map} +1 -1
  107. package/dist/{chunk-EETF75CE.cjs → chunk-OBRYBTX6.cjs} +12 -12
  108. package/dist/{chunk-EETF75CE.cjs.map → chunk-OBRYBTX6.cjs.map} +1 -1
  109. package/dist/{chunk-7E2JRYIE.js → chunk-OCBL7S62.js} +6 -6
  110. package/dist/{chunk-7E2JRYIE.js.map → chunk-OCBL7S62.js.map} +1 -1
  111. package/dist/chunk-ODCWNXTX.cjs +256 -0
  112. package/dist/chunk-ODCWNXTX.cjs.map +1 -0
  113. package/dist/{chunk-JQUNK754.js → chunk-OJ7SK6PH.js} +374 -53
  114. package/dist/chunk-OJ7SK6PH.js.map +1 -0
  115. package/dist/{chunk-4J4K36CU.js → chunk-OPBMOOBR.js} +5 -5
  116. package/dist/{chunk-4J4K36CU.js.map → chunk-OPBMOOBR.js.map} +1 -1
  117. package/dist/{chunk-2MWLNHBG.cjs → chunk-OQHTG2JK.cjs} +11 -11
  118. package/dist/{chunk-2MWLNHBG.cjs.map → chunk-OQHTG2JK.cjs.map} +1 -1
  119. package/dist/{chunk-4BSJHDYP.js → chunk-OUS6FNA7.js} +11 -6
  120. package/dist/chunk-OUS6FNA7.js.map +1 -0
  121. package/dist/{chunk-OGEXISZT.cjs → chunk-OZC7GEO5.cjs} +11 -11
  122. package/dist/{chunk-OGEXISZT.cjs.map → chunk-OZC7GEO5.cjs.map} +1 -1
  123. package/dist/{chunk-WFVK6ZXR.cjs → chunk-Q2T2Q4S5.cjs} +6 -6
  124. package/dist/{chunk-WFVK6ZXR.cjs.map → chunk-Q2T2Q4S5.cjs.map} +1 -1
  125. package/dist/{chunk-CKZMJIUO.cjs → chunk-R3DQGOTC.cjs} +6 -6
  126. package/dist/{chunk-CKZMJIUO.cjs.map → chunk-R3DQGOTC.cjs.map} +1 -1
  127. package/dist/{chunk-IQA7HL2V.js → chunk-R7X4YOSH.js} +51 -10
  128. package/dist/chunk-R7X4YOSH.js.map +1 -0
  129. package/dist/{chunk-NRFMMYTG.js → chunk-RF5ZDERV.js} +4 -4
  130. package/dist/{chunk-NRFMMYTG.js.map → chunk-RF5ZDERV.js.map} +1 -1
  131. package/dist/{chunk-KI7TGMMV.cjs → chunk-RL34ZMLF.cjs} +159 -96
  132. package/dist/chunk-RL34ZMLF.cjs.map +1 -0
  133. package/dist/{chunk-2HVAN7FF.js → chunk-RP7OLAVZ.js} +10 -3
  134. package/dist/chunk-RP7OLAVZ.js.map +1 -0
  135. package/dist/{chunk-K6VEDPBD.js → chunk-RPEPKUZQ.js} +12 -11
  136. package/dist/chunk-RPEPKUZQ.js.map +1 -0
  137. package/dist/{chunk-TU7U5XUE.cjs → chunk-SUT6SU4I.cjs} +8 -2
  138. package/dist/chunk-SUT6SU4I.cjs.map +1 -0
  139. package/dist/{chunk-DG5RFCGJ.cjs → chunk-T6MMZWHW.cjs} +427 -106
  140. package/dist/chunk-T6MMZWHW.cjs.map +1 -0
  141. package/dist/{chunk-RTD3NZ4G.js → chunk-TLOT3CIB.js} +6 -6
  142. package/dist/{chunk-RTD3NZ4G.js.map → chunk-TLOT3CIB.js.map} +1 -1
  143. package/dist/{chunk-3NNQG5XP.js → chunk-VG6A54JE.js} +3 -3
  144. package/dist/{chunk-3NNQG5XP.js.map → chunk-VG6A54JE.js.map} +1 -1
  145. package/dist/{chunk-QL62CV5V.js → chunk-VRPAOMXW.js} +25 -12
  146. package/dist/chunk-VRPAOMXW.js.map +1 -0
  147. package/dist/{chunk-EFP5PJBY.cjs → chunk-WMFH3SH2.cjs} +136 -94
  148. package/dist/chunk-WMFH3SH2.cjs.map +1 -0
  149. package/dist/{chunk-S4EHZQFI.js → chunk-WYSQECWW.js} +10 -10
  150. package/dist/{chunk-S4EHZQFI.js.map → chunk-WYSQECWW.js.map} +1 -1
  151. package/dist/{chunk-ERKUFMCT.js → chunk-X2LYM3QK.js} +3 -3
  152. package/dist/{chunk-ERKUFMCT.js.map → chunk-X2LYM3QK.js.map} +1 -1
  153. package/dist/{chunk-OGZ6ROYD.js → chunk-X3RINDH6.js} +6 -5
  154. package/dist/chunk-X3RINDH6.js.map +1 -0
  155. package/dist/{chunk-NGYGE7QW.cjs → chunk-X47OINMY.cjs} +17 -17
  156. package/dist/{chunk-NGYGE7QW.cjs.map → chunk-X47OINMY.cjs.map} +1 -1
  157. package/dist/{chunk-245BXYGJ.cjs → chunk-XCXPPGJ3.cjs} +13 -13
  158. package/dist/{chunk-245BXYGJ.cjs.map → chunk-XCXPPGJ3.cjs.map} +1 -1
  159. package/dist/{chunk-2CFH32YO.cjs → chunk-XEERRXWL.cjs} +32 -4
  160. package/dist/chunk-XEERRXWL.cjs.map +1 -0
  161. package/dist/{chunk-NUGBBASK.js → chunk-XOHBH6NQ.js} +4 -4
  162. package/dist/{chunk-NUGBBASK.js.map → chunk-XOHBH6NQ.js.map} +1 -1
  163. package/dist/{chunk-OLPARCPM.cjs → chunk-XUFQVLBC.cjs} +5 -5
  164. package/dist/{chunk-OLPARCPM.cjs.map → chunk-XUFQVLBC.cjs.map} +1 -1
  165. package/dist/{chunk-5XQIAEWJ.cjs → chunk-YMBKVVDF.cjs} +22 -21
  166. package/dist/chunk-YMBKVVDF.cjs.map +1 -0
  167. package/dist/{chunk-DZZBC6UV.cjs → chunk-ZCCXXT7V.cjs} +12 -12
  168. package/dist/{chunk-DZZBC6UV.cjs.map → chunk-ZCCXXT7V.cjs.map} +1 -1
  169. package/dist/{chunk-EBKNX5RM.cjs → chunk-ZHEQYOTL.cjs} +53 -52
  170. package/dist/chunk-ZHEQYOTL.cjs.map +1 -0
  171. package/dist/docs/SKILL.md +1 -1
  172. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  173. package/dist/{observational-memory-ZS2HJPUO-472SI4TK.cjs → observational-memory-UMDC4VC2-3I52URYY.cjs} +26 -26
  174. package/dist/{observational-memory-ZS2HJPUO-472SI4TK.cjs.map → observational-memory-UMDC4VC2-3I52URYY.cjs.map} +1 -1
  175. package/dist/{observational-memory-ZS2HJPUO-2ZBP2HCP.js → observational-memory-UMDC4VC2-X5QMTUND.js} +3 -3
  176. package/dist/{observational-memory-ZS2HJPUO-2ZBP2HCP.js.map → observational-memory-UMDC4VC2-X5QMTUND.js.map} +1 -1
  177. package/dist/server/auth/helpers.d.ts +9 -1
  178. package/dist/server/auth/helpers.d.ts.map +1 -1
  179. package/dist/server/auth/index.cjs +18 -14
  180. package/dist/server/auth/index.js +1 -1
  181. package/dist/server/handlers/a2a.cjs +10 -10
  182. package/dist/server/handlers/a2a.js +1 -1
  183. package/dist/server/handlers/agent-builder.cjs +16 -16
  184. package/dist/server/handlers/agent-builder.js +1 -1
  185. package/dist/server/handlers/agent-versions.cjs +8 -8
  186. package/dist/server/handlers/agent-versions.js +1 -1
  187. package/dist/server/handlers/agents.cjs +38 -38
  188. package/dist/server/handlers/agents.d.ts.map +1 -1
  189. package/dist/server/handlers/agents.js +1 -1
  190. package/dist/server/handlers/auth.cjs +11 -11
  191. package/dist/server/handlers/auth.d.ts.map +1 -1
  192. package/dist/server/handlers/auth.js +1 -1
  193. package/dist/server/handlers/background-tasks.cjs +4 -4
  194. package/dist/server/handlers/background-tasks.js +1 -1
  195. package/dist/server/handlers/channels.cjs +5 -5
  196. package/dist/server/handlers/channels.js +1 -1
  197. package/dist/server/handlers/conversations.cjs +5 -5
  198. package/dist/server/handlers/conversations.d.ts.map +1 -1
  199. package/dist/server/handlers/conversations.js +1 -1
  200. package/dist/server/handlers/datasets.cjs +26 -26
  201. package/dist/server/handlers/datasets.js +1 -1
  202. package/dist/server/handlers/logs.cjs +4 -4
  203. package/dist/server/handlers/logs.js +1 -1
  204. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  205. package/dist/server/handlers/mcp-client-versions.js +1 -1
  206. package/dist/server/handlers/mcp.cjs +9 -9
  207. package/dist/server/handlers/mcp.d.ts.map +1 -1
  208. package/dist/server/handlers/mcp.js +1 -1
  209. package/dist/server/handlers/memory.cjs +27 -27
  210. package/dist/server/handlers/memory.d.ts.map +1 -1
  211. package/dist/server/handlers/memory.js +1 -1
  212. package/dist/server/handlers/observability-new-endpoints.cjs +31 -27
  213. package/dist/server/handlers/observability-new-endpoints.d.ts +315 -19
  214. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  215. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  216. package/dist/server/handlers/observability-shared.cjs +5 -5
  217. package/dist/server/handlers/observability-shared.d.ts +6 -0
  218. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  219. package/dist/server/handlers/observability-shared.js +1 -1
  220. package/dist/server/handlers/observability.cjs +39 -35
  221. package/dist/server/handlers/observability.js +2 -2
  222. package/dist/server/handlers/processor-providers.cjs +3 -3
  223. package/dist/server/handlers/processor-providers.js +1 -1
  224. package/dist/server/handlers/processors.cjs +4 -4
  225. package/dist/server/handlers/processors.js +1 -1
  226. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  227. package/dist/server/handlers/prompt-block-versions.js +1 -1
  228. package/dist/server/handlers/responses.cjs +4 -4
  229. package/dist/server/handlers/responses.d.ts.map +1 -1
  230. package/dist/server/handlers/responses.js +1 -1
  231. package/dist/server/handlers/responses.storage.cjs +8 -8
  232. package/dist/server/handlers/responses.storage.js +1 -1
  233. package/dist/server/handlers/schedules.cjs +28 -0
  234. package/dist/server/handlers/schedules.cjs.map +1 -0
  235. package/dist/server/handlers/schedules.d.ts +345 -0
  236. package/dist/server/handlers/schedules.d.ts.map +1 -0
  237. package/dist/server/handlers/schedules.js +3 -0
  238. package/dist/server/handlers/schedules.js.map +1 -0
  239. package/dist/server/handlers/scorer-versions.cjs +8 -8
  240. package/dist/server/handlers/scorer-versions.js +1 -1
  241. package/dist/server/handlers/scores.cjs +7 -7
  242. package/dist/server/handlers/scores.js +1 -1
  243. package/dist/server/handlers/stored-agents.cjs +7 -7
  244. package/dist/server/handlers/stored-agents.js +1 -1
  245. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  246. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  247. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  248. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  249. package/dist/server/handlers/stored-scorers.cjs +6 -6
  250. package/dist/server/handlers/stored-scorers.js +1 -1
  251. package/dist/server/handlers/stored-skills.cjs +7 -7
  252. package/dist/server/handlers/stored-skills.js +1 -1
  253. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  254. package/dist/server/handlers/stored-workspaces.js +1 -1
  255. package/dist/server/handlers/system.cjs +2 -2
  256. package/dist/server/handlers/system.js +1 -1
  257. package/dist/server/handlers/tool-providers.cjs +5 -5
  258. package/dist/server/handlers/tool-providers.js +1 -1
  259. package/dist/server/handlers/tools.cjs +6 -6
  260. package/dist/server/handlers/tools.d.ts.map +1 -1
  261. package/dist/server/handlers/tools.js +1 -1
  262. package/dist/server/handlers/utils.cjs +13 -9
  263. package/dist/server/handlers/utils.d.ts +15 -0
  264. package/dist/server/handlers/utils.d.ts.map +1 -1
  265. package/dist/server/handlers/utils.js +1 -1
  266. package/dist/server/handlers/vector.cjs +16 -16
  267. package/dist/server/handlers/vector.js +1 -1
  268. package/dist/server/handlers/voice.cjs +8 -8
  269. package/dist/server/handlers/voice.js +1 -1
  270. package/dist/server/handlers/workflows.cjs +24 -24
  271. package/dist/server/handlers/workflows.d.ts.map +1 -1
  272. package/dist/server/handlers/workflows.js +1 -1
  273. package/dist/server/handlers/workspace.cjs +26 -26
  274. package/dist/server/handlers/workspace.js +1 -1
  275. package/dist/server/handlers.cjs +40 -40
  276. package/dist/server/handlers.js +15 -15
  277. package/dist/server/schemas/index.cjs +232 -232
  278. package/dist/server/schemas/index.js +8 -8
  279. package/dist/server/schemas/schedules.d.ts +204 -0
  280. package/dist/server/schemas/schedules.d.ts.map +1 -0
  281. package/dist/server/server-adapter/index.cjs +391 -319
  282. package/dist/server/server-adapter/index.cjs.map +1 -1
  283. package/dist/server/server-adapter/index.d.ts +9 -0
  284. package/dist/server/server-adapter/index.d.ts.map +1 -1
  285. package/dist/server/server-adapter/index.js +112 -41
  286. package/dist/server/server-adapter/index.js.map +1 -1
  287. package/dist/server/server-adapter/routes/index.d.ts +19 -3
  288. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  289. package/dist/server/server-adapter/routes/observability.d.ts +156 -9
  290. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  291. package/dist/server/server-adapter/routes/route-builder.d.ts +15 -1
  292. package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
  293. package/dist/server/server-adapter/routes/schedules.d.ts +3 -0
  294. package/dist/server/server-adapter/routes/schedules.d.ts.map +1 -0
  295. package/package.json +6 -4
  296. package/dist/chunk-2CFH32YO.cjs.map +0 -1
  297. package/dist/chunk-2HVAN7FF.js.map +0 -1
  298. package/dist/chunk-4BSJHDYP.js.map +0 -1
  299. package/dist/chunk-53YFG5AY.js.map +0 -1
  300. package/dist/chunk-5XQIAEWJ.cjs.map +0 -1
  301. package/dist/chunk-6SBH6SYP.js.map +0 -1
  302. package/dist/chunk-AMC32S2M.js.map +0 -1
  303. package/dist/chunk-ARZ6W3O3.cjs.map +0 -1
  304. package/dist/chunk-DBPJYWAH.js.map +0 -1
  305. package/dist/chunk-DG5RFCGJ.cjs.map +0 -1
  306. package/dist/chunk-EBKNX5RM.cjs.map +0 -1
  307. package/dist/chunk-EFP5PJBY.cjs.map +0 -1
  308. package/dist/chunk-EPM6ILRW.js.map +0 -1
  309. package/dist/chunk-H6NJWTER.cjs.map +0 -1
  310. package/dist/chunk-IQA7HL2V.js.map +0 -1
  311. package/dist/chunk-JQUNK754.js.map +0 -1
  312. package/dist/chunk-JZNOIGOQ.js.map +0 -1
  313. package/dist/chunk-K6VEDPBD.js.map +0 -1
  314. package/dist/chunk-KI7TGMMV.cjs.map +0 -1
  315. package/dist/chunk-LY6Q36YN.cjs.map +0 -1
  316. package/dist/chunk-OGV23F3H.cjs.map +0 -1
  317. package/dist/chunk-OGZ6ROYD.js.map +0 -1
  318. package/dist/chunk-QL62CV5V.js.map +0 -1
  319. package/dist/chunk-RPMBPQNO.cjs.map +0 -1
  320. package/dist/chunk-TU7U5XUE.cjs.map +0 -1
  321. package/dist/chunk-UZRD3SEA.js.map +0 -1
  322. package/dist/chunk-XG2VRXG5.cjs.map +0 -1
  323. package/dist/chunk-Y2SA2JZT.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server/handlers/observability-shared.ts"],"names":["HTTPException"],"mappings":"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","file":"chunk-TU7U5XUE.cjs","sourcesContent":["import type { Mastra } from '@mastra/core';\nimport type { MastraCompositeStore, ObservabilityStorage } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\n\nexport const NEW_OBSERVABILITY_UPGRADE_MESSAGE =\n 'New observability endpoints require a newer @mastra/core. Please upgrade.';\n\n/** Retrieves MastraCompositeStore or throws 500 if unavailable. */\nexport function getStorage(mastra: Mastra): MastraCompositeStore {\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not available' });\n }\n return storage;\n}\n\n/** Retrieves the observability storage domain or throws 500 if unavailable. */\nexport async function getObservabilityStore(mastra: Mastra): Promise<ObservabilityStorage> {\n const storage = getStorage(mastra);\n const observability = await storage.getStore('observability');\n if (!observability) {\n throw new HTTPException(500, { message: 'Observability storage domain is not available' });\n }\n return observability;\n}\n\nexport interface RouteDetails {\n method: ServerRoute['method'];\n path: `/${string}`;\n summary: string;\n description: string;\n requiresPermission?: ServerRoute['requiresPermission'];\n}\n\nexport const NEW_ROUTE_DEFS = {\n LIST_LOGS: {\n method: 'GET',\n path: '/observability/logs',\n summary: 'List logs',\n description: 'Returns a paginated list of logs with optional filtering and sorting',\n },\n\n LIST_SCORES: {\n method: 'GET',\n path: '/observability/scores',\n summary: 'List scores',\n description: 'Returns a paginated list of scores with optional filtering and sorting',\n },\n\n CREATE_SCORE: {\n method: 'POST',\n path: '/observability/scores',\n summary: 'Create a score',\n description: 'Creates a single score record in the observability store',\n },\n\n GET_SCORE_AGGREGATE: {\n method: 'POST',\n path: '/observability/scores/aggregate',\n summary: 'Get score aggregate',\n description: 'Returns an aggregated score value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_BREAKDOWN: {\n method: 'POST',\n path: '/observability/scores/breakdown',\n summary: 'Get score breakdown',\n description: 'Returns score values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_TIME_SERIES: {\n method: 'POST',\n path: '/observability/scores/timeseries',\n summary: 'Get score time series',\n description: 'Returns score values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_SCORE_PERCENTILES: {\n method: 'POST',\n path: '/observability/scores/percentiles',\n summary: 'Get score percentiles',\n description: 'Returns percentile values for a score bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n LIST_FEEDBACK: {\n method: 'GET',\n path: '/observability/feedback',\n summary: 'List feedback',\n description: 'Returns a paginated list of feedback with optional filtering and sorting',\n },\n\n CREATE_FEEDBACK: {\n method: 'POST',\n path: '/observability/feedback',\n summary: 'Create feedback',\n description: 'Creates a single feedback record in the observability store',\n },\n\n GET_FEEDBACK_AGGREGATE: {\n method: 'POST',\n path: '/observability/feedback/aggregate',\n summary: 'Get feedback aggregate',\n description: 'Returns an aggregated numeric feedback value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_BREAKDOWN: {\n method: 'POST',\n path: '/observability/feedback/breakdown',\n summary: 'Get feedback breakdown',\n description: 'Returns numeric feedback values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_TIME_SERIES: {\n method: 'POST',\n path: '/observability/feedback/timeseries',\n summary: 'Get feedback time series',\n description: 'Returns numeric feedback values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_FEEDBACK_PERCENTILES: {\n method: 'POST',\n path: '/observability/feedback/percentiles',\n summary: 'Get feedback percentiles',\n description: 'Returns percentile values for numeric feedback bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_AGGREGATE: {\n method: 'POST',\n path: '/observability/metrics/aggregate',\n summary: 'Get metric aggregate',\n description: 'Returns an aggregated metric value with optional period-over-period comparison',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_BREAKDOWN: {\n method: 'POST',\n path: '/observability/metrics/breakdown',\n summary: 'Get metric breakdown',\n description: 'Returns metric values grouped by specified dimensions',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_TIME_SERIES: {\n method: 'POST',\n path: '/observability/metrics/timeseries',\n summary: 'Get metric time series',\n description: 'Returns metric values bucketed by time interval with optional grouping',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_PERCENTILES: {\n method: 'POST',\n path: '/observability/metrics/percentiles',\n summary: 'Get metric percentiles',\n description: 'Returns percentile values for a metric bucketed by time interval',\n requiresPermission: 'observability:read',\n },\n\n GET_METRIC_NAMES: {\n method: 'GET',\n path: '/observability/discovery/metric-names',\n summary: 'Get metric names',\n description: 'Returns distinct metric names with optional prefix filtering',\n },\n\n GET_METRIC_LABEL_KEYS: {\n method: 'GET',\n path: '/observability/discovery/metric-label-keys',\n summary: 'Get metric label keys',\n description: 'Returns distinct label keys for a given metric',\n },\n\n GET_METRIC_LABEL_VALUES: {\n method: 'GET',\n path: '/observability/discovery/metric-label-values',\n summary: 'Get label values',\n description: 'Returns distinct values for a given metric label key',\n },\n\n GET_ENTITY_TYPES: {\n method: 'GET',\n path: '/observability/discovery/entity-types',\n summary: 'Get entity types',\n description: 'Returns distinct entity types from observability data',\n },\n\n GET_ENTITY_NAMES: {\n method: 'GET',\n path: '/observability/discovery/entity-names',\n summary: 'Get entity names',\n description: 'Returns distinct entity names with optional type filtering',\n },\n\n GET_SERVICE_NAMES: {\n method: 'GET',\n path: '/observability/discovery/service-names',\n summary: 'Get service names',\n description: 'Returns distinct service names from observability data',\n },\n\n GET_ENVIRONMENTS: {\n method: 'GET',\n path: '/observability/discovery/environments',\n summary: 'Get environments',\n description: 'Returns distinct environments from observability data',\n },\n\n GET_TAGS: {\n method: 'GET',\n path: '/observability/discovery/tags',\n summary: 'Get tags',\n description: 'Returns distinct tags with optional entity type filtering',\n },\n} as const satisfies Record<string, RouteDetails>;\n\nexport type NewRoutesKey = keyof typeof NEW_ROUTE_DEFS;\nexport type NewRoutesDefinitions = (typeof NEW_ROUTE_DEFS)[NewRoutesKey];\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server/handlers/agents.ts"],"names":["agent","acc","key","editor","logger","cleanup","resetIdleTimer"],"mappings":"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","file":"chunk-UZRD3SEA.js","sourcesContent":["import { Agent, isDurableAgentLike } from '@mastra/core/agent';\nimport type { AgentModelManagerConfig, DurableAgentLike } from '@mastra/core/agent';\nimport { AGENT_STREAM_TOPIC } from '@mastra/core/agent/durable';\nimport type { VersionOverrides } from '@mastra/core/di';\nimport { mergeVersionOverrides } from '@mastra/core/di';\nimport { ErrorCategory, ErrorDomain, MastraError } from '@mastra/core/error';\nimport { PROVIDER_REGISTRY, parseModelString } from '@mastra/core/llm';\nimport type { ProviderConfig, SystemMessage } from '@mastra/core/llm';\nimport type {\n InputProcessor,\n OutputProcessor,\n InputProcessorOrWorkflow,\n OutputProcessorOrWorkflow,\n} from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { MASTRA_VERSIONS_KEY } from '@mastra/core/request-context';\nimport { zodToJsonSchema } from '@mastra/core/utils/zod-to-json';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\n\nimport { z } from 'zod/v4';\nimport { WORKSPACE_TOOLS, resolveToolConfig } from '../constants';\nimport type { WorkspaceToolName } from '../constants';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentIdPathParams,\n agentSkillPathParams,\n agentVersionQuerySchema,\n listAgentsResponseSchema,\n serializedAgentSchema,\n agentExecutionBodySchema,\n agentExecutionLegacyBodySchema,\n generateResponseSchema,\n streamResponseSchema,\n providersResponseSchema,\n approveToolCallBodySchema,\n declineToolCallBodySchema,\n toolCallResponseSchema,\n updateAgentModelBodySchema,\n reorderAgentModelListBodySchema,\n updateAgentModelInModelListBodySchema,\n modelManagementResponseSchema,\n modelConfigIdPathParams,\n enhanceInstructionsBodySchema,\n enhanceInstructionsResponseSchema,\n approveNetworkToolCallBodySchema,\n declineNetworkToolCallBodySchema,\n observeAgentBodySchema,\n observeAgentResponseSchema,\n streamUntilIdleBodySchema,\n resumeStreamBodySchema,\n} from '../schemas/agents';\nimport { createStoredAgentResponseSchema } from '../schemas/stored-agents';\nimport { getAgentSkillResponseSchema, skillDisambiguationQuerySchema } from '../schemas/workspace';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport type { Context } from '../types';\n\nimport { toSlug } from '../utils';\n\nimport { handleError } from './error';\nimport {\n sanitizeBody,\n validateBody,\n getEffectiveResourceId,\n getEffectiveThreadId,\n validateThreadOwnership,\n validateRunOwnership,\n} from './utils';\n\n/**\n * Merge incoming version overrides onto a RequestContext.\n * Reads any existing overrides, shallow-merges per category, and writes back.\n */\nfunction stashVersionOverrides(ctx: RequestContext, versions: VersionOverrides | undefined): void {\n if (!versions) return;\n const existingRaw = ctx.get(MASTRA_VERSIONS_KEY);\n const existing =\n existingRaw && typeof existingRaw === 'object' && !Array.isArray(existingRaw)\n ? (existingRaw as VersionOverrides)\n : undefined;\n const merged = mergeVersionOverrides(existing, versions);\n if (merged) {\n ctx.set(MASTRA_VERSIONS_KEY, merged);\n }\n}\n\n/**\n * Checks if a provider has its required API key environment variable(s) configured.\n * Handles provider IDs with suffixes (e.g., \"openai.chat\" -> \"openai\").\n * Also handles custom gateway providers that are stored with gateway prefix (e.g., \"acme/acme-openai\").\n * @param providerId - The provider identifier (may include a suffix like \".chat\" or be from a custom gateway)\n * @param customProviders - Optional record of custom gateway providers to check\n * @returns true if all required environment variables are set, false otherwise\n */\nexport function isProviderConnected(providerId: string, customProviders?: Record<string, ProviderConfig>): boolean {\n // Clean provider ID (e.g., \"openai.chat\" -> \"openai\")\n const cleanId = providerId.includes('.') ? providerId.split('.')[0]! : providerId;\n\n // First, try direct lookup in static registry\n let provider: ProviderConfig | undefined = PROVIDER_REGISTRY[cleanId as keyof typeof PROVIDER_REGISTRY];\n\n // If not found, check custom providers\n if (!provider && customProviders) {\n provider = customProviders[cleanId];\n }\n\n // If not found and doesn't contain a slash, check if it exists with a gateway prefix\n // This handles custom gateway providers stored as \"gateway/provider\" in the registry\n if (!provider && !cleanId.includes('/')) {\n // Search for a provider ID that matches the pattern \"*/cleanId\"\n const registryKeys = Object.keys(PROVIDER_REGISTRY);\n const matchingKey = registryKeys.find(key => {\n // Check if the key matches the pattern \"gateway/providerId\"\n const parts = key.split('/');\n return parts.length === 2 && parts[1] === cleanId;\n });\n\n if (matchingKey) {\n provider = PROVIDER_REGISTRY[matchingKey as keyof typeof PROVIDER_REGISTRY];\n }\n\n if (!provider && customProviders) {\n const customMatchingKey = Object.keys(customProviders).find(key => {\n const parts = key.split('/');\n return parts.length === 2 && parts[1] === cleanId;\n });\n if (customMatchingKey) {\n provider = customProviders[customMatchingKey];\n }\n }\n }\n\n if (!provider) return false;\n\n const envVars = Array.isArray(provider.apiKeyEnvVar) ? provider.apiKeyEnvVar : [provider.apiKeyEnvVar];\n return envVars.every(envVar => !!process.env[envVar]);\n}\n\nexport interface SerializedProcessor {\n id: string;\n name?: string;\n}\n\nexport interface SerializedSkill {\n name: string;\n description: string;\n license?: string;\n path: string;\n}\n\nexport interface SerializedTool {\n id: string;\n description?: string;\n inputSchema?: string;\n outputSchema?: string;\n requestContextSchema?: string;\n requireApproval?: boolean;\n}\n\ninterface SerializedToolInput {\n id?: string;\n description?: string;\n inputSchema?: { jsonSchema?: unknown } | unknown;\n outputSchema?: { jsonSchema?: unknown } | unknown;\n requestContextSchema?: { jsonSchema?: unknown } | unknown;\n}\n\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nexport interface SerializedWorkflow {\n name: string;\n steps?: Record<string, { id: string; description?: string }>;\n}\n\nexport interface SerializedAgent {\n name: string;\n description?: string;\n instructions?: SystemMessage;\n tools: Record<string, SerializedTool>;\n agents: Record<string, SerializedAgentDefinition>;\n workflows: Record<string, SerializedWorkflow>;\n skills: SerializedSkill[];\n workspaceTools: string[];\n /** Browser tool names available to this agent (if browser is configured) */\n browserTools: string[];\n /** ID of the agent's workspace (if configured) */\n workspaceId?: string;\n inputProcessors: SerializedProcessor[];\n outputProcessors: SerializedProcessor[];\n provider?: string;\n modelId?: string;\n modelVersion?: string;\n modelList?: Array<\n Omit<AgentModelManagerConfig, 'model'> & {\n model: {\n modelId: string;\n provider: string;\n modelVersion: string;\n };\n }\n >;\n // We can't use the true types here because they are not serializable\n defaultOptions?: Record<string, unknown>;\n defaultGenerateOptionsLegacy?: Record<string, unknown>;\n defaultStreamOptionsLegacy?: Record<string, unknown>;\n /** Serialized JSON schema for request context validation */\n requestContextSchema?: string;\n source?: 'code' | 'stored';\n status?: 'draft' | 'published' | 'archived';\n activeVersionId?: string;\n hasDraft?: boolean;\n}\n\nexport interface SerializedAgentWithId extends SerializedAgent {\n id: string;\n}\n\nexport async function getSerializedAgentTools(\n tools: Record<string, SerializedToolInput>,\n partial: boolean = false,\n): Promise<Record<string, SerializedTool>> {\n return Object.entries(tools || {}).reduce<Record<string, SerializedTool>>((acc, [key, tool]) => {\n const toolId = tool.id ?? `tool-${key}`;\n\n let inputSchemaForReturn: string | undefined = undefined;\n let outputSchemaForReturn: string | undefined = undefined;\n let requestContextSchemaForReturn: string | undefined = undefined;\n\n // Only process schemas if not in partial mode\n if (!partial) {\n try {\n const inputSchema = schemaToJsonSchema(\n resolveLazySchema(tool.inputSchema) as PublicSchema<unknown> | undefined,\n );\n if (inputSchema !== undefined) {\n inputSchemaForReturn = stringify(inputSchema);\n }\n\n const outputSchema = schemaToJsonSchema(\n resolveLazySchema(tool.outputSchema) as PublicSchema<unknown> | undefined,\n );\n if (outputSchema !== undefined) {\n outputSchemaForReturn = stringify(outputSchema);\n }\n\n const requestContextSchema = schemaToJsonSchema(\n resolveLazySchema(tool.requestContextSchema) as PublicSchema<unknown> | undefined,\n );\n if (requestContextSchema !== undefined) {\n requestContextSchemaForReturn = stringify(requestContextSchema);\n }\n } catch (error) {\n console.error(`Error getting serialized tool`, {\n toolId: tool.id,\n error,\n });\n }\n }\n\n acc[key] = {\n ...tool,\n id: toolId,\n inputSchema: inputSchemaForReturn,\n outputSchema: outputSchemaForReturn,\n requestContextSchema: requestContextSchemaForReturn,\n };\n return acc;\n }, {});\n}\n\nexport function getSerializedProcessors(\n processors: (InputProcessor | OutputProcessor | InputProcessorOrWorkflow | OutputProcessorOrWorkflow)[],\n): SerializedProcessor[] {\n return processors.map(processor => {\n // Processors are class instances or objects with a name property\n // Use the name property if available, otherwise fall back to constructor name\n return {\n id: processor.id,\n name: processor.name || processor.constructor.name,\n };\n });\n}\n\n/**\n * Extract skills from agent's workspace.\n * Uses agent.getWorkspace() to get the workspace and then workspace.skills.list().\n */\nexport async function getSerializedSkillsFromAgent(\n agent: Agent,\n requestContext?: RequestContext,\n): Promise<SerializedSkill[]> {\n try {\n const workspace = await agent.getWorkspace({ requestContext });\n if (!workspace?.skills) {\n return [];\n }\n\n const skillsList = await workspace.skills.list();\n return skillsList.map(skill => ({\n name: skill.name,\n description: skill.description,\n license: skill.license,\n path: skill.path,\n }));\n } catch {\n return [];\n }\n}\n\n/**\n * Get the list of available workspace tools for an agent.\n *\n * Tries to use core's `createWorkspaceTools` for an accurate tool list that\n * respects runtime availability (e.g. `@ast-grep/napi` for ast_edit).\n * Falls back to inlined config-based logic for older core versions that don't\n * export `createWorkspaceTools`.\n */\nexport async function getWorkspaceToolsFromAgent(agent: Agent, requestContext?: RequestContext): Promise<string[]> {\n try {\n const workspace = await agent.getWorkspace({ requestContext });\n if (!workspace) {\n return [];\n }\n\n // Try core's createWorkspaceTools — it checks runtime dep availability\n try {\n const mod = await import('@mastra/core/workspace');\n if (typeof mod.createWorkspaceTools === 'function') {\n return Object.keys(await mod.createWorkspaceTools(workspace));\n }\n } catch {\n // Older core version without workspace module — fall through\n }\n\n // Fallback: inlined logic for older core versions.\n // Does not include AST_EDIT — only available via createWorkspaceTools above.\n const tools: string[] = [];\n const isReadOnly = workspace.filesystem?.readOnly ?? false;\n const toolsConfig = workspace.getToolsConfig();\n\n // Build context for dynamic config resolution\n const configContext = {\n workspace,\n requestContext: requestContext ? Object.fromEntries(requestContext.entries()) : {},\n };\n\n // Helper to check if a tool is enabled\n const isEnabled = async (toolName: WorkspaceToolName) => {\n return (await resolveToolConfig(toolsConfig, toolName, configContext)).enabled;\n };\n\n // Filesystem tools\n if (workspace.filesystem) {\n // Read tools\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.READ_FILE)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.READ_FILE);\n }\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.LIST_FILES);\n }\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.FILE_STAT)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.FILE_STAT);\n }\n\n // Write tools only if not readonly\n if (!isReadOnly) {\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE);\n }\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE);\n }\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.DELETE)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.DELETE);\n }\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.MKDIR)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.MKDIR);\n }\n }\n\n // Grep tool (filesystem-based, not BM25/vector)\n if (await isEnabled(WORKSPACE_TOOLS.FILESYSTEM.GREP)) {\n tools.push(WORKSPACE_TOOLS.FILESYSTEM.GREP);\n }\n }\n\n // Search tools (available if BM25 or vector search is enabled)\n if (workspace.canBM25 || workspace.canVector) {\n if (await isEnabled(WORKSPACE_TOOLS.SEARCH.SEARCH)) {\n tools.push(WORKSPACE_TOOLS.SEARCH.SEARCH);\n }\n if (!isReadOnly && (await isEnabled(WORKSPACE_TOOLS.SEARCH.INDEX))) {\n tools.push(WORKSPACE_TOOLS.SEARCH.INDEX);\n }\n }\n\n // Sandbox tools\n if (workspace.sandbox) {\n if (workspace.sandbox.executeCommand && (await isEnabled(WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND))) {\n tools.push(WORKSPACE_TOOLS.SANDBOX.EXECUTE_COMMAND);\n }\n }\n\n return tools;\n } catch {\n return [];\n }\n}\n\n/**\n * Get the list of browser tool names for an agent.\n * Returns the tool names from the agent's browser provider if configured.\n */\nexport function getBrowserToolsFromAgent(agent: Agent, onError?: (error: unknown) => void): string[] {\n try {\n const browser = agent.browser;\n if (!browser) {\n return [];\n }\n return Object.keys(browser.getTools());\n } catch (error) {\n onError?.(error);\n return [];\n }\n}\n\nfunction createBrowserToolsErrorLogger(\n logger: ReturnType<Context['mastra']['getLogger']>,\n agentId: string,\n): (error: unknown) => void {\n return error => logger.warn('Failed to get browser tools for agent', { agentId, error });\n}\n\ninterface SerializedAgentDefinition {\n id: string;\n name: string;\n}\n\nasync function getSerializedAgentDefinition({\n agent,\n requestContext,\n logger,\n}: {\n agent: Agent;\n requestContext: RequestContext;\n logger?: ReturnType<Context['mastra']['getLogger']>;\n}): Promise<Record<string, SerializedAgentDefinition>> {\n let serializedAgentAgents: Record<string, SerializedAgentDefinition> = {};\n\n if ('listAgents' in agent) {\n try {\n const agents = await agent.listAgents({ requestContext });\n serializedAgentAgents = Object.entries(agents || {}).reduce<Record<string, SerializedAgentDefinition>>(\n (acc, [key, agent]) => {\n return {\n ...acc,\n [key]: { id: agent.id, name: agent.name },\n };\n },\n {},\n );\n } catch (error) {\n logger?.warn('Error getting sub-agents for agent', { agentName: agent.name, error });\n }\n }\n return serializedAgentAgents;\n}\n\nasync function formatAgentList({\n id,\n mastra,\n agent,\n requestContext,\n partial = false,\n}: {\n id: string;\n mastra: Context['mastra'];\n agent: Agent;\n requestContext: RequestContext;\n partial?: boolean;\n}): Promise<SerializedAgentWithId> {\n const logger = mastra.getLogger();\n\n const description = agent.getDescription();\n\n // Per-agent dynamic getters can throw (e.g. when their callbacks destructure\n // fields from `requestContext` that aren't present under the active preset).\n // Wrap each independent getter so a single failure doesn't abort the whole\n // serialization — the agent will still be listed with safe defaults, and the\n // failure is logged so the user can see what went wrong in `mastra dev`.\n let instructions: SystemMessage | undefined;\n try {\n instructions = await agent.getInstructions({ requestContext });\n } catch (error) {\n logger.warn('Error getting instructions for agent', { agentName: agent.name, error });\n }\n\n let tools: Record<string, SerializedToolInput> = {};\n try {\n tools = await agent.listTools({ requestContext });\n } catch (error) {\n logger.warn('Error listing tools for agent', { agentName: agent.name, error });\n }\n\n let llm: Awaited<ReturnType<Agent['getLLM']>> | undefined;\n try {\n llm = await agent.getLLM({ requestContext });\n } catch (error) {\n logger.warn('Error getting LLM for agent', { agentName: agent.name, error });\n }\n\n let defaultGenerateOptionsLegacy: Awaited<ReturnType<Agent['getDefaultGenerateOptionsLegacy']>> | undefined;\n try {\n defaultGenerateOptionsLegacy = await agent.getDefaultGenerateOptionsLegacy({ requestContext });\n } catch (error) {\n logger.warn('Error getting default generate options for agent', { agentName: agent.name, error });\n }\n\n let defaultStreamOptionsLegacy: Awaited<ReturnType<Agent['getDefaultStreamOptionsLegacy']>> | undefined;\n try {\n defaultStreamOptionsLegacy = await agent.getDefaultStreamOptionsLegacy({ requestContext });\n } catch (error) {\n logger.warn('Error getting default stream options for agent', { agentName: agent.name, error });\n }\n\n let defaultOptions: Awaited<ReturnType<Agent['getDefaultOptions']>> | undefined;\n try {\n defaultOptions = await agent.getDefaultOptions({ requestContext });\n } catch (error) {\n logger.warn('Error getting default options for agent', { agentName: agent.name, error });\n }\n\n const serializedAgentTools = await getSerializedAgentTools(tools, partial);\n\n let serializedAgentWorkflows: Record<\n string,\n { name: string; steps?: Record<string, { id: string; description?: string }> }\n > = {};\n\n if ('listWorkflows' in agent) {\n try {\n const workflows = await agent.listWorkflows({ requestContext });\n serializedAgentWorkflows = Object.entries(workflows || {}).reduce<\n Record<string, { name: string; steps?: Record<string, { id: string; description?: string }> }>\n >((acc, [key, workflow]) => {\n return {\n ...acc,\n [key]: {\n name: workflow.name || 'Unnamed workflow',\n },\n };\n }, {});\n } catch (error) {\n logger.error('Error getting workflows for agent', { agentName: agent.name, error });\n }\n }\n\n const serializedAgentAgents = await getSerializedAgentDefinition({ agent, requestContext, logger });\n\n // Get and serialize only user-configured processors (excludes memory-derived processors)\n // This ensures the UI only shows processors explicitly configured by the user\n let serializedInputProcessors: ReturnType<typeof getSerializedProcessors> = [];\n let serializedOutputProcessors: ReturnType<typeof getSerializedProcessors> = [];\n try {\n const configuredProcessorWorkflows = await agent.getConfiguredProcessorWorkflows();\n const inputProcessorWorkflows = configuredProcessorWorkflows.filter(w => w.id.endsWith('-input-processor'));\n const outputProcessorWorkflows = configuredProcessorWorkflows.filter(w => w.id.endsWith('-output-processor'));\n serializedInputProcessors = getSerializedProcessors(inputProcessorWorkflows);\n serializedOutputProcessors = getSerializedProcessors(outputProcessorWorkflows);\n } catch (error) {\n logger.error('Error getting configured processors for agent', { agentName: agent.name, error });\n }\n\n // Extract skills, workspace tools, and workspaceId from agent's workspace\n const serializedSkills = await getSerializedSkillsFromAgent(agent, requestContext);\n const workspaceTools = await getWorkspaceToolsFromAgent(agent, requestContext);\n const browserTools = getBrowserToolsFromAgent(agent, createBrowserToolsErrorLogger(logger, agent.id));\n\n // Get workspaceId if agent has a workspace\n let workspaceId: string | undefined;\n try {\n const workspace = await agent.getWorkspace({ requestContext });\n workspaceId = workspace?.id;\n } catch {\n // Agent doesn't have a workspace or can't access it\n }\n\n const model = llm?.getModel();\n\n let models: Awaited<ReturnType<Agent['getModelList']>> | undefined;\n try {\n models = await agent.getModelList(requestContext);\n } catch (error) {\n logger.warn('Error getting model list for agent', { agentName: agent.name, error });\n }\n const modelList = models?.map(md => ({\n ...md,\n model: {\n modelId: md.model.modelId,\n provider: md.model.provider,\n modelVersion: md.model.specificationVersion,\n },\n }));\n\n // Serialize requestContextSchema if present\n let serializedRequestContextSchema: string | undefined;\n if (agent.requestContextSchema) {\n try {\n serializedRequestContextSchema = stringify(zodToJsonSchema(agent.requestContextSchema));\n } catch (error) {\n logger.error('Error serializing requestContextSchema for agent', { agentName: agent.name, error });\n }\n }\n\n return {\n id: agent.id || id,\n name: agent.name,\n description,\n instructions,\n agents: serializedAgentAgents,\n tools: serializedAgentTools,\n workflows: serializedAgentWorkflows,\n skills: serializedSkills,\n workspaceTools,\n browserTools,\n workspaceId,\n inputProcessors: serializedInputProcessors,\n outputProcessors: serializedOutputProcessors,\n provider:\n typeof agent.model === 'string'\n ? (parseModelString(agent.model).provider ?? llm?.getProvider())\n : llm?.getProvider(),\n modelId: typeof agent.model === 'string' ? parseModelString(agent.model).modelId : llm?.getModelId(),\n modelVersion: model?.specificationVersion,\n defaultOptions,\n modelList,\n defaultGenerateOptionsLegacy,\n defaultStreamOptionsLegacy,\n requestContextSchema: serializedRequestContextSchema,\n source: (agent as any).source ?? 'code',\n ...(agent.toRawConfig()?.status\n ? { status: agent.toRawConfig()!.status as 'draft' | 'published' | 'archived' }\n : {}),\n ...(agent.toRawConfig()?.activeVersionId\n ? { activeVersionId: agent.toRawConfig()!.activeVersionId as string }\n : {}),\n hasDraft: !!(\n agent.toRawConfig()?.resolvedVersionId &&\n agent.toRawConfig()?.activeVersionId &&\n agent.toRawConfig()!.resolvedVersionId !== agent.toRawConfig()!.activeVersionId\n ),\n };\n}\n\nexport function extractVersionOptions(\n requestContext?: RequestContext,\n bodyRequestContext?: Record<string, unknown>,\n): { versionId: string } | undefined {\n // First check the server-populated RequestContext (e.g. from auth middleware)\n const agentVersionId = requestContext?.get('agentVersionId');\n if (typeof agentVersionId === 'string' && agentVersionId) {\n return { versionId: agentVersionId };\n }\n // Fall back to body requestContext — the client may send agentVersionId there\n // (e.g. the playground editor sends it so the correct stored version is loaded)\n const bodyVersionId = bodyRequestContext?.agentVersionId;\n if (typeof bodyVersionId === 'string' && bodyVersionId) {\n return { versionId: bodyVersionId };\n }\n return undefined;\n}\n\nexport async function getAgentFromSystem({\n mastra,\n agentId,\n versionOptions,\n requestContext,\n}: {\n mastra: Context['mastra'];\n agentId: string;\n versionOptions?: { status?: 'draft' | 'published' } | { versionId: string };\n requestContext?: RequestContext;\n}) {\n const logger = mastra.getLogger();\n\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n\n let agent;\n\n try {\n agent = mastra.getAgentById(agentId);\n } catch (error) {\n logger.debug('Error getting agent from mastra, searching agents for agent', error);\n }\n\n if (!agent) {\n logger.debug('Agent not found, looking through sub-agents', { agentId });\n const agents = mastra.listAgents();\n if (Object.keys(agents || {}).length) {\n for (const [_, ag] of Object.entries(agents)) {\n try {\n const subAgents = await ag.listAgents();\n\n if (subAgents[agentId]) {\n agent = subAgents[agentId];\n break;\n }\n } catch (error) {\n logger.debug('Error getting agent from agent', error);\n }\n }\n }\n }\n\n // If a code-defined agent was found, apply stored config overrides (if any)\n if (agent && mastra.getEditor) {\n try {\n const editorAgent = mastra.getEditor()?.agent;\n if (editorAgent) {\n agent = await editorAgent.applyStoredOverrides(\n agent,\n versionOptions ?? { status: 'published' },\n requestContext,\n );\n }\n } catch (error) {\n logger.debug('Error applying stored overrides to code agent', error);\n }\n }\n\n // If still not found, try to get stored agent\n if (!agent) {\n logger.debug('Agent not found in code-defined agents, looking in stored agents', { agentId });\n try {\n agent = (await mastra.getEditor()?.agent.getById(agentId, versionOptions)) ?? null;\n } catch (error) {\n logger.debug('Error getting stored agent', error);\n }\n }\n\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n\n return agent;\n}\n\nasync function formatAgent({\n mastra,\n agent,\n requestContext,\n isStudio,\n}: {\n mastra: Context['mastra'];\n agent: Agent;\n requestContext: RequestContext;\n isStudio: boolean;\n}): Promise<SerializedAgent> {\n const description = agent.getDescription();\n\n const tools = await agent.listTools({ requestContext });\n const serializedAgentTools = await getSerializedAgentTools(tools);\n\n let serializedAgentWorkflows: Record<\n string,\n { name: string; steps: Record<string, { id: string; description?: string }> }\n > = {};\n\n if ('listWorkflows' in agent) {\n const logger = mastra.getLogger();\n try {\n const workflows = await agent.listWorkflows({ requestContext });\n\n serializedAgentWorkflows = Object.entries(workflows || {}).reduce<\n Record<string, { name: string; steps: Record<string, { id: string; description?: string }> }>\n >((acc, [key, workflow]) => {\n return {\n ...acc,\n [key]: {\n name: workflow.name || 'Unnamed workflow',\n steps: Object.entries(workflow.steps).reduce<Record<string, { id: string; description?: string }>>(\n (acc, [key, step]) => {\n return {\n ...acc,\n [key]: {\n id: step.id,\n description: step.description,\n },\n };\n },\n {},\n ),\n },\n };\n }, {});\n } catch (error) {\n logger.error('Error getting workflows for agent', { agentName: agent.name, error });\n }\n }\n\n let proxyRequestContext = requestContext;\n if (isStudio) {\n proxyRequestContext = new Proxy(requestContext, {\n get(target, prop) {\n if (prop === 'get') {\n return function (key: string) {\n const value = target.get(key);\n return value ?? `<${key}>`;\n };\n }\n return Reflect.get(target, prop);\n },\n });\n }\n\n const instructions = await agent.getInstructions({ requestContext: proxyRequestContext });\n const llm = await agent.getLLM({ requestContext });\n const defaultGenerateOptionsLegacy = await agent.getDefaultGenerateOptionsLegacy({\n requestContext: proxyRequestContext,\n });\n const defaultStreamOptionsLegacy = await agent.getDefaultStreamOptionsLegacy({ requestContext: proxyRequestContext });\n const defaultOptions = await agent.getDefaultOptions({ requestContext: proxyRequestContext });\n\n const model = llm?.getModel();\n const models = await agent.getModelList(requestContext);\n const modelList = models?.map(md => ({\n ...md,\n model: {\n modelId: md.model.modelId,\n provider: md.model.provider,\n modelVersion: md.model.specificationVersion,\n },\n }));\n\n const serializedAgentAgents = await getSerializedAgentDefinition({ agent, requestContext: proxyRequestContext });\n\n // Get and serialize only user-configured processors (excludes memory-derived processors)\n // This ensures the UI only shows processors explicitly configured by the user\n let serializedInputProcessors: ReturnType<typeof getSerializedProcessors> = [];\n let serializedOutputProcessors: ReturnType<typeof getSerializedProcessors> = [];\n try {\n const configuredProcessorWorkflows = await agent.getConfiguredProcessorWorkflows();\n const inputProcessorWorkflows = configuredProcessorWorkflows.filter(w => w.id.endsWith('-input-processor'));\n const outputProcessorWorkflows = configuredProcessorWorkflows.filter(w => w.id.endsWith('-output-processor'));\n serializedInputProcessors = getSerializedProcessors(inputProcessorWorkflows);\n serializedOutputProcessors = getSerializedProcessors(outputProcessorWorkflows);\n } catch (error) {\n mastra.getLogger().error('Error getting configured processors for agent', { agentName: agent.name, error });\n }\n\n // Extract skills, workspace tools, and workspaceId from agent's workspace\n const serializedSkills = await getSerializedSkillsFromAgent(agent, proxyRequestContext);\n const workspaceTools = await getWorkspaceToolsFromAgent(agent, proxyRequestContext);\n const browserTools = getBrowserToolsFromAgent(agent, createBrowserToolsErrorLogger(mastra.getLogger(), agent.id));\n\n // Get workspaceId if agent has a workspace\n let workspaceId: string | undefined;\n try {\n const workspace = await agent.getWorkspace({ requestContext: proxyRequestContext });\n workspaceId = workspace?.id;\n } catch {\n // Agent doesn't have a workspace or can't access it\n }\n\n // Serialize requestContextSchema if present\n let serializedRequestContextSchema: string | undefined;\n if (agent.requestContextSchema) {\n try {\n serializedRequestContextSchema = stringify(zodToJsonSchema(agent.requestContextSchema));\n } catch (error) {\n mastra.getLogger().error('Error serializing requestContextSchema for agent', { agentName: agent.name, error });\n }\n }\n\n return {\n name: agent.name,\n description,\n instructions,\n tools: serializedAgentTools,\n agents: serializedAgentAgents,\n workflows: serializedAgentWorkflows,\n skills: serializedSkills,\n workspaceTools,\n browserTools,\n workspaceId,\n inputProcessors: serializedInputProcessors,\n outputProcessors: serializedOutputProcessors,\n provider:\n typeof agent.model === 'string'\n ? (parseModelString(agent.model).provider ?? llm?.getProvider())\n : llm?.getProvider(),\n modelId: typeof agent.model === 'string' ? parseModelString(agent.model).modelId : llm?.getModelId(),\n modelVersion: model?.specificationVersion,\n modelList,\n defaultOptions,\n defaultGenerateOptionsLegacy,\n defaultStreamOptionsLegacy,\n requestContextSchema: serializedRequestContextSchema,\n source: (agent as any).source ?? 'code',\n ...(agent.toRawConfig()?.status\n ? { status: agent.toRawConfig()!.status as 'draft' | 'published' | 'archived' }\n : {}),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_AGENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/agents',\n responseType: 'json',\n queryParamSchema: z.object({\n partial: z.string().optional(),\n }),\n responseSchema: listAgentsResponseSchema,\n summary: 'List all agents',\n description: 'Returns a list of all available agents in the system (both code-defined and stored)',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:read',\n handler: async ({ mastra, requestContext, partial }) => {\n try {\n const codeAgents = mastra.listAgents();\n\n const isPartial = partial === 'true';\n\n // Apply stored config overrides to code-defined agents before serializing\n const editor = mastra.getEditor?.();\n const logger = mastra.getLogger();\n // Use `Promise.allSettled` so that one agent's catastrophic serialization\n // failure (e.g. an unhandled throw from a user-supplied dynamic config\n // callback) cannot reject the entire response. Failing agents are logged\n // and skipped, matching the existing stored-agent loop below.\n const serializedCodeAgentsMap = await Promise.allSettled(\n Object.entries(codeAgents).map(async ([id, agent]) => {\n let mergedAgent = agent;\n if (editor) {\n try {\n mergedAgent = await editor.agent.applyStoredOverrides(agent, undefined, requestContext);\n } catch {\n // If overrides fail, use the original code agent\n }\n }\n return formatAgentList({ id, mastra, agent: mergedAgent, requestContext, partial: isPartial });\n }),\n );\n\n const serializedAgents: Record<string, SerializedAgentWithId> = {};\n for (let i = 0; i < serializedCodeAgentsMap.length; i++) {\n const settled = serializedCodeAgentsMap[i]!;\n if (settled.status === 'fulfilled') {\n const { id, ...rest } = settled.value;\n serializedAgents[id] = { id, ...rest };\n } else {\n const agentId = Object.keys(codeAgents)[i];\n logger.warn('Failed to serialize agent', { agentId, error: settled.reason });\n }\n }\n\n // Also fetch and include stored agents\n try {\n const editor = mastra.getEditor();\n\n let storedAgentsResult;\n try {\n storedAgentsResult = await editor?.agent.list();\n } catch (error) {\n console.error('Error listing stored agents:', error);\n storedAgentsResult = null;\n }\n\n if (storedAgentsResult?.agents) {\n // Process each agent individually to avoid one bad agent breaking the whole list\n for (const storedAgentConfig of storedAgentsResult.agents) {\n try {\n const agent = await editor?.agent.getById(storedAgentConfig.id, { status: 'draft' });\n if (!agent) continue;\n\n const serialized = await formatAgentList({\n id: agent.id,\n mastra,\n agent,\n requestContext,\n partial: isPartial,\n });\n\n // Don't overwrite code-defined agents with same ID\n if (!serializedAgents[serialized.id]) {\n serializedAgents[serialized.id] = serialized;\n }\n } catch (agentError) {\n // Log but continue with other agents\n const logger = mastra.getLogger();\n logger.warn('Failed to serialize stored agent', { agentId: storedAgentConfig.id, error: agentError });\n }\n }\n }\n } catch (storageError) {\n // Storage not configured or doesn't support agents - log and ignore\n const logger = mastra.getLogger();\n logger.debug('Could not fetch stored agents', { error: storageError });\n }\n\n return serializedAgents;\n } catch (error) {\n return handleError(error, 'Error getting agents');\n }\n },\n});\n\nexport const GET_AGENT_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n queryParamSchema: agentVersionQuerySchema,\n responseSchema: serializedAgentSchema,\n summary: 'Get agent by ID',\n description:\n 'Returns details for a specific agent including configuration, tools, and memory settings. Use query params to control which stored config version is used for overrides: ?status=published (active version, default), ?status=draft (latest draft), or ?versionId=<id> (specific version). Use either status or versionId, not both.',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:read',\n handler: async ({ agentId, mastra, requestContext, status, versionId }) => {\n try {\n const versionOptions = versionId ? { versionId } : status ? { status } : undefined;\n const agent = await getAgentFromSystem({ mastra, agentId, versionOptions, requestContext });\n const isStudio = false; // TODO: Get from context if needed\n const result = await formatAgent({\n mastra,\n agent,\n requestContext,\n isStudio,\n });\n return result;\n } catch (error) {\n return handleError(error, 'Error getting agent');\n }\n },\n});\n\n/**\n * POST /agents/:agentId/clone - Clone an agent to a stored agent\n */\nexport const CLONE_AGENT_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/clone',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: z.object({\n newId: z.string().optional().describe('ID for the cloned agent. If not provided, derived from agent ID.'),\n newName: z.string().optional().describe('Name for the cloned agent. Defaults to \"{name} (Clone)\".'),\n metadata: z.record(z.string(), z.unknown()).optional(),\n authorId: z.string().optional(),\n }),\n responseSchema: createStoredAgentResponseSchema,\n summary: 'Clone agent',\n description: 'Clones a code-defined or stored agent to a new stored agent in the database',\n tags: ['Agents'],\n requiresAuth: true,\n handler: async ({ agentId, mastra, newId, newName, metadata, authorId, requestContext }) => {\n try {\n const editor = mastra.getEditor();\n if (!editor) {\n return handleError(new Error('Editor is not configured on the Mastra instance'), 'Error cloning agent');\n }\n\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n const cloneId = toSlug(newId || `${agentId}-clone`);\n\n const result = await editor.agent.clone(agent, {\n newId: cloneId,\n newName,\n metadata,\n authorId,\n requestContext,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error cloning agent');\n }\n },\n});\n\nexport const GENERATE_AGENT_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/generate',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: generateResponseSchema,\n summary: 'Generate agent response',\n description: 'Executes an agent with the provided messages and returns the complete response',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:execute',\n handler: async ({ agentId, mastra, abortSignal, requestContext: serverRequestContext, ...params }) => {\n try {\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const { messages, memory: memoryOption, requestContext: bodyRequestContext, versions, ...rest } = params;\n\n validateBody({ messages });\n\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(\n serverRequestContext,\n bodyRequestContext as Record<string, unknown> | undefined,\n ),\n requestContext: serverRequestContext,\n });\n\n // Merge body's requestContext values into the server's RequestContext instance\n // Only set values that don't already exist on the server context to prevent\n // clients from overwriting server-populated auth/tenant values\n if (bodyRequestContext && typeof bodyRequestContext === 'object') {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n }\n\n // Stash version overrides from body onto requestContext for sub-agent resolution\n stashVersionOverrides(serverRequestContext, versions);\n\n // Authorization: apply context overrides to memory option if present\n let authorizedMemoryOption = memoryOption;\n if (memoryOption) {\n const clientThreadId = typeof memoryOption.thread === 'string' ? memoryOption.thread : memoryOption.thread?.id;\n\n const effectiveResourceId = getEffectiveResourceId(serverRequestContext, memoryOption.resource);\n const effectiveThreadId = getEffectiveThreadId(serverRequestContext, clientThreadId);\n\n // Validate thread ownership if accessing an existing thread\n if (effectiveThreadId && effectiveResourceId) {\n const memoryInstance = await agent.getMemory({ requestContext: serverRequestContext });\n if (memoryInstance) {\n const thread = await memoryInstance.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n // Build authorized memory option with effective values\n authorizedMemoryOption = {\n ...memoryOption,\n resource: effectiveResourceId ?? memoryOption.resource,\n thread: effectiveThreadId ?? memoryOption.thread,\n };\n }\n\n const { structuredOutput, ...restOptions } = rest;\n\n const options = {\n ...restOptions,\n requestContext: serverRequestContext,\n memory: authorizedMemoryOption,\n abortSignal,\n };\n\n const result = structuredOutput\n ? await agent.generate(messages, { ...options, structuredOutput })\n : await agent.generate(messages, options);\n\n return result;\n } catch (error) {\n return handleError(error, 'Error generating from agent');\n }\n },\n});\n\n// Legacy routes (deprecated)\nexport const GENERATE_LEGACY_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/generate-legacy',\n responseType: 'json' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionLegacyBodySchema,\n responseSchema: generateResponseSchema,\n summary: '[DEPRECATED] Generate with legacy format',\n description: 'Legacy endpoint for generating agent responses. Use /agents/:agentId/generate instead.',\n tags: ['Agents', 'Legacy'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n requestContext,\n });\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const { messages, resourceId, resourceid, threadId, ...rest } = params;\n // Use resourceId if provided, fall back to resourceid (deprecated)\n const clientResourceId = resourceId ?? resourceid;\n\n // Authorization: context values take precedence over client-provided values\n const effectiveResourceId = getEffectiveResourceId(requestContext, clientResourceId);\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n\n validateBody({ messages });\n\n if ((effectiveThreadId && !effectiveResourceId) || (!effectiveThreadId && effectiveResourceId)) {\n throw new HTTPException(400, { message: 'Both threadId or resourceId must be provided' });\n }\n\n // Validate thread ownership if accessing an existing thread\n if (effectiveThreadId && effectiveResourceId) {\n const memory = await agent.getMemory({ requestContext });\n if (memory) {\n const thread = await memory.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n const result = await agent.generateLegacy(messages, {\n ...rest,\n abortSignal,\n resourceId: effectiveResourceId ?? '',\n threadId: effectiveThreadId ?? '',\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error generating from agent');\n }\n },\n});\n\nexport const STREAM_GENERATE_LEGACY_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream-legacy',\n responseType: 'datastream-response' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionLegacyBodySchema,\n responseSchema: streamResponseSchema,\n summary: '[DEPRECATED] Stream with legacy format',\n description: 'Legacy endpoint for streaming agent responses. Use /agents/:agentId/stream instead.',\n tags: ['Agents', 'Legacy'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n requestContext,\n });\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const { messages, resourceId, resourceid, threadId, ...rest } = params;\n // Use resourceId if provided, fall back to resourceid (deprecated)\n const clientResourceId = resourceId ?? resourceid;\n\n // Authorization: context values take precedence over client-provided values\n const effectiveResourceId = getEffectiveResourceId(requestContext, clientResourceId);\n const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);\n\n validateBody({ messages });\n\n if ((effectiveThreadId && !effectiveResourceId) || (!effectiveThreadId && effectiveResourceId)) {\n throw new HTTPException(400, { message: 'Both threadId or resourceId must be provided' });\n }\n\n // Validate thread ownership if accessing an existing thread\n if (effectiveThreadId && effectiveResourceId) {\n const memory = await agent.getMemory({ requestContext });\n if (memory) {\n const thread = await memory.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n const streamResult = await agent.streamLegacy(messages, {\n ...rest,\n abortSignal,\n resourceId: effectiveResourceId ?? '',\n threadId: effectiveThreadId ?? '',\n });\n\n // Note: Do NOT set Transfer-Encoding header explicitly in the headers option.\n // Runtimes automatically add this header for streaming responses,\n // and setting it explicitly causes duplicate headers which break HTTP protocol.\n const streamResponse = rest.output\n ? streamResult.toTextStreamResponse()\n : streamResult.toDataStreamResponse({\n sendUsage: true,\n sendReasoning: true,\n getErrorMessage: (error: any) => {\n return `An error occurred while processing your request. ${error instanceof Error ? error.message : JSON.stringify(error)}`;\n },\n });\n\n return streamResponse;\n } catch (error) {\n return handleError(error, 'error streaming agent response');\n }\n },\n});\n\nexport const GET_PROVIDERS_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/providers',\n responseType: 'json',\n responseSchema: providersResponseSchema,\n summary: 'List AI providers',\n description: 'Returns a list of all configured AI model providers',\n tags: ['Agents'],\n requiresAuth: true,\n handler: async ({ mastra }) => {\n try {\n const allProviders: Record<string, ProviderConfig> = {};\n\n for (const [id, provider] of Object.entries(PROVIDER_REGISTRY)) {\n allProviders[id] = provider as ProviderConfig;\n }\n\n // Include gateway providers (defaults + user-registered)\n if (mastra) {\n const allGateways = mastra.listGateways();\n if (allGateways) {\n for (const gateway of Object.values(allGateways)) {\n // Skip models.dev gateway (already covered by PROVIDER_REGISTRY)\n if (gateway.id === 'models.dev') continue;\n try {\n const gatewayProviders = await gateway.fetchProviders();\n for (const [providerId, config] of Object.entries(gatewayProviders)) {\n // Apply the same prefixing logic as registry-generator to avoid\n // creating duplicate entries alongside PROVIDER_REGISTRY data.\n // If providerId matches gateway.id, it's a unified gateway — use just the gateway ID.\n // Otherwise, prefix with gateway.id (e.g., \"netlify/anthropic\").\n const prefixedId = providerId === gateway.id ? gateway.id : `${gateway.id}/${providerId}`;\n allProviders[prefixedId] = config;\n }\n } catch (error) {\n console.warn(`Failed to fetch providers from gateway \"${gateway.id}\":`, error);\n }\n }\n }\n }\n\n const providers = Object.entries(allProviders).map(([id, provider]) => {\n return {\n id,\n name: provider.name,\n label: (provider as any).label || provider.name,\n description: (provider as any).description || '',\n envVar: provider.apiKeyEnvVar,\n connected: isProviderConnected(id, allProviders),\n docUrl: provider.docUrl,\n models: [...provider.models],\n };\n });\n return { providers };\n } catch (error) {\n return handleError(error, 'Error fetching providers');\n }\n },\n});\n\nexport const GENERATE_AGENT_VNEXT_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/generate/vnext',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: generateResponseSchema,\n summary: 'Generate a response from an agent',\n description: 'Generate a response from an agent',\n tags: ['Agents'],\n requiresAuth: true,\n handler: GENERATE_AGENT_ROUTE.handler,\n});\n\nexport const STREAM_GENERATE_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream agent response',\n description: 'Executes an agent with the provided messages and streams the response in real-time',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:execute',\n handler: async ({ mastra, agentId, abortSignal, requestContext: serverRequestContext, ...params }) => {\n try {\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const { messages, memory: memoryOption, requestContext: bodyRequestContext, versions, ...rest } = params;\n validateBody({ messages });\n\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(\n serverRequestContext,\n bodyRequestContext as Record<string, unknown> | undefined,\n ),\n requestContext: serverRequestContext,\n });\n\n // Merge body's requestContext values into the server's RequestContext instance\n // Only set values that don't already exist on the server context to prevent\n // clients from overwriting server-populated auth/tenant values\n if (bodyRequestContext && typeof bodyRequestContext === 'object') {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n }\n\n // Stash version overrides from body onto requestContext for sub-agent resolution\n stashVersionOverrides(serverRequestContext, versions);\n\n // Authorization: apply context overrides to memory option if present\n let authorizedMemoryOption = memoryOption;\n if (memoryOption) {\n const clientThreadId = typeof memoryOption.thread === 'string' ? memoryOption.thread : memoryOption.thread?.id;\n\n const effectiveResourceId = getEffectiveResourceId(serverRequestContext, memoryOption.resource);\n const effectiveThreadId = getEffectiveThreadId(serverRequestContext, clientThreadId);\n\n // Validate thread ownership if accessing an existing thread\n if (effectiveThreadId && effectiveResourceId) {\n const memoryInstance = await agent.getMemory({ requestContext: serverRequestContext });\n if (memoryInstance) {\n const thread = await memoryInstance.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n // Build authorized memory option with effective values\n authorizedMemoryOption = {\n ...memoryOption,\n resource: effectiveResourceId ?? memoryOption.resource,\n thread: effectiveThreadId ?? memoryOption.thread,\n };\n }\n\n const { structuredOutput, ...restOptions } = rest;\n\n const options = {\n ...restOptions,\n requestContext: serverRequestContext,\n memory: authorizedMemoryOption,\n abortSignal,\n };\n\n const streamResult = structuredOutput\n ? await agent.stream(messages, { ...options, structuredOutput })\n : await agent.stream(messages, options);\n\n return streamResult.fullStream;\n } catch (error) {\n return handleError(error, 'error streaming agent response');\n }\n },\n});\n\nexport const STREAM_UNTIL_IDLE_GENERATE_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream-until-idle',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: streamUntilIdleBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream agent response until idle',\n description:\n 'Executes an agent with the provided messages and streams the response in real-time, also listens for background task completions and streams them in real-time',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:execute',\n handler: async ({ mastra, agentId, abortSignal, requestContext: serverRequestContext, ...params }) => {\n try {\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const { messages, memory: memoryOption, requestContext: bodyRequestContext, ...rest } = params;\n validateBody({ messages });\n\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(\n serverRequestContext,\n bodyRequestContext as Record<string, unknown> | undefined,\n ),\n requestContext: serverRequestContext,\n });\n\n // Merge body's requestContext values into the server's RequestContext instance\n // Only set values that don't already exist on the server context to prevent\n // clients from overwriting server-populated auth/tenant values\n if (bodyRequestContext && typeof bodyRequestContext === 'object') {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n }\n\n // Authorization: apply context overrides to memory option if present\n let authorizedMemoryOption = memoryOption;\n if (memoryOption) {\n const clientThreadId = typeof memoryOption.thread === 'string' ? memoryOption.thread : memoryOption.thread?.id;\n\n const effectiveResourceId = getEffectiveResourceId(serverRequestContext, memoryOption.resource);\n const effectiveThreadId = getEffectiveThreadId(serverRequestContext, clientThreadId);\n\n // Validate thread ownership if accessing an existing thread\n if (effectiveThreadId && effectiveResourceId) {\n const memoryInstance = await agent.getMemory({ requestContext: serverRequestContext });\n if (memoryInstance) {\n const thread = await memoryInstance.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n // Build authorized memory option with effective values\n authorizedMemoryOption = {\n ...memoryOption,\n resource: effectiveResourceId ?? memoryOption.resource,\n thread: effectiveThreadId ?? memoryOption.thread,\n };\n }\n\n const { structuredOutput, ...restOptions } = rest;\n\n const options = {\n ...restOptions,\n requestContext: serverRequestContext,\n memory: authorizedMemoryOption,\n abortSignal,\n };\n\n const streamResult = structuredOutput\n ? await agent.streamUntilIdle(messages, { ...options, structuredOutput })\n : await agent.streamUntilIdle(messages, options);\n\n return streamResult.fullStream;\n } catch (error) {\n return handleError(error, 'error streaming agent response');\n }\n },\n});\n\nexport const STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream/vnext',\n responseType: 'stream',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream a response from an agent',\n description: '[DEPRECATED] This endpoint is deprecated. Please use /stream instead.',\n tags: ['Agents'],\n requiresAuth: true,\n deprecated: true,\n handler: STREAM_GENERATE_ROUTE.handler,\n});\n\nexport const OBSERVE_AGENT_STREAM_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/observe',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: observeAgentBodySchema,\n responseSchema: observeAgentResponseSchema,\n summary: 'Observe agent stream',\n description:\n 'Reconnect to an existing agent stream to receive missed events. Supports position-based resume with offset for efficient reconnection.',\n tags: ['Agents', 'Streaming'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, runId, offset, abortSignal }) => {\n try {\n // Verify agent exists and get its pubsub for stream subscription.\n // Durable agents have their own CachingPubSub instance separate from mastra.pubsub,\n // so we must subscribe to the agent's pubsub to receive the correct stream events.\n const agent = await getAgentFromSystem({ mastra, agentId });\n const agentPubsub = isDurableAgentLike(agent) ? (agent as DurableAgentLike).pubsub : undefined;\n const pubsub = agentPubsub ?? mastra.pubsub;\n\n // Create a ReadableStream that subscribes to the agent stream topic\n // The stream adapter handles replay logic via subscribeWithReplay or subscribeFromOffset\n const topic = AGENT_STREAM_TOPIC(runId);\n let handleEvent: ((event: any) => void) | null = null;\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n // Idle timeout: close the stream if no events are received within 5 minutes.\n // This prevents subscription leaks when an agent crashes without emitting a terminal event.\n const IDLE_TIMEOUT_MS = 5 * 60 * 1000;\n\n function cleanup(controller: ReadableStreamDefaultController) {\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n if (handleEvent) {\n void pubsub.unsubscribe(topic, handleEvent);\n handleEvent = null;\n }\n try {\n controller.close();\n } catch {\n // Stream may already be closed\n }\n }\n\n function resetIdleTimer(controller: ReadableStreamDefaultController) {\n if (idleTimer) clearTimeout(idleTimer);\n idleTimer = setTimeout(() => cleanup(controller), IDLE_TIMEOUT_MS);\n }\n\n const stream = new ReadableStream({\n start(controller) {\n // Wire up abortSignal for cleanup on client disconnect\n if (abortSignal) {\n if (abortSignal.aborted) {\n cleanup(controller);\n return;\n }\n abortSignal.addEventListener('abort', () => cleanup(controller), { once: true });\n }\n\n resetIdleTimer(controller);\n\n handleEvent = (event: any) => {\n const isTerminal = event.type === 'finish' || event.type === 'error';\n try {\n controller.enqueue(event);\n } catch {\n // Stream may be closed\n }\n if (isTerminal) {\n cleanup(controller);\n } else {\n resetIdleTimer(controller);\n }\n };\n\n // Subscribe with replay support\n const subscribePromise =\n offset !== undefined\n ? pubsub.subscribeFromOffset(topic, offset, handleEvent)\n : pubsub.subscribeWithReplay(topic, handleEvent);\n\n subscribePromise.catch((error: any) => {\n console.error(`[ObserveAgentStream] Failed to subscribe to ${topic}:`, error);\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n controller.error(error);\n });\n },\n cancel() {\n if (idleTimer) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n if (handleEvent) {\n void pubsub.unsubscribe(topic, handleEvent);\n handleEvent = null;\n }\n },\n });\n\n return stream;\n } catch (error) {\n return handleError(error, 'error observing agent stream');\n }\n },\n});\n\nexport const APPROVE_TOOL_CALL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/approve-tool-call',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: approveToolCallBodySchema,\n responseSchema: toolCallResponseSchema,\n summary: 'Approve tool call',\n description: 'Approves a pending tool call and continues agent execution',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n if (!params.toolCallId) {\n throw new HTTPException(400, { message: 'Tool call id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const streamResult = await agent.approveToolCall({\n ...params,\n requestContext,\n abortSignal,\n });\n\n return streamResult.fullStream;\n } catch (error) {\n return handleError(error, 'error approving tool call');\n }\n },\n});\n\nexport const DECLINE_TOOL_CALL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/decline-tool-call',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: declineToolCallBodySchema,\n responseSchema: toolCallResponseSchema,\n summary: 'Decline tool call',\n description: 'Declines a pending tool call and continues agent execution without executing the tool',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n if (!params.toolCallId) {\n throw new HTTPException(400, { message: 'Tool call id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const streamResult = await agent.declineToolCall({\n ...params,\n requestContext,\n abortSignal,\n });\n\n return streamResult.fullStream;\n } catch (error) {\n return handleError(error, 'error declining tool call');\n }\n },\n});\n\nexport const RESUME_STREAM_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/resume-stream',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: resumeStreamBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Resume agent stream',\n description: 'Resumes a suspended agent stream with custom resume data',\n tags: ['Agents'],\n requiresAuth: true,\n requiresPermission: 'agents:execute',\n handler: async ({ mastra, agentId, abortSignal, requestContext: serverRequestContext, ...params }) => {\n try {\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n sanitizeBody(params, ['tools']);\n\n const {\n resumeData,\n runId,\n toolCallId,\n memory: memoryOption,\n requestContext: bodyRequestContext,\n versions,\n ...rest\n } = params;\n\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(\n serverRequestContext,\n bodyRequestContext as Record<string, unknown> | undefined,\n ),\n });\n\n if (bodyRequestContext && typeof bodyRequestContext === 'object') {\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n }\n\n stashVersionOverrides(serverRequestContext, versions);\n\n let authorizedMemoryOption = memoryOption;\n const clientThreadId = typeof memoryOption?.thread === 'string' ? memoryOption.thread : memoryOption?.thread?.id;\n const effectiveResourceId = getEffectiveResourceId(serverRequestContext, memoryOption?.resource);\n const effectiveThreadId = getEffectiveThreadId(serverRequestContext, clientThreadId);\n\n if (effectiveThreadId && effectiveResourceId) {\n const memoryInstance = await agent.getMemory({ requestContext: serverRequestContext });\n if (memoryInstance) {\n const thread = await memoryInstance.getThreadById({ threadId: effectiveThreadId });\n await validateThreadOwnership(thread, effectiveResourceId);\n }\n }\n\n if (memoryOption || effectiveResourceId || effectiveThreadId) {\n authorizedMemoryOption = {\n ...memoryOption,\n ...(effectiveResourceId ? { resource: effectiveResourceId } : {}),\n ...(effectiveThreadId ? { thread: effectiveThreadId } : {}),\n } as NonNullable<typeof authorizedMemoryOption>;\n }\n\n const workflowsStore = await mastra.getStorage()?.getStore('workflows');\n const workflowRun = await workflowsStore?.getWorkflowRunById({ workflowName: 'agentic-loop', runId });\n await validateRunOwnership(workflowRun, getEffectiveResourceId(serverRequestContext, undefined));\n\n const { structuredOutput, ...restOptions } = rest;\n\n const options = {\n runId,\n toolCallId,\n ...restOptions,\n requestContext: serverRequestContext,\n memory: authorizedMemoryOption,\n abortSignal,\n };\n\n const streamResult = structuredOutput\n ? await agent.resumeStream(resumeData, { ...options, structuredOutput })\n : await agent.resumeStream(resumeData, options);\n\n return streamResult.fullStream;\n } catch (error) {\n return handleError(error, 'error resuming agent stream');\n }\n },\n});\n\nexport const APPROVE_TOOL_CALL_GENERATE_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/approve-tool-call-generate',\n responseType: 'json' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: approveToolCallBodySchema,\n responseSchema: generateResponseSchema,\n summary: 'Approve tool call (non-streaming)',\n description: 'Approves a pending tool call and returns the complete response',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n if (!params.toolCallId) {\n throw new HTTPException(400, { message: 'Tool call id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const result = await agent.approveToolCallGenerate({\n ...params,\n requestContext,\n abortSignal,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'error approving tool call');\n }\n },\n});\n\nexport const DECLINE_TOOL_CALL_GENERATE_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/decline-tool-call-generate',\n responseType: 'json' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: declineToolCallBodySchema,\n responseSchema: generateResponseSchema,\n summary: 'Decline tool call (non-streaming)',\n description: 'Declines a pending tool call and returns the complete response',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, abortSignal, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n if (!params.toolCallId) {\n throw new HTTPException(400, { message: 'Tool call id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const result = await agent.declineToolCallGenerate({\n ...params,\n requestContext,\n abortSignal,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'error declining tool call');\n }\n },\n});\n\nexport const STREAM_NETWORK_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/network',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream agent network',\n description: 'Executes an agent network with multiple agents and streams the response',\n tags: ['Agents'],\n requiresAuth: true,\n handler: async ({ mastra, messages, agentId, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n validateBody({ messages });\n\n const streamResult = await agent.network(messages, {\n ...params,\n });\n\n return streamResult;\n } catch (error) {\n return handleError(error, 'error streaming agent loop response');\n }\n },\n});\n\nexport const APPROVE_NETWORK_TOOL_CALL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/approve-network-tool-call',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: approveNetworkToolCallBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Approve network tool call',\n description: 'Approves a pending network tool call and continues network agent execution',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const streamResult = await agent.approveNetworkToolCall({\n ...params,\n });\n\n return streamResult;\n } catch (error) {\n return handleError(error, 'error approving network tool call');\n }\n },\n});\n\nexport const DECLINE_NETWORK_TOOL_CALL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/decline-network-tool-call',\n responseType: 'stream' as const,\n streamFormat: 'sse' as const,\n pathParamSchema: agentIdPathParams,\n bodySchema: declineNetworkToolCallBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Decline network tool call',\n description: 'Declines a pending network tool call and continues network agent execution without executing the tool',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, requestContext, ...params }) => {\n try {\n const agent = await getAgentFromSystem({\n mastra,\n agentId,\n versionOptions: extractVersionOptions(requestContext),\n });\n\n if (!params.runId) {\n throw new HTTPException(400, { message: 'Run id is required' });\n }\n\n // UI Frameworks may send \"client tools\" in the body,\n // but it interferes with llm providers tool handling, so we remove them\n sanitizeBody(params, ['tools']);\n\n const streamResult = await agent.declineNetworkToolCall({\n ...params,\n });\n\n return streamResult;\n } catch (error) {\n return handleError(error, 'error declining network tool call');\n }\n },\n});\n\nexport const UPDATE_AGENT_MODEL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/model',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: updateAgentModelBodySchema,\n responseSchema: modelManagementResponseSchema,\n summary: 'Update agent model',\n description: 'Updates the AI model used by the agent',\n tags: ['Agents', 'Models'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, modelId, provider }) => {\n try {\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n // Use the universal Mastra router format: provider/model\n const newModel = `${provider}/${modelId}`;\n\n // Update the model in-memory only (for temporary testing)\n // This allows users to test different models without persisting\n // To save permanently, users should use the Edit agent dialog\n agent.__updateModel({ model: newModel });\n\n return { message: 'Agent model updated' };\n } catch (error) {\n return handleError(error, 'error updating agent model');\n }\n },\n});\n\nexport const RESET_AGENT_MODEL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/model/reset',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n responseSchema: modelManagementResponseSchema,\n summary: 'Reset agent model',\n description: 'Resets the agent model to its original configuration',\n tags: ['Agents', 'Models'],\n requiresAuth: true,\n handler: async ({ mastra, agentId }) => {\n try {\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n agent.__resetToOriginalModel();\n\n return { message: 'Agent model reset to original' };\n } catch (error) {\n return handleError(error, 'error resetting agent model');\n }\n },\n});\n\nexport const REORDER_AGENT_MODEL_LIST_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/models/reorder',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: reorderAgentModelListBodySchema,\n responseSchema: modelManagementResponseSchema,\n summary: 'Reorder agent model list',\n description: 'Reorders the model list for agents with multiple model configurations',\n tags: ['Agents', 'Models'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, reorderedModelIds }) => {\n try {\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const modelList = await agent.getModelList();\n if (!modelList || modelList.length === 0) {\n throw new HTTPException(400, { message: 'Agent model list is not found or empty' });\n }\n\n agent.reorderModels(reorderedModelIds);\n\n return { message: 'Model list reordered' };\n } catch (error) {\n return handleError(error, 'error reordering model list');\n }\n },\n});\n\nexport const UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/models/:modelConfigId',\n responseType: 'json',\n pathParamSchema: modelConfigIdPathParams,\n bodySchema: updateAgentModelInModelListBodySchema,\n responseSchema: modelManagementResponseSchema,\n summary: 'Update model in model list',\n description: 'Updates a specific model configuration in the agent model list',\n tags: ['Agents', 'Models'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, modelConfigId, model: bodyModel, maxRetries, enabled }) => {\n try {\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const modelList = await agent.getModelList();\n if (!modelList || modelList.length === 0) {\n throw new HTTPException(400, { message: 'Agent model list is not found or empty' });\n }\n\n const modelConfig = modelList.find(config => config.id === modelConfigId);\n if (!modelConfig) {\n throw new HTTPException(404, { message: `Model config with id ${modelConfigId} not found` });\n }\n\n const newModel =\n bodyModel?.modelId && bodyModel?.provider ? `${bodyModel.provider}/${bodyModel.modelId}` : modelConfig.model;\n\n const updated = {\n ...modelConfig,\n model: newModel,\n ...(maxRetries !== undefined ? { maxRetries } : {}),\n ...(enabled !== undefined ? { enabled } : {}),\n };\n\n agent.updateModelInModelList(updated);\n\n return { message: 'Model updated in model list' };\n } catch (error) {\n return handleError(error, 'error updating model in model list');\n }\n },\n});\n\nconst ENHANCE_SYSTEM_PROMPT_INSTRUCTIONS = `You are an expert system prompt engineer, specialized in analyzing and enhancing instructions to create clear, effective, and comprehensive system prompts. Your goal is to help users transform their basic instructions into well-structured system prompts that will guide AI behavior effectively.\n\nFollow these steps to analyze and enhance the instructions:\n\n1. ANALYSIS PHASE\n- Identify the core purpose and goals\n- Extract key constraints and requirements\n- Recognize domain-specific terminology and concepts\n- Note any implicit assumptions that should be made explicit\n\n2. PROMPT STRUCTURE\nCreate a system prompt with these components:\na) ROLE DEFINITION\n - Clear statement of the AI's role and purpose\n - Key responsibilities and scope\n - Primary stakeholders and users\nb) CORE CAPABILITIES\n - Main functions and abilities\n - Specific domain knowledge required\n - Tools and resources available\nc) BEHAVIORAL GUIDELINES\n - Communication style and tone\n - Decision-making framework\n - Error handling approach\n - Ethical considerations\nd) CONSTRAINTS & BOUNDARIES\n - Explicit limitations\n - Out-of-scope activities\n - Security and privacy considerations\ne) SUCCESS CRITERIA\n - Quality standards\n - Expected outcomes\n - Performance metrics\n\n3. QUALITY CHECKS\nEnsure the prompt is:\n- Clear and unambiguous\n- Comprehensive yet concise\n- Properly scoped\n- Technically accurate\n- Ethically sound\n\n4. OUTPUT FORMAT\nReturn your response as JSON with exactly these two fields:\n- explanation: A brief explanation of the changes you made and why\n- new_prompt: The complete enhanced system prompt as a single string\n\nRemember: A good system prompt should be specific enough to guide behavior but flexible enough to handle edge cases. Focus on creating prompts that are clear, actionable, and aligned with the intended use case.`;\n\n// Helper to find the first model with a connected provider\nasync function findConnectedModel(agent: Agent): Promise<Awaited<ReturnType<Agent['getModel']>> | null> {\n const modelList = await agent.getModelList();\n\n if (modelList && modelList.length > 0) {\n // Find the first enabled model with a connected provider\n for (const modelConfig of modelList) {\n if (modelConfig.enabled !== false) {\n const model = modelConfig.model;\n if (isProviderConnected(model.provider)) {\n return model;\n }\n }\n }\n return null;\n }\n\n // No model list, check the default model\n const defaultModel = await agent.getModel();\n if (isProviderConnected(defaultModel.provider)) {\n return defaultModel;\n }\n return null;\n}\n\ntype EnhanceInstructionsResponse = z.infer<typeof enhanceInstructionsResponseSchema>;\n\nexport const ENHANCE_INSTRUCTIONS_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/instructions/enhance',\n responseType: 'json',\n pathParamSchema: agentIdPathParams,\n bodySchema: enhanceInstructionsBodySchema,\n responseSchema: enhanceInstructionsResponseSchema,\n summary: 'Enhance agent instructions',\n description: 'Uses AI to enhance or modify agent instructions based on user feedback',\n tags: ['Agents'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, instructions, comment }) => {\n try {\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n // Find the first model with a connected provider (similar to how chat works)\n const model = await findConnectedModel(agent);\n if (!model) {\n throw new HTTPException(400, {\n message:\n 'No model with a configured API key found. Please set the required environment variable for your model provider.',\n });\n }\n\n const systemPromptAgent = new Agent({\n id: 'system-prompt-enhancer',\n name: 'system-prompt-enhancer',\n instructions: ENHANCE_SYSTEM_PROMPT_INSTRUCTIONS,\n model,\n });\n\n const result = await systemPromptAgent.generate(\n `We need to improve the system prompt.\nCurrent: ${instructions}\n${comment ? `User feedback: ${comment}` : ''}`,\n {\n structuredOutput: {\n schema: enhanceInstructionsResponseSchema,\n },\n },\n );\n\n return (await result.object) as unknown as EnhanceInstructionsResponse;\n } catch (error) {\n return handleError(error, 'Error enhancing instructions');\n }\n },\n});\n\nexport const STREAM_VNEXT_DEPRECATED_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/streamVNext',\n responseType: 'stream',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream a response from an agent',\n description: '[DEPRECATED] This endpoint is deprecated. Please use /stream instead.',\n tags: ['Agents'],\n requiresAuth: true,\n deprecated: true,\n handler: async () => {\n throw new HTTPException(410, { message: 'This endpoint is deprecated. Please use /stream instead.' });\n },\n});\n\nexport const STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream/vnext/ui',\n responseType: 'stream',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream UI messages from an agent',\n description:\n '[DEPRECATED] This endpoint is deprecated. Please use the @mastra/ai-sdk package for uiMessage transformations',\n tags: ['Agents'],\n requiresAuth: true,\n deprecated: true,\n handler: async () => {\n try {\n throw new MastraError({\n category: ErrorCategory.USER,\n domain: ErrorDomain.MASTRA_SERVER,\n id: 'DEPRECATED_ENDPOINT',\n text: 'This endpoint is deprecated. Please use the @mastra/ai-sdk package to for uiMessage transformations',\n });\n } catch (error) {\n return handleError(error, 'error streaming agent response');\n }\n },\n});\n\nexport const STREAM_UI_MESSAGE_DEPRECATED_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/stream/ui',\n responseType: 'stream',\n pathParamSchema: agentIdPathParams,\n bodySchema: agentExecutionBodySchema,\n responseSchema: streamResponseSchema,\n summary: 'Stream UI messages from an agent',\n description:\n '[DEPRECATED] This endpoint is deprecated. Please use the @mastra/ai-sdk package for uiMessage transformations',\n tags: ['Agents'],\n requiresAuth: true,\n deprecated: true,\n handler: STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE.handler,\n});\n\n// ============================================================================\n// Agent Skill Routes\n// ============================================================================\n\nexport const GET_AGENT_SKILL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/skills/:skillName',\n responseType: 'json',\n pathParamSchema: agentSkillPathParams,\n queryParamSchema: skillDisambiguationQuerySchema,\n responseSchema: getAgentSkillResponseSchema,\n summary: 'Get agent skill',\n description: 'Returns details for a specific skill available to the agent via its workspace',\n tags: ['Agents', 'Skills'],\n handler: async ({ mastra, agentId, skillName, path, requestContext }) => {\n try {\n const agent = agentId ? mastra.getAgentById(agentId) : null;\n if (!agent) {\n throw new HTTPException(404, { message: 'Agent not found' });\n }\n\n // Get the agent's workspace\n const workspace = await agent.getWorkspace({ requestContext });\n if (!workspace?.skills) {\n throw new HTTPException(404, { message: 'Agent does not have skills configured' });\n }\n\n // Use the optional ?path= query param for disambiguation, otherwise fall back to name\n const identifier = path ? decodeURIComponent(path) : skillName;\n\n // Get the skill from the workspace\n const skill = await workspace.skills.get(identifier);\n if (!skill) {\n throw new HTTPException(404, { message: `Skill \"${identifier}\" not found` });\n }\n\n return {\n name: skill.name,\n description: skill.description,\n license: skill.license,\n compatibility: skill.compatibility,\n metadata: skill.metadata,\n path: skill.path,\n instructions: skill.instructions,\n source: skill.source,\n references: skill.references,\n scripts: skill.scripts,\n assets: skill.assets,\n };\n } catch (error) {\n return handleError(error, 'Error getting agent skill');\n }\n },\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/server/auth/defaults.ts","../src/server/auth/path-pattern.ts","../src/server/auth/helpers.ts"],"names":["MASTRA_AUTH_TOKEN_KEY","MASTRA_RESOURCE_ID_KEY"],"mappings":"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","file":"chunk-XG2VRXG5.cjs","sourcesContent":["import type { MastraAuthConfig } from '@mastra/core/server';\n\n// Default configuration that can be extended by clients\nexport const defaultAuthConfig: MastraAuthConfig = {\n protected: ['/api/*'],\n public: ['/api', '/api/auth/*'],\n // Simple rule system\n rules: [\n // Admin users can do anything\n {\n condition: user => {\n if (typeof user === 'object' && user !== null) {\n if ('isAdmin' in user) {\n return !!user.isAdmin;\n }\n\n if ('role' in user) {\n return user.role === 'admin';\n }\n }\n return false;\n },\n allow: true,\n },\n ],\n};\n","/**\n * Path pattern matching utility\n * Inlined from regexparam v3.0.0 (MIT License)\n * https://github.com/lukeed/regexparam\n *\n * Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport interface ParsedPattern {\n keys: string[] | false;\n pattern: RegExp;\n}\n\n/**\n * Parse a route pattern into a RegExp\n * Supports:\n * - Named parameters: /users/:id\n * - Optional parameters: /users/:id?\n * - Wildcards: /files/*\n * - Mixed patterns: /api/:version/users/:id\n */\nexport function parse(input: string | RegExp, loose?: boolean): ParsedPattern {\n if (input instanceof RegExp) return { keys: false, pattern: input };\n\n let c: string;\n let o: number;\n let tmp: string | undefined;\n let ext: number;\n const keys: string[] = [];\n let pattern = '';\n const arr = input.split('/');\n\n arr[0] || arr.shift();\n\n while ((tmp = arr.shift())) {\n c = tmp[0]!;\n if (c === '*') {\n keys.push(c);\n pattern += tmp[1] === '?' ? '(?:/(.*))?' : '/(.*)';\n } else if (c === ':') {\n o = tmp.indexOf('?', 1);\n ext = tmp.indexOf('.', 1);\n keys.push(tmp.substring(1, !!~o ? o : !!~ext ? ext : tmp.length));\n pattern += !!~o && !~ext ? '(?:/([^/]+?))?' : '/([^/]+?)';\n if (!!~ext) pattern += (!!~o ? '?' : '') + '\\\\' + tmp.substring(ext);\n } else {\n pattern += '/' + tmp;\n }\n }\n\n return {\n keys: keys,\n pattern: new RegExp('^' + pattern + (loose ? '(?=$|/)' : '/?$'), 'i'),\n };\n}\n\n/**\n * Test if a path matches a pattern\n */\nexport function matchPath(path: string, pattern: string | RegExp): boolean {\n const { pattern: regex } = parse(pattern);\n return regex.test(path);\n}\n","import type { ISessionProvider } from '@mastra/core/auth';\nimport type { IRBACProvider, EEUser } from '@mastra/core/auth/ee';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { MastraAuthConfig, MastraAuthProvider } from '@mastra/core/server';\nimport type { HonoRequest } from 'hono';\n\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_AUTH_TOKEN_KEY } from '../constants';\nimport { defaultAuthConfig } from './defaults';\nimport { parse } from './path-pattern';\n\n/**\n * Check if a route is a registered custom route that requires authentication.\n * Returns true only if the route is explicitly registered with requiresAuth: true.\n * Returns false if the route is not in the config or has requiresAuth: false.\n */\nexport const isProtectedCustomRoute = (\n path: string,\n method: string,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n if (!customRouteAuthConfig) {\n return false;\n }\n\n // Check exact match first (fast path for static routes)\n const exactRouteKey = `${method}:${path}`;\n if (customRouteAuthConfig.has(exactRouteKey)) {\n return customRouteAuthConfig.get(exactRouteKey) === true;\n }\n\n // Check exact match for ALL method\n const allRouteKey = `ALL:${path}`;\n if (customRouteAuthConfig.has(allRouteKey)) {\n return customRouteAuthConfig.get(allRouteKey) === true;\n }\n\n // Check pattern matches for dynamic routes (e.g., '/users/:id')\n for (const [routeKey, requiresAuth] of customRouteAuthConfig.entries()) {\n const colonIndex = routeKey.indexOf(':');\n if (colonIndex === -1) {\n continue; // Skip malformed keys\n }\n\n const routeMethod = routeKey.substring(0, colonIndex);\n const routePattern = routeKey.substring(colonIndex + 1);\n\n // Check if method matches (exact match or ALL)\n if (routeMethod !== method && routeMethod !== 'ALL') {\n continue;\n }\n\n // Check if path matches the pattern\n if (pathMatchesPattern(path, routePattern)) {\n return requiresAuth === true;\n }\n }\n\n return false; // Not in config = not a protected custom route\n};\n\n/**\n * Check if request is from dev playground\n * @param getHeader - Function to get header value from request\n * @param customRouteAuthConfig - Map of custom route auth configurations\n */\nexport const isDevPlaygroundRequest = (\n path: string,\n method: string,\n getHeader: (name: string) => string | undefined,\n authConfig: MastraAuthConfig,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n const protectedAccess = [...(defaultAuthConfig.protected || []), ...(authConfig.protected || [])];\n return (\n process.env.MASTRA_DEV === 'true' &&\n // Allow if path doesn't match protected patterns AND is not a protected custom route\n ((!isAnyMatch(path, method, protectedAccess) && !isProtectedCustomRoute(path, method, customRouteAuthConfig)) ||\n // Or if has playground header\n getHeader('x-mastra-dev-playground') === 'true')\n );\n};\n\nexport const isCustomRoutePublic = (\n path: string,\n method: string,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n if (!customRouteAuthConfig) {\n return false;\n }\n\n // Check exact match first (fast path for static routes)\n const exactRouteKey = `${method}:${path}`;\n if (customRouteAuthConfig.has(exactRouteKey)) {\n return !customRouteAuthConfig.get(exactRouteKey); // True when route opts out of auth\n }\n\n // Check exact match for ALL method\n const allRouteKey = `ALL:${path}`;\n if (customRouteAuthConfig.has(allRouteKey)) {\n return !customRouteAuthConfig.get(allRouteKey);\n }\n\n // Check pattern matches for dynamic routes (e.g., '/users/:id')\n for (const [routeKey, requiresAuth] of customRouteAuthConfig.entries()) {\n const colonIndex = routeKey.indexOf(':');\n if (colonIndex === -1) {\n continue; // Skip malformed keys\n }\n\n const routeMethod = routeKey.substring(0, colonIndex);\n const routePattern = routeKey.substring(colonIndex + 1);\n\n // Check if method matches (exact match or ALL)\n if (routeMethod !== method && routeMethod !== 'ALL') {\n continue;\n }\n\n // Check if path matches the pattern\n if (pathMatchesPattern(path, routePattern)) {\n return !requiresAuth; // True when route opts out of auth\n }\n }\n\n return false;\n};\n\n// NOTE: This uses isProtectedCustomRoute (default-allow for unknown paths) rather than\n// !isCustomRoutePublic (default-deny). This is intentional — all registered server and\n// custom routes are auth-checked via registerRoute/checkRouteAuth regardless of this\n// function. The '/api/*' protected pattern exists as a user-facing override mechanism.\n// The old default-deny logic incorrectly blocked non-API paths (e.g. '/', '/agents')\n// which prevented the studio login page from loading in production.\nexport const isProtectedPath = (\n path: string,\n method: string,\n authConfig: MastraAuthConfig,\n customRouteAuthConfig?: Map<string, boolean>,\n): boolean => {\n const protectedAccess = [...(defaultAuthConfig.protected || []), ...(authConfig.protected || [])];\n return isAnyMatch(path, method, protectedAccess) || isProtectedCustomRoute(path, method, customRouteAuthConfig);\n};\n\nexport const canAccessPublicly = (path: string, method: string, authConfig: MastraAuthConfig): boolean => {\n // Check if this path+method combination is publicly accessible\n const publicAccess = [...(defaultAuthConfig.public || []), ...(authConfig.public || [])];\n\n return isAnyMatch(path, method, publicAccess);\n};\n\nconst isAnyMatch = (\n path: string,\n method: string,\n patterns: MastraAuthConfig['protected'] | MastraAuthConfig['public'],\n): boolean => {\n if (!patterns) {\n return false;\n }\n\n for (const patternPathOrMethod of patterns) {\n if (patternPathOrMethod instanceof RegExp) {\n if (patternPathOrMethod.test(path)) {\n return true;\n }\n }\n\n if (typeof patternPathOrMethod === 'string' && pathMatchesPattern(path, patternPathOrMethod)) {\n return true;\n }\n\n if (Array.isArray(patternPathOrMethod) && patternPathOrMethod.length === 2) {\n const [pattern, methodOrMethods] = patternPathOrMethod;\n if (pathMatchesPattern(path, pattern) && matchesOrIncludes(methodOrMethods, method)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nexport const pathMatchesPattern = (path: string, pattern: string): boolean => {\n // Use regexparam for battle-tested path matching\n // Supports:\n // - Exact paths: '/api/users'\n // - Wildcards: '/api/agents/*' matches '/api/agents/123'\n // - Path parameters: '/users/:id' matches '/users/123'\n // - Optional parameters: '/users/:id?' matches '/users' and '/users/123'\n // - Mixed patterns: '/api/:version/users/:id/profile'\n const { pattern: regex } = parse(pattern);\n return regex.test(path);\n};\n\nexport const pathMatchesRule = (path: string, rulePath: string | RegExp | string[] | undefined): boolean => {\n if (!rulePath) return true; // No path specified means all paths\n\n if (typeof rulePath === 'string') {\n return pathMatchesPattern(path, rulePath);\n }\n\n if (rulePath instanceof RegExp) {\n return rulePath.test(path);\n }\n\n if (Array.isArray(rulePath)) {\n return rulePath.some(p => pathMatchesPattern(path, p));\n }\n\n return false;\n};\n\nexport const matchesOrIncludes = (values: string | string[], value: string): boolean => {\n if (typeof values === 'string') {\n return values === value;\n }\n\n if (Array.isArray(values)) {\n return values.includes(value);\n }\n\n return false;\n};\n\n// ── Core auth middleware ──\n// Framework-agnostic auth logic extracted from adapter middlewares.\n// Each adapter builds an AuthMiddlewareContext and delegates to coreAuthMiddleware.\n\nexport interface AuthMiddlewareContext {\n path: string;\n method: string;\n getHeader: (name: string) => string | undefined;\n mastra: Mastra;\n authConfig: MastraAuthConfig;\n customRouteAuthConfig?: Map<string, boolean>;\n requestContext: { get: (key: string) => unknown; set: (key: string, value: unknown) => void };\n rawRequest: unknown;\n token: string | null;\n buildAuthorizeContext: () => unknown;\n}\n\nexport type AuthResult =\n | { action: 'next'; headers?: Record<string, string> }\n | { action: 'error'; status: number; body: Record<string, unknown>; headers?: Record<string, string> };\n\nconst pass: AuthResult = { action: 'next' };\n\nexport interface GetAuthenticatedUserOptions {\n mastra: Mastra;\n token: string;\n request: Request | HonoRequest;\n}\n\nexport const getAuthenticatedUser = async <TUser = unknown>({\n mastra,\n token,\n request,\n}: GetAuthenticatedUserOptions): Promise<TUser | null> => {\n const normalizedToken = token.replace(/^Bearer\\s+/i, '').trim();\n if (!normalizedToken) {\n return null;\n }\n\n const authConfig = mastra.getServer()?.auth;\n if (!authConfig || typeof authConfig.authenticateToken !== 'function') {\n return null;\n }\n\n return (await authConfig.authenticateToken(normalizedToken, request as any)) as TUser | null;\n};\n\n/**\n * Check if an auth config object supports transparent session refresh.\n * Returns true if the auth provider implements the necessary ISessionProvider methods.\n */\nexport function supportsSessionRefresh(\n authConfig: MastraAuthConfig | MastraAuthProvider,\n): authConfig is (MastraAuthConfig | MastraAuthProvider) &\n Pick<ISessionProvider, 'refreshSession' | 'getSessionIdFromRequest' | 'getSessionHeaders'> {\n return (\n typeof (authConfig as any).getSessionIdFromRequest === 'function' &&\n typeof (authConfig as any).refreshSession === 'function' &&\n typeof (authConfig as any).getSessionHeaders === 'function'\n );\n}\n\n/**\n * Single auth middleware: authenticate → authorize.\n * Skip checks (dev playground, unprotected path, public path) are evaluated once.\n */\nexport const coreAuthMiddleware = async (ctx: AuthMiddlewareContext): Promise<AuthResult> => {\n const { path, method, getHeader, mastra, authConfig, customRouteAuthConfig, requestContext, rawRequest, token } = ctx;\n\n // ── Skip checks (evaluated once) ──\n\n // Only bypass auth for dev playground when no real auth provider is configured.\n // When auth IS configured (has authenticateToken), we need the full auth flow\n // so user/roles/permissions are set in requestContext.\n const hasAuthProvider = typeof authConfig.authenticateToken === 'function';\n if (!hasAuthProvider && isDevPlaygroundRequest(path, method, getHeader, authConfig, customRouteAuthConfig)) {\n return pass;\n }\n\n if (!isProtectedPath(path, method, authConfig, customRouteAuthConfig)) {\n return pass;\n }\n\n if (canAccessPublicly(path, method, authConfig)) {\n return pass;\n }\n\n // ── Authentication ──\n\n let user: unknown;\n let refreshHeaders: Record<string, string> | undefined;\n\n try {\n if (typeof authConfig.authenticateToken === 'function') {\n user = await authConfig.authenticateToken(token ?? '', rawRequest as any);\n } else {\n throw new Error('No token verification method configured');\n }\n\n // If authentication failed, attempt transparent session refresh before returning 401.\n // This handles expired access tokens without requiring client-side refresh logic.\n if (!user && supportsSessionRefresh(authConfig) && rawRequest instanceof Request) {\n try {\n const sessionId = authConfig.getSessionIdFromRequest(rawRequest);\n if (sessionId) {\n const newSession = await authConfig.refreshSession(sessionId);\n if (newSession) {\n // Refresh succeeded — build updated session headers and re-authenticate.\n // We create a synthetic request with the new session cookie so\n // authenticateToken (which reads cookies from the request) picks up\n // the refreshed session instead of the expired one.\n refreshHeaders = authConfig.getSessionHeaders(newSession);\n const refreshedCookie = Object.entries(refreshHeaders)\n .filter(([k]) => k.toLowerCase() === 'set-cookie')\n .map(([, v]) => v.split(';')[0]) // Extract name=value before attributes\n .join('; ');\n if (refreshedCookie) {\n const refreshedRequest = new Request(rawRequest.url, {\n method: rawRequest.method,\n headers: new Headers(rawRequest.headers),\n });\n refreshedRequest.headers.set('Cookie', refreshedCookie);\n // Pass the refreshed cookie value as the token so authenticateToken\n // picks up the new session instead of the stale original.\n // Auth providers typically read cookies from the request object, but\n // some may also inspect the token parameter directly.\n const cookieValue = refreshedCookie.includes('=')\n ? refreshedCookie.split('=').slice(1).join('=')\n : refreshedCookie;\n user = await authConfig.authenticateToken(cookieValue, refreshedRequest as any);\n }\n if (!user) {\n refreshHeaders = undefined;\n }\n }\n }\n } catch (refreshErr) {\n refreshHeaders = undefined;\n mastra.getLogger()?.debug('Session refresh failed, falling back to 401', {\n error: refreshErr instanceof Error ? { message: refreshErr.message } : refreshErr,\n });\n }\n }\n\n if (!user) {\n return { action: 'error', status: 401, body: { error: 'Invalid or expired token' }, headers: refreshHeaders };\n }\n\n requestContext.set('user', user);\n\n // Store the raw auth token so downstream code (e.g., editor MCP client\n // resolution) can forward it when connecting to auth-protected MCP servers.\n // The token may arrive via Authorization header, apiKey query param, or\n // cookie (SimpleAuth sets `mastra-token`). Check all sources so the\n // forwarded value is available regardless of how the user authenticated.\n let effectiveToken = token;\n if (!effectiveToken && rawRequest instanceof Request) {\n const cookieHeader = rawRequest.headers.get('cookie');\n if (cookieHeader) {\n const match = cookieHeader.match(/mastra-token=([^;]+)/);\n if (match?.[1]) effectiveToken = match[1];\n }\n }\n if (effectiveToken) {\n requestContext.set(MASTRA_AUTH_TOKEN_KEY, effectiveToken);\n }\n\n if (typeof authConfig.mapUserToResourceId === 'function') {\n try {\n const resourceId = authConfig.mapUserToResourceId(user);\n if (resourceId) {\n requestContext.set(MASTRA_RESOURCE_ID_KEY, resourceId);\n }\n } catch (mapError) {\n mastra.getLogger()?.error('mapUserToResourceId failed', {\n error: mapError instanceof Error ? { message: mapError.message, stack: mapError.stack } : mapError,\n });\n return {\n action: 'error',\n status: 500,\n body: { error: 'Failed to map authenticated user to a resource ID' },\n headers: refreshHeaders,\n };\n }\n }\n\n try {\n const serverConfig = mastra.getServer();\n const rbacProvider = serverConfig?.rbac as IRBACProvider<EEUser> | undefined;\n\n if (rbacProvider) {\n if (!user || typeof user !== 'object' || !('id' in user)) {\n mastra.getLogger()?.warn('RBAC: authenticated user missing required \"id\" field, skipping permission loading');\n } else {\n const permissions = await rbacProvider.getPermissions(user as EEUser);\n requestContext.set('userPermissions', permissions);\n\n const roles = await rbacProvider.getRoles(user as EEUser);\n requestContext.set('userRoles', roles);\n }\n }\n } catch (rbacError) {\n mastra.getLogger()?.error('RBAC: failed to load user permissions/roles', {\n error: rbacError instanceof Error ? { message: rbacError.message, stack: rbacError.stack } : rbacError,\n });\n }\n } catch (err) {\n mastra.getLogger()?.error('Authentication error', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n return { action: 'error', status: 401, body: { error: 'Invalid or expired token' }, headers: refreshHeaders };\n }\n\n // ── Authorization ──\n\n if ('authorizeUser' in authConfig && typeof authConfig.authorizeUser === 'function') {\n try {\n const isAuthorized = await authConfig.authorizeUser(user, rawRequest as any);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' }, headers: refreshHeaders };\n }\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorizeUser', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n });\n return { action: 'error', status: 500, body: { error: 'Authorization error' }, headers: refreshHeaders };\n }\n } else if ('authorize' in authConfig && typeof authConfig.authorize === 'function') {\n try {\n const authorizeCtx = ctx.buildAuthorizeContext();\n const isAuthorized = await authConfig.authorize(path, method, user, authorizeCtx as any);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' }, headers: refreshHeaders };\n }\n } catch (err) {\n mastra.getLogger()?.error('Authorization error in authorize', {\n error: err instanceof Error ? { message: err.message, stack: err.stack } : err,\n path,\n method,\n });\n return { action: 'error', status: 500, body: { error: 'Authorization error' }, headers: refreshHeaders };\n }\n } else if ('rules' in authConfig && authConfig.rules && authConfig.rules.length > 0) {\n const isAuthorized = await checkRules(authConfig.rules, path, method, user);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' }, headers: refreshHeaders };\n }\n } else {\n // No explicit authorization configured (authorizeUser, authorize, or rules)\n // Check if RBAC is configured - if not, allow authenticated users through\n // (auth-only mode = authenticated users get full access)\n const rbacProvider = mastra.getServer()?.rbac;\n if (rbacProvider) {\n if (defaultAuthConfig.rules && defaultAuthConfig.rules.length > 0) {\n const isAuthorized = await checkRules(defaultAuthConfig.rules, path, method, user);\n\n if (!isAuthorized) {\n return { action: 'error', status: 403, body: { error: 'Access denied' }, headers: refreshHeaders };\n }\n } else {\n return { action: 'error', status: 403, body: { error: 'Access denied' }, headers: refreshHeaders };\n }\n }\n }\n\n return refreshHeaders ? { action: 'next', headers: refreshHeaders } : pass;\n};\n\n// Check authorization rules\nexport const checkRules = async (\n rules: MastraAuthConfig['rules'],\n path: string,\n method: string,\n user: unknown,\n): Promise<boolean> => {\n // Go through rules in order (first match wins)\n for (const i in rules || []) {\n const rule = rules?.[i]!;\n // Check if rule applies to this path\n if (!pathMatchesRule(path, rule.path)) {\n continue;\n }\n\n // Check if rule applies to this method\n if (rule.methods && !matchesOrIncludes(rule.methods, method)) {\n continue;\n }\n\n // Rule matches, check conditions\n const condition = rule.condition;\n if (typeof condition === 'function') {\n const allowed = await Promise.resolve()\n .then(() => condition(user))\n .catch(() => false);\n\n if (allowed) {\n return true;\n }\n } else if (rule.allow) {\n return true;\n }\n }\n\n // No matching rules, deny by default\n return false;\n};\n"]}