@mastra/server 1.53.0-alpha.2 → 1.53.0-alpha.4

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 (245) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/{api-schema-manifest-XUZGITBV.cjs → api-schema-manifest-HHPOQOBA.cjs} +4 -4
  3. package/dist/{api-schema-manifest-XUZGITBV.cjs.map → api-schema-manifest-HHPOQOBA.cjs.map} +1 -1
  4. package/dist/{api-schema-manifest-O4VMTNLT.js → api-schema-manifest-YZ2UQAKW.js} +3 -3
  5. package/dist/{api-schema-manifest-O4VMTNLT.js.map → api-schema-manifest-YZ2UQAKW.js.map} +1 -1
  6. package/dist/{chunk-7X3YWKHD.cjs → chunk-24GG74PF.cjs} +19 -19
  7. package/dist/{chunk-7X3YWKHD.cjs.map → chunk-24GG74PF.cjs.map} +1 -1
  8. package/dist/{chunk-O4PNIMVX.cjs → chunk-2XPHKO5K.cjs} +11 -11
  9. package/dist/{chunk-O4PNIMVX.cjs.map → chunk-2XPHKO5K.cjs.map} +1 -1
  10. package/dist/{chunk-LJNTC2CX.cjs → chunk-3BNDX3X4.cjs} +14 -14
  11. package/dist/{chunk-LJNTC2CX.cjs.map → chunk-3BNDX3X4.cjs.map} +1 -1
  12. package/dist/{chunk-LVGKXQCC.cjs → chunk-3GMKZKUD.cjs} +3 -3
  13. package/dist/{chunk-LVGKXQCC.cjs.map → chunk-3GMKZKUD.cjs.map} +1 -1
  14. package/dist/{chunk-FZLA552S.js → chunk-3QCPLI6I.js} +4 -4
  15. package/dist/{chunk-FZLA552S.js.map → chunk-3QCPLI6I.js.map} +1 -1
  16. package/dist/{chunk-ETR4XOVD.js → chunk-3TTDIOEU.js} +3 -3
  17. package/dist/{chunk-ETR4XOVD.js.map → chunk-3TTDIOEU.js.map} +1 -1
  18. package/dist/{chunk-UTOKVLFZ.cjs → chunk-4AURMJAJ.cjs} +312 -312
  19. package/dist/{chunk-UTOKVLFZ.cjs.map → chunk-4AURMJAJ.cjs.map} +1 -1
  20. package/dist/{chunk-7OY3AGJJ.js → chunk-4IPX4EPA.js} +4 -4
  21. package/dist/{chunk-7OY3AGJJ.js.map → chunk-4IPX4EPA.js.map} +1 -1
  22. package/dist/{chunk-5ZFBQKCW.js → chunk-4YZLXIS4.js} +4 -4
  23. package/dist/{chunk-5ZFBQKCW.js.map → chunk-4YZLXIS4.js.map} +1 -1
  24. package/dist/{chunk-WMS7BOP7.cjs → chunk-5GRNWZZS.cjs} +3 -3
  25. package/dist/{chunk-WMS7BOP7.cjs.map → chunk-5GRNWZZS.cjs.map} +1 -1
  26. package/dist/{chunk-TH7EIZLU.cjs → chunk-67C55FXM.cjs} +65 -65
  27. package/dist/{chunk-TH7EIZLU.cjs.map → chunk-67C55FXM.cjs.map} +1 -1
  28. package/dist/{chunk-YQDPAOM2.js → chunk-6DFQUXJB.js} +6 -6
  29. package/dist/{chunk-YQDPAOM2.js.map → chunk-6DFQUXJB.js.map} +1 -1
  30. package/dist/{chunk-EAVV7J77.cjs → chunk-73ZRTS7S.cjs} +12 -3
  31. package/dist/chunk-73ZRTS7S.cjs.map +1 -0
  32. package/dist/{chunk-LERI4STI.cjs → chunk-773UBYWJ.cjs} +63 -63
  33. package/dist/{chunk-LERI4STI.cjs.map → chunk-773UBYWJ.cjs.map} +1 -1
  34. package/dist/{chunk-LOGRPGIH.js → chunk-7BT3XVWU.js} +12 -4
  35. package/dist/chunk-7BT3XVWU.js.map +1 -0
  36. package/dist/{chunk-PPJXCZCX.cjs → chunk-7JLKJOVG.cjs} +8 -8
  37. package/dist/{chunk-PPJXCZCX.cjs.map → chunk-7JLKJOVG.cjs.map} +1 -1
  38. package/dist/{chunk-DTJXVPYD.js → chunk-ALHEBK6S.js} +4 -4
  39. package/dist/{chunk-DTJXVPYD.js.map → chunk-ALHEBK6S.js.map} +1 -1
  40. package/dist/{chunk-ZD4SKL6I.js → chunk-CCH25WG6.js} +6 -6
  41. package/dist/{chunk-ZD4SKL6I.js.map → chunk-CCH25WG6.js.map} +1 -1
  42. package/dist/{chunk-4ESLXJ4G.js → chunk-CM6KRKF6.js} +5 -5
  43. package/dist/{chunk-4ESLXJ4G.js.map → chunk-CM6KRKF6.js.map} +1 -1
  44. package/dist/{chunk-ET73PQRG.js → chunk-CMDXDKJX.js} +5 -5
  45. package/dist/{chunk-ET73PQRG.js.map → chunk-CMDXDKJX.js.map} +1 -1
  46. package/dist/{chunk-J24BKQPK.js → chunk-D33KJE2C.js} +6 -6
  47. package/dist/{chunk-J24BKQPK.js.map → chunk-D33KJE2C.js.map} +1 -1
  48. package/dist/{chunk-W543ZJQB.cjs → chunk-EASJIOMB.cjs} +14 -14
  49. package/dist/{chunk-W543ZJQB.cjs.map → chunk-EASJIOMB.cjs.map} +1 -1
  50. package/dist/{chunk-VXN5FEWC.js → chunk-FDGZRSSA.js} +7 -7
  51. package/dist/{chunk-VXN5FEWC.js.map → chunk-FDGZRSSA.js.map} +1 -1
  52. package/dist/{chunk-GHTMFCWF.cjs → chunk-FLFWTZIS.cjs} +11 -11
  53. package/dist/{chunk-GHTMFCWF.cjs.map → chunk-FLFWTZIS.cjs.map} +1 -1
  54. package/dist/{chunk-SQSAIKSL.js → chunk-FP6SUEJ5.js} +6 -6
  55. package/dist/{chunk-SQSAIKSL.js.map → chunk-FP6SUEJ5.js.map} +1 -1
  56. package/dist/{chunk-RA26ZEMJ.js → chunk-G2XVC7BX.js} +6 -6
  57. package/dist/{chunk-RA26ZEMJ.js.map → chunk-G2XVC7BX.js.map} +1 -1
  58. package/dist/{chunk-S7Y6AP64.cjs → chunk-GV6TKASG.cjs} +4 -4
  59. package/dist/{chunk-S7Y6AP64.cjs.map → chunk-GV6TKASG.cjs.map} +1 -1
  60. package/dist/{chunk-AJXH4AOX.js → chunk-GVEZESOH.js} +4 -4
  61. package/dist/{chunk-AJXH4AOX.js.map → chunk-GVEZESOH.js.map} +1 -1
  62. package/dist/{chunk-C5QHQN5G.cjs → chunk-GXTPE32B.cjs} +14 -14
  63. package/dist/{chunk-C5QHQN5G.cjs.map → chunk-GXTPE32B.cjs.map} +1 -1
  64. package/dist/{chunk-XNUACBMX.cjs → chunk-IGPF637U.cjs} +6 -6
  65. package/dist/{chunk-XNUACBMX.cjs.map → chunk-IGPF637U.cjs.map} +1 -1
  66. package/dist/{chunk-PXA4EGKL.cjs → chunk-IK5UTS7Q.cjs} +13 -13
  67. package/dist/{chunk-PXA4EGKL.cjs.map → chunk-IK5UTS7Q.cjs.map} +1 -1
  68. package/dist/{chunk-RPPHTS6D.js → chunk-IP73WGJO.js} +4 -4
  69. package/dist/{chunk-RPPHTS6D.js.map → chunk-IP73WGJO.js.map} +1 -1
  70. package/dist/{chunk-EVOVAWN6.cjs → chunk-ITROB3E5.cjs} +3 -3
  71. package/dist/{chunk-EVOVAWN6.cjs.map → chunk-ITROB3E5.cjs.map} +1 -1
  72. package/dist/{chunk-TKOUI25C.js → chunk-JPOJK4HE.js} +6 -6
  73. package/dist/{chunk-TKOUI25C.js.map → chunk-JPOJK4HE.js.map} +1 -1
  74. package/dist/{chunk-RZZJ4L32.js → chunk-KUXC22PN.js} +5 -5
  75. package/dist/{chunk-RZZJ4L32.js.map → chunk-KUXC22PN.js.map} +1 -1
  76. package/dist/{chunk-COBVX6FO.js → chunk-KWBDEZA7.js} +4 -4
  77. package/dist/{chunk-COBVX6FO.js.map → chunk-KWBDEZA7.js.map} +1 -1
  78. package/dist/{chunk-RJFQV7QJ.cjs → chunk-L4LO7SXL.cjs} +38 -38
  79. package/dist/{chunk-RJFQV7QJ.cjs.map → chunk-L4LO7SXL.cjs.map} +1 -1
  80. package/dist/{chunk-OCDUNF52.cjs → chunk-LFITIFN4.cjs} +8 -8
  81. package/dist/{chunk-OCDUNF52.cjs.map → chunk-LFITIFN4.cjs.map} +1 -1
  82. package/dist/{chunk-5QBM7JJC.cjs → chunk-LZMLLK22.cjs} +16 -16
  83. package/dist/{chunk-5QBM7JJC.cjs.map → chunk-LZMLLK22.cjs.map} +1 -1
  84. package/dist/{chunk-ZVTNACHY.js → chunk-MTZKPV6D.js} +4 -12
  85. package/dist/chunk-MTZKPV6D.js.map +1 -0
  86. package/dist/{chunk-Q632CERJ.js → chunk-NHVVEZW2.js} +5 -5
  87. package/dist/{chunk-Q632CERJ.js.map → chunk-NHVVEZW2.js.map} +1 -1
  88. package/dist/{chunk-QQJHGSB2.cjs → chunk-NWXAU2T5.cjs} +3 -3
  89. package/dist/{chunk-QQJHGSB2.cjs.map → chunk-NWXAU2T5.cjs.map} +1 -1
  90. package/dist/{chunk-SPNWC52V.js → chunk-PJHUFD5O.js} +3 -3
  91. package/dist/{chunk-SPNWC52V.js.map → chunk-PJHUFD5O.js.map} +1 -1
  92. package/dist/{chunk-6QSLKMKV.cjs → chunk-PLXKFGJB.cjs} +5 -5
  93. package/dist/{chunk-6QSLKMKV.cjs.map → chunk-PLXKFGJB.cjs.map} +1 -1
  94. package/dist/{chunk-ODT3BA2T.js → chunk-Q5L74UGI.js} +4 -4
  95. package/dist/{chunk-ODT3BA2T.js.map → chunk-Q5L74UGI.js.map} +1 -1
  96. package/dist/{chunk-NKG3PCTS.cjs → chunk-QPPCEY5W.cjs} +45 -45
  97. package/dist/{chunk-NKG3PCTS.cjs.map → chunk-QPPCEY5W.cjs.map} +1 -1
  98. package/dist/{chunk-LPM2IGPA.cjs → chunk-R4IYLTSR.cjs} +4 -4
  99. package/dist/{chunk-LPM2IGPA.cjs.map → chunk-R4IYLTSR.cjs.map} +1 -1
  100. package/dist/{chunk-4GWTCVFL.js → chunk-RCRKB2TG.js} +3 -3
  101. package/dist/{chunk-4GWTCVFL.js.map → chunk-RCRKB2TG.js.map} +1 -1
  102. package/dist/{chunk-BMVLDSDJ.cjs → chunk-RFWX53ED.cjs} +23 -23
  103. package/dist/{chunk-BMVLDSDJ.cjs.map → chunk-RFWX53ED.cjs.map} +1 -1
  104. package/dist/{chunk-CLZVCJJX.js → chunk-RRKCV7QT.js} +4 -4
  105. package/dist/{chunk-CLZVCJJX.js.map → chunk-RRKCV7QT.js.map} +1 -1
  106. package/dist/{chunk-LYZLM7TQ.cjs → chunk-SBVDQ2PB.cjs} +11 -11
  107. package/dist/{chunk-LYZLM7TQ.cjs.map → chunk-SBVDQ2PB.cjs.map} +1 -1
  108. package/dist/{chunk-YYJ2TLFP.js → chunk-T2GYY7P5.js} +4 -4
  109. package/dist/{chunk-YYJ2TLFP.js.map → chunk-T2GYY7P5.js.map} +1 -1
  110. package/dist/{chunk-5AM2O3JF.js → chunk-T64IQJHY.js} +4 -4
  111. package/dist/{chunk-5AM2O3JF.js.map → chunk-T64IQJHY.js.map} +1 -1
  112. package/dist/{chunk-A7APTIYJ.js → chunk-T65G3E5M.js} +3 -3
  113. package/dist/{chunk-A7APTIYJ.js.map → chunk-T65G3E5M.js.map} +1 -1
  114. package/dist/{chunk-26PD32NV.cjs → chunk-T7QRJ6CC.cjs} +97 -97
  115. package/dist/{chunk-26PD32NV.cjs.map → chunk-T7QRJ6CC.cjs.map} +1 -1
  116. package/dist/{chunk-WCTXV424.cjs → chunk-TCA2QMPR.cjs} +46 -54
  117. package/dist/chunk-TCA2QMPR.cjs.map +1 -0
  118. package/dist/{chunk-HPMLQ4AV.js → chunk-TQ5KIKVK.js} +3 -3
  119. package/dist/{chunk-HPMLQ4AV.js.map → chunk-TQ5KIKVK.js.map} +1 -1
  120. package/dist/{chunk-C5RH6NNS.js → chunk-U3D7DWOU.js} +7 -7
  121. package/dist/{chunk-C5RH6NNS.js.map → chunk-U3D7DWOU.js.map} +1 -1
  122. package/dist/{chunk-HVMCICMF.js → chunk-U3ZA2A36.js} +4 -4
  123. package/dist/{chunk-HVMCICMF.js.map → chunk-U3ZA2A36.js.map} +1 -1
  124. package/dist/{chunk-MG4AA326.js → chunk-U4MYHXYB.js} +4 -4
  125. package/dist/{chunk-MG4AA326.js.map → chunk-U4MYHXYB.js.map} +1 -1
  126. package/dist/{chunk-2A4R6GSR.js → chunk-UB3FCZK2.js} +4 -4
  127. package/dist/{chunk-2A4R6GSR.js.map → chunk-UB3FCZK2.js.map} +1 -1
  128. package/dist/{chunk-USKSOKOS.cjs → chunk-UFREN5I5.cjs} +8 -8
  129. package/dist/{chunk-USKSOKOS.cjs.map → chunk-UFREN5I5.cjs.map} +1 -1
  130. package/dist/{chunk-UL3UXUNU.cjs → chunk-UZRS4E2K.cjs} +11 -11
  131. package/dist/{chunk-UL3UXUNU.cjs.map → chunk-UZRS4E2K.cjs.map} +1 -1
  132. package/dist/{chunk-OFF7L43B.cjs → chunk-VC5L737D.cjs} +7 -7
  133. package/dist/{chunk-OFF7L43B.cjs.map → chunk-VC5L737D.cjs.map} +1 -1
  134. package/dist/{chunk-QUCQNTXT.cjs → chunk-VCRTOLAT.cjs} +9 -9
  135. package/dist/{chunk-QUCQNTXT.cjs.map → chunk-VCRTOLAT.cjs.map} +1 -1
  136. package/dist/{chunk-JVE5HOUL.cjs → chunk-VGGYQ246.cjs} +4 -4
  137. package/dist/{chunk-JVE5HOUL.cjs.map → chunk-VGGYQ246.cjs.map} +1 -1
  138. package/dist/{chunk-6B65YSQN.cjs → chunk-W55OO342.cjs} +34 -34
  139. package/dist/{chunk-6B65YSQN.cjs.map → chunk-W55OO342.cjs.map} +1 -1
  140. package/dist/{chunk-TTE75FML.js → chunk-WINDACJX.js} +35 -35
  141. package/dist/{chunk-TTE75FML.js.map → chunk-WINDACJX.js.map} +1 -1
  142. package/dist/{chunk-NZZLZSVD.js → chunk-X5ROLVN2.js} +3 -3
  143. package/dist/{chunk-NZZLZSVD.js.map → chunk-X5ROLVN2.js.map} +1 -1
  144. package/dist/{chunk-KAWV7C5E.cjs → chunk-X6MKRXGS.cjs} +14 -14
  145. package/dist/{chunk-KAWV7C5E.cjs.map → chunk-X6MKRXGS.cjs.map} +1 -1
  146. package/dist/{chunk-WFGFCWLV.js → chunk-XX25W323.js} +6 -6
  147. package/dist/{chunk-WFGFCWLV.js.map → chunk-XX25W323.js.map} +1 -1
  148. package/dist/{chunk-NTS3DORC.cjs → chunk-YUSXKTBJ.cjs} +14 -14
  149. package/dist/{chunk-NTS3DORC.cjs.map → chunk-YUSXKTBJ.cjs.map} +1 -1
  150. package/dist/{chunk-2K3GCDOX.js → chunk-ZJOIVM5L.js} +3 -3
  151. package/dist/{chunk-2K3GCDOX.js.map → chunk-ZJOIVM5L.js.map} +1 -1
  152. package/dist/{chunk-RWL3CJF7.js → chunk-ZLVFK6NZ.js} +5 -5
  153. package/dist/{chunk-RWL3CJF7.js.map → chunk-ZLVFK6NZ.js.map} +1 -1
  154. package/dist/{chunk-A773U2QJ.cjs → chunk-ZMMOLM35.cjs} +54 -54
  155. package/dist/{chunk-A773U2QJ.cjs.map → chunk-ZMMOLM35.cjs.map} +1 -1
  156. package/dist/{chunk-A7MIAAKW.cjs → chunk-ZTE7FRYI.cjs} +6 -6
  157. package/dist/{chunk-A7MIAAKW.cjs.map → chunk-ZTE7FRYI.cjs.map} +1 -1
  158. package/dist/docs/SKILL.md +1 -1
  159. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  160. package/dist/server/handlers/a2a.cjs +14 -14
  161. package/dist/server/handlers/a2a.js +1 -1
  162. package/dist/server/handlers/agent-builder.cjs +17 -17
  163. package/dist/server/handlers/agent-builder.js +1 -1
  164. package/dist/server/handlers/agent-versions.cjs +8 -8
  165. package/dist/server/handlers/agent-versions.js +1 -1
  166. package/dist/server/handlers/agents.cjs +48 -48
  167. package/dist/server/handlers/agents.js +1 -1
  168. package/dist/server/handlers/auth.cjs +13 -13
  169. package/dist/server/handlers/auth.js +1 -1
  170. package/dist/server/handlers/authorship.cjs +12 -12
  171. package/dist/server/handlers/authorship.js +1 -1
  172. package/dist/server/handlers/builder-registry.cjs +6 -6
  173. package/dist/server/handlers/builder-registry.js +1 -1
  174. package/dist/server/handlers/channels.cjs +5 -5
  175. package/dist/server/handlers/channels.js +1 -1
  176. package/dist/server/handlers/conversations.cjs +5 -5
  177. package/dist/server/handlers/conversations.js +1 -1
  178. package/dist/server/handlers/datasets.cjs +26 -26
  179. package/dist/server/handlers/datasets.js +1 -1
  180. package/dist/server/handlers/editor-builder.cjs +6 -6
  181. package/dist/server/handlers/editor-builder.js +1 -1
  182. package/dist/server/handlers/favorites-enrichment.cjs +4 -4
  183. package/dist/server/handlers/favorites-enrichment.js +1 -1
  184. package/dist/server/handlers/logs.cjs +4 -4
  185. package/dist/server/handlers/logs.js +1 -1
  186. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  187. package/dist/server/handlers/mcp-client-versions.js +1 -1
  188. package/dist/server/handlers/memory.cjs +27 -27
  189. package/dist/server/handlers/memory.js +1 -1
  190. package/dist/server/handlers/observability-new-endpoints.cjs +29 -29
  191. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  192. package/dist/server/handlers/observability-shared.cjs +13 -9
  193. package/dist/server/handlers/observability-shared.d.ts +4 -2
  194. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  195. package/dist/server/handlers/observability-shared.js +1 -1
  196. package/dist/server/handlers/observability.cjs +40 -40
  197. package/dist/server/handlers/observability.d.ts.map +1 -1
  198. package/dist/server/handlers/observability.js +2 -2
  199. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  200. package/dist/server/handlers/prompt-block-versions.js +1 -1
  201. package/dist/server/handlers/responses.cjs +4 -4
  202. package/dist/server/handlers/responses.js +1 -1
  203. package/dist/server/handlers/responses.storage.cjs +8 -8
  204. package/dist/server/handlers/responses.storage.js +1 -1
  205. package/dist/server/handlers/scorer-versions.cjs +8 -8
  206. package/dist/server/handlers/scorer-versions.js +1 -1
  207. package/dist/server/handlers/scores.cjs +7 -7
  208. package/dist/server/handlers/scores.js +1 -1
  209. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  210. package/dist/server/handlers/stored-agent-favorites.js +1 -1
  211. package/dist/server/handlers/stored-agents.cjs +10 -10
  212. package/dist/server/handlers/stored-agents.js +1 -1
  213. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  214. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  215. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  216. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  217. package/dist/server/handlers/stored-scorers.cjs +6 -6
  218. package/dist/server/handlers/stored-scorers.js +1 -1
  219. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  220. package/dist/server/handlers/stored-skill-favorites.js +1 -1
  221. package/dist/server/handlers/stored-skills.cjs +7 -7
  222. package/dist/server/handlers/stored-skills.js +1 -1
  223. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  224. package/dist/server/handlers/stored-workspaces.js +1 -1
  225. package/dist/server/handlers/system.cjs +3 -3
  226. package/dist/server/handlers/system.js +1 -1
  227. package/dist/server/handlers/tool-providers.cjs +14 -14
  228. package/dist/server/handlers/tool-providers.js +1 -1
  229. package/dist/server/handlers/tools.cjs +6 -6
  230. package/dist/server/handlers/tools.js +1 -1
  231. package/dist/server/handlers/utils.cjs +11 -11
  232. package/dist/server/handlers/utils.js +1 -1
  233. package/dist/server/handlers/workflows.cjs +27 -27
  234. package/dist/server/handlers/workflows.js +1 -1
  235. package/dist/server/handlers.cjs +22 -22
  236. package/dist/server/handlers.js +11 -11
  237. package/dist/server/schemas/index.cjs +152 -152
  238. package/dist/server/schemas/index.js +4 -4
  239. package/dist/server/server-adapter/index.cjs +42 -42
  240. package/dist/server/server-adapter/index.js +6 -6
  241. package/package.json +6 -6
  242. package/dist/chunk-EAVV7J77.cjs.map +0 -1
  243. package/dist/chunk-LOGRPGIH.js.map +0 -1
  244. package/dist/chunk-WCTXV424.cjs.map +0 -1
  245. package/dist/chunk-ZVTNACHY.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/server/schemas/builder-registry.ts","../src/server/handlers/builder-registry.ts"],"names":[],"mappings":"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","file":"chunk-COBVX6FO.js","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":[],"mappings":"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","file":"chunk-KWBDEZA7.js","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,17 +1,17 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkZCX2J552_cjs = require('./chunk-ZCX2J552.cjs');
4
- var chunkXNUACBMX_cjs = require('./chunk-XNUACBMX.cjs');
5
- var chunkLPM2IGPA_cjs = require('./chunk-LPM2IGPA.cjs');
4
+ var chunkIGPF637U_cjs = require('./chunk-IGPF637U.cjs');
5
+ var chunkR4IYLTSR_cjs = require('./chunk-R4IYLTSR.cjs');
6
6
  var chunk2XZ2466F_cjs = require('./chunk-2XZ2466F.cjs');
7
7
  var chunk5SY2ZQ3R_cjs = require('./chunk-5SY2ZQ3R.cjs');
8
- var chunkWMS7BOP7_cjs = require('./chunk-WMS7BOP7.cjs');
8
+ var chunk5GRNWZZS_cjs = require('./chunk-5GRNWZZS.cjs');
9
9
  var chunkI5JCLVTK_cjs = require('./chunk-I5JCLVTK.cjs');
10
- var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
11
- var chunkEVOVAWN6_cjs = require('./chunk-EVOVAWN6.cjs');
10
+ var chunkITROB3E5_cjs = require('./chunk-ITROB3E5.cjs');
12
11
  var chunkZ7LCIYK7_cjs = require('./chunk-Z7LCIYK7.cjs');
13
12
  var chunkRTTQ6WVP_cjs = require('./chunk-RTTQ6WVP.cjs');
14
13
  var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
14
+ var chunk3JVOIOO6_cjs = require('./chunk-3JVOIOO6.cjs');
15
15
 
16
16
  // src/server/handlers/stored-agents.ts
17
17
  async function resolveBrowserField(browser, mastra) {
@@ -173,16 +173,16 @@ var LIST_STORED_AGENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
173
173
  if (!agentsStore) {
174
174
  throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
175
175
  }
176
- const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({
176
+ const filter = chunk5GRNWZZS_cjs.resolveAuthorFilter({
177
177
  requestContext,
178
178
  resource: "stored-agents",
179
179
  queryAuthorId: authorId,
180
180
  queryVisibility: visibility === "public" ? "public" : void 0
181
181
  });
182
- const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
183
- const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, scope);
184
- const callerId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext);
185
- const favoritesEnabled = await chunkLPM2IGPA_cjs.isBuilderFeatureEnabled(mastra, "favorites");
182
+ const scope = await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext);
183
+ const scopedMetadata = chunkITROB3E5_cjs.scopeStoredResourceMetadata(metadata, scope);
184
+ const callerId = chunk5GRNWZZS_cjs.getCallerAuthorId(requestContext);
185
+ const favoritesEnabled = await chunkR4IYLTSR_cjs.isBuilderFeatureEnabled(mastra, "favorites");
186
186
  const honoredStarredOnly = favoritesEnabled && favoritedOnly === true;
187
187
  const favoriteSubjectId = pinFavoritedFor ?? callerId;
188
188
  if (honoredStarredOnly) {
@@ -206,7 +206,7 @@ var LIST_STORED_AGENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
206
206
  metadata: scopedMetadata,
207
207
  entityIds: starredIds
208
208
  });
209
- const visible = allMatching.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
209
+ const visible = allMatching.agents.filter((record) => chunk5GRNWZZS_cjs.matchesAuthorFilter(record, filter));
210
210
  const total = visible.length;
211
211
  const startIdx = effectivePerPage === 0 ? 0 : page * effectivePerPage;
212
212
  const endIdx = effectivePerPage === 0 ? 0 : startIdx + effectivePerPage;
@@ -229,24 +229,24 @@ var LIST_STORED_AGENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
229
229
  authorId: filter.kind === "exact" ? filter.authorId : void 0,
230
230
  metadata: scopedMetadata
231
231
  });
232
- const visibleAgents = result.agents.filter((record) => chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter));
232
+ const visibleAgents = result.agents.filter((record) => chunk5GRNWZZS_cjs.matchesAuthorFilter(record, filter));
233
233
  const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(
234
234
  mastra,
235
235
  requestContext,
236
236
  visibleAgents.map((a) => a.authorId)
237
237
  );
238
238
  if (!favoritesEnabled) {
239
- const stripped = visibleAgents.map(chunkXNUACBMX_cjs.stripFavoriteFields);
239
+ const stripped = visibleAgents.map(chunkIGPF637U_cjs.stripFavoriteFields);
240
240
  const withAuthors2 = authors ? stripped.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : stripped;
241
241
  return { ...result, agents: withAuthors2 };
242
242
  }
243
- const enrichment = await chunkXNUACBMX_cjs.prepareFavoritesEnrichment(
243
+ const enrichment = await chunkIGPF637U_cjs.prepareFavoritesEnrichment(
244
244
  mastra,
245
245
  requestContext,
246
246
  "agent",
247
247
  visibleAgents.map((a) => a.id)
248
248
  );
249
- const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(chunkXNUACBMX_cjs.stripFavoriteFields);
249
+ const annotated = enrichment ? visibleAgents.map((record) => ({ ...record, isFavorited: enrichment.starredIds.has(record.id) })) : visibleAgents.map(chunkIGPF637U_cjs.stripFavoriteFields);
250
250
  const withAuthors = authors ? annotated.map((record) => chunk5SY2ZQ3R_cjs.attachAuthor(record, authors)) : annotated;
251
251
  return { ...result, agents: withAuthors };
252
252
  } catch (error) {
@@ -264,8 +264,8 @@ async function buildStoredAgentExport({
264
264
  const agentsStore = storage ? await storage.getStore("agents") : void 0;
265
265
  const storedAgent = await agentsStore?.getByIdResolved(storedAgentId, { status: "draft" });
266
266
  if (storedAgent) {
267
- chunkEVOVAWN6_cjs.assertStoredResourceScope(storedAgent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
268
- chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
267
+ chunkITROB3E5_cjs.assertStoredResourceScope(storedAgent, await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext));
268
+ chunk5GRNWZZS_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: storedAgent });
269
269
  }
270
270
  let codeAgent;
271
271
  try {
@@ -381,10 +381,10 @@ var GET_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
381
381
  if (!agent) {
382
382
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
383
383
  }
384
- chunkEVOVAWN6_cjs.assertStoredResourceScope(agent, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
385
- chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
384
+ chunkITROB3E5_cjs.assertStoredResourceScope(agent, await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext));
385
+ chunk5GRNWZZS_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: agent });
386
386
  const authors = await chunk5SY2ZQ3R_cjs.prepareAuthorEnrichment(mastra, requestContext, [agent.authorId]);
387
- const withFavorite = await chunkXNUACBMX_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
387
+ const withFavorite = await chunkIGPF637U_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", agent);
388
388
  return chunk5SY2ZQ3R_cjs.attachAuthor(withFavorite, authors);
389
389
  } catch (error) {
390
390
  return chunkZ7LCIYK7_cjs.handleError(error, "Error getting stored agent");
@@ -436,7 +436,7 @@ var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
436
436
  if (!agentsStore) {
437
437
  throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Agents storage domain is not available" });
438
438
  }
439
- const id = providedId || chunkEVOVAWN6_cjs.toSlug(name);
439
+ const id = providedId || chunkITROB3E5_cjs.toSlug(name);
440
440
  if (!id) {
441
441
  throw new chunk64ITUOXI_cjs.HTTPException(400, {
442
442
  message: "Could not derive agent ID from name. Please provide an explicit id."
@@ -446,7 +446,7 @@ var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
446
446
  if (existing) {
447
447
  throw new chunk64ITUOXI_cjs.HTTPException(409, { message: `Agent with id ${id} already exists` });
448
448
  }
449
- const authorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
449
+ const authorId = chunk5GRNWZZS_cjs.getCallerAuthorId(requestContext) ?? void 0;
450
450
  const visibility = authorId ? bodyVisibility ?? "private" : "public";
451
451
  chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
452
452
  const resolvedBrowser = await resolveBrowserField(browser, mastra);
@@ -477,7 +477,7 @@ var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
477
477
  id,
478
478
  authorId,
479
479
  visibility,
480
- metadata: chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(metadata, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext)),
480
+ metadata: chunkITROB3E5_cjs.scopeStoredResourceMetadata(metadata, await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext)),
481
481
  name,
482
482
  description,
483
483
  instructions: createInstructions,
@@ -518,7 +518,7 @@ var CREATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
518
518
  if (!resolved) {
519
519
  throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve created agent" });
520
520
  }
521
- return chunkXNUACBMX_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
521
+ return chunkIGPF637U_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
522
522
  } catch (error) {
523
523
  return chunkZ7LCIYK7_cjs.handleError(error, "Error creating stored agent");
524
524
  }
@@ -580,9 +580,9 @@ var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
580
580
  if (!existing) {
581
581
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
582
582
  }
583
- const scope = await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext);
584
- chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, scope);
585
- chunkWMS7BOP7_cjs.assertWriteAccess({
583
+ const scope = await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext);
584
+ chunkITROB3E5_cjs.assertStoredResourceScope(existing, scope);
585
+ chunk5GRNWZZS_cjs.assertWriteAccess({
586
586
  requestContext,
587
587
  resource: "stored-agents",
588
588
  resourceId: storedAgentId,
@@ -590,7 +590,7 @@ var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
590
590
  record: existing
591
591
  });
592
592
  chunkZCX2J552_cjs.validateMetadataAvatarUrl(metadata);
593
- const callerAuthorId = chunkWMS7BOP7_cjs.getCallerAuthorId(requestContext) ?? void 0;
593
+ const callerAuthorId = chunk5GRNWZZS_cjs.getCallerAuthorId(requestContext) ?? void 0;
594
594
  const resolvedVisibility = callerAuthorId ? visibility : visibility != null ? "public" : void 0;
595
595
  const resolvedBrowser = await resolveBrowserField(browser, mastra);
596
596
  let codeAgentForUpdate;
@@ -615,7 +615,7 @@ var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
615
615
  }
616
616
  }
617
617
  const mergedMetadata = { ...existing.metadata ?? {}, ...metadata ?? {} };
618
- const scopedMetadata = chunkEVOVAWN6_cjs.scopeStoredResourceMetadata(mergedMetadata, scope);
618
+ const scopedMetadata = chunkITROB3E5_cjs.scopeStoredResourceMetadata(mergedMetadata, scope);
619
619
  const updatedAgent = await agentsStore.update({
620
620
  id: storedAgentId,
621
621
  authorId,
@@ -703,7 +703,7 @@ var UPDATE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
703
703
  if (!resolved) {
704
704
  throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Failed to resolve updated agent" });
705
705
  }
706
- return chunkXNUACBMX_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
706
+ return chunkIGPF637U_cjs.enrichOrStripFavorites(mastra, requestContext, "agent", resolved);
707
707
  } catch (error) {
708
708
  return chunkZ7LCIYK7_cjs.handleError(error, "Error updating stored agent");
709
709
  }
@@ -733,8 +733,8 @@ var DELETE_STORED_AGENT_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
733
733
  if (!existing) {
734
734
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
735
735
  }
736
- chunkEVOVAWN6_cjs.assertStoredResourceScope(existing, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
737
- chunkWMS7BOP7_cjs.assertWriteAccess({
736
+ chunkITROB3E5_cjs.assertStoredResourceScope(existing, await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext));
737
+ chunk5GRNWZZS_cjs.assertWriteAccess({
738
738
  requestContext,
739
739
  resource: "stored-agents",
740
740
  resourceId: storedAgentId,
@@ -779,9 +779,9 @@ var GET_STORED_AGENT_DEPENDENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
779
779
  if (!target) {
780
780
  throw new chunk64ITUOXI_cjs.HTTPException(404, { message: `Stored agent with id ${storedAgentId} not found` });
781
781
  }
782
- chunkEVOVAWN6_cjs.assertStoredResourceScope(target, await chunkEVOVAWN6_cjs.getStoredResourceScope(mastra, requestContext));
783
- chunkWMS7BOP7_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
784
- const filter = chunkWMS7BOP7_cjs.resolveAuthorFilter({ requestContext, resource: "stored-agents" });
782
+ chunkITROB3E5_cjs.assertStoredResourceScope(target, await chunkITROB3E5_cjs.getStoredResourceScope(mastra, requestContext));
783
+ chunk5GRNWZZS_cjs.assertReadAccess({ requestContext, resource: "stored-agents", resourceId: storedAgentId, record: target });
784
+ const filter = chunk5GRNWZZS_cjs.resolveAuthorFilter({ requestContext, resource: "stored-agents" });
785
785
  const all = await agentsStore.listResolved({
786
786
  perPage: false,
787
787
  status: "published"
@@ -792,7 +792,7 @@ var GET_STORED_AGENT_DEPENDENTS_ROUTE = chunkRTTQ6WVP_cjs.createRoute({
792
792
  for (const record of all.agents) {
793
793
  if (record.id === storedAgentId) continue;
794
794
  if (!referencesTarget(record.agents, storedAgentId)) continue;
795
- if (chunkWMS7BOP7_cjs.matchesAuthorFilter(record, filter)) {
795
+ if (chunk5GRNWZZS_cjs.matchesAuthorFilter(record, filter)) {
796
796
  dependents.push({
797
797
  id: record.id,
798
798
  name: record.name ?? record.id
@@ -853,5 +853,5 @@ exports.LIST_STORED_AGENTS_ROUTE = LIST_STORED_AGENTS_ROUTE;
853
853
  exports.OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE = OPEN_STORED_AGENT_CHANGE_REQUEST_ROUTE;
854
854
  exports.PREVIEW_INSTRUCTIONS_ROUTE = PREVIEW_INSTRUCTIONS_ROUTE;
855
855
  exports.UPDATE_STORED_AGENT_ROUTE = UPDATE_STORED_AGENT_ROUTE;
856
- //# sourceMappingURL=chunk-RJFQV7QJ.cjs.map
857
- //# sourceMappingURL=chunk-RJFQV7QJ.cjs.map
856
+ //# sourceMappingURL=chunk-L4LO7SXL.cjs.map
857
+ //# sourceMappingURL=chunk-L4LO7SXL.cjs.map