@mastra/server 1.38.0-alpha.4 → 1.38.0-alpha.6

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 (320) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/dist/{api-schema-manifest-MIQHCYPS.js → api-schema-manifest-FZKORLYQ.js} +3 -3
  3. package/dist/{api-schema-manifest-MIQHCYPS.js.map → api-schema-manifest-FZKORLYQ.js.map} +1 -1
  4. package/dist/{api-schema-manifest-JTQHOGKZ.cjs → api-schema-manifest-VBPLWVM3.cjs} +4 -4
  5. package/dist/{api-schema-manifest-JTQHOGKZ.cjs.map → api-schema-manifest-VBPLWVM3.cjs.map} +1 -1
  6. package/dist/{chunk-CVWSJF4P.cjs → chunk-2TM4EPMU.cjs} +10 -10
  7. package/dist/{chunk-CVWSJF4P.cjs.map → chunk-2TM4EPMU.cjs.map} +1 -1
  8. package/dist/{chunk-3X74T3P7.cjs → chunk-3CPWBXXK.cjs} +28 -28
  9. package/dist/{chunk-3X74T3P7.cjs.map → chunk-3CPWBXXK.cjs.map} +1 -1
  10. package/dist/{chunk-UTBBNDFB.cjs → chunk-3LUN33E7.cjs} +160 -34
  11. package/dist/chunk-3LUN33E7.cjs.map +1 -0
  12. package/dist/{chunk-E7UDPLDF.cjs → chunk-3QTG4V4W.cjs} +10 -2
  13. package/dist/chunk-3QTG4V4W.cjs.map +1 -0
  14. package/dist/{chunk-JGADJAZH.js → chunk-4APV4ZWP.js} +3 -3
  15. package/dist/{chunk-JGADJAZH.js.map → chunk-4APV4ZWP.js.map} +1 -1
  16. package/dist/{chunk-6KPE7KSJ.cjs → chunk-4DGDQWQQ.cjs} +20 -20
  17. package/dist/{chunk-6KPE7KSJ.cjs.map → chunk-4DGDQWQQ.cjs.map} +1 -1
  18. package/dist/{chunk-LJRCDF42.js → chunk-4DVNH3KJ.js} +5 -5
  19. package/dist/{chunk-LJRCDF42.js.map → chunk-4DVNH3KJ.js.map} +1 -1
  20. package/dist/{chunk-ZQZDPWLU.js → chunk-4T6DC425.js} +4 -4
  21. package/dist/{chunk-ZQZDPWLU.js.map → chunk-4T6DC425.js.map} +1 -1
  22. package/dist/{chunk-Z3TZ2Z34.js → chunk-4V2VNFVM.js} +3 -3
  23. package/dist/{chunk-Z3TZ2Z34.js.map → chunk-4V2VNFVM.js.map} +1 -1
  24. package/dist/{chunk-2DTOYQQ4.js → chunk-5FPJ4RT4.js} +3 -3
  25. package/dist/{chunk-2DTOYQQ4.js.map → chunk-5FPJ4RT4.js.map} +1 -1
  26. package/dist/{chunk-PJI3MJPX.js → chunk-5PCUNLFX.js} +3 -3
  27. package/dist/{chunk-PJI3MJPX.js.map → chunk-5PCUNLFX.js.map} +1 -1
  28. package/dist/{chunk-UWETKNZ3.js → chunk-5SK4SJJH.js} +4 -4
  29. package/dist/{chunk-UWETKNZ3.js.map → chunk-5SK4SJJH.js.map} +1 -1
  30. package/dist/{chunk-XBXNMMSC.js → chunk-5X42YLFY.js} +5 -5
  31. package/dist/{chunk-XBXNMMSC.js.map → chunk-5X42YLFY.js.map} +1 -1
  32. package/dist/{chunk-EESKD5BC.js → chunk-65NVES6T.js} +3 -3
  33. package/dist/{chunk-EESKD5BC.js.map → chunk-65NVES6T.js.map} +1 -1
  34. package/dist/{chunk-OSQG52VD.cjs → chunk-6MMXLHED.cjs} +42 -42
  35. package/dist/{chunk-OSQG52VD.cjs.map → chunk-6MMXLHED.cjs.map} +1 -1
  36. package/dist/{chunk-FIHBL47F.cjs → chunk-6XSS54BL.cjs} +34 -34
  37. package/dist/{chunk-FIHBL47F.cjs.map → chunk-6XSS54BL.cjs.map} +1 -1
  38. package/dist/{chunk-XVLL5IGQ.js → chunk-7GOHECZP.js} +4 -4
  39. package/dist/{chunk-XVLL5IGQ.js.map → chunk-7GOHECZP.js.map} +1 -1
  40. package/dist/{chunk-QB5CXFV7.js → chunk-7OSWGIVM.js} +57 -5
  41. package/dist/chunk-7OSWGIVM.js.map +1 -0
  42. package/dist/{chunk-4PB6LUYQ.js → chunk-7ZW76TJN.js} +10 -3
  43. package/dist/chunk-7ZW76TJN.js.map +1 -0
  44. package/dist/{chunk-RJ5ZIUGX.js → chunk-7ZWJX3AN.js} +7 -3
  45. package/dist/chunk-7ZWJX3AN.js.map +1 -0
  46. package/dist/{chunk-3AAQTZ7E.js → chunk-A4PMW64L.js} +3 -3
  47. package/dist/{chunk-3AAQTZ7E.js.map → chunk-A4PMW64L.js.map} +1 -1
  48. package/dist/{chunk-GS6MWMFA.cjs → chunk-AC7GMUBN.cjs} +8 -8
  49. package/dist/{chunk-GS6MWMFA.cjs.map → chunk-AC7GMUBN.cjs.map} +1 -1
  50. package/dist/{chunk-EN3XZKLJ.js → chunk-ALC6OZ2K.js} +42 -37
  51. package/dist/chunk-ALC6OZ2K.js.map +1 -0
  52. package/dist/{chunk-YX73TS6P.js → chunk-APFBOAS4.js} +5 -4
  53. package/dist/chunk-APFBOAS4.js.map +1 -0
  54. package/dist/{chunk-ZYPYYEM2.cjs → chunk-AUO32DAZ.cjs} +10 -10
  55. package/dist/{chunk-ZYPYYEM2.cjs.map → chunk-AUO32DAZ.cjs.map} +1 -1
  56. package/dist/{chunk-7K5JYB7U.js → chunk-AV6CVKHQ.js} +5 -5
  57. package/dist/{chunk-7K5JYB7U.js.map → chunk-AV6CVKHQ.js.map} +1 -1
  58. package/dist/{chunk-BDYSW764.cjs → chunk-BHAAMXKQ.cjs} +19 -19
  59. package/dist/{chunk-BDYSW764.cjs.map → chunk-BHAAMXKQ.cjs.map} +1 -1
  60. package/dist/{chunk-R6SXN4ZF.js → chunk-BKYFKSJI.js} +4 -4
  61. package/dist/{chunk-R6SXN4ZF.js.map → chunk-BKYFKSJI.js.map} +1 -1
  62. package/dist/{chunk-HLXSMXGN.js → chunk-BSHJ4HUN.js} +3 -3
  63. package/dist/{chunk-HLXSMXGN.js.map → chunk-BSHJ4HUN.js.map} +1 -1
  64. package/dist/{chunk-QF5MCGQH.cjs → chunk-C7I2QUNB.cjs} +8 -8
  65. package/dist/{chunk-QF5MCGQH.cjs.map → chunk-C7I2QUNB.cjs.map} +1 -1
  66. package/dist/{chunk-C2HD3ATG.js → chunk-C7SZPANJ.js} +4 -4
  67. package/dist/{chunk-C2HD3ATG.js.map → chunk-C7SZPANJ.js.map} +1 -1
  68. package/dist/{chunk-HARB3PEO.cjs → chunk-CJMJQR2K.cjs} +9 -9
  69. package/dist/{chunk-HARB3PEO.cjs.map → chunk-CJMJQR2K.cjs.map} +1 -1
  70. package/dist/{chunk-NN3PXFMG.js → chunk-CZ7S47XN.js} +4 -4
  71. package/dist/{chunk-NN3PXFMG.js.map → chunk-CZ7S47XN.js.map} +1 -1
  72. package/dist/{chunk-RZ5J47R2.cjs → chunk-DNKTFFOV.cjs} +8 -8
  73. package/dist/{chunk-RZ5J47R2.cjs.map → chunk-DNKTFFOV.cjs.map} +1 -1
  74. package/dist/{chunk-NQEP6UT5.js → chunk-DRXZDKLU.js} +3 -3
  75. package/dist/{chunk-NQEP6UT5.js.map → chunk-DRXZDKLU.js.map} +1 -1
  76. package/dist/chunk-EO2NEVNF.cjs +693 -0
  77. package/dist/chunk-EO2NEVNF.cjs.map +1 -0
  78. package/dist/{chunk-G7N4TLWZ.js → chunk-EUFT3MIX.js} +10 -3
  79. package/dist/chunk-EUFT3MIX.js.map +1 -0
  80. package/dist/{chunk-VYDWPLTW.cjs → chunk-F27R55RI.cjs} +9 -9
  81. package/dist/{chunk-VYDWPLTW.cjs.map → chunk-F27R55RI.cjs.map} +1 -1
  82. package/dist/{chunk-M56TT27J.cjs → chunk-FDSM4QTH.cjs} +9 -8
  83. package/dist/chunk-FDSM4QTH.cjs.map +1 -0
  84. package/dist/{chunk-56IL637L.cjs → chunk-FPKJAWB4.cjs} +7 -7
  85. package/dist/{chunk-56IL637L.cjs.map → chunk-FPKJAWB4.cjs.map} +1 -1
  86. package/dist/{chunk-4E5KGAY3.js → chunk-FSSG5YQJ.js} +3 -3
  87. package/dist/{chunk-4E5KGAY3.js.map → chunk-FSSG5YQJ.js.map} +1 -1
  88. package/dist/{chunk-6FHJAHQJ.cjs → chunk-H7KDCXLQ.cjs} +11 -2
  89. package/dist/chunk-H7KDCXLQ.cjs.map +1 -0
  90. package/dist/{chunk-NTXOTHB5.js → chunk-HEXNQMST.js} +3 -3
  91. package/dist/{chunk-NTXOTHB5.js.map → chunk-HEXNQMST.js.map} +1 -1
  92. package/dist/{chunk-BO3KDJW5.cjs → chunk-HX5BGP6D.cjs} +23 -23
  93. package/dist/{chunk-BO3KDJW5.cjs.map → chunk-HX5BGP6D.cjs.map} +1 -1
  94. package/dist/{chunk-234HJ3C3.js → chunk-IJFPP2XB.js} +134 -9
  95. package/dist/chunk-IJFPP2XB.js.map +1 -0
  96. package/dist/{chunk-FYCTKP2F.js → chunk-J6OD53OV.js} +11 -4
  97. package/dist/chunk-J6OD53OV.js.map +1 -0
  98. package/dist/{chunk-HR5UNJF7.cjs → chunk-JCGWKWCU.cjs} +12 -9
  99. package/dist/chunk-JCGWKWCU.cjs.map +1 -0
  100. package/dist/{chunk-TRUKR5IR.cjs → chunk-K5ANQB3I.cjs} +8 -8
  101. package/dist/{chunk-TRUKR5IR.cjs.map → chunk-K5ANQB3I.cjs.map} +1 -1
  102. package/dist/{chunk-QYPJXCL6.js → chunk-KFMVQ2HX.js} +3 -3
  103. package/dist/{chunk-QYPJXCL6.js.map → chunk-KFMVQ2HX.js.map} +1 -1
  104. package/dist/{chunk-TNRHBPDN.js → chunk-KSZXXQHZ.js} +5 -5
  105. package/dist/{chunk-TNRHBPDN.js.map → chunk-KSZXXQHZ.js.map} +1 -1
  106. package/dist/{chunk-QCCJOLRZ.js → chunk-M7HLT2GO.js} +3 -3
  107. package/dist/{chunk-QCCJOLRZ.js.map → chunk-M7HLT2GO.js.map} +1 -1
  108. package/dist/{chunk-JV2TL2NQ.cjs → chunk-MFYZWOKE.cjs} +5 -5
  109. package/dist/{chunk-JV2TL2NQ.cjs.map → chunk-MFYZWOKE.cjs.map} +1 -1
  110. package/dist/{chunk-GTCQB7MH.js → chunk-MLPBZURS.js} +3 -3
  111. package/dist/{chunk-GTCQB7MH.js.map → chunk-MLPBZURS.js.map} +1 -1
  112. package/dist/{chunk-XTZIOA6R.cjs → chunk-N2VPPQLD.cjs} +6 -6
  113. package/dist/{chunk-XTZIOA6R.cjs.map → chunk-N2VPPQLD.cjs.map} +1 -1
  114. package/dist/{chunk-KOU4JKTW.cjs → chunk-NLIGVLFF.cjs} +4 -4
  115. package/dist/{chunk-KOU4JKTW.cjs.map → chunk-NLIGVLFF.cjs.map} +1 -1
  116. package/dist/{chunk-CZM46CXF.cjs → chunk-NSXV3FWO.cjs} +28 -28
  117. package/dist/{chunk-CZM46CXF.cjs.map → chunk-NSXV3FWO.cjs.map} +1 -1
  118. package/dist/{chunk-65ZS7YK4.cjs → chunk-ODIMB6T6.cjs} +7 -7
  119. package/dist/{chunk-65ZS7YK4.cjs.map → chunk-ODIMB6T6.cjs.map} +1 -1
  120. package/dist/{chunk-WYGD4ZMU.js → chunk-OHPJKAQ6.js} +3 -3
  121. package/dist/{chunk-WYGD4ZMU.js.map → chunk-OHPJKAQ6.js.map} +1 -1
  122. package/dist/{chunk-EQF2PRTA.cjs → chunk-P7FVOCQB.cjs} +9 -9
  123. package/dist/{chunk-EQF2PRTA.cjs.map → chunk-P7FVOCQB.cjs.map} +1 -1
  124. package/dist/{chunk-VTQOAV2C.cjs → chunk-PYABOUTD.cjs} +19 -19
  125. package/dist/{chunk-VTQOAV2C.cjs.map → chunk-PYABOUTD.cjs.map} +1 -1
  126. package/dist/{chunk-6WP3XK7P.cjs → chunk-QH3IFRYL.cjs} +8 -8
  127. package/dist/{chunk-6WP3XK7P.cjs.map → chunk-QH3IFRYL.cjs.map} +1 -1
  128. package/dist/{chunk-MZ3EAJXG.js → chunk-QM3NYDZZ.js} +123 -8
  129. package/dist/chunk-QM3NYDZZ.js.map +1 -0
  130. package/dist/{chunk-W3NKJMCD.cjs → chunk-R2CBBOZ4.cjs} +5 -5
  131. package/dist/{chunk-W3NKJMCD.cjs.map → chunk-R2CBBOZ4.cjs.map} +1 -1
  132. package/dist/{chunk-3MTM5V2U.js → chunk-R3UMBVUI.js} +3 -3
  133. package/dist/{chunk-3MTM5V2U.js.map → chunk-R3UMBVUI.js.map} +1 -1
  134. package/dist/{chunk-GX5H6RBX.js → chunk-R6NHDZOY.js} +3 -3
  135. package/dist/{chunk-GX5H6RBX.js.map → chunk-R6NHDZOY.js.map} +1 -1
  136. package/dist/{chunk-R77QBP2Q.cjs → chunk-RTYOFB6W.cjs} +33 -3
  137. package/dist/chunk-RTYOFB6W.cjs.map +1 -0
  138. package/dist/{chunk-SJ27XRQ3.js → chunk-RULES2JK.js} +3 -3
  139. package/dist/{chunk-SJ27XRQ3.js.map → chunk-RULES2JK.js.map} +1 -1
  140. package/dist/{chunk-RTM2LDYY.js → chunk-RXT5WOCU.js} +3 -3
  141. package/dist/{chunk-RTM2LDYY.js.map → chunk-RXT5WOCU.js.map} +1 -1
  142. package/dist/{chunk-3KDY4WRR.js → chunk-RZL2PIA2.js} +3 -3
  143. package/dist/{chunk-3KDY4WRR.js.map → chunk-RZL2PIA2.js.map} +1 -1
  144. package/dist/{chunk-T254JS3B.cjs → chunk-T2FBYRYD.cjs} +14 -5
  145. package/dist/chunk-T2FBYRYD.cjs.map +1 -0
  146. package/dist/{chunk-OGJFOIOH.js → chunk-T6IXA4ZQ.js} +4 -4
  147. package/dist/{chunk-OGJFOIOH.js.map → chunk-T6IXA4ZQ.js.map} +1 -1
  148. package/dist/{chunk-ANFNDHDM.cjs → chunk-TLMAHJTC.cjs} +16 -16
  149. package/dist/{chunk-ANFNDHDM.cjs.map → chunk-TLMAHJTC.cjs.map} +1 -1
  150. package/dist/{chunk-HEFYNGLM.js → chunk-UFYCA27U.js} +30 -4
  151. package/dist/chunk-UFYCA27U.js.map +1 -0
  152. package/dist/{chunk-DEYP5MF7.cjs → chunk-UIVHXCOY.cjs} +99 -46
  153. package/dist/chunk-UIVHXCOY.cjs.map +1 -0
  154. package/dist/{chunk-ARL3PR23.cjs → chunk-URPPGJGU.cjs} +42 -42
  155. package/dist/{chunk-ARL3PR23.cjs.map → chunk-URPPGJGU.cjs.map} +1 -1
  156. package/dist/{chunk-437FDAUG.cjs → chunk-URW7EH4T.cjs} +18 -18
  157. package/dist/{chunk-437FDAUG.cjs.map → chunk-URW7EH4T.cjs.map} +1 -1
  158. package/dist/{chunk-JCE67TCD.cjs → chunk-V57FPA4V.cjs} +8 -8
  159. package/dist/{chunk-JCE67TCD.cjs.map → chunk-V57FPA4V.cjs.map} +1 -1
  160. package/dist/{chunk-THPO2LIB.cjs → chunk-VBQKBXAI.cjs} +10 -10
  161. package/dist/{chunk-THPO2LIB.cjs.map → chunk-VBQKBXAI.cjs.map} +1 -1
  162. package/dist/{chunk-67X7UIDG.cjs → chunk-VH6QCEN7.cjs} +247 -130
  163. package/dist/chunk-VH6QCEN7.cjs.map +1 -0
  164. package/dist/{chunk-5SM6OBSO.js → chunk-VHQQGSZM.js} +9 -6
  165. package/dist/chunk-VHQQGSZM.js.map +1 -0
  166. package/dist/{chunk-MCRZYWPS.js → chunk-WADS7CD7.js} +4 -4
  167. package/dist/{chunk-MCRZYWPS.js.map → chunk-WADS7CD7.js.map} +1 -1
  168. package/dist/{chunk-OM7HESYA.cjs → chunk-WXJSYUBX.cjs} +4 -4
  169. package/dist/{chunk-OM7HESYA.cjs.map → chunk-WXJSYUBX.cjs.map} +1 -1
  170. package/dist/{chunk-6A4EEIXX.cjs → chunk-WZ6R4WZT.cjs} +4 -4
  171. package/dist/{chunk-6A4EEIXX.cjs.map → chunk-WZ6R4WZT.cjs.map} +1 -1
  172. package/dist/{chunk-ZIBWBUTB.js → chunk-XB6H6LOM.js} +4 -4
  173. package/dist/{chunk-ZIBWBUTB.js.map → chunk-XB6H6LOM.js.map} +1 -1
  174. package/dist/{chunk-R6HOWZFY.cjs → chunk-XDOMY4VL.cjs} +11 -11
  175. package/dist/{chunk-R6HOWZFY.cjs.map → chunk-XDOMY4VL.cjs.map} +1 -1
  176. package/dist/{chunk-APGJQAJ7.js → chunk-Z2ZMHHQW.js} +4 -4
  177. package/dist/{chunk-APGJQAJ7.js.map → chunk-Z2ZMHHQW.js.map} +1 -1
  178. package/dist/{chunk-STZTV4FB.cjs → chunk-Z7LCIYK7.cjs} +8 -4
  179. package/dist/chunk-Z7LCIYK7.cjs.map +1 -0
  180. package/dist/{chunk-2566PIF5.cjs → chunk-ZAWZ2BWD.cjs} +6 -6
  181. package/dist/{chunk-2566PIF5.cjs.map → chunk-ZAWZ2BWD.cjs.map} +1 -1
  182. package/dist/{chunk-R657EJZD.js → chunk-ZN3JHWNH.js} +3 -3
  183. package/dist/{chunk-R657EJZD.js.map → chunk-ZN3JHWNH.js.map} +1 -1
  184. package/dist/{chunk-URLWJKB6.cjs → chunk-ZNMKBPTN.cjs} +23 -23
  185. package/dist/{chunk-URLWJKB6.cjs.map → chunk-ZNMKBPTN.cjs.map} +1 -1
  186. package/dist/docs/SKILL.md +1 -1
  187. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  188. package/dist/docs/references/reference-server-routes.md +40 -13
  189. package/dist/server/handlers/a2a.cjs +14 -14
  190. package/dist/server/handlers/a2a.js +1 -1
  191. package/dist/server/handlers/agent-builder.cjs +17 -17
  192. package/dist/server/handlers/agent-builder.js +1 -1
  193. package/dist/server/handlers/agent-versions.cjs +8 -8
  194. package/dist/server/handlers/agent-versions.js +1 -1
  195. package/dist/server/handlers/agents.cjs +51 -43
  196. package/dist/server/handlers/agents.d.ts +78 -1
  197. package/dist/server/handlers/agents.d.ts.map +1 -1
  198. package/dist/server/handlers/agents.js +1 -1
  199. package/dist/server/handlers/auth.cjs +12 -12
  200. package/dist/server/handlers/auth.js +1 -1
  201. package/dist/server/handlers/builder-registry.cjs +6 -6
  202. package/dist/server/handlers/builder-registry.js +1 -1
  203. package/dist/server/handlers/channels.cjs +5 -5
  204. package/dist/server/handlers/channels.js +1 -1
  205. package/dist/server/handlers/conversations.cjs +5 -5
  206. package/dist/server/handlers/conversations.js +1 -1
  207. package/dist/server/handlers/datasets.cjs +26 -26
  208. package/dist/server/handlers/datasets.js +1 -1
  209. package/dist/server/handlers/editor-builder.cjs +5 -5
  210. package/dist/server/handlers/editor-builder.d.ts.map +1 -1
  211. package/dist/server/handlers/editor-builder.js +1 -1
  212. package/dist/server/handlers/error.cjs +4 -4
  213. package/dist/server/handlers/error.d.ts.map +1 -1
  214. package/dist/server/handlers/error.js +1 -1
  215. package/dist/server/handlers/favorites-enrichment.cjs +4 -4
  216. package/dist/server/handlers/favorites-enrichment.js +1 -1
  217. package/dist/server/handlers/logs.cjs +4 -4
  218. package/dist/server/handlers/logs.js +1 -1
  219. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  220. package/dist/server/handlers/mcp-client-versions.js +1 -1
  221. package/dist/server/handlers/memory.cjs +27 -27
  222. package/dist/server/handlers/memory.js +1 -1
  223. package/dist/server/handlers/observability-new-endpoints.cjs +29 -29
  224. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  225. package/dist/server/handlers/observability.cjs +40 -40
  226. package/dist/server/handlers/observability.js +2 -2
  227. package/dist/server/handlers/processor-providers.cjs +3 -3
  228. package/dist/server/handlers/processor-providers.js +1 -1
  229. package/dist/server/handlers/processors.cjs +4 -4
  230. package/dist/server/handlers/processors.js +1 -1
  231. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  232. package/dist/server/handlers/prompt-block-versions.js +1 -1
  233. package/dist/server/handlers/responses.cjs +4 -4
  234. package/dist/server/handlers/responses.js +1 -1
  235. package/dist/server/handlers/scorer-versions.cjs +8 -8
  236. package/dist/server/handlers/scorer-versions.js +1 -1
  237. package/dist/server/handlers/scores.cjs +7 -7
  238. package/dist/server/handlers/scores.js +1 -1
  239. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  240. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  241. package/dist/server/handlers/stored-agents.cjs +11 -7
  242. package/dist/server/handlers/stored-agents.d.ts +7537 -0
  243. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  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-skill-favorites.cjs +3 -3
  252. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  253. package/dist/server/handlers/stored-skills.cjs +7 -7
  254. package/dist/server/handlers/stored-skills.js +1 -1
  255. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  256. package/dist/server/handlers/stored-workspaces.js +1 -1
  257. package/dist/server/handlers/system.cjs +3 -3
  258. package/dist/server/handlers/system.d.ts +5 -0
  259. package/dist/server/handlers/system.d.ts.map +1 -1
  260. package/dist/server/handlers/system.js +1 -1
  261. package/dist/server/handlers/tool-providers.cjs +17 -13
  262. package/dist/server/handlers/tool-providers.d.ts +25 -0
  263. package/dist/server/handlers/tool-providers.d.ts.map +1 -1
  264. package/dist/server/handlers/tool-providers.js +1 -1
  265. package/dist/server/handlers/tools.cjs +6 -6
  266. package/dist/server/handlers/tools.js +1 -1
  267. package/dist/server/handlers/vector.cjs +16 -16
  268. package/dist/server/handlers/vector.js +1 -1
  269. package/dist/server/handlers/workflows.cjs +27 -27
  270. package/dist/server/handlers/workflows.js +1 -1
  271. package/dist/server/handlers/workspace.cjs +26 -26
  272. package/dist/server/handlers/workspace.js +1 -1
  273. package/dist/server/handlers.cjs +29 -29
  274. package/dist/server/handlers.js +14 -14
  275. package/dist/server/schemas/agents.d.ts +50 -0
  276. package/dist/server/schemas/agents.d.ts.map +1 -1
  277. package/dist/server/schemas/index.cjs +180 -144
  278. package/dist/server/schemas/index.js +7 -7
  279. package/dist/server/schemas/stored-agents.d.ts +3768 -0
  280. package/dist/server/schemas/stored-agents.d.ts.map +1 -1
  281. package/dist/server/schemas/system.d.ts +8 -0
  282. package/dist/server/schemas/system.d.ts.map +1 -1
  283. package/dist/server/schemas/tool-providers.d.ts +7 -0
  284. package/dist/server/schemas/tool-providers.d.ts.map +1 -1
  285. package/dist/server/server-adapter/index.cjs +16 -16
  286. package/dist/server/server-adapter/index.js +4 -4
  287. package/dist/server/server-adapter/routes/agents.d.ts +3 -1
  288. package/dist/server/server-adapter/routes/agents.d.ts.map +1 -1
  289. package/dist/server/server-adapter/routes/stored-agents.d.ts +2 -1
  290. package/dist/server/server-adapter/routes/stored-agents.d.ts.map +1 -1
  291. package/dist/server/server-adapter/routes/system.d.ts +5 -0
  292. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  293. package/dist/server/server-adapter/routes/tool-providers.d.ts +16 -0
  294. package/dist/server/server-adapter/routes/tool-providers.d.ts.map +1 -1
  295. package/dist/server/utils/resolve-builder-model-policy.d.ts +6 -0
  296. package/dist/server/utils/resolve-builder-model-policy.d.ts.map +1 -1
  297. package/package.json +6 -6
  298. package/dist/chunk-234HJ3C3.js.map +0 -1
  299. package/dist/chunk-4PB6LUYQ.js.map +0 -1
  300. package/dist/chunk-5SM6OBSO.js.map +0 -1
  301. package/dist/chunk-67X7UIDG.cjs.map +0 -1
  302. package/dist/chunk-6FHJAHQJ.cjs.map +0 -1
  303. package/dist/chunk-DEYP5MF7.cjs.map +0 -1
  304. package/dist/chunk-E7UDPLDF.cjs.map +0 -1
  305. package/dist/chunk-EN3XZKLJ.js.map +0 -1
  306. package/dist/chunk-FYCTKP2F.js.map +0 -1
  307. package/dist/chunk-G7N4TLWZ.js.map +0 -1
  308. package/dist/chunk-HEFYNGLM.js.map +0 -1
  309. package/dist/chunk-HR5UNJF7.cjs.map +0 -1
  310. package/dist/chunk-M56TT27J.cjs.map +0 -1
  311. package/dist/chunk-MZ3EAJXG.js.map +0 -1
  312. package/dist/chunk-Q5NDXAZ2.cjs +0 -688
  313. package/dist/chunk-Q5NDXAZ2.cjs.map +0 -1
  314. package/dist/chunk-QB5CXFV7.js.map +0 -1
  315. package/dist/chunk-R77QBP2Q.cjs.map +0 -1
  316. package/dist/chunk-RJ5ZIUGX.js.map +0 -1
  317. package/dist/chunk-STZTV4FB.cjs.map +0 -1
  318. package/dist/chunk-T254JS3B.cjs.map +0 -1
  319. package/dist/chunk-UTBBNDFB.cjs.map +0 -1
  320. package/dist/chunk-YX73TS6P.js.map +0 -1
@@ -4,7 +4,7 @@ var chunkAR7VSXHH_cjs = require('./chunk-AR7VSXHH.cjs');
4
4
  var chunkVX3MJR4P_cjs = require('./chunk-VX3MJR4P.cjs');
5
5
  var chunkHXICAUTW_cjs = require('./chunk-HXICAUTW.cjs');
6
6
  var chunkPPNPOLWL_cjs = require('./chunk-PPNPOLWL.cjs');
7
- var chunkSTZTV4FB_cjs = require('./chunk-STZTV4FB.cjs');
7
+ var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
8
8
  var chunkRZR7PLFW_cjs = require('./chunk-RZR7PLFW.cjs');
9
9
  var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
10
10
  var v4 = require('zod/v4');
@@ -137,7 +137,7 @@ var LIST_BUILDER_REGISTRIES_ROUTE = chunkRZR7PLFW_cjs.createRoute({
137
137
  const registries = await resolveRegistries(mastra);
138
138
  return { registries };
139
139
  } catch (error) {
140
- return chunkSTZTV4FB_cjs.handleError(error, "Error listing builder registries");
140
+ return chunkZ7LCIYK7_cjs.handleError(error, "Error listing builder registries");
141
141
  }
142
142
  }
143
143
  });
@@ -159,7 +159,7 @@ var BUILDER_REGISTRY_SEARCH_ROUTE = chunkRZR7PLFW_cjs.createRoute({
159
159
  return await chunkAR7VSXHH_cjs.searchSkillsSh({ q, limit });
160
160
  } catch (error) {
161
161
  if (error instanceof chunk64ITUOXI_cjs.HTTPException) throw error;
162
- return chunkSTZTV4FB_cjs.handleError(error, "Error searching registry");
162
+ return chunkZ7LCIYK7_cjs.handleError(error, "Error searching registry");
163
163
  }
164
164
  }
165
165
  });
@@ -181,7 +181,7 @@ var BUILDER_REGISTRY_POPULAR_ROUTE = chunkRZR7PLFW_cjs.createRoute({
181
181
  return await chunkAR7VSXHH_cjs.getPopularSkillsSh({ limit, offset });
182
182
  } catch (error) {
183
183
  if (error instanceof chunk64ITUOXI_cjs.HTTPException) throw error;
184
- return chunkSTZTV4FB_cjs.handleError(error, "Error fetching popular skills");
184
+ return chunkZ7LCIYK7_cjs.handleError(error, "Error fetching popular skills");
185
185
  }
186
186
  }
187
187
  });
@@ -203,7 +203,7 @@ var BUILDER_REGISTRY_PREVIEW_ROUTE = chunkRZR7PLFW_cjs.createRoute({
203
203
  return await chunkAR7VSXHH_cjs.previewSkillsSh({ owner, repo, skillName });
204
204
  } catch (error) {
205
205
  if (error instanceof chunk64ITUOXI_cjs.HTTPException) throw error;
206
- return chunkSTZTV4FB_cjs.handleError(error, "Error fetching skill preview");
206
+ return chunkZ7LCIYK7_cjs.handleError(error, "Error fetching skill preview");
207
207
  }
208
208
  }
209
209
  });
@@ -284,7 +284,7 @@ var BUILDER_REGISTRY_INSTALL_ROUTE = chunkRZR7PLFW_cjs.createRoute({
284
284
  };
285
285
  } catch (error) {
286
286
  if (error instanceof chunk64ITUOXI_cjs.HTTPException) throw error;
287
- return chunkSTZTV4FB_cjs.handleError(error, "Error installing registry skill");
287
+ return chunkZ7LCIYK7_cjs.handleError(error, "Error installing registry skill");
288
288
  }
289
289
  }
290
290
  });
@@ -294,5 +294,5 @@ exports.BUILDER_REGISTRY_POPULAR_ROUTE = BUILDER_REGISTRY_POPULAR_ROUTE;
294
294
  exports.BUILDER_REGISTRY_PREVIEW_ROUTE = BUILDER_REGISTRY_PREVIEW_ROUTE;
295
295
  exports.BUILDER_REGISTRY_SEARCH_ROUTE = BUILDER_REGISTRY_SEARCH_ROUTE;
296
296
  exports.LIST_BUILDER_REGISTRIES_ROUTE = LIST_BUILDER_REGISTRIES_ROUTE;
297
- //# sourceMappingURL=chunk-6WP3XK7P.cjs.map
298
- //# sourceMappingURL=chunk-6WP3XK7P.cjs.map
297
+ //# sourceMappingURL=chunk-QH3IFRYL.cjs.map
298
+ //# sourceMappingURL=chunk-QH3IFRYL.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/schemas/builder-registry.ts","../src/server/handlers/builder-registry.ts"],"names":["z","HTTPException","assertSafeFilePath","createRoute","handleError","skillsShSearchResponseSchema","searchSkillsSh","skillsShListResponseSchema","getPopularSkillsSh","skillsShPreviewResponseSchema","previewSkillsSh","fetchSkillFiles","assertSafeSkillName","toSlug","getCallerAuthorId"],"mappings":"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","file":"chunk-6WP3XK7P.cjs","sourcesContent":["/**\n * Builder Registry Schemas\n *\n * Schemas for the Agent Builder skill registry routes. These are distinct from\n * the workspace skills.sh proxy schemas because:\n * - Builder routes are not scoped to a workspace.\n * - Builder install does not accept a `mount` field.\n * - Builder install body carries visibility + the resolved registry id.\n * - Builder install response returns the created stored skill id.\n *\n * The upstream skills.sh proxy response shapes are reused via the shared\n * `skillsShSearchResponseSchema`, `skillsShListResponseSchema`, and\n * `skillsShPreviewResponseSchema` since the wire shape from skills.sh is\n * registry-independent.\n */\n\nimport { z } from 'zod/v4';\n\n// =============================================================================\n// Registry list\n// =============================================================================\n\n/** Single entry in the registries list. */\nexport const builderRegistryEntrySchema = z.object({\n id: z.literal('skills-sh').describe('Stable registry identifier'),\n enabled: z.boolean().describe('Whether this registry is enabled in the running deployment'),\n label: z.string().describe('Human-readable registry name'),\n});\n\n/** Response for `GET /editor/builder/registries`. */\nexport const builderRegistriesResponseSchema = z.object({\n registries: z.array(builderRegistryEntrySchema),\n});\n\n// =============================================================================\n// Search / popular / preview\n// =============================================================================\n\n/** Path params used by every per-registry route. */\nexport const builderRegistryPathParams = z.object({\n registryId: z.string().describe('Registry identifier (e.g. \"skills-sh\")'),\n});\n\nexport const builderRegistrySearchQuerySchema = z.object({\n q: z.string().describe('Search query'),\n limit: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Maximum number of results (1-100)'),\n});\n\nexport const builderRegistryPopularQuerySchema = z\n .object({\n limit: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Maximum number of results (1-100)'),\n offset: z.coerce\n .number()\n .int()\n .min(0)\n .optional()\n .default(0)\n .describe('Offset for pagination (must be a multiple of `limit`)'),\n })\n .refine(args => args.offset % args.limit === 0, {\n message: 'offset must be a multiple of limit (the upstream registry pages by `limit`)',\n path: ['offset'],\n });\n\nexport const builderRegistryPreviewQuerySchema = z.object({\n owner: z.string().describe('GitHub repository owner'),\n repo: z.string().describe('GitHub repository name'),\n path: z.string().describe('Skill name within repo'),\n});\n\n// =============================================================================\n// Install\n// =============================================================================\n\n/**\n * Body for `POST /editor/builder/registries/:registryId/install`.\n *\n * Visibility behaves like the standard stored-skill create flow: optional,\n * defaults to private when the caller is authenticated.\n */\nexport const builderRegistryInstallBodySchema = z.object({\n owner: z.string().describe('GitHub repository owner'),\n repo: z.string().describe('GitHub repository name'),\n skillName: z.string().describe('Skill name from the registry'),\n visibility: z.enum(['private', 'public']).optional().describe('Visibility for the new stored skill'),\n});\n\n/** Response for the install route. Mirrors stored-skill identity fields. */\nexport const builderRegistryInstallResponseSchema = z.object({\n storedSkillId: z.string().describe('Id of the newly created stored skill'),\n name: z.string().describe('Resolved skill name'),\n filesWritten: z.number().describe('Number of files materialized into the skill version snapshot'),\n});\n\nexport type BuilderRegistryEntry = z.infer<typeof builderRegistryEntrySchema>;\nexport type BuilderRegistriesResponse = z.infer<typeof builderRegistriesResponseSchema>;\nexport type BuilderRegistryInstallBody = z.infer<typeof builderRegistryInstallBodySchema>;\nexport type BuilderRegistryInstallResponse = z.infer<typeof builderRegistryInstallResponseSchema>;\n","/**\n * Builder Registry Handlers\n *\n * Routes that let admins browse and install skills from configured external\n * registries (currently just skills.sh) directly into the Builder's stored\n * skills DB. Distinct from the workspace skills.sh routes, which write to a\n * workspace filesystem and never touch storage.\n *\n * Registry availability is driven by `AgentBuilderOptions.registries`. When\n * the requested registry is disabled (or the builder is missing entirely),\n * the routes 404 instead of leaking the surface.\n */\n\nimport type { Mastra } from '@mastra/core';\nimport type { StorageSkillFileNode } from '@mastra/core/storage';\n\nimport { HTTPException } from '../http-exception';\nimport {\n builderRegistriesResponseSchema,\n builderRegistryInstallBodySchema,\n builderRegistryInstallResponseSchema,\n builderRegistryPathParams,\n builderRegistryPopularQuerySchema,\n builderRegistryPreviewQuerySchema,\n builderRegistrySearchQuerySchema,\n} from '../schemas/builder-registry';\nimport {\n skillsShListResponseSchema,\n skillsShPreviewResponseSchema,\n skillsShSearchResponseSchema,\n} from '../schemas/workspace';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug } from '../utils';\nimport { getCallerAuthorId } from './authorship';\nimport { handleError } from './error';\nimport {\n assertSafeFilePath,\n assertSafeSkillName,\n fetchSkillFiles,\n getPopularSkillsSh,\n previewSkillsSh,\n searchSkillsSh,\n} from './skills-sh-shared';\n\n// =============================================================================\n// Registry resolution\n// =============================================================================\n\n/** Stable identifiers + display labels for every supported registry. */\nconst REGISTRY_LABELS: Record<string, string> = {\n 'skills-sh': 'skills.sh',\n};\n\ninterface RegistryStatus {\n id: 'skills-sh';\n enabled: boolean;\n label: string;\n}\n\n/**\n * Resolve which registries are enabled for the running deployment by reading\n * the builder's `registries` config. Returns a list with all known registries\n * (so the frontend can render an empty/disabled state) plus their enabled\n * flag.\n */\nasync function resolveRegistries(mastra: Mastra): Promise<RegistryStatus[]> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') {\n return [{ id: 'skills-sh', enabled: false, label: REGISTRY_LABELS['skills-sh']! }];\n }\n const builder = await editor.resolveBuilder();\n const registries = builder?.getRegistries?.();\n return [\n {\n id: 'skills-sh',\n enabled: registries?.skillsSh?.enabled === true,\n label: REGISTRY_LABELS['skills-sh']!,\n },\n ];\n}\n\n/**\n * Hard-gate: throws 404 when the requested registry is unknown or disabled.\n * Mirrors `requireBuilderFeature` semantics — no surface leak for OFF registries.\n */\nasync function requireEnabledRegistry(mastra: Mastra, registryId: string): Promise<void> {\n const list = await resolveRegistries(mastra);\n const match = list.find(r => r.id === registryId);\n if (!match || !match.enabled) {\n throw new HTTPException(404, { message: 'Registry not found' });\n }\n}\n\n// =============================================================================\n// File-tree helpers\n// =============================================================================\n\n/**\n * Convert a flat list of `{ path, content, encoding }` entries into the\n * `StorageSkillFileNode` tree shape expected by the stored-skills create path.\n *\n * Each path is validated via `assertSafeFilePath` to prevent traversal from\n * upstream-controlled responses. Folder nodes are created on demand.\n */\nfunction buildFileTree(\n files: Array<{ path: string; content: string; encoding: 'utf-8' | 'base64' }>,\n): StorageSkillFileNode[] {\n const root: StorageSkillFileNode[] = [];\n\n for (const file of files) {\n const safePath = assertSafeFilePath(file.path);\n const segments = safePath.split('/').filter(Boolean);\n if (segments.length === 0) continue;\n\n let cursor = root;\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!;\n let folder = cursor.find(node => node.type === 'folder' && node.name === segment);\n if (!folder) {\n folder = { name: segment, type: 'folder', children: [] };\n cursor.push(folder);\n }\n if (!folder.children) folder.children = [];\n cursor = folder.children;\n }\n\n const fileName = segments[segments.length - 1]!;\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64').toString('utf-8') : file.content;\n cursor.push({ name: fileName, type: 'file', content });\n }\n\n return root;\n}\n\n/**\n * Locally-bound SKILL.md frontmatter parser.\n *\n * Mirrors `parseSkillSnapshotFromFiles` from `@mastra/core/workspace`, but\n * inlined here because the server package's `@mastra/core` peer floor\n * (>=1.32.0) predates that helper. Once the floor is bumped to a release\n * containing the helper, this can be replaced by the shared core import.\n *\n * Only SKILL.md is consulted — frontmatter is split from the body using a\n * minimal YAML key:value reader sufficient for the fields registries\n * actually use (name, description). The body is everything after the\n * second `---` line, trimmed.\n */\ntype ParsedSkillSnapshot = {\n name?: string;\n description?: string;\n instructions: string;\n};\n\nfunction parseSkillSnapshot(\n files: Array<{ path: string; content: string; encoding: 'utf-8' | 'base64' }>,\n): ParsedSkillSnapshot | null {\n const skillMd = files.find(f => f.path === 'SKILL.md');\n if (!skillMd) return null;\n\n const raw =\n skillMd.encoding === 'base64' ? Buffer.from(skillMd.content, 'base64').toString('utf-8') : skillMd.content;\n\n const fmMatch = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/);\n if (!fmMatch) {\n return { instructions: raw.trim() };\n }\n\n const fmBlock = fmMatch[1] ?? '';\n const body = fmMatch[2] ?? '';\n const frontmatter: Record<string, string> = {};\n for (const line of fmBlock.split(/\\r?\\n/)) {\n const m = line.match(/^([A-Za-z0-9_-]+)\\s*:\\s*(.*)$/);\n if (!m) continue;\n const key = m[1];\n const value = m[2] ?? '';\n if (!key) continue;\n // Strip surrounding quotes, leave the rest as-is. Registry SKILL.md\n // frontmatter is consistently flat string fields in practice.\n frontmatter[key] = value.trim().replace(/^[\"'](.*)[\"']$/, '$1');\n }\n\n return {\n name: frontmatter.name,\n description: frontmatter.description,\n instructions: body.trim(),\n };\n}\n\n// =============================================================================\n// Routes\n// =============================================================================\n\n/**\n * GET /editor/builder/registries\n *\n * Lists every known registry and whether it's enabled in this deployment.\n * Used by the Builder UI to decide whether to show the \"Browse registry\"\n * entry point at all.\n */\nexport const LIST_BUILDER_REGISTRIES_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries',\n responseType: 'json',\n responseSchema: builderRegistriesResponseSchema,\n summary: 'List available skill registries',\n description: 'Returns the configured external skill registries and their enabled state.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra }) => {\n try {\n const registries = await resolveRegistries(mastra);\n return { registries };\n } catch (error) {\n return handleError(error, 'Error listing builder registries');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/search\n *\n * Proxies a search query to the underlying registry. Currently only\n * registryId=\"skills-sh\" is supported.\n */\nexport const BUILDER_REGISTRY_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/search',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistrySearchQuerySchema,\n responseSchema: skillsShSearchResponseSchema,\n summary: 'Search skills in a registry',\n description: 'Proxies a search request to the configured registry to avoid CORS issues.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, q, limit }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await searchSkillsSh({ q, limit });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error searching registry');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/popular\n *\n * Returns the most popular skills in a registry.\n */\nexport const BUILDER_REGISTRY_POPULAR_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/popular',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistryPopularQuerySchema,\n responseSchema: skillsShListResponseSchema,\n summary: 'Get popular skills from a registry',\n description: 'Proxies a popular-skills request to the configured registry to avoid CORS issues.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, limit, offset }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await getPopularSkillsSh({ limit, offset });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error fetching popular skills');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/preview\n *\n * Returns the rendered SKILL.md content for a single skill in the registry.\n */\nexport const BUILDER_REGISTRY_PREVIEW_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/preview',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistryPreviewQuerySchema,\n responseSchema: skillsShPreviewResponseSchema,\n summary: 'Preview a skill from a registry',\n description: 'Fetches the SKILL.md content for a single skill in the configured registry.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, owner, repo, path: skillName }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await previewSkillsSh({ owner, repo, skillName });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error fetching skill preview');\n }\n },\n});\n\n/**\n * POST /editor/builder/registries/:registryId/install\n *\n * Fetches the full file tree for a skill from the registry, parses the\n * SKILL.md frontmatter for name/description, and persists everything as a\n * new stored skill. The registry origin is recorded under `metadata.origin`\n * so the UI can surface \"imported from skills.sh\" badges and re-resolve the\n * source later.\n *\n * Collisions (a stored skill with the derived id already exists) return 409\n * so the UI can offer an \"Open existing\" link instead of silently\n * overwriting.\n */\nexport const BUILDER_REGISTRY_INSTALL_ROUTE = createRoute({\n method: 'POST',\n path: '/editor/builder/registries/:registryId/install',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n bodySchema: builderRegistryInstallBodySchema,\n responseSchema: builderRegistryInstallResponseSchema,\n summary: 'Install a registry skill into stored skills',\n description: 'Fetches a skill from the configured registry and persists it as a new stored skill.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:write',\n handler: async ({ mastra, requestContext, registryId, owner, repo, skillName, visibility: bodyVisibility }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Pull files from the registry\n const result = await fetchSkillFiles(owner, repo, skillName);\n if (!result || result.files.length === 0) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" in ${owner}/${repo}.`,\n });\n }\n\n const safeSkillId = assertSafeSkillName(result.skillId);\n const files = buildFileTree(result.files);\n\n // Parse SKILL.md frontmatter into structured fields. Splitting\n // frontmatter (name/description) from the markdown body keeps the\n // body as the agent-facing `instructions` instead of polluting it\n // with raw YAML metadata. SKILL.md missing or unparseable simply\n // yields a null snapshot — registry-provided values then fill in.\n const snapshot = parseSkillSnapshot(result.files);\n\n const resolvedName = snapshot?.name ?? safeSkillId;\n const description = snapshot?.description ?? `Imported from ${owner}/${repo}`;\n const id = toSlug(resolvedName) || safeSkillId;\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from registry skill metadata.',\n });\n }\n\n // Reject collisions instead of silently overwriting; UI offers \"Open existing\".\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, {\n message: `Skill with id \"${id}\" already exists.`,\n // Surface the existing id so the client can deep-link.\n cause: { storedSkillId: id },\n });\n }\n\n // Match the standard create flow: no caller = always public, otherwise default private.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Use the SKILL.md body (post-frontmatter) as instructions. Frontmatter\n // values are already lifted into structured columns above, so re-storing\n // them in `instructions` would both duplicate metadata and feed YAML\n // into the agent's prompt. Fall back to description when no usable body\n // exists so `resolved.snapshot.instructions` stays non-empty.\n const instructions = snapshot?.instructions?.trim() ? snapshot.instructions : description;\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name: resolvedName,\n description,\n instructions,\n files,\n metadata: {\n origin: {\n type: 'skills-sh',\n owner,\n repo,\n skillName,\n },\n },\n },\n });\n\n return {\n storedSkillId: id,\n name: resolvedName,\n filesWritten: result.files.length,\n };\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error installing registry skill');\n }\n },\n});\n"]}
1
+ {"version":3,"sources":["../src/server/schemas/builder-registry.ts","../src/server/handlers/builder-registry.ts"],"names":["z","HTTPException","assertSafeFilePath","createRoute","handleError","skillsShSearchResponseSchema","searchSkillsSh","skillsShListResponseSchema","getPopularSkillsSh","skillsShPreviewResponseSchema","previewSkillsSh","fetchSkillFiles","assertSafeSkillName","toSlug","getCallerAuthorId"],"mappings":"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","file":"chunk-QH3IFRYL.cjs","sourcesContent":["/**\n * Builder Registry Schemas\n *\n * Schemas for the Agent Builder skill registry routes. These are distinct from\n * the workspace skills.sh proxy schemas because:\n * - Builder routes are not scoped to a workspace.\n * - Builder install does not accept a `mount` field.\n * - Builder install body carries visibility + the resolved registry id.\n * - Builder install response returns the created stored skill id.\n *\n * The upstream skills.sh proxy response shapes are reused via the shared\n * `skillsShSearchResponseSchema`, `skillsShListResponseSchema`, and\n * `skillsShPreviewResponseSchema` since the wire shape from skills.sh is\n * registry-independent.\n */\n\nimport { z } from 'zod/v4';\n\n// =============================================================================\n// Registry list\n// =============================================================================\n\n/** Single entry in the registries list. */\nexport const builderRegistryEntrySchema = z.object({\n id: z.literal('skills-sh').describe('Stable registry identifier'),\n enabled: z.boolean().describe('Whether this registry is enabled in the running deployment'),\n label: z.string().describe('Human-readable registry name'),\n});\n\n/** Response for `GET /editor/builder/registries`. */\nexport const builderRegistriesResponseSchema = z.object({\n registries: z.array(builderRegistryEntrySchema),\n});\n\n// =============================================================================\n// Search / popular / preview\n// =============================================================================\n\n/** Path params used by every per-registry route. */\nexport const builderRegistryPathParams = z.object({\n registryId: z.string().describe('Registry identifier (e.g. \"skills-sh\")'),\n});\n\nexport const builderRegistrySearchQuerySchema = z.object({\n q: z.string().describe('Search query'),\n limit: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Maximum number of results (1-100)'),\n});\n\nexport const builderRegistryPopularQuerySchema = z\n .object({\n limit: z.coerce.number().int().min(1).max(100).optional().default(10).describe('Maximum number of results (1-100)'),\n offset: z.coerce\n .number()\n .int()\n .min(0)\n .optional()\n .default(0)\n .describe('Offset for pagination (must be a multiple of `limit`)'),\n })\n .refine(args => args.offset % args.limit === 0, {\n message: 'offset must be a multiple of limit (the upstream registry pages by `limit`)',\n path: ['offset'],\n });\n\nexport const builderRegistryPreviewQuerySchema = z.object({\n owner: z.string().describe('GitHub repository owner'),\n repo: z.string().describe('GitHub repository name'),\n path: z.string().describe('Skill name within repo'),\n});\n\n// =============================================================================\n// Install\n// =============================================================================\n\n/**\n * Body for `POST /editor/builder/registries/:registryId/install`.\n *\n * Visibility behaves like the standard stored-skill create flow: optional,\n * defaults to private when the caller is authenticated.\n */\nexport const builderRegistryInstallBodySchema = z.object({\n owner: z.string().describe('GitHub repository owner'),\n repo: z.string().describe('GitHub repository name'),\n skillName: z.string().describe('Skill name from the registry'),\n visibility: z.enum(['private', 'public']).optional().describe('Visibility for the new stored skill'),\n});\n\n/** Response for the install route. Mirrors stored-skill identity fields. */\nexport const builderRegistryInstallResponseSchema = z.object({\n storedSkillId: z.string().describe('Id of the newly created stored skill'),\n name: z.string().describe('Resolved skill name'),\n filesWritten: z.number().describe('Number of files materialized into the skill version snapshot'),\n});\n\nexport type BuilderRegistryEntry = z.infer<typeof builderRegistryEntrySchema>;\nexport type BuilderRegistriesResponse = z.infer<typeof builderRegistriesResponseSchema>;\nexport type BuilderRegistryInstallBody = z.infer<typeof builderRegistryInstallBodySchema>;\nexport type BuilderRegistryInstallResponse = z.infer<typeof builderRegistryInstallResponseSchema>;\n","/**\n * Builder Registry Handlers\n *\n * Routes that let admins browse and install skills from configured external\n * registries (currently just skills.sh) directly into the Builder's stored\n * skills DB. Distinct from the workspace skills.sh routes, which write to a\n * workspace filesystem and never touch storage.\n *\n * Registry availability is driven by `AgentBuilderOptions.registries`. When\n * the requested registry is disabled (or the builder is missing entirely),\n * the routes 404 instead of leaking the surface.\n */\n\nimport type { Mastra } from '@mastra/core';\nimport type { StorageSkillFileNode } from '@mastra/core/storage';\n\nimport { HTTPException } from '../http-exception';\nimport {\n builderRegistriesResponseSchema,\n builderRegistryInstallBodySchema,\n builderRegistryInstallResponseSchema,\n builderRegistryPathParams,\n builderRegistryPopularQuerySchema,\n builderRegistryPreviewQuerySchema,\n builderRegistrySearchQuerySchema,\n} from '../schemas/builder-registry';\nimport {\n skillsShListResponseSchema,\n skillsShPreviewResponseSchema,\n skillsShSearchResponseSchema,\n} from '../schemas/workspace';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { toSlug } from '../utils';\nimport { getCallerAuthorId } from './authorship';\nimport { handleError } from './error';\nimport {\n assertSafeFilePath,\n assertSafeSkillName,\n fetchSkillFiles,\n getPopularSkillsSh,\n previewSkillsSh,\n searchSkillsSh,\n} from './skills-sh-shared';\n\n// =============================================================================\n// Registry resolution\n// =============================================================================\n\n/** Stable identifiers + display labels for every supported registry. */\nconst REGISTRY_LABELS: Record<string, string> = {\n 'skills-sh': 'skills.sh',\n};\n\ninterface RegistryStatus {\n id: 'skills-sh';\n enabled: boolean;\n label: string;\n}\n\n/**\n * Resolve which registries are enabled for the running deployment by reading\n * the builder's `registries` config. Returns a list with all known registries\n * (so the frontend can render an empty/disabled state) plus their enabled\n * flag.\n */\nasync function resolveRegistries(mastra: Mastra): Promise<RegistryStatus[]> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') {\n return [{ id: 'skills-sh', enabled: false, label: REGISTRY_LABELS['skills-sh']! }];\n }\n const builder = await editor.resolveBuilder();\n const registries = builder?.getRegistries?.();\n return [\n {\n id: 'skills-sh',\n enabled: registries?.skillsSh?.enabled === true,\n label: REGISTRY_LABELS['skills-sh']!,\n },\n ];\n}\n\n/**\n * Hard-gate: throws 404 when the requested registry is unknown or disabled.\n * Mirrors `requireBuilderFeature` semantics — no surface leak for OFF registries.\n */\nasync function requireEnabledRegistry(mastra: Mastra, registryId: string): Promise<void> {\n const list = await resolveRegistries(mastra);\n const match = list.find(r => r.id === registryId);\n if (!match || !match.enabled) {\n throw new HTTPException(404, { message: 'Registry not found' });\n }\n}\n\n// =============================================================================\n// File-tree helpers\n// =============================================================================\n\n/**\n * Convert a flat list of `{ path, content, encoding }` entries into the\n * `StorageSkillFileNode` tree shape expected by the stored-skills create path.\n *\n * Each path is validated via `assertSafeFilePath` to prevent traversal from\n * upstream-controlled responses. Folder nodes are created on demand.\n */\nfunction buildFileTree(\n files: Array<{ path: string; content: string; encoding: 'utf-8' | 'base64' }>,\n): StorageSkillFileNode[] {\n const root: StorageSkillFileNode[] = [];\n\n for (const file of files) {\n const safePath = assertSafeFilePath(file.path);\n const segments = safePath.split('/').filter(Boolean);\n if (segments.length === 0) continue;\n\n let cursor = root;\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i]!;\n let folder = cursor.find(node => node.type === 'folder' && node.name === segment);\n if (!folder) {\n folder = { name: segment, type: 'folder', children: [] };\n cursor.push(folder);\n }\n if (!folder.children) folder.children = [];\n cursor = folder.children;\n }\n\n const fileName = segments[segments.length - 1]!;\n const content = file.encoding === 'base64' ? Buffer.from(file.content, 'base64').toString('utf-8') : file.content;\n cursor.push({ name: fileName, type: 'file', content });\n }\n\n return root;\n}\n\n/**\n * Locally-bound SKILL.md frontmatter parser.\n *\n * Mirrors `parseSkillSnapshotFromFiles` from `@mastra/core/workspace`, but\n * inlined here because the server package's `@mastra/core` peer floor\n * (>=1.32.0) predates that helper. Once the floor is bumped to a release\n * containing the helper, this can be replaced by the shared core import.\n *\n * Only SKILL.md is consulted — frontmatter is split from the body using a\n * minimal YAML key:value reader sufficient for the fields registries\n * actually use (name, description). The body is everything after the\n * second `---` line, trimmed.\n */\ntype ParsedSkillSnapshot = {\n name?: string;\n description?: string;\n instructions: string;\n};\n\nfunction parseSkillSnapshot(\n files: Array<{ path: string; content: string; encoding: 'utf-8' | 'base64' }>,\n): ParsedSkillSnapshot | null {\n const skillMd = files.find(f => f.path === 'SKILL.md');\n if (!skillMd) return null;\n\n const raw =\n skillMd.encoding === 'base64' ? Buffer.from(skillMd.content, 'base64').toString('utf-8') : skillMd.content;\n\n const fmMatch = raw.match(/^---\\r?\\n([\\s\\S]*?)\\r?\\n---\\r?\\n?([\\s\\S]*)$/);\n if (!fmMatch) {\n return { instructions: raw.trim() };\n }\n\n const fmBlock = fmMatch[1] ?? '';\n const body = fmMatch[2] ?? '';\n const frontmatter: Record<string, string> = {};\n for (const line of fmBlock.split(/\\r?\\n/)) {\n const m = line.match(/^([A-Za-z0-9_-]+)\\s*:\\s*(.*)$/);\n if (!m) continue;\n const key = m[1];\n const value = m[2] ?? '';\n if (!key) continue;\n // Strip surrounding quotes, leave the rest as-is. Registry SKILL.md\n // frontmatter is consistently flat string fields in practice.\n frontmatter[key] = value.trim().replace(/^[\"'](.*)[\"']$/, '$1');\n }\n\n return {\n name: frontmatter.name,\n description: frontmatter.description,\n instructions: body.trim(),\n };\n}\n\n// =============================================================================\n// Routes\n// =============================================================================\n\n/**\n * GET /editor/builder/registries\n *\n * Lists every known registry and whether it's enabled in this deployment.\n * Used by the Builder UI to decide whether to show the \"Browse registry\"\n * entry point at all.\n */\nexport const LIST_BUILDER_REGISTRIES_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries',\n responseType: 'json',\n responseSchema: builderRegistriesResponseSchema,\n summary: 'List available skill registries',\n description: 'Returns the configured external skill registries and their enabled state.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra }) => {\n try {\n const registries = await resolveRegistries(mastra);\n return { registries };\n } catch (error) {\n return handleError(error, 'Error listing builder registries');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/search\n *\n * Proxies a search query to the underlying registry. Currently only\n * registryId=\"skills-sh\" is supported.\n */\nexport const BUILDER_REGISTRY_SEARCH_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/search',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistrySearchQuerySchema,\n responseSchema: skillsShSearchResponseSchema,\n summary: 'Search skills in a registry',\n description: 'Proxies a search request to the configured registry to avoid CORS issues.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, q, limit }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await searchSkillsSh({ q, limit });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error searching registry');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/popular\n *\n * Returns the most popular skills in a registry.\n */\nexport const BUILDER_REGISTRY_POPULAR_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/popular',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistryPopularQuerySchema,\n responseSchema: skillsShListResponseSchema,\n summary: 'Get popular skills from a registry',\n description: 'Proxies a popular-skills request to the configured registry to avoid CORS issues.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, limit, offset }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await getPopularSkillsSh({ limit, offset });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error fetching popular skills');\n }\n },\n});\n\n/**\n * GET /editor/builder/registries/:registryId/preview\n *\n * Returns the rendered SKILL.md content for a single skill in the registry.\n */\nexport const BUILDER_REGISTRY_PREVIEW_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/registries/:registryId/preview',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n queryParamSchema: builderRegistryPreviewQuerySchema,\n responseSchema: skillsShPreviewResponseSchema,\n summary: 'Preview a skill from a registry',\n description: 'Fetches the SKILL.md content for a single skill in the configured registry.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:read',\n handler: async ({ mastra, registryId, owner, repo, path: skillName }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n return await previewSkillsSh({ owner, repo, skillName });\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error fetching skill preview');\n }\n },\n});\n\n/**\n * POST /editor/builder/registries/:registryId/install\n *\n * Fetches the full file tree for a skill from the registry, parses the\n * SKILL.md frontmatter for name/description, and persists everything as a\n * new stored skill. The registry origin is recorded under `metadata.origin`\n * so the UI can surface \"imported from skills.sh\" badges and re-resolve the\n * source later.\n *\n * Collisions (a stored skill with the derived id already exists) return 409\n * so the UI can offer an \"Open existing\" link instead of silently\n * overwriting.\n */\nexport const BUILDER_REGISTRY_INSTALL_ROUTE = createRoute({\n method: 'POST',\n path: '/editor/builder/registries/:registryId/install',\n responseType: 'json',\n pathParamSchema: builderRegistryPathParams,\n bodySchema: builderRegistryInstallBodySchema,\n responseSchema: builderRegistryInstallResponseSchema,\n summary: 'Install a registry skill into stored skills',\n description: 'Fetches a skill from the configured registry and persists it as a new stored skill.',\n tags: ['Editor', 'Skills'],\n requiresAuth: true,\n requiresPermission: 'stored-skills:write',\n handler: async ({ mastra, requestContext, registryId, owner, repo, skillName, visibility: bodyVisibility }) => {\n try {\n await requireEnabledRegistry(mastra, registryId);\n\n const storage = mastra.getStorage();\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n const skillStore = await storage.getStore('skills');\n if (!skillStore) {\n throw new HTTPException(500, { message: 'Skills storage domain is not available' });\n }\n\n // Pull files from the registry\n const result = await fetchSkillFiles(owner, repo, skillName);\n if (!result || result.files.length === 0) {\n throw new HTTPException(404, {\n message: `Could not find skill \"${skillName}\" in ${owner}/${repo}.`,\n });\n }\n\n const safeSkillId = assertSafeSkillName(result.skillId);\n const files = buildFileTree(result.files);\n\n // Parse SKILL.md frontmatter into structured fields. Splitting\n // frontmatter (name/description) from the markdown body keeps the\n // body as the agent-facing `instructions` instead of polluting it\n // with raw YAML metadata. SKILL.md missing or unparseable simply\n // yields a null snapshot — registry-provided values then fill in.\n const snapshot = parseSkillSnapshot(result.files);\n\n const resolvedName = snapshot?.name ?? safeSkillId;\n const description = snapshot?.description ?? `Imported from ${owner}/${repo}`;\n const id = toSlug(resolvedName) || safeSkillId;\n\n if (!id) {\n throw new HTTPException(400, {\n message: 'Could not derive skill ID from registry skill metadata.',\n });\n }\n\n // Reject collisions instead of silently overwriting; UI offers \"Open existing\".\n const existing = await skillStore.getById(id);\n if (existing) {\n throw new HTTPException(409, {\n message: `Skill with id \"${id}\" already exists.`,\n // Surface the existing id so the client can deep-link.\n cause: { storedSkillId: id },\n });\n }\n\n // Match the standard create flow: no caller = always public, otherwise default private.\n const authorId = getCallerAuthorId(requestContext) ?? undefined;\n const visibility: 'private' | 'public' = authorId ? (bodyVisibility ?? 'private') : 'public';\n\n // Use the SKILL.md body (post-frontmatter) as instructions. Frontmatter\n // values are already lifted into structured columns above, so re-storing\n // them in `instructions` would both duplicate metadata and feed YAML\n // into the agent's prompt. Fall back to description when no usable body\n // exists so `resolved.snapshot.instructions` stays non-empty.\n const instructions = snapshot?.instructions?.trim() ? snapshot.instructions : description;\n\n await skillStore.create({\n skill: {\n id,\n authorId,\n visibility,\n name: resolvedName,\n description,\n instructions,\n files,\n metadata: {\n origin: {\n type: 'skills-sh',\n owner,\n repo,\n skillName,\n },\n },\n },\n });\n\n return {\n storedSkillId: id,\n name: resolvedName,\n filesWritten: result.files.length,\n };\n } catch (error) {\n if (error instanceof HTTPException) throw error;\n return handleError(error, 'Error installing registry skill');\n }\n },\n});\n"]}
@@ -1,9 +1,9 @@
1
1
  import { getAgentSkillResponseSchema, skillDisambiguationQuerySchema } from './chunk-ZHULRNJG.js';
2
- import { listAgentsResponseSchema, serializedAgentSchema, agentVersionQuerySchema, agentIdPathParams, generateResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, streamResponseSchema, providersResponseSchema, sendAgentSignalBodySchema, sendAgentMessageBodySchema, queueAgentMessageBodySchema, subscribeAgentThreadBodySchema, streamUntilIdleBodySchema, observeAgentResponseSchema, observeAgentBodySchema, toolCallResponseSchema, approveToolCallBodySchema, declineToolCallBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, approveNetworkToolCallBodySchema, declineNetworkToolCallBodySchema, modelManagementResponseSchema, updateAgentModelBodySchema, reorderAgentModelListBodySchema, updateAgentModelInModelListBodySchema, modelConfigIdPathParams, enhanceInstructionsResponseSchema, enhanceInstructionsBodySchema, agentSkillPathParams } from './chunk-HEFYNGLM.js';
2
+ import { listAgentsResponseSchema, serializedAgentSchema, agentVersionQuerySchema, agentIdPathParams, generateResponseSchema, agentExecutionBodySchema, agentExecutionLegacyBodySchema, streamResponseSchema, providersResponseSchema, sendAgentSignalBodySchema, sendAgentMessageBodySchema, queueAgentMessageBodySchema, abortAgentThreadResponseSchema, abortAgentThreadBodySchema, subscribeAgentThreadBodySchema, streamUntilIdleBodySchema, observeAgentResponseSchema, observeAgentBodySchema, toolCallResponseSchema, approveToolCallBodySchema, sendToolApprovalResponseSchema, sendToolApprovalBodySchema, declineToolCallBodySchema, resumeStreamBodySchema, resumeStreamUntilIdleBodySchema, approveNetworkToolCallBodySchema, declineNetworkToolCallBodySchema, modelManagementResponseSchema, updateAgentModelBodySchema, reorderAgentModelListBodySchema, updateAgentModelInModelListBodySchema, modelConfigIdPathParams, enhanceInstructionsResponseSchema, enhanceInstructionsBodySchema, agentSkillPathParams } from './chunk-UFYCA27U.js';
3
3
  import { MastraFGAPermissions, sanitizeBody, validateBody, getEffectiveResourceId, getEffectiveThreadId, enforceThreadAccess, validateThreadOwnership, validateRunOwnership } from './chunk-BWNJBSXL.js';
4
- import { createStoredAgentResponseSchema } from './chunk-FYCTKP2F.js';
4
+ import { createStoredAgentResponseSchema } from './chunk-J6OD53OV.js';
5
5
  import { stringify, toSlug } from './chunk-PLV74XAL.js';
6
- import { handleError } from './chunk-RJ5ZIUGX.js';
6
+ import { handleError } from './chunk-7ZWJX3AN.js';
7
7
  import { createRoute } from './chunk-YQL3TXSD.js';
8
8
  import { standardSchemaToJSONSchema, toStandardSchema5 } from './chunk-U2WSRKSA.js';
9
9
  import { HTTPException } from './chunk-6QWQZI4Q.js';
@@ -20,6 +20,7 @@ import { z } from 'zod/v4';
20
20
  // src/server/handlers/agents.ts
21
21
  var agents_exports = {};
22
22
  __export(agents_exports, {
23
+ ABORT_AGENT_THREAD_ROUTE: () => ABORT_AGENT_THREAD_ROUTE,
23
24
  APPROVE_NETWORK_TOOL_CALL_ROUTE: () => APPROVE_NETWORK_TOOL_CALL_ROUTE,
24
25
  APPROVE_TOOL_CALL_GENERATE_ROUTE: () => APPROVE_TOOL_CALL_GENERATE_ROUTE,
25
26
  APPROVE_TOOL_CALL_ROUTE: () => APPROVE_TOOL_CALL_ROUTE,
@@ -43,6 +44,7 @@ __export(agents_exports, {
43
44
  RESUME_STREAM_UNTIL_IDLE_ROUTE: () => RESUME_STREAM_UNTIL_IDLE_ROUTE,
44
45
  SEND_AGENT_MESSAGE_ROUTE: () => SEND_AGENT_MESSAGE_ROUTE,
45
46
  SEND_AGENT_SIGNAL_ROUTE: () => SEND_AGENT_SIGNAL_ROUTE,
47
+ SEND_TOOL_APPROVAL_ROUTE: () => SEND_TOOL_APPROVAL_ROUTE,
46
48
  STREAM_GENERATE_LEGACY_ROUTE: () => STREAM_GENERATE_LEGACY_ROUTE,
47
49
  STREAM_GENERATE_ROUTE: () => STREAM_GENERATE_ROUTE,
48
50
  STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE: () => STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE,
@@ -445,6 +447,7 @@ async function formatAgentList({
445
447
  defaultStreamOptionsLegacy,
446
448
  requestContextSchema: serializedRequestContextSchema,
447
449
  source: agent.source ?? "code",
450
+ editor: agent.__getEditorConfig?.(),
448
451
  ...agent.toRawConfig()?.status ? { status: agent.toRawConfig().status } : {},
449
452
  ...agent.toRawConfig()?.activeVersionId ? { activeVersionId: agent.toRawConfig().activeVersionId } : {},
450
453
  hasDraft: !!(agent.toRawConfig()?.resolvedVersionId && agent.toRawConfig()?.activeVersionId && agent.toRawConfig().resolvedVersionId !== agent.toRawConfig().activeVersionId)
@@ -647,6 +650,7 @@ async function formatAgent({
647
650
  defaultStreamOptionsLegacy,
648
651
  requestContextSchema: serializedRequestContextSchema,
649
652
  source: agent.source ?? "code",
653
+ editor: agent.__getEditorConfig?.(),
650
654
  ...agent.toRawConfig()?.status ? { status: agent.toRawConfig().status } : {}
651
655
  };
652
656
  }
@@ -701,8 +705,14 @@ var LIST_AGENTS_ROUTE = createRoute({
701
705
  console.error("Error listing stored agents:", error);
702
706
  storedAgentsResult = null;
703
707
  }
708
+ const codeAgentIds = /* @__PURE__ */ new Set();
709
+ for (const [key, agent] of Object.entries(codeAgents)) {
710
+ codeAgentIds.add(key);
711
+ if (agent?.id) codeAgentIds.add(agent.id);
712
+ }
704
713
  if (storedAgentsResult?.agents) {
705
714
  for (const storedAgentConfig of storedAgentsResult.agents) {
715
+ if (codeAgentIds.has(storedAgentConfig.id)) continue;
706
716
  try {
707
717
  const agent = await editor2?.agent.getById(storedAgentConfig.id, { status: "draft" });
708
718
  if (!agent) continue;
@@ -1038,7 +1048,9 @@ var GET_PROVIDERS_ROUTE = createRoute({
1038
1048
  const gatewayProviders = await gateway.fetchProviders();
1039
1049
  for (const [providerId, config] of Object.entries(gatewayProviders)) {
1040
1050
  const prefixedId = providerId === gateway.id ? gateway.id : `${gateway.id}/${providerId}`;
1041
- allProviders[prefixedId] = config;
1051
+ if (!(prefixedId in allProviders)) {
1052
+ allProviders[prefixedId] = config;
1053
+ }
1042
1054
  }
1043
1055
  } catch (error) {
1044
1056
  console.warn(`Failed to fetch providers from gateway "${gateway.id}":`, error);
@@ -1336,6 +1348,45 @@ var QUEUE_AGENT_MESSAGE_ROUTE = createRoute({
1336
1348
  }
1337
1349
  }
1338
1350
  });
1351
+ var ABORT_AGENT_THREAD_ROUTE = createRoute({
1352
+ method: "POST",
1353
+ path: "/agents/:agentId/threads/abort",
1354
+ responseType: "json",
1355
+ pathParamSchema: agentIdPathParams,
1356
+ bodySchema: abortAgentThreadBodySchema,
1357
+ responseSchema: abortAgentThreadResponseSchema,
1358
+ summary: "Abort active agent thread run",
1359
+ description: "Aborts the currently active stream run for a memory thread without changing thread subscriptions",
1360
+ tags: ["Agents", "Streaming"],
1361
+ requiresAuth: true,
1362
+ requiresPermission: "agents:execute",
1363
+ handler: async ({ mastra, agentId, resourceId, threadId, requestContext: serverRequestContext }) => {
1364
+ try {
1365
+ const agent = await getAgentFromSystem({ mastra, agentId, requestContext: serverRequestContext });
1366
+ if (typeof agent.abortThreadStream !== "function") {
1367
+ throw new HTTPException(501, {
1368
+ message: "agent thread aborts are not supported by this Mastra core version"
1369
+ });
1370
+ }
1371
+ const effectiveResourceId = getEffectiveResourceId(serverRequestContext, resourceId);
1372
+ const effectiveThreadId = getEffectiveThreadId(serverRequestContext, threadId);
1373
+ if (!effectiveThreadId) {
1374
+ throw new HTTPException(400, { message: "threadId is required" });
1375
+ }
1376
+ if (effectiveResourceId) {
1377
+ const memory = await agent.getMemory({ requestContext: serverRequestContext });
1378
+ if (memory) {
1379
+ const thread = await memory.getThreadById({ threadId: effectiveThreadId });
1380
+ await validateThreadOwnership(thread, effectiveResourceId);
1381
+ }
1382
+ }
1383
+ const aborted = await agent.abortThreadStream({ resourceId: effectiveResourceId, threadId: effectiveThreadId });
1384
+ return { aborted };
1385
+ } catch (error) {
1386
+ return handleError(error, "error aborting agent thread");
1387
+ }
1388
+ }
1389
+ });
1339
1390
  var SUBSCRIBE_AGENT_THREAD_ROUTE = createRoute({
1340
1391
  method: "POST",
1341
1392
  path: "/agents/:agentId/threads/subscribe",
@@ -1386,7 +1437,6 @@ var SUBSCRIBE_AGENT_THREAD_ROUTE = createRoute({
1386
1437
  if (cleanedUp) return;
1387
1438
  cleanedUp = true;
1388
1439
  clearHeartbeat();
1389
- subscription.abort();
1390
1440
  subscription.unsubscribe();
1391
1441
  if (closeController) {
1392
1442
  try {
@@ -1636,6 +1686,71 @@ var APPROVE_TOOL_CALL_ROUTE = createRoute({
1636
1686
  }
1637
1687
  }
1638
1688
  });
1689
+ async function validateSubscriptionToolCallThreadAccess({
1690
+ agent,
1691
+ requestContext,
1692
+ resourceId,
1693
+ threadId
1694
+ }) {
1695
+ const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
1696
+ const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);
1697
+ if (!effectiveThreadId) {
1698
+ throw new HTTPException(400, { message: "threadId is required" });
1699
+ }
1700
+ if (effectiveResourceId) {
1701
+ const memory = await agent.getMemory({ requestContext });
1702
+ if (memory) {
1703
+ const thread = await memory.getThreadById({ threadId: effectiveThreadId });
1704
+ await validateThreadOwnership(thread, effectiveResourceId);
1705
+ }
1706
+ }
1707
+ return { effectiveResourceId: effectiveResourceId ?? "", effectiveThreadId };
1708
+ }
1709
+ var SEND_TOOL_APPROVAL_ROUTE = createRoute({
1710
+ method: "POST",
1711
+ path: "/agents/:agentId/send-tool-approval",
1712
+ responseType: "json",
1713
+ pathParamSchema: agentIdPathParams,
1714
+ bodySchema: sendToolApprovalBodySchema,
1715
+ responseSchema: sendToolApprovalResponseSchema,
1716
+ summary: "Send tool approval",
1717
+ description: "Approves or declines a pending tool call and publishes resumed chunks to thread subscribers",
1718
+ tags: ["Agents", "Tools"],
1719
+ requiresAuth: true,
1720
+ requiresPermission: "agents:execute",
1721
+ handler: async ({ mastra, agentId, abortSignal, requestContext: serverRequestContext, ...params }) => {
1722
+ try {
1723
+ const bodyRequestContext = params.requestContext;
1724
+ const versionOptions = extractVersionOptions(serverRequestContext, bodyRequestContext);
1725
+ const agent = await getAgentFromSystem({
1726
+ mastra,
1727
+ agentId,
1728
+ versionOptions,
1729
+ requestContext: serverRequestContext
1730
+ });
1731
+ if (!params.toolCallId) {
1732
+ throw new HTTPException(400, { message: "Tool call id is required" });
1733
+ }
1734
+ mergeBodyRequestContext(serverRequestContext, bodyRequestContext);
1735
+ sanitizeBody(params, ["tools"]);
1736
+ const { effectiveResourceId, effectiveThreadId } = await validateSubscriptionToolCallThreadAccess({
1737
+ agent,
1738
+ requestContext: serverRequestContext,
1739
+ resourceId: params.resourceId,
1740
+ threadId: params.threadId
1741
+ });
1742
+ return await agent.sendToolApproval({
1743
+ ...params,
1744
+ resourceId: effectiveResourceId,
1745
+ threadId: effectiveThreadId,
1746
+ requestContext: serverRequestContext,
1747
+ abortSignal
1748
+ });
1749
+ } catch (error) {
1750
+ return handleError(error, "error sending tool approval");
1751
+ }
1752
+ }
1753
+ });
1639
1754
  var DECLINE_TOOL_CALL_ROUTE = createRoute({
1640
1755
  method: "POST",
1641
1756
  path: "/agents/:agentId/decline-tool-call",
@@ -2328,6 +2443,6 @@ var GET_AGENT_SKILL_ROUTE = createRoute({
2328
2443
  }
2329
2444
  });
2330
2445
 
2331
- export { APPROVE_NETWORK_TOOL_CALL_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, APPROVE_TOOL_CALL_ROUTE, CLONE_AGENT_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, GENERATE_LEGACY_ROUTE, GET_AGENT_BY_ID_ROUTE, GET_AGENT_SKILL_ROUTE, GET_PROVIDERS_ROUTE, LIST_AGENTS_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, RESET_AGENT_MODEL_ROUTE, RESUME_STREAM_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, SEND_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, STREAM_GENERATE_LEGACY_ROUTE, STREAM_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, STREAM_NETWORK_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_ROUTE, agents_exports, extractVersionOptions, getAgentFromSystem, getBrowserToolsFromAgent, getSerializedAgentTools, getSerializedProcessors, getSerializedSkillsFromAgent, getWorkspaceToolsFromAgent, isProviderConnected };
2332
- //# sourceMappingURL=chunk-MZ3EAJXG.js.map
2333
- //# sourceMappingURL=chunk-MZ3EAJXG.js.map
2446
+ export { ABORT_AGENT_THREAD_ROUTE, APPROVE_NETWORK_TOOL_CALL_ROUTE, APPROVE_TOOL_CALL_GENERATE_ROUTE, APPROVE_TOOL_CALL_ROUTE, CLONE_AGENT_ROUTE, DECLINE_NETWORK_TOOL_CALL_ROUTE, DECLINE_TOOL_CALL_GENERATE_ROUTE, DECLINE_TOOL_CALL_ROUTE, ENHANCE_INSTRUCTIONS_ROUTE, GENERATE_AGENT_ROUTE, GENERATE_AGENT_VNEXT_ROUTE, GENERATE_LEGACY_ROUTE, GET_AGENT_BY_ID_ROUTE, GET_AGENT_SKILL_ROUTE, GET_PROVIDERS_ROUTE, LIST_AGENTS_ROUTE, OBSERVE_AGENT_STREAM_ROUTE, QUEUE_AGENT_MESSAGE_ROUTE, REORDER_AGENT_MODEL_LIST_ROUTE, RESET_AGENT_MODEL_ROUTE, RESUME_STREAM_ROUTE, RESUME_STREAM_UNTIL_IDLE_ROUTE, SEND_AGENT_MESSAGE_ROUTE, SEND_AGENT_SIGNAL_ROUTE, SEND_TOOL_APPROVAL_ROUTE, STREAM_GENERATE_LEGACY_ROUTE, STREAM_GENERATE_ROUTE, STREAM_GENERATE_VNEXT_DEPRECATED_ROUTE, STREAM_NETWORK_ROUTE, STREAM_UI_MESSAGE_DEPRECATED_ROUTE, STREAM_UI_MESSAGE_VNEXT_DEPRECATED_ROUTE, STREAM_UNTIL_IDLE_GENERATE_ROUTE, STREAM_VNEXT_DEPRECATED_ROUTE, SUBSCRIBE_AGENT_THREAD_ROUTE, UPDATE_AGENT_MODEL_IN_MODEL_LIST_ROUTE, UPDATE_AGENT_MODEL_ROUTE, agents_exports, extractVersionOptions, getAgentFromSystem, getBrowserToolsFromAgent, getSerializedAgentTools, getSerializedProcessors, getSerializedSkillsFromAgent, getWorkspaceToolsFromAgent, isProviderConnected };
2447
+ //# sourceMappingURL=chunk-QM3NYDZZ.js.map
2448
+ //# sourceMappingURL=chunk-QM3NYDZZ.js.map