@mastra/server 1.42.0-alpha.3 → 1.42.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.
- package/CHANGELOG.md +55 -0
- package/dist/_types/@internal_voice/dist/routes/index.d.ts +2 -2
- package/dist/{api-schema-manifest-PM5DJ67P.js → api-schema-manifest-ASCOTXDG.js} +3 -3
- package/dist/{api-schema-manifest-PM5DJ67P.js.map → api-schema-manifest-ASCOTXDG.js.map} +1 -1
- package/dist/{api-schema-manifest-HYO7FJWX.cjs → api-schema-manifest-CASCZ5JA.cjs} +4 -4
- package/dist/{api-schema-manifest-HYO7FJWX.cjs.map → api-schema-manifest-CASCZ5JA.cjs.map} +1 -1
- package/dist/{chunk-ZN3JHWNH.js → chunk-27SJFO6E.js} +3 -3
- package/dist/{chunk-ZN3JHWNH.js.map → chunk-27SJFO6E.js.map} +1 -1
- package/dist/{chunk-UW2M6ACA.cjs → chunk-2AYEJULC.cjs} +34 -34
- package/dist/{chunk-UW2M6ACA.cjs.map → chunk-2AYEJULC.cjs.map} +1 -1
- package/dist/{chunk-3XKDVCIP.js → chunk-2QXTSL5D.js} +3 -3
- package/dist/{chunk-3XKDVCIP.js.map → chunk-2QXTSL5D.js.map} +1 -1
- package/dist/{chunk-F3SWX6WJ.cjs → chunk-2YB3SJBB.cjs} +12 -12
- package/dist/{chunk-F3SWX6WJ.cjs.map → chunk-2YB3SJBB.cjs.map} +1 -1
- package/dist/{chunk-HZB2CRC6.cjs → chunk-3ATUI6XD.cjs} +4 -4
- package/dist/{chunk-HZB2CRC6.cjs.map → chunk-3ATUI6XD.cjs.map} +1 -1
- package/dist/{chunk-BWNJBSXL.js → chunk-3ENQND57.js} +3 -3
- package/dist/{chunk-BWNJBSXL.js.map → chunk-3ENQND57.js.map} +1 -1
- package/dist/{chunk-P4IMQYF3.cjs → chunk-47PVLKIL.cjs} +8 -5
- package/dist/chunk-47PVLKIL.cjs.map +1 -0
- package/dist/{chunk-LBVQK4LO.cjs → chunk-4PQR3D5Y.cjs} +11 -9
- package/dist/chunk-4PQR3D5Y.cjs.map +1 -0
- package/dist/{chunk-AUO32DAZ.cjs → chunk-54OFLP7B.cjs} +10 -10
- package/dist/{chunk-AUO32DAZ.cjs.map → chunk-54OFLP7B.cjs.map} +1 -1
- package/dist/{chunk-7U7OWTR2.js → chunk-56AYHXOU.js} +3 -3
- package/dist/{chunk-7U7OWTR2.js.map → chunk-56AYHXOU.js.map} +1 -1
- package/dist/{chunk-BSHJ4HUN.js → chunk-5DPX2WRN.js} +4 -4
- package/dist/{chunk-BSHJ4HUN.js.map → chunk-5DPX2WRN.js.map} +1 -1
- package/dist/{chunk-23S37FLK.js → chunk-5FOSK5R3.js} +6 -4
- package/dist/chunk-5FOSK5R3.js.map +1 -0
- package/dist/{chunk-K3SHMUQG.js → chunk-5JJBM47G.js} +3 -3
- package/dist/{chunk-K3SHMUQG.js.map → chunk-5JJBM47G.js.map} +1 -1
- package/dist/{chunk-XIV5JLFM.cjs → chunk-5NOU4GYX.cjs} +110 -110
- package/dist/{chunk-XIV5JLFM.cjs.map → chunk-5NOU4GYX.cjs.map} +1 -1
- package/dist/{chunk-7FCDZBRJ.cjs → chunk-5SICMPYN.cjs} +51 -43
- package/dist/chunk-5SICMPYN.cjs.map +1 -0
- package/dist/{chunk-4GK7UEOF.js → chunk-5UKZ2LAI.js} +4 -4
- package/dist/chunk-5UKZ2LAI.js.map +1 -0
- package/dist/{chunk-VBQKBXAI.cjs → chunk-5WVXBP2Y.cjs} +10 -10
- package/dist/{chunk-VBQKBXAI.cjs.map → chunk-5WVXBP2Y.cjs.map} +1 -1
- package/dist/{chunk-HJVMQDSZ.js → chunk-67TV3EH4.js} +3 -3
- package/dist/{chunk-HJVMQDSZ.js.map → chunk-67TV3EH4.js.map} +1 -1
- package/dist/{chunk-KPAAQAZX.js → chunk-6BY6VUN2.js} +3 -3
- package/dist/{chunk-KPAAQAZX.js.map → chunk-6BY6VUN2.js.map} +1 -1
- package/dist/{chunk-RXT5WOCU.js → chunk-6XJTDCOF.js} +4 -4
- package/dist/{chunk-RXT5WOCU.js.map → chunk-6XJTDCOF.js.map} +1 -1
- package/dist/{chunk-4V2VNFVM.js → chunk-7475TVI5.js} +4 -4
- package/dist/{chunk-4V2VNFVM.js.map → chunk-7475TVI5.js.map} +1 -1
- package/dist/{chunk-4W7KQRF5.cjs → chunk-AAPSZTLM.cjs} +10 -3
- package/dist/chunk-AAPSZTLM.cjs.map +1 -0
- package/dist/{chunk-6IYRTJAM.js → chunk-ANIBNJ3N.js} +6 -6
- package/dist/{chunk-6IYRTJAM.js.map → chunk-ANIBNJ3N.js.map} +1 -1
- package/dist/{chunk-MPJDL7M4.cjs → chunk-AW4NGJ2N.cjs} +28 -28
- package/dist/{chunk-MPJDL7M4.cjs.map → chunk-AW4NGJ2N.cjs.map} +1 -1
- package/dist/{chunk-3SZS6A34.cjs → chunk-C7RGNU23.cjs} +12 -12
- package/dist/{chunk-3SZS6A34.cjs.map → chunk-C7RGNU23.cjs.map} +1 -1
- package/dist/{chunk-7OJ75STQ.cjs → chunk-CF3ZJDTU.cjs} +53 -53
- package/dist/{chunk-7OJ75STQ.cjs.map → chunk-CF3ZJDTU.cjs.map} +1 -1
- package/dist/{chunk-ZQ4GLVIX.js → chunk-CHP6ZIVF.js} +3 -3
- package/dist/{chunk-ZQ4GLVIX.js.map → chunk-CHP6ZIVF.js.map} +1 -1
- package/dist/{chunk-RULES2JK.js → chunk-D5MBB7JN.js} +3 -3
- package/dist/{chunk-RULES2JK.js.map → chunk-D5MBB7JN.js.map} +1 -1
- package/dist/{chunk-DA6XYIJE.cjs → chunk-DMZ4R5Q7.cjs} +48 -20
- package/dist/chunk-DMZ4R5Q7.cjs.map +1 -0
- package/dist/{chunk-ZAWZ2BWD.cjs → chunk-EPKVYFCP.cjs} +7 -7
- package/dist/{chunk-ZAWZ2BWD.cjs.map → chunk-EPKVYFCP.cjs.map} +1 -1
- package/dist/{chunk-BTBUILA3.cjs → chunk-F755HGAQ.cjs} +250 -250
- package/dist/{chunk-BTBUILA3.cjs.map → chunk-F755HGAQ.cjs.map} +1 -1
- package/dist/{chunk-XVXSDMTB.js → chunk-FICIBTVS.js} +5 -5
- package/dist/{chunk-XVXSDMTB.js.map → chunk-FICIBTVS.js.map} +1 -1
- package/dist/{chunk-QVFQUBC7.cjs → chunk-FVUJRSNB.cjs} +62 -62
- package/dist/{chunk-QVFQUBC7.cjs.map → chunk-FVUJRSNB.cjs.map} +1 -1
- package/dist/{chunk-AFQ3OCPR.js → chunk-FZTCXQHI.js} +6 -6
- package/dist/{chunk-AFQ3OCPR.js.map → chunk-FZTCXQHI.js.map} +1 -1
- package/dist/{chunk-AQ7EVXCZ.js → chunk-G7B7MTWX.js} +31 -31
- package/dist/{chunk-AQ7EVXCZ.js.map → chunk-G7B7MTWX.js.map} +1 -1
- package/dist/{chunk-SILGPCNA.js → chunk-GBVJ4OYO.js} +3 -3
- package/dist/{chunk-SILGPCNA.js.map → chunk-GBVJ4OYO.js.map} +1 -1
- package/dist/{chunk-LHLSK2AE.js → chunk-GMGBMOC6.js} +5 -5
- package/dist/{chunk-LHLSK2AE.js.map → chunk-GMGBMOC6.js.map} +1 -1
- package/dist/{chunk-TIIYB6H2.cjs → chunk-H27WOU55.cjs} +22 -22
- package/dist/{chunk-TIIYB6H2.cjs.map → chunk-H27WOU55.cjs.map} +1 -1
- package/dist/{chunk-YH4WGIEH.js → chunk-HATXNJ4V.js} +6 -4
- package/dist/chunk-HATXNJ4V.js.map +1 -0
- package/dist/{chunk-AC7GMUBN.cjs → chunk-HB4PRXQ7.cjs} +19 -19
- package/dist/{chunk-AC7GMUBN.cjs.map → chunk-HB4PRXQ7.cjs.map} +1 -1
- package/dist/{chunk-UQVZFNT2.js → chunk-HLB3XKZS.js} +4 -4
- package/dist/{chunk-UQVZFNT2.js.map → chunk-HLB3XKZS.js.map} +1 -1
- package/dist/{chunk-UIVHXCOY.cjs → chunk-HOOYQBNB.cjs} +43 -43
- package/dist/{chunk-UIVHXCOY.cjs.map → chunk-HOOYQBNB.cjs.map} +1 -1
- package/dist/{chunk-SLM5OKHX.cjs → chunk-HVATI3FQ.cjs} +5 -5
- package/dist/{chunk-SLM5OKHX.cjs.map → chunk-HVATI3FQ.cjs.map} +1 -1
- package/dist/{chunk-L4Z7J32P.js → chunk-IIRWTIFV.js} +4 -4
- package/dist/{chunk-L4Z7J32P.js.map → chunk-IIRWTIFV.js.map} +1 -1
- package/dist/{chunk-7OWSBMQT.cjs → chunk-JRCLL2XG.cjs} +56 -56
- package/dist/{chunk-7OWSBMQT.cjs.map → chunk-JRCLL2XG.cjs.map} +1 -1
- package/dist/{chunk-PPNPOLWL.cjs → chunk-JUFS6SVC.cjs} +4 -4
- package/dist/{chunk-PPNPOLWL.cjs.map → chunk-JUFS6SVC.cjs.map} +1 -1
- package/dist/{chunk-VX3MJR4P.cjs → chunk-KGUHJRHZ.cjs} +10 -10
- package/dist/{chunk-VX3MJR4P.cjs.map → chunk-KGUHJRHZ.cjs.map} +1 -1
- package/dist/{chunk-Q3ESI7U3.cjs → chunk-KJ6DNZ6C.cjs} +23 -23
- package/dist/{chunk-Q3ESI7U3.cjs.map → chunk-KJ6DNZ6C.cjs.map} +1 -1
- package/dist/{chunk-WWDHYJH6.js → chunk-LHBCIGPA.js} +6 -6
- package/dist/{chunk-WWDHYJH6.js.map → chunk-LHBCIGPA.js.map} +1 -1
- package/dist/{chunk-OY7BRU3T.js → chunk-LHF6URCC.js} +3 -3
- package/dist/{chunk-OY7BRU3T.js.map → chunk-LHF6URCC.js.map} +1 -1
- package/dist/{chunk-QH3IFRYL.cjs → chunk-LIIRA77X.cjs} +6 -6
- package/dist/{chunk-QH3IFRYL.cjs.map → chunk-LIIRA77X.cjs.map} +1 -1
- package/dist/{chunk-H7TPN2Y6.js → chunk-LPT77UR6.js} +8 -5
- package/dist/chunk-LPT77UR6.js.map +1 -0
- package/dist/{chunk-SLTGLKKQ.js → chunk-LQZHT5U7.js} +3 -3
- package/dist/{chunk-SLTGLKKQ.js.map → chunk-LQZHT5U7.js.map} +1 -1
- package/dist/{chunk-FSSG5YQJ.js → chunk-LUR6XGTP.js} +3 -3
- package/dist/{chunk-FSSG5YQJ.js.map → chunk-LUR6XGTP.js.map} +1 -1
- package/dist/{chunk-O3QIULED.js → chunk-MKJ6Y2HF.js} +4 -4
- package/dist/{chunk-O3QIULED.js.map → chunk-MKJ6Y2HF.js.map} +1 -1
- package/dist/{chunk-34CXJCW6.cjs → chunk-MMOFAVHH.cjs} +9 -9
- package/dist/{chunk-34CXJCW6.cjs.map → chunk-MMOFAVHH.cjs.map} +1 -1
- package/dist/{chunk-FPKJAWB4.cjs → chunk-NQHBWI24.cjs} +9 -9
- package/dist/{chunk-FPKJAWB4.cjs.map → chunk-NQHBWI24.cjs.map} +1 -1
- package/dist/{chunk-CSDD3WKD.cjs → chunk-NSBZR7QU.cjs} +13 -13
- package/dist/{chunk-CSDD3WKD.cjs.map → chunk-NSBZR7QU.cjs.map} +1 -1
- package/dist/{chunk-TYHVZSA4.js → chunk-O7JJZSXK.js} +4 -4
- package/dist/{chunk-TYHVZSA4.js.map → chunk-O7JJZSXK.js.map} +1 -1
- package/dist/{chunk-ADW6D5RD.cjs → chunk-OH2UAAED.cjs} +6 -6
- package/dist/{chunk-ADW6D5RD.cjs.map → chunk-OH2UAAED.cjs.map} +1 -1
- package/dist/{chunk-RSAMJC5Y.cjs → chunk-OZMSHZ5R.cjs} +4 -4
- package/dist/chunk-OZMSHZ5R.cjs.map +1 -0
- package/dist/{chunk-UTUIQVXH.js → chunk-P5IEX7A7.js} +3 -3
- package/dist/{chunk-UTUIQVXH.js.map → chunk-P5IEX7A7.js.map} +1 -1
- package/dist/{chunk-PMMVJSIC.js → chunk-PGK2MPL7.js} +3 -3
- package/dist/{chunk-PMMVJSIC.js.map → chunk-PGK2MPL7.js.map} +1 -1
- package/dist/{chunk-AW7D2YUT.cjs → chunk-PJKQHNQX.cjs} +12 -12
- package/dist/{chunk-AW7D2YUT.cjs.map → chunk-PJKQHNQX.cjs.map} +1 -1
- package/dist/{chunk-WOMWA56V.cjs → chunk-PMGFP7II.cjs} +10 -10
- package/dist/{chunk-WOMWA56V.cjs.map → chunk-PMGFP7II.cjs.map} +1 -1
- package/dist/{chunk-SSCEURZV.cjs → chunk-PWBN74RE.cjs} +4 -4
- package/dist/{chunk-SSCEURZV.cjs.map → chunk-PWBN74RE.cjs.map} +1 -1
- package/dist/{chunk-H7KDCXLQ.cjs → chunk-PXLC5SNM.cjs} +3 -3
- package/dist/chunk-PXLC5SNM.cjs.map +1 -0
- package/dist/{chunk-RCGUVZFM.cjs → chunk-Q2BOTNC2.cjs} +5 -5
- package/dist/{chunk-RCGUVZFM.cjs.map → chunk-Q2BOTNC2.cjs.map} +1 -1
- package/dist/{chunk-PLV74XAL.js → chunk-QM23NJBM.js} +3 -3
- package/dist/{chunk-PLV74XAL.js.map → chunk-QM23NJBM.js.map} +1 -1
- package/dist/{chunk-WTBVC25D.cjs → chunk-QQSQCWQJ.cjs} +16 -16
- package/dist/{chunk-WTBVC25D.cjs.map → chunk-QQSQCWQJ.cjs.map} +1 -1
- package/dist/{chunk-ZZE7ETO3.js → chunk-QSTMEJNF.js} +12 -4
- package/dist/chunk-QSTMEJNF.js.map +1 -0
- package/dist/{chunk-PWK5YPS6.js → chunk-R3YQMHOW.js} +5 -5
- package/dist/{chunk-PWK5YPS6.js.map → chunk-R3YQMHOW.js.map} +1 -1
- package/dist/{chunk-MOCFYZKQ.js → chunk-RV2PL7XY.js} +7 -7
- package/dist/{chunk-MOCFYZKQ.js.map → chunk-RV2PL7XY.js.map} +1 -1
- package/dist/{chunk-QYI23DSK.cjs → chunk-RV4T5P5S.cjs} +16 -16
- package/dist/{chunk-QYI23DSK.cjs.map → chunk-RV4T5P5S.cjs.map} +1 -1
- package/dist/{chunk-4BLUIUHS.cjs → chunk-RVD3DGBZ.cjs} +5 -5
- package/dist/{chunk-4BLUIUHS.cjs.map → chunk-RVD3DGBZ.cjs.map} +1 -1
- package/dist/{chunk-GFZR6THV.js → chunk-RY5RETAD.js} +3 -3
- package/dist/{chunk-GFZR6THV.js.map → chunk-RY5RETAD.js.map} +1 -1
- package/dist/{chunk-EUFT3MIX.js → chunk-SFAWHLOX.js} +3 -3
- package/dist/chunk-SFAWHLOX.js.map +1 -0
- package/dist/{chunk-65T6KVYX.cjs → chunk-SXKQ7CSX.cjs} +6 -3
- package/dist/chunk-SXKQ7CSX.cjs.map +1 -0
- package/dist/{chunk-W6KDN66O.js → chunk-SZBL63O3.js} +5 -5
- package/dist/{chunk-W6KDN66O.js.map → chunk-SZBL63O3.js.map} +1 -1
- package/dist/{chunk-JRPPHAGE.cjs → chunk-T4SHYW3E.cjs} +15 -15
- package/dist/{chunk-JRPPHAGE.cjs.map → chunk-T4SHYW3E.cjs.map} +1 -1
- package/dist/{chunk-UB6NBWGC.js → chunk-T5N6VHVN.js} +5 -5
- package/dist/{chunk-UB6NBWGC.js.map → chunk-T5N6VHVN.js.map} +1 -1
- package/dist/{chunk-Y5CIOSHU.js → chunk-WMHXUJKB.js} +10 -3
- package/dist/chunk-WMHXUJKB.js.map +1 -0
- package/dist/{chunk-7CNI6HVA.js → chunk-WU3CTX2J.js} +5 -5
- package/dist/{chunk-7CNI6HVA.js.map → chunk-WU3CTX2J.js.map} +1 -1
- package/dist/{chunk-BVLZQ7YB.cjs → chunk-XFAJ3EAC.cjs} +3 -3
- package/dist/{chunk-BVLZQ7YB.cjs.map → chunk-XFAJ3EAC.cjs.map} +1 -1
- package/dist/{chunk-U5XIOTTD.cjs → chunk-YH4TLNWJ.cjs} +24 -24
- package/dist/{chunk-U5XIOTTD.cjs.map → chunk-YH4TLNWJ.cjs.map} +1 -1
- package/dist/{chunk-KE4V4LJE.cjs → chunk-YLWKZ3VK.cjs} +7 -7
- package/dist/{chunk-KE4V4LJE.cjs.map → chunk-YLWKZ3VK.cjs.map} +1 -1
- package/dist/{chunk-KDMOWJ4W.js → chunk-YXU6EIG6.js} +46 -18
- package/dist/chunk-YXU6EIG6.js.map +1 -0
- package/dist/{chunk-7OSWGIVM.js → chunk-ZF5T4CGE.js} +5 -5
- package/dist/{chunk-7OSWGIVM.js.map → chunk-ZF5T4CGE.js.map} +1 -1
- package/dist/{dist-OTRIGGK5.js → dist-D63ZZGV3.js} +5 -5
- package/dist/{dist-OTRIGGK5.js.map → dist-D63ZZGV3.js.map} +1 -1
- package/dist/{dist-DQ2NPGYX.cjs → dist-QDOBLME7.cjs} +20 -20
- package/dist/{dist-DQ2NPGYX.cjs.map → dist-QDOBLME7.cjs.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{observational-memory-G52HNRHE-RHA4V77M.js → observational-memory-NIGWGBLT-SBZMVFBE.js} +3 -3
- package/dist/{observational-memory-G52HNRHE-RHA4V77M.js.map → observational-memory-NIGWGBLT-SBZMVFBE.js.map} +1 -1
- package/dist/{observational-memory-G52HNRHE-73KIWQ2G.cjs → observational-memory-NIGWGBLT-XWKXVCLV.cjs} +26 -26
- package/dist/{observational-memory-G52HNRHE-73KIWQ2G.cjs.map → observational-memory-NIGWGBLT-XWKXVCLV.cjs.map} +1 -1
- package/dist/server/auth/helpers.d.ts.map +1 -1
- package/dist/server/auth/index.cjs +19 -19
- package/dist/server/auth/index.js +2 -2
- package/dist/server/constants.d.ts +7 -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 +17 -17
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +46 -46
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +13 -13
- package/dist/server/handlers/auth.d.ts.map +1 -1
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/authorship.cjs +12 -12
- package/dist/server/handlers/authorship.js +1 -1
- package/dist/server/handlers/builder-registry.cjs +6 -6
- package/dist/server/handlers/builder-registry.js +1 -1
- 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/editor-builder.cjs +6 -6
- package/dist/server/handlers/editor-builder.d.ts +11 -7
- package/dist/server/handlers/editor-builder.d.ts.map +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +4 -4
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- 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.js +1 -1
- package/dist/server/handlers/memory.cjs +27 -27
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +8 -8
- 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/scorer-versions.cjs +8 -8
- 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/stored-agent-favorites.cjs +3 -3
- package/dist/server/handlers/stored-agent-favorites.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +9 -9
- 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.js +1 -1
- package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
- 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.js +1 -1
- package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
- package/dist/server/handlers/stored-skill-favorites.js +1 -1
- package/dist/server/handlers/stored-skills.cjs +7 -7
- package/dist/server/handlers/stored-skills.js +1 -1
- package/dist/server/handlers/stored-workspaces.cjs +6 -6
- 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 +14 -14
- package/dist/server/handlers/tool-providers.d.ts +2 -2
- 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.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 +27 -27
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers.cjs +22 -22
- package/dist/server/handlers.js +11 -11
- package/dist/server/schemas/index.cjs +106 -106
- package/dist/server/schemas/index.js +6 -6
- package/dist/server/schemas/tool-providers.d.ts +1 -1
- package/dist/server/schemas/tool-providers.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +129 -43
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +58 -5
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +102 -20
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/index.d.ts +2 -0
- package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
- package/dist/server/server-adapter/routes/tool-providers.d.ts +2 -2
- package/package.json +5 -5
- package/dist/chunk-23S37FLK.js.map +0 -1
- package/dist/chunk-4GK7UEOF.js.map +0 -1
- package/dist/chunk-4W7KQRF5.cjs.map +0 -1
- package/dist/chunk-65T6KVYX.cjs.map +0 -1
- package/dist/chunk-7FCDZBRJ.cjs.map +0 -1
- package/dist/chunk-DA6XYIJE.cjs.map +0 -1
- package/dist/chunk-EUFT3MIX.js.map +0 -1
- package/dist/chunk-H7KDCXLQ.cjs.map +0 -1
- package/dist/chunk-H7TPN2Y6.js.map +0 -1
- package/dist/chunk-KDMOWJ4W.js.map +0 -1
- package/dist/chunk-LBVQK4LO.cjs.map +0 -1
- package/dist/chunk-P4IMQYF3.cjs.map +0 -1
- package/dist/chunk-RSAMJC5Y.cjs.map +0 -1
- package/dist/chunk-Y5CIOSHU.js.map +0 -1
- package/dist/chunk-YH4WGIEH.js.map +0 -1
- package/dist/chunk-ZZE7ETO3.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/handlers/prompt-block-versions.ts"],"names":["createRoute","promptBlockVersionPathParams","listPromptBlockVersionsQuerySchema","listPromptBlockVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createPromptBlockVersionBodySchema","createPromptBlockVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","promptBlockVersionIdPathParams","getPromptBlockVersionResponseSchema","activatePromptBlockVersionResponseSchema","restorePromptBlockVersionResponseSchema","deletePromptBlockVersionResponseSchema","comparePromptBlockVersionsQuerySchema","comparePromptBlockVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-AUO32DAZ.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n promptBlockVersionPathParams,\n promptBlockVersionIdPathParams,\n listPromptBlockVersionsQuerySchema,\n createPromptBlockVersionBodySchema,\n comparePromptBlockVersionsQuerySchema,\n listPromptBlockVersionsResponseSchema,\n getPromptBlockVersionResponseSchema,\n createPromptBlockVersionResponseSchema,\n activatePromptBlockVersionResponseSchema,\n restorePromptBlockVersionResponseSchema,\n deletePromptBlockVersionResponseSchema,\n comparePromptBlockVersionsResponseSchema,\n} from '../schemas/prompt-block-versions';\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\nconst SNAPSHOT_CONFIG_FIELDS = ['name', 'description', 'content', 'rules'] as const;\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions - List all versions for a prompt block\n */\nexport const LIST_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: listPromptBlockVersionsQuerySchema,\n responseSchema: listPromptBlockVersionsResponseSchema,\n summary: 'List prompt block versions',\n description: 'Returns a paginated list of all versions for a stored prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const result = await promptBlockStore.listVersions({\n blockId: promptBlockId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing prompt block versions');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions - Create a new version snapshot\n */\nexport const CREATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n bodySchema: createPromptBlockVersionBodySchema,\n responseSchema: createPromptBlockVersionResponseSchema,\n summary: 'Create prompt block version',\n description: 'Creates a new version snapshot of the current prompt block configuration',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (promptBlock.activeVersionId) {\n const activeVersion = await promptBlockStore.getVersion(promptBlock.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n\n // If no activeVersionId, fall back to latest version config\n if (!promptBlock.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 const { versionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/:versionId - Get a specific version\n */\nexport const GET_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: getPromptBlockVersionResponseSchema,\n summary: 'Get prompt block version',\n description: 'Returns a specific version of a prompt block by its version ID',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const version = await promptBlockStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: activatePromptBlockVersionResponseSchema,\n summary: 'Activate prompt block version',\n description: 'Sets a specific version as the active version for the prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n await promptBlockStore.update({\n id: promptBlockId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\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 prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/restore - Restore prompt block to a version\n */\nexport const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: restorePromptBlockVersionResponseSchema,\n summary: 'Restore prompt block version',\n description: 'Restores the prompt block configuration from a version, creating a new version',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await promptBlockStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await promptBlockStore.update({\n id: promptBlockId,\n ...restoredConfig,\n });\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\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 const { versionId: newVersionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await promptBlockStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring prompt block version');\n }\n },\n});\n\n/**\n * DELETE /stored/prompt-blocks/:promptBlockId/versions/:versionId - Delete a version\n */\nexport const DELETE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: deletePromptBlockVersionResponseSchema,\n summary: 'Delete prompt block version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n if (promptBlock.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await promptBlockStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/compare - Compare two versions\n */\nexport const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: comparePromptBlockVersionsQuerySchema,\n responseSchema: comparePromptBlockVersionsResponseSchema,\n summary: 'Compare prompt block versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await promptBlockStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const toVersion = await promptBlockStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for prompt block ${promptBlockId}`,\n });\n }\n\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 const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing prompt block versions');\n }\n },\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/prompt-block-versions.ts"],"names":["createRoute","promptBlockVersionPathParams","listPromptBlockVersionsQuerySchema","listPromptBlockVersionsResponseSchema","HTTPException","assertStoredResourceScope","getStoredResourceScope","handleError","createPromptBlockVersionBodySchema","createPromptBlockVersionResponseSchema","extractConfigFromVersion","calculateChangedFields","createVersionWithRetry","enforceRetentionLimit","promptBlockVersionIdPathParams","getPromptBlockVersionResponseSchema","activatePromptBlockVersionResponseSchema","restorePromptBlockVersionResponseSchema","deletePromptBlockVersionResponseSchema","comparePromptBlockVersionsQuerySchema","comparePromptBlockVersionsResponseSchema","computeVersionDiffs"],"mappings":"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","file":"chunk-54OFLP7B.cjs","sourcesContent":["import { HTTPException } from '../http-exception';\nimport {\n promptBlockVersionPathParams,\n promptBlockVersionIdPathParams,\n listPromptBlockVersionsQuerySchema,\n createPromptBlockVersionBodySchema,\n comparePromptBlockVersionsQuerySchema,\n listPromptBlockVersionsResponseSchema,\n getPromptBlockVersionResponseSchema,\n createPromptBlockVersionResponseSchema,\n activatePromptBlockVersionResponseSchema,\n restorePromptBlockVersionResponseSchema,\n deletePromptBlockVersionResponseSchema,\n comparePromptBlockVersionsResponseSchema,\n} from '../schemas/prompt-block-versions';\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\nconst SNAPSHOT_CONFIG_FIELDS = ['name', 'description', 'content', 'rules'] as const;\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions - List all versions for a prompt block\n */\nexport const LIST_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: listPromptBlockVersionsQuerySchema,\n responseSchema: listPromptBlockVersionsResponseSchema,\n summary: 'List prompt block versions',\n description: 'Returns a paginated list of all versions for a stored prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const result = await promptBlockStore.listVersions({\n blockId: promptBlockId,\n page,\n perPage,\n orderBy,\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error listing prompt block versions');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions - Create a new version snapshot\n */\nexport const CREATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n bodySchema: createPromptBlockVersionBodySchema,\n responseSchema: createPromptBlockVersionResponseSchema,\n summary: 'Create prompt block version',\n description: 'Creates a new version snapshot of the current prompt block configuration',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n let currentConfig: Record<string, unknown> = {};\n if (promptBlock.activeVersionId) {\n const activeVersion = await promptBlockStore.getVersion(promptBlock.activeVersionId);\n if (activeVersion) {\n currentConfig = extractConfigFromVersion(\n activeVersion as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n }\n }\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\n\n // If no activeVersionId, fall back to latest version config\n if (!promptBlock.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 const { versionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n currentConfig,\n changedFields,\n { changeMessage },\n );\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n return version;\n } catch (error) {\n return handleError(error, 'Error creating prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/:versionId - Get a specific version\n */\nexport const GET_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: getPromptBlockVersionResponseSchema,\n summary: 'Get prompt block version',\n description: 'Returns a specific version of a prompt block by its version ID',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const version = await promptBlockStore.getVersion(versionId);\n\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n return version;\n } catch (error) {\n return handleError(error, 'Error getting prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/activate - Set a version as active\n */\nexport const ACTIVATE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/activate',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: activatePromptBlockVersionResponseSchema,\n summary: 'Activate prompt block version',\n description: 'Sets a specific version as the active version for the prompt block',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n await promptBlockStore.update({\n id: promptBlockId,\n activeVersionId: versionId,\n status: 'published',\n });\n\n // Clear the editor cache so subsequent requests see the new active version\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\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 prompt block version');\n }\n },\n});\n\n/**\n * POST /stored/prompt-blocks/:promptBlockId/versions/:versionId/restore - Restore prompt block to a version\n */\nexport const RESTORE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'POST',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId/restore',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: restorePromptBlockVersionResponseSchema,\n summary: 'Restore prompt block version',\n description: 'Restores the prompt block configuration from a version, creating a new version',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const versionToRestore = await promptBlockStore.getVersion(versionId);\n if (!versionToRestore) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (versionToRestore.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const restoredConfig = extractConfigFromVersion(\n versionToRestore as unknown as Record<string, unknown>,\n SNAPSHOT_CONFIG_FIELDS,\n );\n\n await promptBlockStore.update({\n id: promptBlockId,\n ...restoredConfig,\n });\n\n const latestVersion = await promptBlockStore.getLatestVersion(promptBlockId);\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 const { versionId: newVersionId } = await createVersionWithRetry(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n restoredConfig,\n changedFields,\n {\n changeMessage: `Restored from version ${versionToRestore.versionNumber}`,\n },\n );\n\n const newVersion = await promptBlockStore.getVersion(newVersionId);\n if (!newVersion) {\n throw new HTTPException(500, { message: 'Failed to retrieve created version' });\n }\n\n await enforceRetentionLimit(\n promptBlockStore as unknown as VersionedStoreInterface,\n promptBlockId,\n 'blockId',\n promptBlock.activeVersionId,\n );\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return newVersion;\n } catch (error) {\n return handleError(error, 'Error restoring prompt block version');\n }\n },\n});\n\n/**\n * DELETE /stored/prompt-blocks/:promptBlockId/versions/:versionId - Delete a version\n */\nexport const DELETE_PROMPT_BLOCK_VERSION_ROUTE = createRoute({\n method: 'DELETE',\n path: '/stored/prompt-blocks/:promptBlockId/versions/:versionId',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionIdPathParams,\n responseSchema: deletePromptBlockVersionResponseSchema,\n summary: 'Delete prompt block version',\n description: 'Deletes a specific version (cannot delete the active version)',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n if (!promptBlock) {\n throw new HTTPException(404, { message: `Prompt block with id ${promptBlockId} not found` });\n }\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const version = await promptBlockStore.getVersion(versionId);\n if (!version) {\n throw new HTTPException(404, { message: `Version with id ${versionId} not found` });\n }\n if (version.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${versionId} not found for prompt block ${promptBlockId}`,\n });\n }\n\n if (promptBlock.activeVersionId === versionId) {\n throw new HTTPException(400, {\n message: 'Cannot delete the active version. Activate a different version first.',\n });\n }\n\n await promptBlockStore.deleteVersion(versionId);\n\n // Clear the editor cache so subsequent requests see the updated config\n mastra.getEditor()?.prompt.clearCache(promptBlockId);\n\n return {\n success: true,\n message: `Version ${version.versionNumber} deleted successfully`,\n };\n } catch (error) {\n return handleError(error, 'Error deleting prompt block version');\n }\n },\n});\n\n/**\n * GET /stored/prompt-blocks/:promptBlockId/versions/compare - Compare two versions\n */\nexport const COMPARE_PROMPT_BLOCK_VERSIONS_ROUTE = createRoute({\n method: 'GET',\n path: '/stored/prompt-blocks/:promptBlockId/versions/compare',\n requiresAuth: true,\n responseType: 'json',\n pathParamSchema: promptBlockVersionPathParams,\n queryParamSchema: comparePromptBlockVersionsQuerySchema,\n responseSchema: comparePromptBlockVersionsResponseSchema,\n summary: 'Compare prompt block versions',\n description: 'Compares two versions and returns the differences between them',\n tags: ['Prompt Block Versions'],\n handler: async ({ mastra, promptBlockId, 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 promptBlockStore = await storage.getStore('promptBlocks');\n if (!promptBlockStore) {\n throw new HTTPException(500, { message: 'Prompt blocks storage domain is not available' });\n }\n const promptBlock = await promptBlockStore.getById(promptBlockId);\n assertStoredResourceScope(promptBlock, await getStoredResourceScope(mastra, requestContext));\n\n const fromVersion = await promptBlockStore.getVersion(from);\n if (!fromVersion) {\n throw new HTTPException(404, { message: `Version with id ${from} not found` });\n }\n if (fromVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${from} not found for prompt block ${promptBlockId}`,\n });\n }\n\n const toVersion = await promptBlockStore.getVersion(to);\n if (!toVersion) {\n throw new HTTPException(404, { message: `Version with id ${to} not found` });\n }\n if (toVersion.blockId !== promptBlockId) {\n throw new HTTPException(404, {\n message: `Version with id ${to} not found for prompt block ${promptBlockId}`,\n });\n }\n\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 const diffs = computeVersionDiffs(fromConfig, toConfig);\n\n return {\n diffs,\n fromVersion,\n toVersion,\n };\n } catch (error) {\n return handleError(error, 'Error comparing prompt block versions');\n }\n },\n});\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HTTPException } from './chunk-6QWQZI4Q.js';
|
|
2
|
-
import { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from './chunk-
|
|
2
|
+
import { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from './chunk-5FOSK5R3.js';
|
|
3
3
|
import { matchesPermission } from '@mastra/core/auth/ee';
|
|
4
4
|
|
|
5
5
|
function getCallerAuthorId(requestContext) {
|
|
@@ -145,5 +145,5 @@ function assertOwnership(args) {
|
|
|
145
145
|
}
|
|
146
146
|
|
|
147
147
|
export { assertExecuteAccess, assertOwnership, assertReadAccess, assertShareAccess, assertWriteAccess, getCallerAuthorId, getCallerPermissions, hasAdminBypass, hasScopedPermission, matchesAuthorFilter, resolveAuthorFilter };
|
|
148
|
-
//# sourceMappingURL=chunk-
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
148
|
+
//# sourceMappingURL=chunk-56AYHXOU.js.map
|
|
149
|
+
//# sourceMappingURL=chunk-56AYHXOU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/handlers/authorship.ts"],"names":["required"],"mappings":"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","file":"chunk-7U7OWTR2.js","sourcesContent":["import { matchesPermission } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\n\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from '../constants';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Shape of a stored record that carries ownership + visibility metadata.\n * Used by `matchesAuthorFilter` and the access-assertion helpers.\n */\nexport type OwnedRecord = {\n authorId?: string | null;\n visibility?: 'private' | 'public';\n};\n\n/**\n * Returns the author id associated with the authenticated caller, or `null`\n * if auth is not configured / the caller cannot be resolved.\n *\n * Prefers `MASTRA_RESOURCE_ID_KEY` (set by `authConfig.mapUserToResourceId`)\n * and falls back to `user.id` on the authenticated user object.\n */\nexport function getCallerAuthorId(requestContext: RequestContext): string | null {\n const resourceId = requestContext.get(MASTRA_RESOURCE_ID_KEY);\n if (typeof resourceId === 'string' && resourceId.length > 0) {\n return resourceId;\n }\n\n const user = requestContext.get(MASTRA_USER_KEY);\n if (user && typeof user === 'object' && 'id' in user) {\n const id = (user as { id: unknown }).id;\n if (typeof id === 'string' && id.length > 0) {\n return id;\n }\n }\n\n return null;\n}\n\n/**\n * Returns the list of permission strings currently attached to the caller by\n * the RBAC provider. Returns an empty array when RBAC isn't configured.\n */\nexport function getCallerPermissions(requestContext: RequestContext): string[] {\n const raw = requestContext.get(MASTRA_USER_PERMISSIONS_KEY);\n if (Array.isArray(raw)) {\n return raw.filter((p): p is string => typeof p === 'string');\n }\n return [];\n}\n\n/**\n * True if the caller holds a wildcard permission that lets them manage a\n * resource they don't own (e.g. admins listing agents across tenants).\n *\n * Recognizes `*`, `<resource>:*`, and `<resource>:admin`.\n */\nexport function hasAdminBypass(requestContext: RequestContext, resource: string): boolean {\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n const wildcardAll = '*';\n const resourceWildcard = `${resource}:*`;\n const resourceAdmin = `${resource}:admin`;\n return permissions.some(p => p === wildcardAll || p === resourceWildcard || p === resourceAdmin);\n}\n\n/**\n * True if the caller holds a permission explicitly scoped to a specific\n * resource id — e.g. `agents:read:agent-123` or `agents:*:agent-123`.\n *\n * Broad grants without a resource-id segment (e.g. the role-default\n * `agents:execute`) are intentionally NOT treated as satisfying ownership\n * overrides. Those broad grants already gate route access at the\n * `requiresPermission` layer; giving them a second life as per-record\n * overrides would defeat the owner/visibility model.\n *\n * When called without `resourceId` (the legacy shape), falls back to the\n * original \"any matching permission\" behavior.\n */\nexport function hasScopedPermission(args: {\n requestContext: RequestContext;\n resource: string;\n action: string;\n resourceId?: string;\n}): boolean {\n const { requestContext, resource, action, resourceId } = args;\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n\n if (!resourceId) {\n const required = `${resource}:${action}`;\n return permissions.some(p => matchesPermission(p, required));\n }\n\n const required = `${resource}:${action}:${resourceId}`;\n return permissions.some(p => {\n // Only honor grants that explicitly name a resource id. A granted\n // permission with just `<resource>:<action>` (no id segment) is\n // considered a broad role grant, not a per-record override.\n const parts = p.split(':');\n if (parts.length < 3) return false;\n return matchesPermission(p, required);\n });\n}\n\nexport type AuthorFilter =\n | { kind: 'unrestricted' }\n | { kind: 'exact'; authorId: string }\n | { kind: 'ownedOrPublic'; callerAuthorId: string }\n | { kind: 'publicOnly' }\n | { kind: 'ownedOrPublicOthers'; callerAuthorId: string; queryAuthorId: string };\n\n/**\n * Resolves the filter to apply when listing owner-scoped records.\n *\n * Behavior matrix:\n * - Admin bypass + no query overrides → `unrestricted`.\n * - Admin bypass + `authorId=X` → `exact` (all of X's rows).\n * - `visibility=public` (any caller) → `publicOnly` (aggregate public rows across owners).\n * - `authorId=X`, caller === X → `exact` (all of caller's rows).\n * - `authorId=X`, caller !== X (non-admin) → `ownedOrPublicOthers` (only X's public rows).\n * - No caller (auth off) → `unrestricted` (or `exact` if query supplied).\n * - Default → `ownedOrPublic` (caller's rows + legacy unowned + any public rows).\n */\nexport function resolveAuthorFilter(args: {\n requestContext: RequestContext;\n resource: string;\n queryAuthorId?: string;\n queryVisibility?: 'public';\n}): AuthorFilter {\n const { requestContext, resource, queryAuthorId, queryVisibility } = args;\n const callerAuthorId = getCallerAuthorId(requestContext);\n const bypass = hasAdminBypass(requestContext, resource);\n\n if (queryVisibility === 'public' && !queryAuthorId) {\n return { kind: 'publicOnly' };\n }\n\n if (bypass) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n // Auth isn't configured (no caller) → treat as unrestricted. The route's\n // `requiresAuth`/`requiresPermission` is what gates access in that mode.\n if (!callerAuthorId) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n if (queryAuthorId) {\n if (queryAuthorId === callerAuthorId) {\n return { kind: 'exact', authorId: callerAuthorId };\n }\n // Non-owner asking about another user: only that user's public rows are visible.\n return { kind: 'ownedOrPublicOthers', callerAuthorId, queryAuthorId };\n }\n\n return { kind: 'ownedOrPublic', callerAuthorId };\n}\n\n/**\n * Returns `true` if the record is visible to the caller given the resolved\n * filter. See `resolveAuthorFilter` for the filter semantics.\n *\n * Legacy rows with `authorId == null` are treated as public (visible to all).\n */\nexport function matchesAuthorFilter(record: OwnedRecord, filter: AuthorFilter): boolean {\n const owner = record.authorId ?? null;\n const isPublic = record.visibility === 'public';\n\n switch (filter.kind) {\n case 'unrestricted':\n return true;\n case 'exact':\n return owner === filter.authorId;\n case 'ownedOrPublic':\n return owner === null || owner === filter.callerAuthorId || isPublic;\n case 'publicOnly':\n return owner === null || isPublic;\n case 'ownedOrPublicOthers':\n // Filtering by another author's rows: only expose their public ones.\n // Legacy unowned rows match if the query is for `null`; here the query\n // is always for a concrete id, so unowned rows don't match.\n return owner === filter.queryAuthorId && isPublic;\n }\n}\n\n/**\n * Asserts the caller has read access to the record. Throws 404 if not.\n *\n * Read access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:read` or `<resource>:read:<resourceId>`.\n */\nexport function assertReadAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n // No authenticated user on the request context means auth is not configured\n // (single-user/dev mode). When auth IS configured, coreAuthMiddleware\n // rejects unauthenticated requests with 401 before they reach handlers,\n // so an absent user here genuinely means no auth provider.\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return;\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has execute access to the record. Throws 404 if not.\n *\n * Execute access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:execute` / `<resource>:execute:<resourceId>`, OR\n * - The caller holds `<resource>:read` / `<resource>:read:<resourceId>`\n * (read implies the ability to consume/chat with the resource).\n */\nexport function assertExecuteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'execute', resourceId })) {\n return;\n }\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has write access (edit or delete) to the record.\n * Throws 404 if not.\n *\n * Write access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record, OR\n * - The caller has admin bypass, OR\n * - The caller holds `<resource>:<action>` or `<resource>:<action>:<resourceId>`.\n *\n * `visibility: 'public'` alone does NOT grant write access.\n */\nexport function assertWriteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n action: 'edit' | 'delete' | 'write';\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, action, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action, resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has share access to the record. Throws 404 if not.\n *\n * Share access controls who can change a record's audience/visibility\n * (e.g. flipping `private` ↔ `public`). It is intentionally separate from\n * `write`: a caller with only `<resource>:write` MUST NOT be able to flip\n * visibility — that would let any editor expose private records.\n *\n * Share access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record (creators can share their own records), OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:share` / `<resource>:share:<resourceId>`\n * (or any pattern that matches it, e.g. `*:share`).\n *\n * `visibility: 'public'` does NOT grant share access — being readable doesn't\n * imply the right to change who else can read.\n */\nexport function assertShareAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'share', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Alias for `assertWriteAccess` with `action: 'edit'`. Prefer `assertWriteAccess`\n * in new code so the action is explicit.\n */\nexport function assertOwnership(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n assertWriteAccess({ ...args, action: 'edit' });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/authorship.ts"],"names":["required"],"mappings":"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","file":"chunk-56AYHXOU.js","sourcesContent":["import { matchesPermission } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\n\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from '../constants';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Shape of a stored record that carries ownership + visibility metadata.\n * Used by `matchesAuthorFilter` and the access-assertion helpers.\n */\nexport type OwnedRecord = {\n authorId?: string | null;\n visibility?: 'private' | 'public';\n};\n\n/**\n * Returns the author id associated with the authenticated caller, or `null`\n * if auth is not configured / the caller cannot be resolved.\n *\n * Prefers `MASTRA_RESOURCE_ID_KEY` (set by `authConfig.mapUserToResourceId`)\n * and falls back to `user.id` on the authenticated user object.\n */\nexport function getCallerAuthorId(requestContext: RequestContext): string | null {\n const resourceId = requestContext.get(MASTRA_RESOURCE_ID_KEY);\n if (typeof resourceId === 'string' && resourceId.length > 0) {\n return resourceId;\n }\n\n const user = requestContext.get(MASTRA_USER_KEY);\n if (user && typeof user === 'object' && 'id' in user) {\n const id = (user as { id: unknown }).id;\n if (typeof id === 'string' && id.length > 0) {\n return id;\n }\n }\n\n return null;\n}\n\n/**\n * Returns the list of permission strings currently attached to the caller by\n * the RBAC provider. Returns an empty array when RBAC isn't configured.\n */\nexport function getCallerPermissions(requestContext: RequestContext): string[] {\n const raw = requestContext.get(MASTRA_USER_PERMISSIONS_KEY);\n if (Array.isArray(raw)) {\n return raw.filter((p): p is string => typeof p === 'string');\n }\n return [];\n}\n\n/**\n * True if the caller holds a wildcard permission that lets them manage a\n * resource they don't own (e.g. admins listing agents across tenants).\n *\n * Recognizes `*`, `<resource>:*`, and `<resource>:admin`.\n */\nexport function hasAdminBypass(requestContext: RequestContext, resource: string): boolean {\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n const wildcardAll = '*';\n const resourceWildcard = `${resource}:*`;\n const resourceAdmin = `${resource}:admin`;\n return permissions.some(p => p === wildcardAll || p === resourceWildcard || p === resourceAdmin);\n}\n\n/**\n * True if the caller holds a permission explicitly scoped to a specific\n * resource id — e.g. `agents:read:agent-123` or `agents:*:agent-123`.\n *\n * Broad grants without a resource-id segment (e.g. the role-default\n * `agents:execute`) are intentionally NOT treated as satisfying ownership\n * overrides. Those broad grants already gate route access at the\n * `requiresPermission` layer; giving them a second life as per-record\n * overrides would defeat the owner/visibility model.\n *\n * When called without `resourceId` (the legacy shape), falls back to the\n * original \"any matching permission\" behavior.\n */\nexport function hasScopedPermission(args: {\n requestContext: RequestContext;\n resource: string;\n action: string;\n resourceId?: string;\n}): boolean {\n const { requestContext, resource, action, resourceId } = args;\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n\n if (!resourceId) {\n const required = `${resource}:${action}`;\n return permissions.some(p => matchesPermission(p, required));\n }\n\n const required = `${resource}:${action}:${resourceId}`;\n return permissions.some(p => {\n // Only honor grants that explicitly name a resource id. A granted\n // permission with just `<resource>:<action>` (no id segment) is\n // considered a broad role grant, not a per-record override.\n const parts = p.split(':');\n if (parts.length < 3) return false;\n return matchesPermission(p, required);\n });\n}\n\nexport type AuthorFilter =\n | { kind: 'unrestricted' }\n | { kind: 'exact'; authorId: string }\n | { kind: 'ownedOrPublic'; callerAuthorId: string }\n | { kind: 'publicOnly' }\n | { kind: 'ownedOrPublicOthers'; callerAuthorId: string; queryAuthorId: string };\n\n/**\n * Resolves the filter to apply when listing owner-scoped records.\n *\n * Behavior matrix:\n * - Admin bypass + no query overrides → `unrestricted`.\n * - Admin bypass + `authorId=X` → `exact` (all of X's rows).\n * - `visibility=public` (any caller) → `publicOnly` (aggregate public rows across owners).\n * - `authorId=X`, caller === X → `exact` (all of caller's rows).\n * - `authorId=X`, caller !== X (non-admin) → `ownedOrPublicOthers` (only X's public rows).\n * - No caller (auth off) → `unrestricted` (or `exact` if query supplied).\n * - Default → `ownedOrPublic` (caller's rows + legacy unowned + any public rows).\n */\nexport function resolveAuthorFilter(args: {\n requestContext: RequestContext;\n resource: string;\n queryAuthorId?: string;\n queryVisibility?: 'public';\n}): AuthorFilter {\n const { requestContext, resource, queryAuthorId, queryVisibility } = args;\n const callerAuthorId = getCallerAuthorId(requestContext);\n const bypass = hasAdminBypass(requestContext, resource);\n\n if (queryVisibility === 'public' && !queryAuthorId) {\n return { kind: 'publicOnly' };\n }\n\n if (bypass) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n // Auth isn't configured (no caller) → treat as unrestricted. The route's\n // `requiresAuth`/`requiresPermission` is what gates access in that mode.\n if (!callerAuthorId) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n if (queryAuthorId) {\n if (queryAuthorId === callerAuthorId) {\n return { kind: 'exact', authorId: callerAuthorId };\n }\n // Non-owner asking about another user: only that user's public rows are visible.\n return { kind: 'ownedOrPublicOthers', callerAuthorId, queryAuthorId };\n }\n\n return { kind: 'ownedOrPublic', callerAuthorId };\n}\n\n/**\n * Returns `true` if the record is visible to the caller given the resolved\n * filter. See `resolveAuthorFilter` for the filter semantics.\n *\n * Legacy rows with `authorId == null` are treated as public (visible to all).\n */\nexport function matchesAuthorFilter(record: OwnedRecord, filter: AuthorFilter): boolean {\n const owner = record.authorId ?? null;\n const isPublic = record.visibility === 'public';\n\n switch (filter.kind) {\n case 'unrestricted':\n return true;\n case 'exact':\n return owner === filter.authorId;\n case 'ownedOrPublic':\n return owner === null || owner === filter.callerAuthorId || isPublic;\n case 'publicOnly':\n return owner === null || isPublic;\n case 'ownedOrPublicOthers':\n // Filtering by another author's rows: only expose their public ones.\n // Legacy unowned rows match if the query is for `null`; here the query\n // is always for a concrete id, so unowned rows don't match.\n return owner === filter.queryAuthorId && isPublic;\n }\n}\n\n/**\n * Asserts the caller has read access to the record. Throws 404 if not.\n *\n * Read access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:read` or `<resource>:read:<resourceId>`.\n */\nexport function assertReadAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n // No authenticated user on the request context means auth is not configured\n // (single-user/dev mode). When auth IS configured, coreAuthMiddleware\n // rejects unauthenticated requests with 401 before they reach handlers,\n // so an absent user here genuinely means no auth provider.\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return;\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has execute access to the record. Throws 404 if not.\n *\n * Execute access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:execute` / `<resource>:execute:<resourceId>`, OR\n * - The caller holds `<resource>:read` / `<resource>:read:<resourceId>`\n * (read implies the ability to consume/chat with the resource).\n */\nexport function assertExecuteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'execute', resourceId })) {\n return;\n }\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has write access (edit or delete) to the record.\n * Throws 404 if not.\n *\n * Write access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record, OR\n * - The caller has admin bypass, OR\n * - The caller holds `<resource>:<action>` or `<resource>:<action>:<resourceId>`.\n *\n * `visibility: 'public'` alone does NOT grant write access.\n */\nexport function assertWriteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n action: 'edit' | 'delete' | 'write';\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, action, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action, resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has share access to the record. Throws 404 if not.\n *\n * Share access controls who can change a record's audience/visibility\n * (e.g. flipping `private` ↔ `public`). It is intentionally separate from\n * `write`: a caller with only `<resource>:write` MUST NOT be able to flip\n * visibility — that would let any editor expose private records.\n *\n * Share access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record (creators can share their own records), OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:share` / `<resource>:share:<resourceId>`\n * (or any pattern that matches it, e.g. `*:share`).\n *\n * `visibility: 'public'` does NOT grant share access — being readable doesn't\n * imply the right to change who else can read.\n */\nexport function assertShareAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'share', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Alias for `assertWriteAccess` with `action: 'edit'`. Prefer `assertWriteAccess`\n * in new code so the action is explicit.\n */\nexport function assertOwnership(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n assertWriteAccess({ ...args, action: 'edit' });\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { searchSkillsSh, getPopularSkillsSh, previewSkillsSh, fetchSkillFiles, assertSafeSkillName, assertSafeFilePath } from './chunk-753JFAF2.js';
|
|
2
|
-
import { getCallerAuthorId } from './chunk-
|
|
2
|
+
import { getCallerAuthorId } from './chunk-56AYHXOU.js';
|
|
3
3
|
import { skillsShSearchResponseSchema, skillsShListResponseSchema, skillsShPreviewResponseSchema } from './chunk-ZHULRNJG.js';
|
|
4
|
-
import { toSlug } from './chunk-
|
|
4
|
+
import { toSlug } from './chunk-QM23NJBM.js';
|
|
5
5
|
import { handleError } from './chunk-7ZWJX3AN.js';
|
|
6
6
|
import { createRoute } from './chunk-YQL3TXSD.js';
|
|
7
7
|
import { HTTPException } from './chunk-6QWQZI4Q.js';
|
|
@@ -288,5 +288,5 @@ var BUILDER_REGISTRY_INSTALL_ROUTE = createRoute({
|
|
|
288
288
|
});
|
|
289
289
|
|
|
290
290
|
export { BUILDER_REGISTRY_INSTALL_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, LIST_BUILDER_REGISTRIES_ROUTE };
|
|
291
|
-
//# sourceMappingURL=chunk-
|
|
292
|
-
//# sourceMappingURL=chunk-
|
|
291
|
+
//# sourceMappingURL=chunk-5DPX2WRN.js.map
|
|
292
|
+
//# sourceMappingURL=chunk-5DPX2WRN.js.map
|
|
@@ -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-BSHJ4HUN.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":";;;;;;;;;AAuBO,IAAM,0BAAA,GAA6B,EAAE,MAAA,CAAO;AAAA,EACjD,IAAI,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA,CAAE,SAAS,4BAA4B,CAAA;AAAA,EAChE,OAAA,EAAS,CAAA,CAAE,OAAA,EAAQ,CAAE,SAAS,4DAA4D,CAAA;AAAA,EAC1F,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B;AAC3D,CAAC,CAAA;AAGM,IAAM,+BAAA,GAAkC,EAAE,MAAA,CAAO;AAAA,EACtD,UAAA,EAAY,CAAA,CAAE,KAAA,CAAM,0BAA0B;AAChD,CAAC,CAAA;AAOM,IAAM,yBAAA,GAA4B,EAAE,MAAA,CAAO;AAAA,EAChD,UAAA,EAAY,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wCAAwC;AAC1E,CAAC,CAAA;AAEM,IAAM,gCAAA,GAAmC,EAAE,MAAA,CAAO;AAAA,EACvD,CAAA,EAAG,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,cAAc,CAAA;AAAA,EACrC,OAAO,CAAA,CAAE,MAAA,CAAO,QAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,mCAAmC;AACpH,CAAC,CAAA;AAEM,IAAM,iCAAA,GAAoC,EAC9C,MAAA,CAAO;AAAA,EACN,OAAO,CAAA,CAAE,MAAA,CAAO,QAAO,CAAE,GAAA,GAAM,GAAA,CAAI,CAAC,EAAE,GAAA,CAAI,GAAG,EAAE,QAAA,EAAS,CAAE,QAAQ,EAAE,CAAA,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAClH,QAAQ,CAAA,CAAE,MAAA,CACP,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,UAAS,CACT,OAAA,CAAQ,CAAC,CAAA,CACT,SAAS,uDAAuD;AACrE,CAAC,EACA,MAAA,CAAO,CAAA,IAAA,KAAQ,KAAK,MAAA,GAAS,IAAA,CAAK,UAAU,CAAA,EAAG;AAAA,EAC9C,OAAA,EAAS,6EAAA;AAAA,EACT,IAAA,EAAM,CAAC,QAAQ;AACjB,CAAC,CAAA;AAEI,IAAM,iCAAA,GAAoC,EAAE,MAAA,CAAO;AAAA,EACxD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB,CAAA;AAAA,EACpD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB,CAAA;AAAA,EAClD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB;AACpD,CAAC,CAAA;AAYM,IAAM,gCAAA,GAAmC,EAAE,MAAA,CAAO;AAAA,EACvD,KAAA,EAAO,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB,CAAA;AAAA,EACpD,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,wBAAwB,CAAA;AAAA,EAClD,SAAA,EAAW,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8BAA8B,CAAA;AAAA,EAC7D,UAAA,EAAY,CAAA,CAAE,IAAA,CAAK,CAAC,SAAA,EAAW,QAAQ,CAAC,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qCAAqC;AACrG,CAAC,CAAA;AAGM,IAAM,oCAAA,GAAuC,EAAE,MAAA,CAAO;AAAA,EAC3D,aAAA,EAAe,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,sCAAsC,CAAA;AAAA,EACzE,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC/C,YAAA,EAAc,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,8DAA8D;AAClG,CAAC,CAAA;;;AC3CD,IAAM,eAAA,GAA0C;AAAA,EAC9C,WAAA,EAAa;AACf,CAAA;AAcA,eAAe,kBAAkB,MAAA,EAA2C;AAC1E,EAAA,MAAM,MAAA,GAAS,OAAO,SAAA,EAAU;AAChC,EAAA,IAAI,CAAC,MAAA,IAAU,OAAO,MAAA,CAAO,mBAAmB,UAAA,EAAY;AAC1D,IAAA,OAAO,CAAC,EAAE,EAAA,EAAI,WAAA,EAAa,OAAA,EAAS,OAAO,KAAA,EAAO,eAAA,CAAgB,WAAW,CAAA,EAAI,CAAA;AAAA,EACnF;AACA,EAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,EAAe;AAC5C,EAAA,MAAM,UAAA,GAAa,SAAS,aAAA,IAAgB;AAC5C,EAAA,OAAO;AAAA,IACL;AAAA,MACE,EAAA,EAAI,WAAA;AAAA,MACJ,OAAA,EAAS,UAAA,EAAY,QAAA,EAAU,OAAA,KAAY,IAAA;AAAA,MAC3C,KAAA,EAAO,gBAAgB,WAAW;AAAA;AACpC,GACF;AACF;AAMA,eAAe,sBAAA,CAAuB,QAAgB,UAAA,EAAmC;AACvF,EAAA,MAAM,IAAA,GAAO,MAAM,iBAAA,CAAkB,MAAM,CAAA;AAC3C,EAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,OAAO,UAAU,CAAA;AAChD,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,CAAM,OAAA,EAAS;AAC5B,IAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,sBAAsB,CAAA;AAAA,EAChE;AACF;AAaA,SAAS,cACP,KAAA,EACwB;AACxB,EAAA,MAAM,OAA+B,EAAC;AAEtC,EAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,IAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAC7C,IAAA,MAAM,WAAW,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AACnD,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAE3B,IAAA,IAAI,MAAA,GAAS,IAAA;AACb,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,MAAA,IAAI,MAAA,GAAS,OAAO,IAAA,CAAK,CAAA,IAAA,KAAQ,KAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,KAAS,OAAO,CAAA;AAChF,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,MAAA,GAAS,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,QAAA,EAAU,QAAA,EAAU,EAAC,EAAE;AACvD,QAAA,MAAA,CAAO,KAAK,MAAM,CAAA;AAAA,MACpB;AACA,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,WAAW,EAAC;AACzC,MAAA,MAAA,GAAS,MAAA,CAAO,QAAA;AAAA,IAClB;AAEA,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,KAAa,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAO,IAAI,IAAA,CAAK,OAAA;AAC1G,IAAA,MAAA,CAAO,KAAK,EAAE,IAAA,EAAM,UAAU,IAAA,EAAM,MAAA,EAAQ,SAAS,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,IAAA;AACT;AAqBA,SAAS,mBACP,KAAA,EAC4B;AAC5B,EAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,SAAS,UAAU,CAAA;AACrD,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,GAAA,GACJ,OAAA,CAAQ,QAAA,KAAa,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,QAAQ,CAAA,CAAE,QAAA,CAAS,OAAO,IAAI,OAAA,CAAQ,OAAA;AAErG,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,6CAA6C,CAAA;AACvE,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,EAAE,YAAA,EAAc,GAAA,CAAI,IAAA,EAAK,EAAE;AAAA,EACpC;AAEA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAA;AAC9B,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,EAAA;AAC3B,EAAA,MAAM,cAAsC,EAAC;AAC7C,EAAA,KAAA,MAAW,IAAA,IAAQ,OAAA,CAAQ,KAAA,CAAM,OAAO,CAAA,EAAG;AACzC,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,+BAA+B,CAAA;AACpD,IAAA,IAAI,CAAC,CAAA,EAAG;AACR,IAAA,MAAM,GAAA,GAAM,EAAE,CAAC,CAAA;AACf,IAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACtB,IAAA,IAAI,CAAC,GAAA,EAAK;AAGV,IAAA,WAAA,CAAY,GAAG,CAAA,GAAI,KAAA,CAAM,MAAK,CAAE,OAAA,CAAQ,kBAAkB,IAAI,CAAA;AAAA,EAChE;AAEA,EAAA,OAAO;AAAA,IACL,MAAM,WAAA,CAAY,IAAA;AAAA,IAClB,aAAa,WAAA,CAAY,WAAA;AAAA,IACzB,YAAA,EAAc,KAAK,IAAA;AAAK,GAC1B;AACF;AAaO,IAAM,gCAAgC,WAAA,CAAY;AAAA,EACvD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,4BAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,cAAA,EAAgB,+BAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAQ,CAAA;AAAA,EACf,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAO,KAAM;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,iBAAA,CAAkB,MAAM,CAAA;AACjD,MAAA,OAAO,EAAE,UAAA,EAAW;AAAA,IACtB,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,WAAA,CAAY,OAAO,kCAAkC,CAAA;AAAA,IAC9D;AAAA,EACF;AACF,CAAC;AAQM,IAAM,gCAAgC,WAAA,CAAY;AAAA,EACvD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,+CAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,yBAAA;AAAA,EACjB,gBAAA,EAAkB,gCAAA;AAAA,EAClB,cAAA,EAAgB,4BAAA;AAAA,EAChB,OAAA,EAAS,6BAAA;AAAA,EACT,WAAA,EAAa,2EAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,SAAS,OAAO,EAAE,QAAQ,UAAA,EAAY,CAAA,EAAG,OAAM,KAAM;AACnD,IAAA,IAAI;AACF,MAAA,MAAM,sBAAA,CAAuB,QAAQ,UAAU,CAAA;AAC/C,MAAA,OAAO,MAAM,cAAA,CAAe,EAAE,CAAA,EAAG,OAAO,CAAA;AAAA,IAC1C,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,eAAe,MAAM,KAAA;AAC1C,MAAA,OAAO,WAAA,CAAY,OAAO,0BAA0B,CAAA;AAAA,IACtD;AAAA,EACF;AACF,CAAC;AAOM,IAAM,iCAAiC,WAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gDAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,yBAAA;AAAA,EACjB,gBAAA,EAAkB,iCAAA;AAAA,EAClB,cAAA,EAAgB,0BAAA;AAAA,EAChB,OAAA,EAAS,oCAAA;AAAA,EACT,WAAA,EAAa,mFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,SAAS,OAAO,EAAE,QAAQ,UAAA,EAAY,KAAA,EAAO,QAAO,KAAM;AACxD,IAAA,IAAI;AACF,MAAA,MAAM,sBAAA,CAAuB,QAAQ,UAAU,CAAA;AAC/C,MAAA,OAAO,MAAM,kBAAA,CAAmB,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,IACnD,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,eAAe,MAAM,KAAA;AAC1C,MAAA,OAAO,WAAA,CAAY,OAAO,+BAA+B,CAAA;AAAA,IAC3D;AAAA,EACF;AACF,CAAC;AAOM,IAAM,iCAAiC,WAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,KAAA;AAAA,EACR,IAAA,EAAM,gDAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,yBAAA;AAAA,EACjB,gBAAA,EAAkB,iCAAA;AAAA,EAClB,cAAA,EAAgB,6BAAA;AAAA,EAChB,OAAA,EAAS,iCAAA;AAAA,EACT,WAAA,EAAa,6EAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,oBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,YAAY,KAAA,EAAO,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU,KAAM;AACvE,IAAA,IAAI;AACF,MAAA,MAAM,sBAAA,CAAuB,QAAQ,UAAU,CAAA;AAC/C,MAAA,OAAO,MAAM,eAAA,CAAgB,EAAE,KAAA,EAAO,IAAA,EAAM,WAAW,CAAA;AAAA,IACzD,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,eAAe,MAAM,KAAA;AAC1C,MAAA,OAAO,WAAA,CAAY,OAAO,8BAA8B,CAAA;AAAA,IAC1D;AAAA,EACF;AACF,CAAC;AAeM,IAAM,iCAAiC,WAAA,CAAY;AAAA,EACxD,MAAA,EAAQ,MAAA;AAAA,EACR,IAAA,EAAM,gDAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,eAAA,EAAiB,yBAAA;AAAA,EACjB,UAAA,EAAY,gCAAA;AAAA,EACZ,cAAA,EAAgB,oCAAA;AAAA,EAChB,OAAA,EAAS,6CAAA;AAAA,EACT,WAAA,EAAa,qFAAA;AAAA,EACb,IAAA,EAAM,CAAC,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzB,YAAA,EAAc,IAAA;AAAA,EACd,kBAAA,EAAoB,qBAAA;AAAA,EACpB,OAAA,EAAS,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,UAAA,EAAY,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,UAAA,EAAY,cAAA,EAAe,KAAM;AAC7G,IAAA,IAAI;AACF,MAAA,MAAM,sBAAA,CAAuB,QAAQ,UAAU,CAAA;AAE/C,MAAA,MAAM,OAAA,GAAU,OAAO,UAAA,EAAW;AAClC,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,6BAA6B,CAAA;AAAA,MACvE;AACA,MAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA;AAClD,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,IAAI,aAAA,CAAc,GAAA,EAAK,EAAE,OAAA,EAAS,0CAA0C,CAAA;AAAA,MACpF;AAGA,MAAA,MAAM,MAAA,GAAS,MAAM,eAAA,CAAgB,KAAA,EAAO,MAAM,SAAS,CAAA;AAC3D,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,CAAM,WAAW,CAAA,EAAG;AACxC,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,SAAS,CAAA,sBAAA,EAAyB,SAAS,CAAA,KAAA,EAAQ,KAAK,IAAI,IAAI,CAAA,CAAA;AAAA,SACjE,CAAA;AAAA,MACH;AAEA,MAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,MAAA,CAAO,OAAO,CAAA;AACtD,MAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,MAAA,CAAO,KAAK,CAAA;AAOxC,MAAA,MAAM,QAAA,GAAW,kBAAA,CAAmB,MAAA,CAAO,KAAK,CAAA;AAEhD,MAAA,MAAM,YAAA,GAAe,UAAU,IAAA,IAAQ,WAAA;AACvC,MAAA,MAAM,cAAc,QAAA,EAAU,WAAA,IAAe,CAAA,cAAA,EAAiB,KAAK,IAAI,IAAI,CAAA,CAAA;AAC3E,MAAA,MAAM,EAAA,GAAK,MAAA,CAAO,YAAY,CAAA,IAAK,WAAA;AAEnC,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAC5C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,MAAM,IAAI,cAAc,GAAA,EAAK;AAAA,UAC3B,OAAA,EAAS,kBAAkB,EAAE,CAAA,iBAAA,CAAA;AAAA;AAAA,UAE7B,KAAA,EAAO,EAAE,aAAA,EAAe,EAAA;AAAG,SAC5B,CAAA;AAAA,MACH;AAGA,MAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,cAAc,CAAA,IAAK,MAAA;AACtD,MAAA,MAAM,UAAA,GAAmC,QAAA,GAAY,cAAA,IAAkB,SAAA,GAAa,QAAA;AAOpF,MAAA,MAAM,eAAe,QAAA,EAAU,YAAA,EAAc,IAAA,EAAK,GAAI,SAAS,YAAA,GAAe,WAAA;AAE9E,MAAA,MAAM,WAAW,MAAA,CAAO;AAAA,QACtB,KAAA,EAAO;AAAA,UACL,EAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA;AAAA,UACA,IAAA,EAAM,YAAA;AAAA,UACN,WAAA;AAAA,UACA,YAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA,EAAU;AAAA,YACR,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,WAAA;AAAA,cACN,KAAA;AAAA,cACA,IAAA;AAAA,cACA;AAAA;AACF;AACF;AACF,OACD,CAAA;AAED,MAAA,OAAO;AAAA,QACL,aAAA,EAAe,EAAA;AAAA,QACf,IAAA,EAAM,YAAA;AAAA,QACN,YAAA,EAAc,OAAO,KAAA,CAAM;AAAA,OAC7B;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAA,YAAiB,eAAe,MAAM,KAAA;AAC1C,MAAA,OAAO,WAAA,CAAY,OAAO,iCAAiC,CAAA;AAAA,IAC7D;AAAA,EACF;AACF,CAAC","file":"chunk-5DPX2WRN.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"]}
|
|
@@ -6,6 +6,7 @@ var MASTRA_USER_PERMISSIONS_KEY = "mastra__userPermissions";
|
|
|
6
6
|
var MASTRA_USER_ROLES_KEY = "mastra__userRoles";
|
|
7
7
|
var MASTRA_AUTH_TOKEN_KEY = "mastra__authToken";
|
|
8
8
|
var MASTRA_IS_STUDIO_KEY = "mastra__isStudio";
|
|
9
|
+
var MASTRA_AUTH_MODE_KEY = "mastra__authMode";
|
|
9
10
|
var MASTRA_CLIENT_TYPE_HEADER = "x-mastra-client-type";
|
|
10
11
|
var MASTRA_STUDIO_CLIENT_TYPE = "studio";
|
|
11
12
|
var RESERVED_CONTEXT_KEYS = /* @__PURE__ */ new Set([
|
|
@@ -15,7 +16,8 @@ var RESERVED_CONTEXT_KEYS = /* @__PURE__ */ new Set([
|
|
|
15
16
|
MASTRA_USER_PERMISSIONS_KEY,
|
|
16
17
|
MASTRA_USER_ROLES_KEY,
|
|
17
18
|
MASTRA_AUTH_TOKEN_KEY,
|
|
18
|
-
MASTRA_IS_STUDIO_KEY
|
|
19
|
+
MASTRA_IS_STUDIO_KEY,
|
|
20
|
+
MASTRA_AUTH_MODE_KEY
|
|
19
21
|
]);
|
|
20
22
|
function isReservedRequestContextKey(key) {
|
|
21
23
|
return RESERVED_CONTEXT_KEYS.has(key);
|
|
@@ -85,6 +87,6 @@ async function resolveToolConfig(toolsConfig, toolName, context) {
|
|
|
85
87
|
};
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
export { MASTRA_AUTH_TOKEN_KEY, MASTRA_CLIENT_TYPE_HEADER, MASTRA_IS_STUDIO_KEY, MASTRA_RESOURCE_ID_KEY, MASTRA_STUDIO_CLIENT_TYPE, MASTRA_THREAD_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY, MASTRA_USER_ROLES_KEY, WORKSPACE_TOOLS, isReservedRequestContextKey, isStudioClientTypeHeader, resolveToolConfig };
|
|
89
|
-
//# sourceMappingURL=chunk-
|
|
90
|
-
//# sourceMappingURL=chunk-
|
|
90
|
+
export { MASTRA_AUTH_MODE_KEY, MASTRA_AUTH_TOKEN_KEY, MASTRA_CLIENT_TYPE_HEADER, MASTRA_IS_STUDIO_KEY, MASTRA_RESOURCE_ID_KEY, MASTRA_STUDIO_CLIENT_TYPE, MASTRA_THREAD_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY, MASTRA_USER_ROLES_KEY, WORKSPACE_TOOLS, isReservedRequestContextKey, isStudioClientTypeHeader, resolveToolConfig };
|
|
91
|
+
//# sourceMappingURL=chunk-5FOSK5R3.js.map
|
|
92
|
+
//# sourceMappingURL=chunk-5FOSK5R3.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/constants.ts"],"names":[],"mappings":"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","file":"chunk-5FOSK5R3.js","sourcesContent":["/**\n * Constants inlined from @mastra/core to avoid import compatibility\n * issues with older core versions that don't export them yet.\n *\n * - Reserved RequestContext keys are inlined from @mastra/core/request-context.\n * - Workspace tool constants are inlined from @mastra/core/workspace.\n */\n\nexport const MASTRA_RESOURCE_ID_KEY = 'mastra__resourceId';\n\nexport const MASTRA_THREAD_ID_KEY = 'mastra__threadId';\n\nexport const MASTRA_USER_KEY = 'mastra__user';\n\nexport const MASTRA_USER_PERMISSIONS_KEY = 'mastra__userPermissions';\n\nexport const MASTRA_USER_ROLES_KEY = 'mastra__userRoles';\n\nexport const MASTRA_AUTH_TOKEN_KEY = 'mastra__authToken';\n\nexport const MASTRA_IS_STUDIO_KEY = 'mastra__isStudio';\n\n/**\n * Tracks which auth mode was used for the current request.\n * Set to 'studio' when studio auth was used, 'server' when server auth was used.\n * Used to determine which RBAC/FGA provider to use for permission checks.\n */\nexport const MASTRA_AUTH_MODE_KEY = 'mastra__authMode';\n\nexport type MastraAuthMode = 'studio' | 'server';\n\nexport const MASTRA_CLIENT_TYPE_HEADER = 'x-mastra-client-type';\n\nexport const MASTRA_STUDIO_CLIENT_TYPE = 'studio';\n\nconst RESERVED_CONTEXT_KEYS = new Set([\n MASTRA_RESOURCE_ID_KEY,\n MASTRA_THREAD_ID_KEY,\n MASTRA_USER_KEY,\n MASTRA_USER_PERMISSIONS_KEY,\n MASTRA_USER_ROLES_KEY,\n MASTRA_AUTH_TOKEN_KEY,\n MASTRA_IS_STUDIO_KEY,\n MASTRA_AUTH_MODE_KEY,\n]);\n\nexport function isReservedRequestContextKey(key: string): boolean {\n return RESERVED_CONTEXT_KEYS.has(key);\n}\n\nexport function isStudioClientTypeHeader(value: string | undefined): boolean {\n return value?.toLowerCase() === MASTRA_STUDIO_CLIENT_TYPE;\n}\n\nexport const WORKSPACE_TOOLS_PREFIX = 'mastra_workspace' as const;\n\nexport const WORKSPACE_TOOLS = {\n FILESYSTEM: {\n READ_FILE: `${WORKSPACE_TOOLS_PREFIX}_read_file` as const,\n WRITE_FILE: `${WORKSPACE_TOOLS_PREFIX}_write_file` as const,\n EDIT_FILE: `${WORKSPACE_TOOLS_PREFIX}_edit_file` as const,\n LIST_FILES: `${WORKSPACE_TOOLS_PREFIX}_list_files` as const,\n DELETE: `${WORKSPACE_TOOLS_PREFIX}_delete` as const,\n FILE_STAT: `${WORKSPACE_TOOLS_PREFIX}_file_stat` as const,\n MKDIR: `${WORKSPACE_TOOLS_PREFIX}_mkdir` as const,\n GREP: `${WORKSPACE_TOOLS_PREFIX}_grep` as const,\n },\n SANDBOX: {\n EXECUTE_COMMAND: `${WORKSPACE_TOOLS_PREFIX}_execute_command` as const,\n },\n SEARCH: {\n SEARCH: `${WORKSPACE_TOOLS_PREFIX}_search` as const,\n INDEX: `${WORKSPACE_TOOLS_PREFIX}_index` as const,\n },\n} as const;\n\nexport type WorkspaceToolName =\n | (typeof WORKSPACE_TOOLS.FILESYSTEM)[keyof typeof WORKSPACE_TOOLS.FILESYSTEM]\n | (typeof WORKSPACE_TOOLS.SEARCH)[keyof typeof WORKSPACE_TOOLS.SEARCH]\n | (typeof WORKSPACE_TOOLS.SANDBOX)[keyof typeof WORKSPACE_TOOLS.SANDBOX];\n\n/**\n * A tool config value that may be a static boolean or a dynamic function.\n * Inlined from @mastra/core/workspace for compatibility.\n *\n * Uses `(...args: any[]) => any` for the function branch so it stays\n * assignable from all core context variants (ToolConfigContext,\n * ToolConfigWithArgsContext) without importing them.\n */\n\ntype DynamicToolConfigValue = boolean | ((...args: any[]) => any);\n\n/**\n * Configuration for a single workspace tool.\n */\nexport interface WorkspaceToolConfig {\n enabled?: DynamicToolConfigValue;\n requireApproval?: DynamicToolConfigValue;\n requireReadBeforeWrite?: DynamicToolConfigValue;\n}\n\n/**\n * Configuration for workspace tools.\n */\nexport type WorkspaceToolsConfig = {\n enabled?: DynamicToolConfigValue;\n requireApproval?: DynamicToolConfigValue;\n} & Partial<Record<WorkspaceToolName, WorkspaceToolConfig>>;\n\n/**\n * Safely resolve a dynamic config value (boolean or async function) to a boolean.\n * Falls back to `safeDefault` when no context is available or the function throws.\n */\nasync function resolveDynamicValue(\n value: DynamicToolConfigValue | undefined,\n context: { workspace: object; requestContext: Record<string, unknown> } | undefined,\n safeDefault: boolean,\n): Promise<boolean> {\n if (value === undefined) return safeDefault;\n if (typeof value === 'boolean') return value;\n if (!context) return safeDefault;\n try {\n return await value(context);\n } catch (error) {\n console.warn('[Workspace Tools] Dynamic config function threw, using safe default:', error);\n return safeDefault;\n }\n}\n\n/**\n * Resolve the effective configuration for a workspace tool.\n * Inlined from @mastra/core/workspace for compatibility.\n *\n * Dynamic function values are resolved by calling them with the provided\n * workspace and requestContext. If a function throws, safe defaults are used\n * (enabled → false, requireApproval → true, requireReadBeforeWrite → true).\n */\nexport async function resolveToolConfig(\n toolsConfig: WorkspaceToolsConfig | undefined,\n toolName: WorkspaceToolName,\n context?: { workspace: object; requestContext: Record<string, unknown> },\n): Promise<{ enabled: boolean; requireApproval: boolean; requireReadBeforeWrite?: boolean }> {\n let enabled: DynamicToolConfigValue = true;\n let requireApproval: DynamicToolConfigValue = false;\n let requireReadBeforeWrite: DynamicToolConfigValue | undefined;\n\n if (toolsConfig) {\n if (toolsConfig.enabled !== undefined) {\n enabled = toolsConfig.enabled;\n }\n if (toolsConfig.requireApproval !== undefined) {\n requireApproval = toolsConfig.requireApproval;\n }\n\n const perToolConfig = toolsConfig[toolName];\n if (perToolConfig) {\n if (perToolConfig.enabled !== undefined) {\n enabled = perToolConfig.enabled;\n }\n if (perToolConfig.requireApproval !== undefined) {\n requireApproval = perToolConfig.requireApproval;\n }\n if (perToolConfig.requireReadBeforeWrite !== undefined) {\n requireReadBeforeWrite = perToolConfig.requireReadBeforeWrite;\n }\n }\n }\n\n return {\n enabled: await resolveDynamicValue(enabled, context, false),\n requireApproval: await resolveDynamicValue(requireApproval, context, true),\n requireReadBeforeWrite:\n requireReadBeforeWrite !== undefined\n ? await resolveDynamicValue(requireReadBeforeWrite, context, true)\n : undefined,\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { modelConfigSchema } from './chunk-
|
|
1
|
+
import { modelConfigSchema } from './chunk-GBVJ4OYO.js';
|
|
2
2
|
import { createPagePaginationSchema, paginationInfoSchema } from './chunk-2YY3EMMS.js';
|
|
3
3
|
import { z } from 'zod/v4';
|
|
4
4
|
|
|
@@ -98,5 +98,5 @@ var deleteStoredScorerResponseSchema = z.object({
|
|
|
98
98
|
});
|
|
99
99
|
|
|
100
100
|
export { createStoredScorerBodySchema, createStoredScorerResponseSchema, deleteStoredScorerResponseSchema, getStoredScorerResponseSchema, listStoredScorersQuerySchema, listStoredScorersResponseSchema, storedScorerIdPathParams, storedScorerSchema, updateStoredScorerBodySchema, updateStoredScorerResponseSchema };
|
|
101
|
-
//# sourceMappingURL=chunk-
|
|
102
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-5JJBM47G.js.map
|
|
102
|
+
//# sourceMappingURL=chunk-5JJBM47G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":[],"mappings":"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","file":"chunk-K3SHMUQG.js","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server/schemas/stored-scorers.ts"],"names":[],"mappings":"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","file":"chunk-5JJBM47G.js","sourcesContent":["import { z } from 'zod/v4';\n\nimport { paginationInfoSchema, createPagePaginationSchema, statusQuerySchema } from './common';\nimport { modelConfigSchema } from './stored-agents';\n\n// ============================================================================\n// Path Parameter Schemas\n// ============================================================================\n\nexport const storedScorerIdPathParams = z.object({\n storedScorerId: z.string().describe('Unique identifier for the stored scorer definition'),\n});\n\n// ============================================================================\n// Query Parameter Schemas\n// ============================================================================\n\nconst storageOrderBySchema = z.object({\n field: z.enum(['createdAt', 'updatedAt']).optional(),\n direction: z.enum(['ASC', 'DESC']).optional(),\n});\n\nexport { statusQuerySchema };\n\nexport const listStoredScorersQuerySchema = createPagePaginationSchema(100).extend({\n orderBy: storageOrderBySchema.optional(),\n status: z\n .enum(['draft', 'published', 'archived'])\n .optional()\n .default('published')\n .describe('Filter scorers by status (defaults to published)'),\n authorId: z.string().optional().describe('Filter scorers by author identifier'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Filter scorers by metadata key-value pairs'),\n});\n\n// ============================================================================\n// Body Parameter Schemas\n// ============================================================================\n\nconst samplingConfigSchema = z.union([\n z.object({ type: z.literal('none') }),\n z.object({ type: z.literal('ratio'), rate: z.number().min(0).max(1) }),\n]);\n\nconst scorerTypeEnum = z\n .enum([\n 'llm-judge',\n 'answer-relevancy',\n 'answer-similarity',\n 'bias',\n 'context-precision',\n 'context-relevance',\n 'faithfulness',\n 'hallucination',\n 'noise-sensitivity',\n 'prompt-alignment',\n 'tool-call-accuracy',\n 'toxicity',\n ])\n .describe('Scorer type: llm-judge for custom, or a preset type name');\n\nconst snapshotConfigSchema = z.object({\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional().describe('Model configuration for LLM judge'),\n instructions: z.string().optional().describe('System instructions for the judge LLM (used when type is llm-judge)'),\n scoreRange: z\n .object({\n min: z.number().optional().describe('Minimum score value (default: 0)'),\n max: z.number().optional().describe('Maximum score value (default: 1)'),\n })\n .optional()\n .describe('Score range configuration (used when type is llm-judge)'),\n presetConfig: z.record(z.string(), z.unknown()).optional().describe('Serializable config options for preset scorers'),\n defaultSampling: samplingConfigSchema.optional().describe('Default sampling configuration'),\n});\n\nexport const createStoredScorerBodySchema = z\n .object({\n id: z.string().optional().describe('Unique identifier. If not provided, derived from name.'),\n authorId: z.string().optional().describe('Author identifier for multi-tenant filtering'),\n metadata: z.record(z.string(), z.unknown()).optional().describe('Additional metadata for the scorer'),\n })\n .merge(snapshotConfigSchema);\n\nexport const updateStoredScorerBodySchema = z\n .object({\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n })\n .partial()\n .merge(snapshotConfigSchema.partial());\n\n// ============================================================================\n// Response Schemas\n// ============================================================================\n\nexport const storedScorerSchema = z.object({\n id: z.string(),\n status: z.string().describe('Scorer status: draft, published, or archived'),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n name: z.string().describe('Name of the scorer'),\n description: z.string().optional().describe('Description of the scorer'),\n type: scorerTypeEnum,\n model: modelConfigSchema.optional(),\n instructions: z.string().optional().describe('System instructions for the judge LLM'),\n scoreRange: z\n .object({\n min: z.number().optional(),\n max: z.number().optional(),\n })\n .optional(),\n presetConfig: z.record(z.string(), z.unknown()).optional(),\n defaultSampling: samplingConfigSchema.optional(),\n});\n\nexport const listStoredScorersResponseSchema = paginationInfoSchema.extend({\n scorerDefinitions: z.array(storedScorerSchema),\n});\n\nexport const getStoredScorerResponseSchema = storedScorerSchema;\nexport const createStoredScorerResponseSchema = storedScorerSchema;\n\nexport const updateStoredScorerResponseSchema = z.union([\n z.object({\n id: z.string(),\n status: z.string(),\n activeVersionId: z.string().optional(),\n authorId: z.string().optional(),\n metadata: z.record(z.string(), z.unknown()).optional(),\n createdAt: z.coerce.date(),\n updatedAt: z.coerce.date(),\n }),\n storedScorerSchema,\n]);\n\nexport const deleteStoredScorerResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n});\n"]}
|