@mastra/server 1.36.0-alpha.1 → 1.36.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +118 -0
- package/dist/{api-schema-manifest-EMKHNXSD.cjs → api-schema-manifest-CF2WPQBA.cjs} +6 -6
- package/dist/{api-schema-manifest-EMKHNXSD.cjs.map → api-schema-manifest-CF2WPQBA.cjs.map} +1 -1
- package/dist/{api-schema-manifest-EJXNYOFH.js → api-schema-manifest-YS3FEIFG.js} +4 -4
- package/dist/{api-schema-manifest-EJXNYOFH.js.map → api-schema-manifest-YS3FEIFG.js.map} +1 -1
- package/dist/{chunk-YARY4I5U.js → chunk-23S37FLK.js} +9 -3
- package/dist/chunk-23S37FLK.js.map +1 -0
- package/dist/{chunk-NG62OLVA.js → chunk-2JXX4IPC.js} +3 -3
- package/dist/{chunk-NG62OLVA.js.map → chunk-2JXX4IPC.js.map} +1 -1
- package/dist/{chunk-6IUJAAQ2.js → chunk-2SMGXJZJ.js} +42 -8
- package/dist/chunk-2SMGXJZJ.js.map +1 -0
- package/dist/{chunk-PQDYNK4J.cjs → chunk-3AKG5KEE.cjs} +45 -37
- package/dist/chunk-3AKG5KEE.cjs.map +1 -0
- package/dist/{chunk-Y6CAJLYX.js → chunk-3FLL7GNJ.js} +6 -6
- package/dist/{chunk-Y6CAJLYX.js.map → chunk-3FLL7GNJ.js.map} +1 -1
- package/dist/chunk-3ZWALPHI.cjs +101 -0
- package/dist/chunk-3ZWALPHI.cjs.map +1 -0
- package/dist/{chunk-Y5LNMKEY.cjs → chunk-43KD3CRE.cjs} +21 -7
- package/dist/chunk-43KD3CRE.cjs.map +1 -0
- package/dist/{chunk-3NA22RQ5.cjs → chunk-4BLUIUHS.cjs} +5 -5
- package/dist/{chunk-3NA22RQ5.cjs.map → chunk-4BLUIUHS.cjs.map} +1 -1
- package/dist/{chunk-FRFWWBSS.js → chunk-4DUHTOLC.js} +4 -4
- package/dist/{chunk-FRFWWBSS.js.map → chunk-4DUHTOLC.js.map} +1 -1
- package/dist/chunk-4G7S52U3.cjs +356 -0
- package/dist/chunk-4G7S52U3.cjs.map +1 -0
- package/dist/{chunk-XHA6OBT3.cjs → chunk-4UFLVROK.cjs} +13 -13
- package/dist/{chunk-XHA6OBT3.cjs.map → chunk-4UFLVROK.cjs.map} +1 -1
- package/dist/{chunk-YHRGDSTK.js → chunk-4XSWMZTL.js} +40 -3
- package/dist/chunk-4XSWMZTL.js.map +1 -0
- package/dist/{chunk-MHQFFRA2.cjs → chunk-4Z24UGLY.cjs} +26 -26
- package/dist/{chunk-MHQFFRA2.cjs.map → chunk-4Z24UGLY.cjs.map} +1 -1
- package/dist/{chunk-GPLCXP3B.cjs → chunk-5GI232FP.cjs} +8 -8
- package/dist/{chunk-GPLCXP3B.cjs.map → chunk-5GI232FP.cjs.map} +1 -1
- package/dist/{chunk-5XW4MKE6.cjs → chunk-65T6KVYX.cjs} +11 -2
- package/dist/chunk-65T6KVYX.cjs.map +1 -0
- package/dist/{chunk-W32BPAIP.js → chunk-664F5XOW.js} +7 -7
- package/dist/{chunk-W32BPAIP.js.map → chunk-664F5XOW.js.map} +1 -1
- package/dist/{chunk-N44OOOAL.js → chunk-6GMGCV74.js} +5 -5
- package/dist/{chunk-N44OOOAL.js.map → chunk-6GMGCV74.js.map} +1 -1
- package/dist/chunk-6JCLSYOU.js +351 -0
- package/dist/chunk-6JCLSYOU.js.map +1 -0
- package/dist/{chunk-HT4KV7V5.js → chunk-6NIQROP2.js} +23 -13
- package/dist/chunk-6NIQROP2.js.map +1 -0
- package/dist/chunk-753JFAF2.js +134 -0
- package/dist/chunk-753JFAF2.js.map +1 -0
- package/dist/{chunk-7BM2AIKU.js → chunk-7BZ2N56X.js} +5 -5
- package/dist/{chunk-7BM2AIKU.js.map → chunk-7BZ2N56X.js.map} +1 -1
- package/dist/{chunk-LQRPDQCE.js → chunk-7EDTSUCY.js} +4 -4
- package/dist/{chunk-LQRPDQCE.js.map → chunk-7EDTSUCY.js.map} +1 -1
- package/dist/chunk-7U7OWTR2.js +149 -0
- package/dist/chunk-7U7OWTR2.js.map +1 -0
- package/dist/{chunk-SR6QNILC.cjs → chunk-A4FTF4A7.cjs} +55 -55
- package/dist/{chunk-SR6QNILC.cjs.map → chunk-A4FTF4A7.cjs.map} +1 -1
- package/dist/{chunk-7YV7MYOP.js → chunk-AAZDGIDJ.js} +22 -12
- package/dist/chunk-AAZDGIDJ.js.map +1 -0
- package/dist/chunk-AR7VSXHH.cjs +143 -0
- package/dist/chunk-AR7VSXHH.cjs.map +1 -0
- package/dist/{chunk-JRFHBWKQ.cjs → chunk-AY3ZP465.cjs} +36 -26
- package/dist/chunk-AY3ZP465.cjs.map +1 -0
- package/dist/{chunk-YLJ5EVO3.js → chunk-BWNJBSXL.js} +3 -3
- package/dist/{chunk-YLJ5EVO3.js.map → chunk-BWNJBSXL.js.map} +1 -1
- package/dist/{chunk-JBAQMT4Y.cjs → chunk-CBHBMWZ2.cjs} +12 -12
- package/dist/{chunk-JBAQMT4Y.cjs.map → chunk-CBHBMWZ2.cjs.map} +1 -1
- package/dist/{chunk-JW4P6OFG.js → chunk-CCL4C2ZO.js} +4 -4
- package/dist/{chunk-JW4P6OFG.js.map → chunk-CCL4C2ZO.js.map} +1 -1
- package/dist/{chunk-7LBBDT4S.js → chunk-CGB327L6.js} +3 -3
- package/dist/{chunk-7LBBDT4S.js.map → chunk-CGB327L6.js.map} +1 -1
- package/dist/{chunk-WP67ASKV.js → chunk-CKCZVUUB.js} +7 -7
- package/dist/{chunk-WP67ASKV.js.map → chunk-CKCZVUUB.js.map} +1 -1
- package/dist/chunk-CM2C2H2Y.cjs +101 -0
- package/dist/chunk-CM2C2H2Y.cjs.map +1 -0
- package/dist/{chunk-RGUKCKGB.cjs → chunk-CODPCBGN.cjs} +22 -22
- package/dist/{chunk-RGUKCKGB.cjs.map → chunk-CODPCBGN.cjs.map} +1 -1
- package/dist/chunk-CRTDKNOZ.cjs +654 -0
- package/dist/chunk-CRTDKNOZ.cjs.map +1 -0
- package/dist/{chunk-OS2636MU.js → chunk-D4HVKF56.js} +5 -5
- package/dist/{chunk-OS2636MU.js.map → chunk-D4HVKF56.js.map} +1 -1
- package/dist/{chunk-73MISLDN.cjs → chunk-D774EZRN.cjs} +16 -16
- package/dist/{chunk-73MISLDN.cjs.map → chunk-D774EZRN.cjs.map} +1 -1
- package/dist/{chunk-L3WM4IWR.cjs → chunk-DYXX34YU.cjs} +56 -21
- package/dist/chunk-DYXX34YU.cjs.map +1 -0
- package/dist/{chunk-DZWFQD53.cjs → chunk-EAPGRYRG.cjs} +6 -6
- package/dist/{chunk-DZWFQD53.cjs.map → chunk-EAPGRYRG.cjs.map} +1 -1
- package/dist/{chunk-R4IYXUNR.cjs → chunk-ESZN7NKS.cjs} +34 -26
- package/dist/chunk-ESZN7NKS.cjs.map +1 -0
- package/dist/{chunk-XZT7USLH.js → chunk-EX3XD2F5.js} +79 -40
- package/dist/chunk-EX3XD2F5.js.map +1 -0
- package/dist/{chunk-E53AJNZB.js → chunk-F2FAL5CZ.js} +2 -2
- package/dist/{chunk-E53AJNZB.js.map → chunk-F2FAL5CZ.js.map} +1 -1
- package/dist/chunk-G5LQCOFZ.js +292 -0
- package/dist/chunk-G5LQCOFZ.js.map +1 -0
- package/dist/chunk-GA4BG5JK.js +46 -0
- package/dist/chunk-GA4BG5JK.js.map +1 -0
- package/dist/{chunk-YPXOTWND.js → chunk-GAGC4WDU.js} +3 -3
- package/dist/{chunk-YPXOTWND.js.map → chunk-GAGC4WDU.js.map} +1 -1
- package/dist/{chunk-T6QQYYPA.cjs → chunk-GAL7C4Y5.cjs} +36 -26
- package/dist/chunk-GAL7C4Y5.cjs.map +1 -0
- package/dist/{chunk-GTYVB2TS.js → chunk-GFZR6THV.js} +3 -3
- package/dist/{chunk-GTYVB2TS.js.map → chunk-GFZR6THV.js.map} +1 -1
- package/dist/{chunk-Q7LA2XMK.js → chunk-GW6T4HLN.js} +9 -9
- package/dist/{chunk-Q7LA2XMK.js.map → chunk-GW6T4HLN.js.map} +1 -1
- package/dist/{chunk-OOEYTKTC.js → chunk-HGRG2WVX.js} +35 -18
- package/dist/chunk-HGRG2WVX.js.map +1 -0
- package/dist/chunk-HMJL3C3H.js +36 -0
- package/dist/chunk-HMJL3C3H.js.map +1 -0
- package/dist/{chunk-X7ZNZFHV.js → chunk-HNGYUI5N.js} +23 -15
- package/dist/chunk-HNGYUI5N.js.map +1 -0
- package/dist/{chunk-7R7WT24X.cjs → chunk-HWT5YD7H.cjs} +17 -17
- package/dist/{chunk-7R7WT24X.cjs.map → chunk-HWT5YD7H.cjs.map} +1 -1
- package/dist/{chunk-PM6YRFZW.cjs → chunk-HXEMVATM.cjs} +8 -8
- package/dist/{chunk-PM6YRFZW.cjs.map → chunk-HXEMVATM.cjs.map} +1 -1
- package/dist/{chunk-R3R6VJRM.cjs → chunk-HZNJ4B7D.cjs} +32 -32
- package/dist/{chunk-R3R6VJRM.cjs.map → chunk-HZNJ4B7D.cjs.map} +1 -1
- package/dist/{chunk-XGNMFTYF.js → chunk-I3RWQGD7.js} +9 -9
- package/dist/{chunk-XGNMFTYF.js.map → chunk-I3RWQGD7.js.map} +1 -1
- package/dist/{chunk-UQ2H32RT.cjs → chunk-I6WBJDRP.cjs} +10 -10
- package/dist/{chunk-UQ2H32RT.cjs.map → chunk-I6WBJDRP.cjs.map} +1 -1
- package/dist/{chunk-T3PECMPO.js → chunk-IRJQQYII.js} +7 -7
- package/dist/{chunk-T3PECMPO.js.map → chunk-IRJQQYII.js.map} +1 -1
- package/dist/{chunk-4YSEVAAS.cjs → chunk-J6IRCLC6.cjs} +31 -31
- package/dist/{chunk-4YSEVAAS.cjs.map → chunk-J6IRCLC6.cjs.map} +1 -1
- package/dist/chunk-JUYUBEMU.js +28 -0
- package/dist/chunk-JUYUBEMU.js.map +1 -0
- package/dist/chunk-K6AEVBZQ.js +98 -0
- package/dist/chunk-K6AEVBZQ.js.map +1 -0
- package/dist/{chunk-B3UPXBHD.js → chunk-K74VFJKF.js} +227 -41
- package/dist/chunk-K74VFJKF.js.map +1 -0
- package/dist/{chunk-MEYWNCUV.cjs → chunk-KE4V4LJE.cjs} +7 -7
- package/dist/{chunk-MEYWNCUV.cjs.map → chunk-KE4V4LJE.cjs.map} +1 -1
- package/dist/{chunk-DYN7KSCZ.js → chunk-KTOJ2F6V.js} +5 -5
- package/dist/{chunk-DYN7KSCZ.js.map → chunk-KTOJ2F6V.js.map} +1 -1
- package/dist/{chunk-ES23WZRF.cjs → chunk-LEIV627E.cjs} +15 -15
- package/dist/{chunk-ES23WZRF.cjs.map → chunk-LEIV627E.cjs.map} +1 -1
- package/dist/chunk-LG57RYYL.cjs +551 -0
- package/dist/chunk-LG57RYYL.cjs.map +1 -0
- package/dist/{chunk-AIRSK4QU.js → chunk-LH5Y7AJF.js} +46 -7
- package/dist/chunk-LH5Y7AJF.js.map +1 -0
- package/dist/{chunk-5TTCUSSA.js → chunk-LPFE6YTG.js} +3 -3
- package/dist/{chunk-5TTCUSSA.js.map → chunk-LPFE6YTG.js.map} +1 -1
- package/dist/{chunk-WYLVJSGR.cjs → chunk-LTRLD33R.cjs} +47 -8
- package/dist/chunk-LTRLD33R.cjs.map +1 -0
- package/dist/{chunk-UH3MHVDF.cjs → chunk-M4B42JGO.cjs} +6 -3
- package/dist/chunk-M4B42JGO.cjs.map +1 -0
- package/dist/{chunk-QWPEAC7I.cjs → chunk-MERLF4UP.cjs} +94 -94
- package/dist/{chunk-QWPEAC7I.cjs.map → chunk-MERLF4UP.cjs.map} +1 -1
- package/dist/chunk-MXMOHULN.js +497 -0
- package/dist/chunk-MXMOHULN.js.map +1 -0
- package/dist/{chunk-CIPZ4VOZ.cjs → chunk-N6RQC4Z3.cjs} +4 -4
- package/dist/{chunk-CIPZ4VOZ.cjs.map → chunk-N6RQC4Z3.cjs.map} +1 -1
- package/dist/{chunk-DM6UW5RD.js → chunk-N7CG7MFQ.js} +8 -8
- package/dist/{chunk-DM6UW5RD.js.map → chunk-N7CG7MFQ.js.map} +1 -1
- package/dist/chunk-NRRAME2S.js +98 -0
- package/dist/chunk-NRRAME2S.js.map +1 -0
- package/dist/chunk-O4O2EJF7.cjs +13 -0
- package/dist/chunk-O4O2EJF7.cjs.map +1 -0
- package/dist/{chunk-H3RUJBEL.cjs → chunk-O7B3P2AT.cjs} +57 -40
- package/dist/chunk-O7B3P2AT.cjs.map +1 -0
- package/dist/{chunk-L2RZNUOW.js → chunk-OGYYXNGI.js} +4 -4
- package/dist/{chunk-L2RZNUOW.js.map → chunk-OGYYXNGI.js.map} +1 -1
- package/dist/{chunk-M7DF3D2M.js → chunk-OJNVSXOF.js} +19 -5
- package/dist/chunk-OJNVSXOF.js.map +1 -0
- package/dist/{chunk-KGK2LCZ4.js → chunk-OKKJPM5N.js} +21 -14
- package/dist/chunk-OKKJPM5N.js.map +1 -0
- package/dist/{chunk-Z6C7SDXA.js → chunk-ONCDLJUQ.js} +6 -3
- package/dist/chunk-ONCDLJUQ.js.map +1 -0
- package/dist/{chunk-M7CTMLXS.js → chunk-OSN3DL34.js} +4 -4
- package/dist/{chunk-M7CTMLXS.js.map → chunk-OSN3DL34.js.map} +1 -1
- package/dist/chunk-OXSAN74Y.cjs +504 -0
- package/dist/chunk-OXSAN74Y.cjs.map +1 -0
- package/dist/{chunk-ZIR2AE52.js → chunk-P5ZWPVC2.js} +4 -4
- package/dist/{chunk-ZIR2AE52.js.map → chunk-P5ZWPVC2.js.map} +1 -1
- package/dist/{chunk-BBD7VAAR.js → chunk-PQ37PNAE.js} +22 -12
- package/dist/chunk-PQ37PNAE.js.map +1 -0
- package/dist/{chunk-DRNCUSSM.cjs → chunk-PWGPLCL4.cjs} +5 -5
- package/dist/{chunk-DRNCUSSM.cjs.map → chunk-PWGPLCL4.cjs.map} +1 -1
- package/dist/{chunk-NPMJ6FRL.cjs → chunk-QGPIJ3KB.cjs} +67 -67
- package/dist/{chunk-NPMJ6FRL.cjs.map → chunk-QGPIJ3KB.cjs.map} +1 -1
- package/dist/chunk-QJU62KP2.cjs +298 -0
- package/dist/chunk-QJU62KP2.cjs.map +1 -0
- package/dist/{chunk-AY5TY4EN.js → chunk-QKAIQUSC.js} +4 -4
- package/dist/{chunk-AY5TY4EN.js.map → chunk-QKAIQUSC.js.map} +1 -1
- package/dist/{chunk-NDMG7SUN.js → chunk-QLX34MAR.js} +8 -8
- package/dist/{chunk-NDMG7SUN.js.map → chunk-QLX34MAR.js.map} +1 -1
- package/dist/{chunk-LTYRUL3Q.cjs → chunk-QZ6UFQ7V.cjs} +42 -2
- package/dist/chunk-QZ6UFQ7V.cjs.map +1 -0
- package/dist/{chunk-IVFIYTLD.cjs → chunk-RJF75FEP.cjs} +26 -26
- package/dist/{chunk-IVFIYTLD.cjs.map → chunk-RJF75FEP.cjs.map} +1 -1
- package/dist/{chunk-M4MNMBQF.cjs → chunk-RYPLQO4Z.cjs} +32 -25
- package/dist/chunk-RYPLQO4Z.cjs.map +1 -0
- package/dist/chunk-SFPN7SHZ.js +11 -0
- package/dist/chunk-SFPN7SHZ.js.map +1 -0
- package/dist/{chunk-BBB4NKZZ.cjs → chunk-SKLREO5Z.cjs} +82 -82
- package/dist/{chunk-BBB4NKZZ.cjs.map → chunk-SKLREO5Z.cjs.map} +1 -1
- package/dist/{chunk-LBEQ4EE4.js → chunk-SPGVPADY.js} +3 -3
- package/dist/{chunk-LBEQ4EE4.js.map → chunk-SPGVPADY.js.map} +1 -1
- package/dist/{chunk-Q2B7W7GA.cjs → chunk-T3C54LPX.cjs} +57 -5
- package/dist/chunk-T3C54LPX.cjs.map +1 -0
- package/dist/{chunk-DGJSHUP4.cjs → chunk-U6QDJKSZ.cjs} +105 -105
- package/dist/{chunk-DGJSHUP4.cjs.map → chunk-U6QDJKSZ.cjs.map} +1 -1
- package/dist/{chunk-DZXHO72E.cjs → chunk-UBYGPC2S.cjs} +12 -12
- package/dist/{chunk-DZXHO72E.cjs.map → chunk-UBYGPC2S.cjs.map} +1 -1
- package/dist/{chunk-IDUFQ5HG.js → chunk-UCKK7LPQ.js} +3 -3
- package/dist/{chunk-IDUFQ5HG.js.map → chunk-UCKK7LPQ.js.map} +1 -1
- package/dist/{chunk-JX4UGU4A.cjs → chunk-UGJBURIS.cjs} +12 -12
- package/dist/{chunk-JX4UGU4A.cjs.map → chunk-UGJBURIS.cjs.map} +1 -1
- package/dist/{chunk-PDHGJ7GP.js → chunk-UIRQU4GW.js} +54 -6
- package/dist/chunk-UIRQU4GW.js.map +1 -0
- package/dist/chunk-V4ATNZXG.cjs +31 -0
- package/dist/chunk-V4ATNZXG.cjs.map +1 -0
- package/dist/chunk-VX3MJR4P.cjs +161 -0
- package/dist/chunk-VX3MJR4P.cjs.map +1 -0
- package/dist/{chunk-YE3LMHL3.js → chunk-WD2L3ZU3.js} +5 -5
- package/dist/{chunk-YE3LMHL3.js.map → chunk-WD2L3ZU3.js.map} +1 -1
- package/dist/{chunk-QTPAVOG2.cjs → chunk-WLGC3IWY.cjs} +49 -39
- package/dist/chunk-WLGC3IWY.cjs.map +1 -0
- package/dist/{chunk-MXGCIYNM.js → chunk-XI3XH4G7.js} +22 -12
- package/dist/chunk-XI3XH4G7.js.map +1 -0
- package/dist/{chunk-PYZAUXQX.cjs → chunk-XNR667MS.cjs} +27 -27
- package/dist/{chunk-PYZAUXQX.cjs.map → chunk-XNR667MS.cjs.map} +1 -1
- package/dist/{chunk-Y6MWNLAA.cjs → chunk-XR3CGVKU.cjs} +8 -8
- package/dist/{chunk-Y6MWNLAA.cjs.map → chunk-XR3CGVKU.cjs.map} +1 -1
- package/dist/{chunk-AZORAK4H.cjs → chunk-XTFWFQZ7.cjs} +2 -2
- package/dist/{chunk-AZORAK4H.cjs.map → chunk-XTFWFQZ7.cjs.map} +1 -1
- package/dist/{chunk-ELWN7ZXR.js → chunk-Y3KIKJW6.js} +6 -6
- package/dist/{chunk-ELWN7ZXR.js.map → chunk-Y3KIKJW6.js.map} +1 -1
- package/dist/{chunk-3BL73LS3.cjs → chunk-YETIPEQM.cjs} +40 -40
- package/dist/{chunk-3BL73LS3.cjs.map → chunk-YETIPEQM.cjs.map} +1 -1
- package/dist/{chunk-B34S64RC.cjs → chunk-YNSUYESL.cjs} +23 -3
- package/dist/chunk-YNSUYESL.cjs.map +1 -0
- package/dist/{chunk-3PQSHLG7.cjs → chunk-YQYYIRDS.cjs} +164 -164
- package/dist/{chunk-3PQSHLG7.cjs.map → chunk-YQYYIRDS.cjs.map} +1 -1
- package/dist/{chunk-JRZZN55Y.cjs → chunk-Z772ZUYH.cjs} +53 -43
- package/dist/chunk-Z772ZUYH.cjs.map +1 -0
- package/dist/chunk-ZCX2J552.cjs +38 -0
- package/dist/chunk-ZCX2J552.cjs.map +1 -0
- package/dist/{chunk-OULCMO5R.js → chunk-ZHS2QDGO.js} +23 -15
- package/dist/chunk-ZHS2QDGO.js.map +1 -0
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/server/auth/helpers.d.ts +3 -0
- package/dist/server/auth/helpers.d.ts.map +1 -1
- package/dist/server/auth/index.cjs +28 -15
- package/dist/server/auth/index.js +2 -1
- package/dist/server/browser-stream/types.d.ts +9 -0
- package/dist/server/browser-stream/types.d.ts.map +1 -1
- package/dist/server/constants.d.ts +3 -0
- package/dist/server/constants.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +14 -14
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +16 -16
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.d.ts.map +1 -1
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +41 -41
- package/dist/server/handlers/agents.d.ts +185 -0
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +15 -11
- package/dist/server/handlers/auth.d.ts +168 -146
- package/dist/server/handlers/auth.d.ts.map +1 -1
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/authorship.cjs +52 -0
- package/dist/server/handlers/authorship.cjs.map +1 -0
- package/dist/server/handlers/authorship.d.ts +176 -0
- package/dist/server/handlers/authorship.d.ts.map +1 -0
- package/dist/server/handlers/authorship.js +3 -0
- package/dist/server/handlers/authorship.js.map +1 -0
- package/dist/server/handlers/background-tasks.cjs +4 -4
- package/dist/server/handlers/background-tasks.js +1 -1
- package/dist/server/handlers/builder-registry.cjs +28 -0
- package/dist/server/handlers/builder-registry.cjs.map +1 -0
- package/dist/server/handlers/builder-registry.d.ts +170 -0
- package/dist/server/handlers/builder-registry.d.ts.map +1 -0
- package/dist/server/handlers/builder-registry.js +3 -0
- package/dist/server/handlers/builder-registry.js.map +1 -0
- package/dist/server/handlers/channels.cjs +5 -5
- package/dist/server/handlers/channels.js +1 -1
- package/dist/server/handlers/conversations.cjs +5 -5
- package/dist/server/handlers/conversations.js +1 -1
- package/dist/server/handlers/datasets.cjs +26 -26
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/editor-builder.cjs +24 -0
- package/dist/server/handlers/editor-builder.cjs.map +1 -0
- package/dist/server/handlers/editor-builder.d.ts +259 -0
- package/dist/server/handlers/editor-builder.d.ts.map +1 -0
- package/dist/server/handlers/editor-builder.js +3 -0
- package/dist/server/handlers/editor-builder.js.map +1 -0
- package/dist/server/handlers/error.cjs +3 -3
- package/dist/server/handlers/error.d.ts.map +1 -1
- package/dist/server/handlers/error.js +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +16 -0
- package/dist/server/handlers/favorites-enrichment.cjs.map +1 -0
- package/dist/server/handlers/favorites-enrichment.d.ts +27 -0
- package/dist/server/handlers/favorites-enrichment.d.ts.map +1 -0
- package/dist/server/handlers/favorites-enrichment.js +3 -0
- package/dist/server/handlers/favorites-enrichment.js.map +1 -0
- package/dist/server/handlers/logs.cjs +4 -4
- package/dist/server/handlers/logs.js +1 -1
- package/dist/server/handlers/mcp-client-versions.cjs +8 -8
- package/dist/server/handlers/mcp-client-versions.d.ts.map +1 -1
- package/dist/server/handlers/mcp-client-versions.js +1 -1
- package/dist/server/handlers/mcp.cjs +11 -11
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +27 -27
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +28 -28
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +39 -39
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +3 -3
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +4 -4
- package/dist/server/handlers/processors.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +8 -8
- package/dist/server/handlers/prompt-block-versions.d.ts.map +1 -1
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/responses.cjs +4 -4
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/responses.storage.cjs +8 -8
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/schedules.cjs +6 -6
- package/dist/server/handlers/schedules.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +8 -8
- package/dist/server/handlers/scorer-versions.d.ts.map +1 -1
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/skills-sh-shared.cjs +40 -0
- package/dist/server/handlers/skills-sh-shared.cjs.map +1 -0
- package/dist/server/handlers/skills-sh-shared.d.ts +89 -0
- package/dist/server/handlers/skills-sh-shared.d.ts.map +1 -0
- package/dist/server/handlers/skills-sh-shared.js +3 -0
- package/dist/server/handlers/skills-sh-shared.js.map +1 -0
- package/dist/server/handlers/stored-agent-favorites.cjs +16 -0
- package/dist/server/handlers/stored-agent-favorites.cjs.map +1 -0
- package/dist/server/handlers/stored-agent-favorites.d.ts +29 -0
- package/dist/server/handlers/stored-agent-favorites.d.ts.map +1 -0
- package/dist/server/handlers/stored-agent-favorites.js +3 -0
- package/dist/server/handlers/stored-agent-favorites.js.map +1 -0
- package/dist/server/handlers/stored-agents.cjs +7 -7
- package/dist/server/handlers/stored-agents.d.ts +390 -0
- package/dist/server/handlers/stored-agents.d.ts.map +1 -1
- package/dist/server/handlers/stored-agents.js +1 -1
- package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
- package/dist/server/handlers/stored-mcp-clients.d.ts.map +1 -1
- package/dist/server/handlers/stored-mcp-clients.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
- package/dist/server/handlers/stored-prompt-blocks.d.ts.map +1 -1
- package/dist/server/handlers/stored-prompt-blocks.js +1 -1
- package/dist/server/handlers/stored-scorers.cjs +6 -6
- package/dist/server/handlers/stored-scorers.d.ts.map +1 -1
- package/dist/server/handlers/stored-scorers.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +16 -0
- package/dist/server/handlers/stored-skill-favorites.cjs.map +1 -0
- package/dist/server/handlers/stored-skill-favorites.d.ts +29 -0
- package/dist/server/handlers/stored-skill-favorites.d.ts.map +1 -0
- package/dist/server/handlers/stored-skill-favorites.js +3 -0
- package/dist/server/handlers/stored-skill-favorites.js.map +1 -0
- package/dist/server/handlers/stored-skills.cjs +7 -7
- package/dist/server/handlers/stored-skills.d.ts +117 -0
- package/dist/server/handlers/stored-skills.d.ts.map +1 -1
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +6 -6
- package/dist/server/handlers/stored-workspaces.d.ts +2 -0
- package/dist/server/handlers/stored-workspaces.d.ts.map +1 -1
- package/dist/server/handlers/stored-workspaces.js +1 -1
- package/dist/server/handlers/system.cjs +3 -3
- package/dist/server/handlers/system.js +1 -1
- package/dist/server/handlers/tool-providers.cjs +5 -5
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +10 -10
- package/dist/server/handlers/utils.d.ts +1 -1
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/validate-avatar.cjs +12 -0
- package/dist/server/handlers/validate-avatar.cjs.map +1 -0
- package/dist/server/handlers/validate-avatar.d.ts +7 -0
- package/dist/server/handlers/validate-avatar.d.ts.map +1 -0
- package/dist/server/handlers/validate-avatar.js +3 -0
- package/dist/server/handlers/validate-avatar.js.map +1 -0
- package/dist/server/handlers/vector.cjs +16 -16
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/voice.cjs +8 -8
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +26 -26
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers/workspace.cjs +26 -26
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +38 -38
- package/dist/server/handlers.js +16 -16
- package/dist/server/schemas/builder-registry.d.ts +73 -0
- package/dist/server/schemas/builder-registry.d.ts.map +1 -0
- package/dist/server/schemas/editor-builder.d.ts +288 -0
- package/dist/server/schemas/editor-builder.d.ts.map +1 -0
- package/dist/server/schemas/favorites.d.ts +9 -0
- package/dist/server/schemas/favorites.d.ts.map +1 -0
- package/dist/server/schemas/index.cjs +400 -384
- package/dist/server/schemas/index.js +9 -9
- package/dist/server/schemas/stored-agents.d.ts +1066 -94
- package/dist/server/schemas/stored-agents.d.ts.map +1 -1
- package/dist/server/schemas/stored-skills.d.ts +111 -0
- package/dist/server/schemas/stored-skills.d.ts.map +1 -1
- package/dist/server/schemas/stored-workspaces.d.ts +1 -0
- package/dist/server/schemas/stored-workspaces.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +200 -124
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +9 -1
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +174 -98
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/editor-builder.d.ts +353 -0
- package/dist/server/server-adapter/routes/editor-builder.d.ts.map +1 -0
- package/dist/server/server-adapter/routes/fga-manifest.d.ts +4 -0
- package/dist/server/server-adapter/routes/fga-manifest.d.ts.map +1 -0
- package/dist/server/server-adapter/routes/index.d.ts +7 -1
- package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/permissions.d.ts +8 -3
- package/dist/server/server-adapter/routes/permissions.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/route-builder.d.ts +3 -1
- package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-agents.d.ts +4 -1
- package/dist/server/server-adapter/routes/stored-agents.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-skills.d.ts +138 -1
- package/dist/server/server-adapter/routes/stored-skills.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/stored-workspaces.d.ts +2 -0
- package/dist/server/server-adapter/routes/stored-workspaces.d.ts.map +1 -1
- package/dist/server/utils/resolve-builder-model-policy.d.ts +17 -0
- package/dist/server/utils/resolve-builder-model-policy.d.ts.map +1 -0
- package/dist/server/utils.d.ts +11 -0
- package/dist/server/utils.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-5XW4MKE6.cjs.map +0 -1
- package/dist/chunk-6IUJAAQ2.js.map +0 -1
- package/dist/chunk-7YV7MYOP.js.map +0 -1
- package/dist/chunk-AIRSK4QU.js.map +0 -1
- package/dist/chunk-B34S64RC.cjs.map +0 -1
- package/dist/chunk-B3UPXBHD.js.map +0 -1
- package/dist/chunk-BBD7VAAR.js.map +0 -1
- package/dist/chunk-DRTUU5WC.cjs +0 -365
- package/dist/chunk-DRTUU5WC.cjs.map +0 -1
- package/dist/chunk-H3RUJBEL.cjs.map +0 -1
- package/dist/chunk-HT4KV7V5.js.map +0 -1
- package/dist/chunk-JRFHBWKQ.cjs.map +0 -1
- package/dist/chunk-JRZZN55Y.cjs.map +0 -1
- package/dist/chunk-KGK2LCZ4.js.map +0 -1
- package/dist/chunk-L3WM4IWR.cjs.map +0 -1
- package/dist/chunk-LTYRUL3Q.cjs.map +0 -1
- package/dist/chunk-M4MNMBQF.cjs.map +0 -1
- package/dist/chunk-M7DF3D2M.js.map +0 -1
- package/dist/chunk-MXGCIYNM.js.map +0 -1
- package/dist/chunk-OMLB6EMJ.cjs +0 -313
- package/dist/chunk-OMLB6EMJ.cjs.map +0 -1
- package/dist/chunk-OOEYTKTC.js.map +0 -1
- package/dist/chunk-OULCMO5R.js.map +0 -1
- package/dist/chunk-P23KBWKB.js +0 -26
- package/dist/chunk-P23KBWKB.js.map +0 -1
- package/dist/chunk-PDHGJ7GP.js.map +0 -1
- package/dist/chunk-PQDYNK4J.cjs.map +0 -1
- package/dist/chunk-Q2B7W7GA.cjs.map +0 -1
- package/dist/chunk-QTPAVOG2.cjs.map +0 -1
- package/dist/chunk-R4IYXUNR.cjs.map +0 -1
- package/dist/chunk-T6QQYYPA.cjs.map +0 -1
- package/dist/chunk-UH3MHVDF.cjs.map +0 -1
- package/dist/chunk-WNIL6DVE.cjs +0 -615
- package/dist/chunk-WNIL6DVE.cjs.map +0 -1
- package/dist/chunk-WYLVJSGR.cjs.map +0 -1
- package/dist/chunk-X7ZNZFHV.js.map +0 -1
- package/dist/chunk-XT5ZVU5J.js +0 -306
- package/dist/chunk-XT5ZVU5J.js.map +0 -1
- package/dist/chunk-XZT7USLH.js.map +0 -1
- package/dist/chunk-Y5LNMKEY.cjs.map +0 -1
- package/dist/chunk-YARY4I5U.js.map +0 -1
- package/dist/chunk-YHRGDSTK.js.map +0 -1
- package/dist/chunk-Z6C7SDXA.js.map +0 -1
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { handleError } from './chunk-GA4BG5JK.js';
|
|
2
|
+
import { createRoute } from './chunk-F2FAL5CZ.js';
|
|
3
|
+
import { HTTPException } from './chunk-6QWQZI4Q.js';
|
|
4
|
+
import { resolvePickerVisibility, builderToModelPolicy } from '@mastra/core/agent-builder/ee';
|
|
5
|
+
import { z } from 'zod/v4';
|
|
6
|
+
|
|
7
|
+
var agentFeaturesSchema = z.object({
|
|
8
|
+
tools: z.boolean().optional(),
|
|
9
|
+
agents: z.boolean().optional(),
|
|
10
|
+
workflows: z.boolean().optional(),
|
|
11
|
+
scorers: z.boolean().optional(),
|
|
12
|
+
skills: z.boolean().optional(),
|
|
13
|
+
memory: z.boolean().optional(),
|
|
14
|
+
variables: z.boolean().optional(),
|
|
15
|
+
favorites: z.boolean().optional(),
|
|
16
|
+
avatarUpload: z.boolean().optional(),
|
|
17
|
+
browser: z.boolean().optional(),
|
|
18
|
+
/**
|
|
19
|
+
* Whether the model picker is visible in the Agent Builder.
|
|
20
|
+
* Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden
|
|
21
|
+
* (locked mode); `models.default` is required and applied.
|
|
22
|
+
*/
|
|
23
|
+
model: z.boolean().optional()
|
|
24
|
+
});
|
|
25
|
+
var knownProviderEntrySchema = z.object({
|
|
26
|
+
provider: z.string().min(1),
|
|
27
|
+
modelId: z.string().min(1).optional()
|
|
28
|
+
}).strict();
|
|
29
|
+
var customProviderEntrySchema = z.object({
|
|
30
|
+
kind: z.literal("custom"),
|
|
31
|
+
provider: z.string().min(1),
|
|
32
|
+
modelId: z.string().min(1).optional()
|
|
33
|
+
}).strict();
|
|
34
|
+
var knownDefaultModelEntrySchema = z.object({
|
|
35
|
+
provider: z.string().min(1),
|
|
36
|
+
modelId: z.string().min(1)
|
|
37
|
+
}).strict();
|
|
38
|
+
var customDefaultModelEntrySchema = z.object({
|
|
39
|
+
kind: z.literal("custom"),
|
|
40
|
+
provider: z.string().min(1),
|
|
41
|
+
modelId: z.string().min(1)
|
|
42
|
+
}).strict();
|
|
43
|
+
var providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);
|
|
44
|
+
var defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);
|
|
45
|
+
var agentModelsSchema = z.object({
|
|
46
|
+
allowed: z.array(providerModelEntrySchema).optional(),
|
|
47
|
+
default: defaultModelEntrySchema.optional()
|
|
48
|
+
});
|
|
49
|
+
var pickerAllowlistSchema = z.object({
|
|
50
|
+
allowed: z.array(z.string()).optional()
|
|
51
|
+
}).strict();
|
|
52
|
+
var agentConfigurationSchema = z.object({
|
|
53
|
+
models: agentModelsSchema.optional(),
|
|
54
|
+
tools: pickerAllowlistSchema.optional(),
|
|
55
|
+
agents: pickerAllowlistSchema.optional(),
|
|
56
|
+
workflows: pickerAllowlistSchema.optional()
|
|
57
|
+
}).catchall(z.unknown());
|
|
58
|
+
var builderPickerSchema = z.object({
|
|
59
|
+
visibleTools: z.array(z.string()).nullable(),
|
|
60
|
+
visibleAgents: z.array(z.string()).nullable(),
|
|
61
|
+
visibleWorkflows: z.array(z.string()).nullable()
|
|
62
|
+
});
|
|
63
|
+
var builderModelPolicySchema = z.object({
|
|
64
|
+
active: z.boolean(),
|
|
65
|
+
pickerVisible: z.boolean().optional(),
|
|
66
|
+
allowed: z.array(providerModelEntrySchema).optional(),
|
|
67
|
+
default: defaultModelEntrySchema.optional()
|
|
68
|
+
});
|
|
69
|
+
var builderSettingsResponseSchema = z.object({
|
|
70
|
+
enabled: z.boolean(),
|
|
71
|
+
features: z.object({
|
|
72
|
+
agent: agentFeaturesSchema.optional()
|
|
73
|
+
}).optional(),
|
|
74
|
+
configuration: z.object({
|
|
75
|
+
agent: agentConfigurationSchema.optional()
|
|
76
|
+
}).optional(),
|
|
77
|
+
modelPolicy: builderModelPolicySchema.optional(),
|
|
78
|
+
/**
|
|
79
|
+
* Resolved picker visibility for tools/agents/workflows. Always present when
|
|
80
|
+
* the builder is enabled. Omitted when the builder is disabled.
|
|
81
|
+
*/
|
|
82
|
+
picker: builderPickerSchema.optional(),
|
|
83
|
+
/**
|
|
84
|
+
* Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time
|
|
85
|
+
* validation (e.g. allowlist entries with unknown provider strings, or
|
|
86
|
+
* picker allowlist entries that don't match a registered ID). UI surfaces
|
|
87
|
+
* these as a banner in the Builder admin view.
|
|
88
|
+
*/
|
|
89
|
+
modelPolicyWarnings: z.array(z.string()).optional()
|
|
90
|
+
});
|
|
91
|
+
var infrastructureStatusResponseSchema = z.object({
|
|
92
|
+
channels: z.object({
|
|
93
|
+
providers: z.array(
|
|
94
|
+
z.object({
|
|
95
|
+
id: z.string(),
|
|
96
|
+
name: z.string(),
|
|
97
|
+
isConfigured: z.boolean(),
|
|
98
|
+
routeCount: z.number()
|
|
99
|
+
})
|
|
100
|
+
)
|
|
101
|
+
}),
|
|
102
|
+
browser: z.object({
|
|
103
|
+
type: z.string().nullable(),
|
|
104
|
+
provider: z.string().nullable(),
|
|
105
|
+
env: z.string().nullable(),
|
|
106
|
+
registered: z.boolean(),
|
|
107
|
+
availableProviders: z.array(z.string()),
|
|
108
|
+
config: z.array(z.object({ key: z.string(), value: z.string() }))
|
|
109
|
+
}),
|
|
110
|
+
workspace: z.object({
|
|
111
|
+
type: z.string().nullable(),
|
|
112
|
+
workspaceId: z.string().nullable(),
|
|
113
|
+
name: z.string().nullable(),
|
|
114
|
+
source: z.string().nullable(),
|
|
115
|
+
registered: z.boolean(),
|
|
116
|
+
hasFilesystem: z.boolean(),
|
|
117
|
+
hasSandbox: z.boolean(),
|
|
118
|
+
filesystemProvider: z.string().nullable(),
|
|
119
|
+
sandboxProvider: z.string().nullable(),
|
|
120
|
+
config: z.array(z.object({ key: z.string(), value: z.string() }))
|
|
121
|
+
}),
|
|
122
|
+
registries: z.object({
|
|
123
|
+
skillsSh: z.object({
|
|
124
|
+
enabled: z.boolean()
|
|
125
|
+
})
|
|
126
|
+
})
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// src/server/handlers/editor-builder.ts
|
|
130
|
+
async function resolveBuilderFeatures(mastra) {
|
|
131
|
+
const editor = mastra.getEditor();
|
|
132
|
+
if (!editor || typeof editor.resolveBuilder !== "function") return null;
|
|
133
|
+
if (!editor.hasEnabledBuilderConfig?.()) return null;
|
|
134
|
+
const builder = await editor.resolveBuilder();
|
|
135
|
+
if (!builder || !builder.enabled) return null;
|
|
136
|
+
const features = builder.getFeatures?.()?.agent;
|
|
137
|
+
if (!features) return null;
|
|
138
|
+
const parsed = agentFeaturesSchema.safeParse(features);
|
|
139
|
+
return parsed.success ? parsed.data : null;
|
|
140
|
+
}
|
|
141
|
+
async function isBuilderFeatureEnabled(mastra, feature) {
|
|
142
|
+
const features = await resolveBuilderFeatures(mastra);
|
|
143
|
+
return features?.[feature] === true;
|
|
144
|
+
}
|
|
145
|
+
async function requireBuilderFeature(mastra, feature) {
|
|
146
|
+
if (!await isBuilderFeatureEnabled(mastra, feature)) {
|
|
147
|
+
throw new HTTPException(404, { message: "Not Found" });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
var GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({
|
|
151
|
+
method: "GET",
|
|
152
|
+
path: "/editor/builder/settings",
|
|
153
|
+
responseType: "json",
|
|
154
|
+
responseSchema: builderSettingsResponseSchema,
|
|
155
|
+
summary: "Get agent builder settings",
|
|
156
|
+
description: "Returns the agent builder feature flags and configuration for UI gating",
|
|
157
|
+
tags: ["Editor"],
|
|
158
|
+
requiresAuth: true,
|
|
159
|
+
requiresPermission: "stored-agents:read",
|
|
160
|
+
handler: async ({ mastra }) => {
|
|
161
|
+
try {
|
|
162
|
+
const editor = mastra.getEditor();
|
|
163
|
+
if (!editor) {
|
|
164
|
+
return { enabled: false, modelPolicy: { active: false } };
|
|
165
|
+
}
|
|
166
|
+
if (typeof editor.resolveBuilder !== "function") {
|
|
167
|
+
return { enabled: false, modelPolicy: { active: false } };
|
|
168
|
+
}
|
|
169
|
+
if (!editor.hasEnabledBuilderConfig?.()) {
|
|
170
|
+
return { enabled: false, modelPolicy: { active: false } };
|
|
171
|
+
}
|
|
172
|
+
const builder = await editor.resolveBuilder();
|
|
173
|
+
if (!builder || !builder.enabled) {
|
|
174
|
+
return { enabled: false, modelPolicy: { active: false } };
|
|
175
|
+
}
|
|
176
|
+
const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];
|
|
177
|
+
const configuration = builder.getConfiguration();
|
|
178
|
+
const collectAliases = (registry) => Object.entries(registry).map(([key, entity]) => ({
|
|
179
|
+
id: entity.id || key,
|
|
180
|
+
key
|
|
181
|
+
}));
|
|
182
|
+
const toolAliases = collectAliases(mastra.listTools() ?? {});
|
|
183
|
+
const agentAliases = collectAliases(mastra.listAgents() ?? {});
|
|
184
|
+
const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});
|
|
185
|
+
const toResponseKey = (aliases, byId) => {
|
|
186
|
+
const map = /* @__PURE__ */ new Map();
|
|
187
|
+
for (const a of aliases) {
|
|
188
|
+
map.set(a.id, byId === "id" ? a.id : a.key);
|
|
189
|
+
map.set(a.key, byId === "id" ? a.id : a.key);
|
|
190
|
+
}
|
|
191
|
+
return map;
|
|
192
|
+
};
|
|
193
|
+
const toolKeyMap = toResponseKey(toolAliases, "key");
|
|
194
|
+
const agentKeyMap = toResponseKey(agentAliases, "id");
|
|
195
|
+
const workflowKeyMap = toResponseKey(workflowAliases, "key");
|
|
196
|
+
const picker = resolvePickerVisibility({
|
|
197
|
+
config: configuration?.agent,
|
|
198
|
+
registeredToolIds: toolAliases.flatMap((a) => [a.id, a.key]),
|
|
199
|
+
registeredAgentIds: agentAliases.flatMap((a) => [a.id, a.key]),
|
|
200
|
+
registeredWorkflowIds: workflowAliases.flatMap((a) => [a.id, a.key])
|
|
201
|
+
});
|
|
202
|
+
const normalize = (visible, map) => {
|
|
203
|
+
if (visible === null) return null;
|
|
204
|
+
const out = [];
|
|
205
|
+
const seen = /* @__PURE__ */ new Set();
|
|
206
|
+
for (const id of visible) {
|
|
207
|
+
const mapped = map.get(id);
|
|
208
|
+
if (mapped && !seen.has(mapped)) {
|
|
209
|
+
seen.add(mapped);
|
|
210
|
+
out.push(mapped);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return out;
|
|
214
|
+
};
|
|
215
|
+
const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];
|
|
216
|
+
return {
|
|
217
|
+
enabled: true,
|
|
218
|
+
features: builder.getFeatures(),
|
|
219
|
+
configuration,
|
|
220
|
+
modelPolicy: builderToModelPolicy(builder),
|
|
221
|
+
picker: {
|
|
222
|
+
visibleTools: normalize(picker.visibleTools, toolKeyMap),
|
|
223
|
+
visibleAgents: normalize(picker.visibleAgents, agentKeyMap),
|
|
224
|
+
visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap)
|
|
225
|
+
},
|
|
226
|
+
...modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}
|
|
227
|
+
};
|
|
228
|
+
} catch (error) {
|
|
229
|
+
return handleError(error, "Error getting builder settings");
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
var GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({
|
|
234
|
+
method: "GET",
|
|
235
|
+
path: "/editor/builder/infrastructure",
|
|
236
|
+
responseType: "json",
|
|
237
|
+
responseSchema: infrastructureStatusResponseSchema,
|
|
238
|
+
summary: "Get infrastructure status",
|
|
239
|
+
description: "Agent Builder infrastructure configuration and lightweight runtime status.",
|
|
240
|
+
tags: ["Editor"],
|
|
241
|
+
requiresAuth: true,
|
|
242
|
+
requiresPermission: "infrastructure:read",
|
|
243
|
+
handler: async ({ mastra }) => {
|
|
244
|
+
try {
|
|
245
|
+
const formatConfigValue = (value) => {
|
|
246
|
+
if (value === null || value === void 0) return "not set";
|
|
247
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return String(value);
|
|
248
|
+
if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? "" : "s"}`;
|
|
249
|
+
return value.constructor?.name && value.constructor.name !== "Object" ? value.constructor.name : "configured";
|
|
250
|
+
};
|
|
251
|
+
const getProviderName = (value) => {
|
|
252
|
+
if (!value) return null;
|
|
253
|
+
if (typeof value === "object" && "provider" in value && typeof value.provider === "string")
|
|
254
|
+
return value.provider;
|
|
255
|
+
if (typeof value === "object" && "constructor" in value) {
|
|
256
|
+
const name = value.constructor?.name;
|
|
257
|
+
return name && name !== "Object" ? name : "configured";
|
|
258
|
+
}
|
|
259
|
+
return null;
|
|
260
|
+
};
|
|
261
|
+
const getConfigEntries = (config, omittedKeys = []) => Object.entries(config).filter(([key, value]) => !omittedKeys.includes(key) && value !== void 0 && value !== null).map(([key, value]) => ({ key, value: formatConfigValue(value) }));
|
|
262
|
+
const channelProviders = mastra.getChannelProviders() ?? {};
|
|
263
|
+
const channels = {
|
|
264
|
+
providers: Object.entries(channelProviders).map(([id, provider]) => {
|
|
265
|
+
const info = provider.getInfo?.();
|
|
266
|
+
const routes = provider.getRoutes?.() ?? [];
|
|
267
|
+
return {
|
|
268
|
+
id: info?.id ?? id,
|
|
269
|
+
name: info?.name ?? id,
|
|
270
|
+
isConfigured: info?.isConfigured ?? false,
|
|
271
|
+
routeCount: routes.length
|
|
272
|
+
};
|
|
273
|
+
}).filter((provider) => provider.isConfigured)
|
|
274
|
+
};
|
|
275
|
+
const editor = mastra.getEditor();
|
|
276
|
+
let browser = {
|
|
277
|
+
type: null,
|
|
278
|
+
provider: null,
|
|
279
|
+
env: null,
|
|
280
|
+
registered: false,
|
|
281
|
+
availableProviders: [],
|
|
282
|
+
config: []
|
|
283
|
+
};
|
|
284
|
+
let workspace = {
|
|
285
|
+
type: null,
|
|
286
|
+
workspaceId: null,
|
|
287
|
+
name: null,
|
|
288
|
+
source: null,
|
|
289
|
+
registered: false,
|
|
290
|
+
hasFilesystem: false,
|
|
291
|
+
hasSandbox: false,
|
|
292
|
+
filesystemProvider: null,
|
|
293
|
+
sandboxProvider: null,
|
|
294
|
+
config: []
|
|
295
|
+
};
|
|
296
|
+
let registries = {
|
|
297
|
+
skillsSh: { enabled: false }
|
|
298
|
+
};
|
|
299
|
+
if (editor?.resolveBuilder) {
|
|
300
|
+
const browsers = editor.__browsers;
|
|
301
|
+
const builder = await editor.resolveBuilder();
|
|
302
|
+
const builderRegistries = builder?.getRegistries?.();
|
|
303
|
+
registries = {
|
|
304
|
+
skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true }
|
|
305
|
+
};
|
|
306
|
+
const configuration = builder?.getConfiguration?.()?.agent;
|
|
307
|
+
const browserRef = configuration?.browser;
|
|
308
|
+
const browserConfig = browserRef?.config ?? {};
|
|
309
|
+
const providerId = browserConfig.provider ?? null;
|
|
310
|
+
browser = {
|
|
311
|
+
type: browserRef?.type ?? null,
|
|
312
|
+
provider: providerId,
|
|
313
|
+
env: browserConfig.env ?? null,
|
|
314
|
+
registered: providerId ? !!browsers?.has(providerId) : false,
|
|
315
|
+
availableProviders: browsers ? Array.from(browsers.keys()) : [],
|
|
316
|
+
config: getConfigEntries(browserConfig, ["provider", "env"])
|
|
317
|
+
};
|
|
318
|
+
const workspaceRef = configuration?.workspace;
|
|
319
|
+
const workspaceConfig = workspaceRef?.config ?? {};
|
|
320
|
+
const registeredWorkspaces = mastra.listWorkspaces();
|
|
321
|
+
const registeredWorkspace = workspaceRef?.workspaceId ? registeredWorkspaces[workspaceRef.workspaceId] : void 0;
|
|
322
|
+
const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;
|
|
323
|
+
const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;
|
|
324
|
+
const filesystemConfig = typeof workspaceConfig.filesystem === "object" && workspaceConfig.filesystem && "config" in workspaceConfig.filesystem ? workspaceConfig.filesystem.config : {};
|
|
325
|
+
const sandboxConfig = typeof workspaceConfig.sandbox === "object" && workspaceConfig.sandbox && "config" in workspaceConfig.sandbox ? workspaceConfig.sandbox.config : {};
|
|
326
|
+
workspace = {
|
|
327
|
+
type: workspaceRef?.type ?? null,
|
|
328
|
+
workspaceId: workspaceRef?.workspaceId ?? null,
|
|
329
|
+
name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,
|
|
330
|
+
source: registeredWorkspace?.source ?? null,
|
|
331
|
+
registered: !!registeredWorkspace,
|
|
332
|
+
hasFilesystem: !!filesystem,
|
|
333
|
+
hasSandbox: !!sandbox,
|
|
334
|
+
filesystemProvider: getProviderName(filesystem),
|
|
335
|
+
sandboxProvider: getProviderName(sandbox),
|
|
336
|
+
config: [
|
|
337
|
+
...getConfigEntries(filesystemConfig).map((entry) => ({ ...entry, key: `filesystem.${entry.key}` })),
|
|
338
|
+
...getConfigEntries(sandboxConfig).map((entry) => ({ ...entry, key: `sandbox.${entry.key}` }))
|
|
339
|
+
]
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
return { channels, browser, workspace, registries };
|
|
343
|
+
} catch (error) {
|
|
344
|
+
return handleError(error, "Error getting infrastructure status");
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
|
|
349
|
+
export { GET_EDITOR_BUILDER_SETTINGS_ROUTE, GET_INFRASTRUCTURE_STATUS_ROUTE, isBuilderFeatureEnabled, requireBuilderFeature };
|
|
350
|
+
//# sourceMappingURL=chunk-6JCLSYOU.js.map
|
|
351
|
+
//# sourceMappingURL=chunk-6JCLSYOU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/schemas/editor-builder.ts","../src/server/handlers/editor-builder.ts"],"names":[],"mappings":"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","file":"chunk-6JCLSYOU.js","sourcesContent":["import { z } from 'zod/v4';\n\n/**\n * Agent feature flags for the builder.\n *\n * Wire format: each key is an optional boolean. The server normalizes admin\n * input via `resolveAgentFeatures` (default-on semantics): any omitted key\n * resolves to `true`; admins opt out by setting a key to `false`. The\n * `GET /editor/builder/settings` response always carries a fully-resolved\n * object — clients should still use strict `=== true` checks.\n *\n * Special cases:\n * - `browser`: only resolves to `true` when `configuration.agent.browser` is\n * provided. Omitted with no config ⇒ silently `false` (no warning).\n * Explicit `true` with no config ⇒ warns and downgrades to `false`.\n */\nexport const agentFeaturesSchema = z.object({\n tools: z.boolean().optional(),\n agents: z.boolean().optional(),\n workflows: z.boolean().optional(),\n scorers: z.boolean().optional(),\n skills: z.boolean().optional(),\n memory: z.boolean().optional(),\n variables: z.boolean().optional(),\n favorites: z.boolean().optional(),\n avatarUpload: z.boolean().optional(),\n browser: z.boolean().optional(),\n /**\n * Whether the model picker is visible in the Agent Builder.\n * Omitted ⇒ picker visible (default-on). Explicit `false` ⇒ picker hidden\n * (locked mode); `models.default` is required and applied.\n */\n model: z.boolean().optional(),\n});\n\n/**\n * Allowlist + default-model entries for {@link agentModelsSchema}.\n *\n * Four standalone schemas (known × custom × entry × default) joined with `z.union`.\n * The schema does NOT validate `provider` against the runtime registry — invalid strings\n * surface as warnings during Phase 4 config validation.\n *\n * NOTE: `z.union(...).extend()` does not exist; that's why these are separate schemas.\n */\n// All four schemas are `.strict()` so typos like `modelID` or `Provider` are\n// rejected up-front instead of silently widening the policy.\nconst knownProviderEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst customProviderEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1).optional(),\n })\n .strict();\n\nconst knownDefaultModelEntrySchema = z\n .object({\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\nconst customDefaultModelEntrySchema = z\n .object({\n kind: z.literal('custom'),\n provider: z.string().min(1),\n modelId: z.string().min(1),\n })\n .strict();\n\n// Custom-tagged variants must come first so the discriminator (`kind: 'custom'`)\n// wins over the more permissive known-provider schemas. Otherwise the union\n// silently drops the `kind` field on matching inputs.\nexport const providerModelEntrySchema = z.union([customProviderEntrySchema, knownProviderEntrySchema]);\nexport const defaultModelEntrySchema = z.union([customDefaultModelEntrySchema, knownDefaultModelEntrySchema]);\n\n/**\n * Admin-controlled model allowlist + default for the Agent Builder.\n */\nexport const agentModelsSchema = z.object({\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Admin-controlled allowlist for one of the builder pickers (tools/agents/workflows).\n *\n * Semantics:\n * - omitted ⇒ unrestricted (all registered IDs shown in the picker).\n * - `allowed: []` ⇒ empty picker (explicit lockdown).\n * - `allowed: [...ids]` ⇒ only the listed IDs are shown.\n */\nexport const pickerAllowlistSchema = z\n .object({\n allowed: z.array(z.string()).optional(),\n })\n .strict();\n\n/**\n * Agent configuration (pinned, non-overridable settings).\n *\n * Known structured field: `models` (Phase 1 contracts).\n * Other keys flow through unchanged for forward compatibility.\n */\nexport const agentConfigurationSchema = z\n .object({\n models: agentModelsSchema.optional(),\n tools: pickerAllowlistSchema.optional(),\n agents: pickerAllowlistSchema.optional(),\n workflows: pickerAllowlistSchema.optional(),\n })\n .catchall(z.unknown());\n\n/**\n * Resolved picker visibility returned in `BuilderSettingsResponse`.\n *\n * Per kind:\n * - `null` ⇒ unrestricted (show all registered entries).\n * - `string[]` ⇒ explicit allowlist (may be empty to show none).\n */\nexport const builderPickerSchema = z.object({\n visibleTools: z.array(z.string()).nullable(),\n visibleAgents: z.array(z.string()).nullable(),\n visibleWorkflows: z.array(z.string()).nullable(),\n});\n\n/**\n * Derived `BuilderModelPolicy`. Server-owned shape so the playground hook is a\n * thin selector and the UI never re-derives policy from `features` / `configuration`.\n *\n * Mirrors `BuilderModelPolicy` from `@mastra/core/agent-builder/ee`:\n * - `active: false` ⇒ all other fields ignored.\n * - `active: true` + `pickerVisible: false` (locked) ⇒ `default` set in valid configs.\n * - `allowed`/`default` are passed through verbatim when present.\n */\nexport const builderModelPolicySchema = z.object({\n active: z.boolean(),\n pickerVisible: z.boolean().optional(),\n allowed: z.array(providerModelEntrySchema).optional(),\n default: defaultModelEntrySchema.optional(),\n});\n\n/**\n * Response schema for GET /editor/builder/settings\n */\nexport const builderSettingsResponseSchema = z.object({\n enabled: z.boolean(),\n features: z\n .object({\n agent: agentFeaturesSchema.optional(),\n })\n .optional(),\n configuration: z\n .object({\n agent: agentConfigurationSchema.optional(),\n })\n .optional(),\n modelPolicy: builderModelPolicySchema.optional(),\n /**\n * Resolved picker visibility for tools/agents/workflows. Always present when\n * the builder is enabled. Omitted when the builder is disabled.\n */\n picker: builderPickerSchema.optional(),\n /**\n * Non-fatal warnings produced by `EditorAgentBuilder`'s constructor-time\n * validation (e.g. allowlist entries with unknown provider strings, or\n * picker allowlist entries that don't match a registered ID). UI surfaces\n * these as a banner in the Builder admin view.\n */\n modelPolicyWarnings: z.array(z.string()).optional(),\n});\n\n/**\n * Infrastructure status response for Agent Builder admin diagnostics.\n *\n * Reports the Agent Builder-specific primitive configuration plus lightweight\n * runtime resolution state where useful.\n */\nexport const infrastructureStatusResponseSchema = z.object({\n channels: z.object({\n providers: z.array(\n z.object({\n id: z.string(),\n name: z.string(),\n isConfigured: z.boolean(),\n routeCount: z.number(),\n }),\n ),\n }),\n browser: z.object({\n type: z.string().nullable(),\n provider: z.string().nullable(),\n env: z.string().nullable(),\n registered: z.boolean(),\n availableProviders: z.array(z.string()),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n workspace: z.object({\n type: z.string().nullable(),\n workspaceId: z.string().nullable(),\n name: z.string().nullable(),\n source: z.string().nullable(),\n registered: z.boolean(),\n hasFilesystem: z.boolean(),\n hasSandbox: z.boolean(),\n filesystemProvider: z.string().nullable(),\n sandboxProvider: z.string().nullable(),\n config: z.array(z.object({ key: z.string(), value: z.string() })),\n }),\n registries: z.object({\n skillsSh: z.object({\n enabled: z.boolean(),\n }),\n }),\n});\n\nexport type InfrastructureStatus = z.infer<typeof infrastructureStatusResponseSchema>;\n\nexport type AgentFeatures = z.infer<typeof agentFeaturesSchema>;\nexport type AgentConfiguration = z.infer<typeof agentConfigurationSchema>;\nexport type BuilderSettingsResponse = z.infer<typeof builderSettingsResponseSchema>;\nexport type ProviderModelEntrySchema = z.infer<typeof providerModelEntrySchema>;\nexport type DefaultModelEntrySchema = z.infer<typeof defaultModelEntrySchema>;\nexport type AgentModelsSchema = z.infer<typeof agentModelsSchema>;\nexport type BuilderModelPolicySchema = z.infer<typeof builderModelPolicySchema>;\nexport type PickerAllowlistSchema = z.infer<typeof pickerAllowlistSchema>;\nexport type BuilderPickerSchema = z.infer<typeof builderPickerSchema>;\n","import type { Mastra } from '@mastra/core';\n\nimport { builderToModelPolicy, resolvePickerVisibility } from '@mastra/core/agent-builder/ee';\nimport { HTTPException } from '../http-exception';\nimport {\n agentFeaturesSchema,\n builderSettingsResponseSchema,\n infrastructureStatusResponseSchema,\n} from '../schemas/editor-builder';\nimport type { AgentFeatures, InfrastructureStatus } from '../schemas/editor-builder';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\n\n/**\n * Resolve the active builder feature flags. Returns `null` when the editor is\n * absent, the builder is disabled, or no features are configured.\n */\nasync function resolveBuilderFeatures(mastra: Mastra): Promise<AgentFeatures | null> {\n const editor = mastra.getEditor();\n if (!editor || typeof editor.resolveBuilder !== 'function') return null;\n if (!editor.hasEnabledBuilderConfig?.()) return null;\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) return null;\n const features = builder.getFeatures?.()?.agent;\n if (!features) return null;\n // Validate the shape so unknown keys cannot smuggle through.\n const parsed = agentFeaturesSchema.safeParse(features);\n return parsed.success ? parsed.data : null;\n}\n\n/**\n * Returns whether a given agent-builder feature is enabled. Used by list /\n * get-by-id handlers to soft-gate response enrichment (omit fields, ignore\n * favoritedOnly / pinFavoritedFor params) when the feature is off.\n */\nexport async function isBuilderFeatureEnabled(mastra: Mastra, feature: keyof AgentFeatures): Promise<boolean> {\n const features = await resolveBuilderFeatures(mastra);\n return features?.[feature] === true;\n}\n\n/**\n * Hard-gate helper for mutation routes that must not exist when the feature\n * is off. Throws `HTTPException(404)` so we don't leak the existence of the\n * feature surface (matches behavior of unregistered routes).\n */\nexport async function requireBuilderFeature(mastra: Mastra, feature: keyof AgentFeatures): Promise<void> {\n if (!(await isBuilderFeatureEnabled(mastra, feature))) {\n throw new HTTPException(404, { message: 'Not Found' });\n }\n}\n\n/**\n * GET /editor/builder/settings\n *\n * Returns the agent builder settings configured by the admin.\n * Used by frontend to determine which features to display.\n */\nexport const GET_EDITOR_BUILDER_SETTINGS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/settings',\n responseType: 'json',\n responseSchema: builderSettingsResponseSchema,\n summary: 'Get agent builder settings',\n description: 'Returns the agent builder feature flags and configuration for UI gating',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'stored-agents:read',\n handler: async ({ mastra }) => {\n try {\n const editor = mastra.getEditor();\n\n // No editor configured\n if (!editor) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Editor doesn't support builder (older version or OSS)\n if (typeof editor.resolveBuilder !== 'function') {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Check if builder is enabled in config\n if (!editor.hasEnabledBuilderConfig?.()) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n // Resolve the builder instance\n const builder = await editor.resolveBuilder();\n if (!builder || !builder.enabled) {\n return { enabled: false, modelPolicy: { active: false } };\n }\n\n const baseWarnings = builder.getModelPolicyWarnings?.() ?? [];\n const configuration = builder.getConfiguration();\n\n // Picker allowlists are written against entity `.id` (what users see in\n // the UI, URLs, traces). The client filters list responses by their\n // response keys, which are not always `.id`:\n // - GET /agents keys by `agent.id`\n // - GET /tools keys by registration key (values include `id`)\n // - GET /workflows keys by registration key (values omit `id`)\n // To keep the client filter simple, we accept `.id` (fallback to\n // registration key) for matching, but emit visible IDs as response keys\n // so `Object.keys(data)` lines up.\n type AliasPair = { id: string; key: string };\n const collectAliases = (registry: Record<string, unknown>): AliasPair[] =>\n Object.entries(registry).map(([key, entity]) => ({\n id: (entity as { id?: string }).id || key,\n key,\n }));\n\n const toolAliases = collectAliases(mastra.listTools() ?? {});\n const agentAliases = collectAliases(mastra.listAgents() ?? {});\n const workflowAliases = collectAliases(mastra.listWorkflows() ?? {});\n\n // Tools/workflows responses are keyed by registration key. Agents\n // response is keyed by `.id`.\n const toResponseKey = (aliases: AliasPair[], byId: 'id' | 'key') => {\n const map = new Map<string, string>();\n for (const a of aliases) {\n map.set(a.id, byId === 'id' ? a.id : a.key);\n map.set(a.key, byId === 'id' ? a.id : a.key);\n }\n return map;\n };\n const toolKeyMap = toResponseKey(toolAliases, 'key');\n const agentKeyMap = toResponseKey(agentAliases, 'id');\n const workflowKeyMap = toResponseKey(workflowAliases, 'key');\n\n const picker = resolvePickerVisibility({\n config: configuration?.agent,\n registeredToolIds: toolAliases.flatMap(a => [a.id, a.key]),\n registeredAgentIds: agentAliases.flatMap(a => [a.id, a.key]),\n registeredWorkflowIds: workflowAliases.flatMap(a => [a.id, a.key]),\n });\n\n const normalize = (visible: string[] | null, map: Map<string, string>): string[] | null => {\n if (visible === null) return null;\n const out: string[] = [];\n const seen = new Set<string>();\n for (const id of visible) {\n const mapped = map.get(id);\n if (mapped && !seen.has(mapped)) {\n seen.add(mapped);\n out.push(mapped);\n }\n }\n return out;\n };\n\n const modelPolicyWarnings = [...baseWarnings, ...picker.warnings];\n\n return {\n enabled: true,\n features: builder.getFeatures(),\n configuration,\n modelPolicy: builderToModelPolicy(builder),\n picker: {\n visibleTools: normalize(picker.visibleTools, toolKeyMap),\n visibleAgents: normalize(picker.visibleAgents, agentKeyMap),\n visibleWorkflows: normalize(picker.visibleWorkflows, workflowKeyMap),\n },\n ...(modelPolicyWarnings.length > 0 ? { modelPolicyWarnings } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error getting builder settings');\n }\n },\n});\n\n/**\n * GET /editor/builder/infrastructure\n *\n * Returns the runtime status of Mastra-opinionated primitives (channels,\n * browser providers, workspaces). Admin-only; surfaced in Studio Settings so\n * admins can sanity-check what's wired up to the running server.\n */\nexport const GET_INFRASTRUCTURE_STATUS_ROUTE = createRoute({\n method: 'GET',\n path: '/editor/builder/infrastructure',\n responseType: 'json',\n responseSchema: infrastructureStatusResponseSchema,\n summary: 'Get infrastructure status',\n description: 'Agent Builder infrastructure configuration and lightweight runtime status.',\n tags: ['Editor'],\n requiresAuth: true,\n requiresPermission: 'infrastructure:read',\n handler: async ({ mastra }) => {\n try {\n const formatConfigValue = (value: unknown): string => {\n if (value === null || value === undefined) return 'not set';\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (Array.isArray(value)) return `${value.length} item${value.length === 1 ? '' : 's'}`;\n return value.constructor?.name && value.constructor.name !== 'Object' ? value.constructor.name : 'configured';\n };\n\n const getProviderName = (value: unknown): string | null => {\n if (!value) return null;\n if (typeof value === 'object' && 'provider' in value && typeof value.provider === 'string')\n return value.provider;\n if (typeof value === 'object' && 'constructor' in value) {\n const name = (value as { constructor?: { name?: string } }).constructor?.name;\n return name && name !== 'Object' ? name : 'configured';\n }\n return null;\n };\n\n const getConfigEntries = (config: Record<string, unknown>, omittedKeys: string[] = []) =>\n Object.entries(config)\n .filter(([key, value]) => !omittedKeys.includes(key) && value !== undefined && value !== null)\n .map(([key, value]) => ({ key, value: formatConfigValue(value) }));\n\n const channelProviders = mastra.getChannelProviders() ?? {};\n const channels: InfrastructureStatus['channels'] = {\n providers: Object.entries(channelProviders)\n .map(([id, provider]) => {\n const info = provider.getInfo?.();\n const routes = provider.getRoutes?.() ?? [];\n return {\n id: info?.id ?? id,\n name: info?.name ?? id,\n isConfigured: info?.isConfigured ?? false,\n routeCount: routes.length,\n };\n })\n .filter(provider => provider.isConfigured),\n };\n\n const editor = mastra.getEditor();\n let browser: InfrastructureStatus['browser'] = {\n type: null,\n provider: null,\n env: null,\n registered: false,\n availableProviders: [],\n config: [],\n };\n let workspace: InfrastructureStatus['workspace'] = {\n type: null,\n workspaceId: null,\n name: null,\n source: null,\n registered: false,\n hasFilesystem: false,\n hasSandbox: false,\n filesystemProvider: null,\n sandboxProvider: null,\n config: [],\n };\n let registries: InfrastructureStatus['registries'] = {\n skillsSh: { enabled: false },\n };\n\n if (editor?.resolveBuilder) {\n const browsers = (editor as unknown as { __browsers?: Map<string, unknown> }).__browsers;\n const builder = await editor.resolveBuilder();\n const builderRegistries = builder?.getRegistries?.();\n registries = {\n skillsSh: { enabled: builderRegistries?.skillsSh?.enabled === true },\n };\n const configuration = builder?.getConfiguration?.()?.agent as\n | {\n browser?: { type?: string; config?: { provider?: string; env?: string } };\n workspace?: {\n type?: string;\n workspaceId?: string;\n config?: { name?: string; filesystem?: unknown; sandbox?: unknown };\n };\n }\n | undefined;\n\n const browserRef = configuration?.browser;\n const browserConfig = browserRef?.config ?? {};\n const providerId = browserConfig.provider ?? null;\n browser = {\n type: browserRef?.type ?? null,\n provider: providerId,\n env: browserConfig.env ?? null,\n registered: providerId ? !!browsers?.has(providerId) : false,\n availableProviders: browsers ? Array.from(browsers.keys()) : [],\n config: getConfigEntries(browserConfig, ['provider', 'env']),\n };\n\n const workspaceRef = configuration?.workspace;\n const workspaceConfig = workspaceRef?.config ?? {};\n const registeredWorkspaces = mastra.listWorkspaces();\n const registeredWorkspace = workspaceRef?.workspaceId\n ? registeredWorkspaces[workspaceRef.workspaceId]\n : undefined;\n const filesystem = registeredWorkspace?.workspace.filesystem ?? workspaceConfig.filesystem;\n const sandbox = registeredWorkspace?.workspace.sandbox ?? workspaceConfig.sandbox;\n const filesystemConfig =\n typeof workspaceConfig.filesystem === 'object' &&\n workspaceConfig.filesystem &&\n 'config' in workspaceConfig.filesystem\n ? (workspaceConfig.filesystem.config as Record<string, unknown>)\n : {};\n const sandboxConfig =\n typeof workspaceConfig.sandbox === 'object' && workspaceConfig.sandbox && 'config' in workspaceConfig.sandbox\n ? (workspaceConfig.sandbox.config as Record<string, unknown>)\n : {};\n workspace = {\n type: workspaceRef?.type ?? null,\n workspaceId: workspaceRef?.workspaceId ?? null,\n name: workspaceConfig.name ?? registeredWorkspace?.workspace.name ?? null,\n source: registeredWorkspace?.source ?? null,\n registered: !!registeredWorkspace,\n hasFilesystem: !!filesystem,\n hasSandbox: !!sandbox,\n filesystemProvider: getProviderName(filesystem),\n sandboxProvider: getProviderName(sandbox),\n config: [\n ...getConfigEntries(filesystemConfig).map(entry => ({ ...entry, key: `filesystem.${entry.key}` })),\n ...getConfigEntries(sandboxConfig).map(entry => ({ ...entry, key: `sandbox.${entry.key}` })),\n ],\n };\n }\n\n return { channels, browser, workspace, registries };\n } catch (error) {\n return handleError(error, 'Error getting infrastructure status');\n }\n },\n});\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { listVersionsResponseSchema, agentVersionPathParams, createVersionResponseSchema, getVersionResponseSchema, versionIdPathParams, restoreVersionResponseSchema, compareVersionsResponseSchema } from './chunk-7LBBDT4S.js';
|
|
1
|
+
import { listVersionsResponseSchema, agentVersionPathParams, createVersionResponseSchema, getVersionResponseSchema, versionIdPathParams, restoreVersionResponseSchema, compareVersionsResponseSchema } from './chunk-CGB327L6.js';
|
|
3
2
|
import { listVersionsQuerySchema, createVersionBodySchema, activateVersionResponseSchema, deleteVersionResponseSchema, compareVersionsQuerySchema } from './chunk-3OQMTFIV.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { extractConfigFromVersion, calculateChangedFields, createVersionWithRetry, enforceRetentionLimit, computeVersionDiffs } from './chunk-33QPJPK4.js';
|
|
4
|
+
import { assertStoredResourceScope, getStoredResourceScope } from './chunk-4XSWMZTL.js';
|
|
5
|
+
import { handleError } from './chunk-GA4BG5JK.js';
|
|
6
|
+
import { createRoute } from './chunk-F2FAL5CZ.js';
|
|
6
7
|
import { HTTPException } from './chunk-6QWQZI4Q.js';
|
|
7
8
|
|
|
8
9
|
// src/server/handlers/agent-versions.ts
|
|
@@ -34,7 +35,7 @@ var LIST_AGENT_VERSIONS_ROUTE = createRoute({
|
|
|
34
35
|
summary: "List agent versions",
|
|
35
36
|
description: "Returns a paginated list of all versions for a stored agent",
|
|
36
37
|
tags: ["Agent Versions"],
|
|
37
|
-
handler: async ({ mastra, agentId, page, perPage, orderBy }) => {
|
|
38
|
+
handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {
|
|
38
39
|
try {
|
|
39
40
|
const storage = mastra.getStorage();
|
|
40
41
|
if (!storage) {
|
|
@@ -54,6 +55,7 @@ var LIST_AGENT_VERSIONS_ROUTE = createRoute({
|
|
|
54
55
|
if (!storedAgent && !codeAgentExists) {
|
|
55
56
|
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
|
|
56
57
|
}
|
|
58
|
+
assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));
|
|
57
59
|
const result = await agentsStore.listVersions({
|
|
58
60
|
agentId,
|
|
59
61
|
page,
|
|
@@ -77,7 +79,7 @@ var CREATE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
77
79
|
summary: "Create agent version",
|
|
78
80
|
description: "Creates a new version snapshot of the current agent configuration",
|
|
79
81
|
tags: ["Agent Versions"],
|
|
80
|
-
handler: async ({ mastra, agentId, changeMessage }) => {
|
|
82
|
+
handler: async ({ mastra, agentId, changeMessage, requestContext }) => {
|
|
81
83
|
try {
|
|
82
84
|
const storage = mastra.getStorage();
|
|
83
85
|
if (!storage) {
|
|
@@ -91,6 +93,7 @@ var CREATE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
91
93
|
if (!agent) {
|
|
92
94
|
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
|
|
93
95
|
}
|
|
96
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
94
97
|
let currentConfig = {};
|
|
95
98
|
if (agent.activeVersionId) {
|
|
96
99
|
const activeVersion = await agentsStore.getVersion(agent.activeVersionId);
|
|
@@ -144,7 +147,7 @@ var GET_AGENT_VERSION_ROUTE = createRoute({
|
|
|
144
147
|
summary: "Get agent version",
|
|
145
148
|
description: "Returns a specific version of an agent by its version ID",
|
|
146
149
|
tags: ["Agent Versions"],
|
|
147
|
-
handler: async ({ mastra, agentId, versionId }) => {
|
|
150
|
+
handler: async ({ mastra, agentId, versionId, requestContext }) => {
|
|
148
151
|
try {
|
|
149
152
|
const storage = mastra.getStorage();
|
|
150
153
|
if (!storage) {
|
|
@@ -161,6 +164,8 @@ var GET_AGENT_VERSION_ROUTE = createRoute({
|
|
|
161
164
|
if (version.agentId !== agentId) {
|
|
162
165
|
throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });
|
|
163
166
|
}
|
|
167
|
+
const agent = await agentsStore.getById(agentId);
|
|
168
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
164
169
|
return version;
|
|
165
170
|
} catch (error) {
|
|
166
171
|
return handleError(error, "Error getting agent version");
|
|
@@ -177,7 +182,7 @@ var ACTIVATE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
177
182
|
summary: "Activate agent version",
|
|
178
183
|
description: "Sets a specific version as the active version for the agent",
|
|
179
184
|
tags: ["Agent Versions"],
|
|
180
|
-
handler: async ({ mastra, agentId, versionId }) => {
|
|
185
|
+
handler: async ({ mastra, agentId, versionId, requestContext }) => {
|
|
181
186
|
try {
|
|
182
187
|
const storage = mastra.getStorage();
|
|
183
188
|
if (!storage) {
|
|
@@ -191,6 +196,7 @@ var ACTIVATE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
191
196
|
if (!agent) {
|
|
192
197
|
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
|
|
193
198
|
}
|
|
199
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
194
200
|
const version = await agentsStore.getVersion(versionId);
|
|
195
201
|
if (!version) {
|
|
196
202
|
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
|
|
@@ -224,7 +230,7 @@ var RESTORE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
224
230
|
summary: "Restore agent version",
|
|
225
231
|
description: "Restores the agent configuration from a version, creating a new version",
|
|
226
232
|
tags: ["Agent Versions"],
|
|
227
|
-
handler: async ({ mastra, agentId, versionId }) => {
|
|
233
|
+
handler: async ({ mastra, agentId, versionId, requestContext }) => {
|
|
228
234
|
try {
|
|
229
235
|
const storage = mastra.getStorage();
|
|
230
236
|
if (!storage) {
|
|
@@ -238,6 +244,7 @@ var RESTORE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
238
244
|
if (!agent) {
|
|
239
245
|
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
|
|
240
246
|
}
|
|
247
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
241
248
|
const versionToRestore = await agentsStore.getVersion(versionId);
|
|
242
249
|
if (!versionToRestore) {
|
|
243
250
|
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
|
|
@@ -293,7 +300,7 @@ var DELETE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
293
300
|
summary: "Delete agent version",
|
|
294
301
|
description: "Deletes a specific version (cannot delete the active version)",
|
|
295
302
|
tags: ["Agent Versions"],
|
|
296
|
-
handler: async ({ mastra, agentId, versionId }) => {
|
|
303
|
+
handler: async ({ mastra, agentId, versionId, requestContext }) => {
|
|
297
304
|
try {
|
|
298
305
|
const storage = mastra.getStorage();
|
|
299
306
|
if (!storage) {
|
|
@@ -307,6 +314,7 @@ var DELETE_AGENT_VERSION_ROUTE = createRoute({
|
|
|
307
314
|
if (!agent) {
|
|
308
315
|
throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });
|
|
309
316
|
}
|
|
317
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
310
318
|
const version = await agentsStore.getVersion(versionId);
|
|
311
319
|
if (!version) {
|
|
312
320
|
throw new HTTPException(404, { message: `Version with id ${versionId} not found` });
|
|
@@ -341,7 +349,7 @@ var COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
|
|
|
341
349
|
summary: "Compare agent versions",
|
|
342
350
|
description: "Compares two versions and returns the differences between them",
|
|
343
351
|
tags: ["Agent Versions"],
|
|
344
|
-
handler: async ({ mastra, agentId, from, to }) => {
|
|
352
|
+
handler: async ({ mastra, agentId, from, to, requestContext }) => {
|
|
345
353
|
try {
|
|
346
354
|
const storage = mastra.getStorage();
|
|
347
355
|
if (!storage) {
|
|
@@ -351,6 +359,8 @@ var COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
|
|
|
351
359
|
if (!agentsStore) {
|
|
352
360
|
throw new HTTPException(500, { message: "Agents storage domain is not available" });
|
|
353
361
|
}
|
|
362
|
+
const agent = await agentsStore.getById(agentId);
|
|
363
|
+
assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));
|
|
354
364
|
const fromVersion = await agentsStore.getVersion(from);
|
|
355
365
|
if (!fromVersion) {
|
|
356
366
|
throw new HTTPException(404, { message: `Version with id ${from} not found` });
|
|
@@ -386,5 +396,5 @@ var COMPARE_AGENT_VERSIONS_ROUTE = createRoute({
|
|
|
386
396
|
});
|
|
387
397
|
|
|
388
398
|
export { ACTIVATE_AGENT_VERSION_ROUTE, COMPARE_AGENT_VERSIONS_ROUTE, CREATE_AGENT_VERSION_ROUTE, DELETE_AGENT_VERSION_ROUTE, GET_AGENT_VERSION_ROUTE, LIST_AGENT_VERSIONS_ROUTE, RESTORE_AGENT_VERSION_ROUTE };
|
|
389
|
-
//# sourceMappingURL=chunk-
|
|
390
|
-
//# sourceMappingURL=chunk-
|
|
399
|
+
//# sourceMappingURL=chunk-6NIQROP2.js.map
|
|
400
|
+
//# sourceMappingURL=chunk-6NIQROP2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/agent-versions.ts"],"names":[],"mappings":"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","file":"chunk-6NIQROP2.js","sourcesContent":["import type { z } from 'zod/v4';\n\nimport { HTTPException } from '../http-exception';\nimport {\n agentVersionPathParams,\n versionIdPathParams,\n listVersionsQuerySchema,\n createVersionBodySchema,\n compareVersionsQuerySchema,\n listVersionsResponseSchema,\n getVersionResponseSchema,\n createVersionResponseSchema,\n activateVersionResponseSchema,\n restoreVersionResponseSchema,\n deleteVersionResponseSchema,\n compareVersionsResponseSchema,\n} from '../schemas/agent-versions';\nimport type { ServerRoute, RouteSchemas, InferParams } from '../server-adapter/routes';\nimport { createRoute } from '../server-adapter/routes/route-builder';\nimport { assertStoredResourceScope, getStoredResourceScope } from '../utils';\n\nimport { handleError } from './error';\nimport {\n extractConfigFromVersion,\n calculateChangedFields,\n computeVersionDiffs,\n createVersionWithRetry,\n enforceRetentionLimit,\n} from './version-helpers';\nimport type { VersionedStoreInterface } from './version-helpers';\n\n/**\n * The config field names that live on version rows (StorageAgentSnapshotType fields).\n * Used to extract config from a version record for comparison and restoration.\n */\nconst SNAPSHOT_CONFIG_FIELDS = [\n 'name',\n 'description',\n 'instructions',\n 'model',\n 'tools',\n 'defaultOptions',\n 'workflows',\n 'agents',\n 'integrationTools',\n 'inputProcessors',\n 'outputProcessors',\n 'memory',\n 'scorers',\n 'requestContextSchema',\n 'mcpClients',\n] as const;\n\n// ============================================================================\n// Route Definitions\n// ============================================================================\n\n/**\n * GET /stored/agents/:agentId/versions - List all versions for an agent\n */\nexport const LIST_AGENT_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: listVersionsQuerySchema,\n responseSchema: listVersionsResponseSchema,\n summary: 'List agent versions',\n description: 'Returns a paginated list of all versions for a stored agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, page, perPage, orderBy, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists in code or storage\n const storedAgent = await agentsStore.getById(agentId);\n let codeAgentExists = false;\n try {\n mastra.getAgentById(agentId);\n codeAgentExists = true;\n } catch {\n // Agent not registered in code\n }\n\n if (!storedAgent && !codeAgentExists) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(storedAgent, await getStoredResourceScope(mastra, requestContext));\n\n const result = await agentsStore.listVersions({\n agentId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing agent versions');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions - Create a new version snapshot\n */\nexport const CREATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n bodySchema: createVersionBodySchema,\n responseSchema: createVersionResponseSchema,\n summary: 'Create agent version',\n description: 'Creates a new version snapshot of the current agent configuration',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, changeMessage, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Get the current agent to find its active version\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the current active version to snapshot its config\n let currentConfig: Record<string, unknown> = {};\n if (agent.activeVersionId) {\n const activeVersion = await agentsStore.getVersion(agent.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n\n // If no activeVersionId, fall back to latest version config\n if (!agent.activeVersionId && latestVersion) {\n currentConfig = extractConfigFromVersion(\n latestVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, currentConfig);\n\n // Create the new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n // Get the created version to return\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/:versionId - Get a specific version\n */\nexport const GET_AGENT_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: getVersionResponseSchema,\n summary: 'Get agent version',\n description: 'Returns a specific version of an agent by its version ID',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n const version = await agentsStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n // Verify the version belongs to the specified agent\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: activateVersionResponseSchema,\n summary: 'Activate agent version',\n description: 'Sets a specific version as the active version for the agent',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Update the agent's activeVersionId AND status to 'published'\n await agentsStore.update({\n id: agentId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} is now active`,\n activeVersionId: versionId,\n };\n } catch (error) {\n return handleError(error, 'Error activating agent version');\n }\n },\n});\n\n/**\n * POST /stored/agents/:agentId/versions/:versionId/restore - Restore agent to a version\n */\nexport const RESTORE_AGENT_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/agents/:agentId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: restoreVersionResponseSchema,\n summary: 'Restore agent version',\n description: 'Restores the agent configuration from a version, creating a new version',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get the version to restore\n const versionToRestore = await agentsStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Extract the config fields from the version to restore (top-level, no .snapshot)\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Update the agent with the config from the version to restore\n await agentsStore.update({\n id: agentId,\n ...restoredConfig,\n });\n\n // Get the latest version to calculate changed fields\n const latestVersion = await agentsStore.getLatestVersion(agentId);\n const previousConfig = latestVersion\n ? extractConfigFromVersion(latestVersion as unknown as Record<string, unknown>, SNAPSHOT_CONFIG_FIELDS)\n : null;\n\n const changedFields = calculateChangedFields(previousConfig, restoredConfig);\n\n // Create a new version with retry logic to handle race conditions\n // Config fields are passed top-level\n const { versionId: newVersionId } = await createVersionWithRetry(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n // Do NOT auto-activate the restored version - user must explicitly activate it\n\n // Get the created version to return\n const newVersion = await agentsStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n // Enforce retention limit - delete oldest versions if we exceed the max\n // Use the agent's existing activeVersionId\n await enforceRetentionLimit(\n agentsStore as unknown as VersionedStoreInterface,\n agentId,\n 'agentId',\n agent.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the restored config\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring agent version');\n }\n },\n});\n\n/**\n * DELETE /stored/agents/:agentId/versions/:versionId - Delete a version\n */\nexport const DELETE_AGENT_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/agents/:agentId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: versionIdPathParams,\n responseSchema: deleteVersionResponseSchema,\n summary: 'Delete agent version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, versionId, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n\n // Verify agent exists\n const agent = await agentsStore.getById(agentId);\n if (!agent) {\n throw new HTTPException(404, { message: `Agent with id ${agentId} not found` });\n }\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Verify version exists and belongs to this agent\n const version = await agentsStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found for agent ${agentId}` });\n }\n\n // Check if this is the active version\n if (agent.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await agentsStore.deleteVersion(versionId);\n\n // Clear the editor cache in case the deleted version affected resolution\n mastra.getEditor()?.agent.clearCache(agentId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting agent version');\n }\n },\n});\n\n/**\n * GET /stored/agents/:agentId/versions/compare - Compare two versions\n */\nexport const COMPARE_AGENT_VERSIONS_ROUTE: ServerRoute<\n InferParams<typeof agentVersionPathParams, typeof compareVersionsQuerySchema, undefined>,\n z.infer<typeof compareVersionsResponseSchema>,\n 'json',\n RouteSchemas<\n typeof agentVersionPathParams,\n typeof compareVersionsQuerySchema,\n undefined,\n typeof compareVersionsResponseSchema\n >,\n 'GET',\n '/stored/agents/:agentId/versions/compare'\n> = createRoute({\n method: 'GET',\n path: '/stored/agents/:agentId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: agentVersionPathParams,\n queryParamSchema: compareVersionsQuerySchema,\n responseSchema: compareVersionsResponseSchema,\n summary: 'Compare agent versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Agent Versions'],\n handler: async ({ mastra, agentId, from, to, requestContext }) => {\n try {\n const storage = mastra.getStorage();\n\n if (!storage) {\n throw new HTTPException(500, { message: 'Storage is not configured' });\n }\n\n const agentsStore = await storage.getStore('agents');\n if (!agentsStore) {\n throw new HTTPException(500, { message: 'Agents storage domain is not available' });\n }\n const agent = await agentsStore.getById(agentId);\n assertStoredResourceScope(agent, await getStoredResourceScope(mastra, requestContext));\n\n // Get both versions\n const fromVersion = await agentsStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${from} not found for agent ${agentId}` });\n }\n\n const toVersion = await agentsStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.agentId !== agentId) {\n throw new HTTPException(404, { message: `Version with id ${to} not found for agent ${agentId}` });\n }\n\n // Extract config fields from both versions (top-level, no .snapshot)\n const fromConfig = extractConfigFromVersion(\n fromVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n const toConfig = extractConfigFromVersion(\n toVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n // Compute diffs on the config fields\n const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing agent versions');\n }\n },\n});\n"]}
|