@mastra/server 1.33.0-alpha.5 → 1.33.0-alpha.7
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 +159 -0
- package/dist/{api-schema-manifest-OBRC34LA.js → api-schema-manifest-JLJ555JD.js} +4 -4
- package/dist/{api-schema-manifest-OBRC34LA.js.map → api-schema-manifest-JLJ555JD.js.map} +1 -1
- package/dist/{api-schema-manifest-MWMQI6TE.cjs → api-schema-manifest-QMJFKSSQ.cjs} +6 -6
- package/dist/{api-schema-manifest-MWMQI6TE.cjs.map → api-schema-manifest-QMJFKSSQ.cjs.map} +1 -1
- package/dist/{chunk-EIJLTW5X.js → chunk-2S4WCY5N.js} +4 -4
- package/dist/{chunk-EIJLTW5X.js.map → chunk-2S4WCY5N.js.map} +1 -1
- package/dist/{chunk-3J5YIIAC.js → chunk-34UYZN53.js} +4 -4
- package/dist/{chunk-3J5YIIAC.js.map → chunk-34UYZN53.js.map} +1 -1
- package/dist/{chunk-2RX6OJBY.js → chunk-3EK2EVVE.js} +4 -4
- package/dist/{chunk-2RX6OJBY.js.map → chunk-3EK2EVVE.js.map} +1 -1
- package/dist/{chunk-XKGJU4H3.js → chunk-3OTCA7TP.js} +3 -3
- package/dist/{chunk-XKGJU4H3.js.map → chunk-3OTCA7TP.js.map} +1 -1
- package/dist/{chunk-LYDIFPB2.js → chunk-4NPFEKIP.js} +4 -4
- package/dist/{chunk-LYDIFPB2.js.map → chunk-4NPFEKIP.js.map} +1 -1
- package/dist/{chunk-XMHZ4DSE.js → chunk-5FHBVBU2.js} +3 -3
- package/dist/{chunk-XMHZ4DSE.js.map → chunk-5FHBVBU2.js.map} +1 -1
- package/dist/{chunk-EFW6MWXU.cjs → chunk-5XW4MKE6.cjs} +22 -2
- package/dist/chunk-5XW4MKE6.cjs.map +1 -0
- package/dist/{chunk-MW23D33F.cjs → chunk-6DAZZPVO.cjs} +38 -38
- package/dist/{chunk-MW23D33F.cjs.map → chunk-6DAZZPVO.cjs.map} +1 -1
- package/dist/{chunk-D3DCFLTS.js → chunk-6ECVA7WE.js} +3 -3
- package/dist/{chunk-D3DCFLTS.js.map → chunk-6ECVA7WE.js.map} +1 -1
- package/dist/{chunk-7BXQ2HFG.cjs → chunk-6ICH4PZY.cjs} +16 -16
- package/dist/{chunk-7BXQ2HFG.cjs.map → chunk-6ICH4PZY.cjs.map} +1 -1
- package/dist/{chunk-MLEUYQFZ.js → chunk-6IR53OXN.js} +4 -4
- package/dist/{chunk-MLEUYQFZ.js.map → chunk-6IR53OXN.js.map} +1 -1
- package/dist/{chunk-GG537BE6.cjs → chunk-6PJXFSA6.cjs} +77 -77
- package/dist/{chunk-GG537BE6.cjs.map → chunk-6PJXFSA6.cjs.map} +1 -1
- package/dist/{chunk-64YJOWH2.cjs → chunk-72W42JL4.cjs} +5 -5
- package/dist/{chunk-64YJOWH2.cjs.map → chunk-72W42JL4.cjs.map} +1 -1
- package/dist/{chunk-DBY645PQ.cjs → chunk-7MXANTMR.cjs} +12 -12
- package/dist/{chunk-DBY645PQ.cjs.map → chunk-7MXANTMR.cjs.map} +1 -1
- package/dist/{chunk-OMOR5OUN.js → chunk-7QLLMDX3.js} +5 -5
- package/dist/{chunk-OMOR5OUN.js.map → chunk-7QLLMDX3.js.map} +1 -1
- package/dist/{chunk-27MTROCI.js → chunk-7UMTLDZF.js} +108 -6
- package/dist/chunk-7UMTLDZF.js.map +1 -0
- package/dist/{chunk-3S77SMGK.js → chunk-7UYUFWJS.js} +44 -44
- package/dist/chunk-7UYUFWJS.js.map +1 -0
- package/dist/chunk-7Y6MST2S.cjs +636 -0
- package/dist/chunk-7Y6MST2S.cjs.map +1 -0
- package/dist/{chunk-GWLMGMHI.cjs → chunk-AHKXIRNB.cjs} +145 -117
- package/dist/chunk-AHKXIRNB.cjs.map +1 -0
- package/dist/{chunk-QICD4OAR.cjs → chunk-AMZMBCKG.cjs} +10 -10
- package/dist/{chunk-QICD4OAR.cjs.map → chunk-AMZMBCKG.cjs.map} +1 -1
- package/dist/{chunk-XCXGX26I.cjs → chunk-AWXCTLMK.cjs} +11 -11
- package/dist/{chunk-XCXGX26I.cjs.map → chunk-AWXCTLMK.cjs.map} +1 -1
- package/dist/chunk-B3CHYE7C.js +549 -0
- package/dist/chunk-B3CHYE7C.js.map +1 -0
- package/dist/{chunk-IQMLYFOO.cjs → chunk-BGRKLLHE.cjs} +6 -6
- package/dist/{chunk-IQMLYFOO.cjs.map → chunk-BGRKLLHE.cjs.map} +1 -1
- package/dist/{chunk-6ZSBLNO2.cjs → chunk-BLK2XYVU.cjs} +10 -10
- package/dist/{chunk-6ZSBLNO2.cjs.map → chunk-BLK2XYVU.cjs.map} +1 -1
- package/dist/{chunk-UVLQSMYF.js → chunk-C45QKFMT.js} +40 -38
- package/dist/chunk-C45QKFMT.js.map +1 -0
- package/dist/{chunk-GI74MHRA.js → chunk-C7Q5IMST.js} +3 -3
- package/dist/{chunk-GI74MHRA.js.map → chunk-C7Q5IMST.js.map} +1 -1
- package/dist/{chunk-WC3F3EA5.cjs → chunk-CXWOBZOJ.cjs} +18 -18
- package/dist/{chunk-WC3F3EA5.cjs.map → chunk-CXWOBZOJ.cjs.map} +1 -1
- package/dist/{chunk-UWN75FKT.js → chunk-DXZFPYNO.js} +4 -4
- package/dist/{chunk-UWN75FKT.js.map → chunk-DXZFPYNO.js.map} +1 -1
- package/dist/{chunk-4OJDWKDW.js → chunk-E55OUW7R.js} +45 -70
- package/dist/chunk-E55OUW7R.js.map +1 -0
- package/dist/{chunk-TRB4NGQ3.cjs → chunk-E74QCKFN.cjs} +6 -6
- package/dist/{chunk-TRB4NGQ3.cjs.map → chunk-E74QCKFN.cjs.map} +1 -1
- package/dist/{chunk-D4XVXXDX.js → chunk-EWN5J4RH.js} +7 -7
- package/dist/{chunk-D4XVXXDX.js.map → chunk-EWN5J4RH.js.map} +1 -1
- package/dist/chunk-F3HP5HM6.cjs +998 -0
- package/dist/chunk-F3HP5HM6.cjs.map +1 -0
- package/dist/{chunk-BBX7Q7UG.cjs → chunk-FST7LM2Z.cjs} +83 -32
- package/dist/chunk-FST7LM2Z.cjs.map +1 -0
- package/dist/{chunk-247ZCPZW.js → chunk-GCR6GN77.js} +6 -6
- package/dist/{chunk-247ZCPZW.js.map → chunk-GCR6GN77.js.map} +1 -1
- package/dist/{chunk-LVWQGVPZ.js → chunk-GKN4IFE7.js} +3 -3
- package/dist/{chunk-LVWQGVPZ.js.map → chunk-GKN4IFE7.js.map} +1 -1
- package/dist/{chunk-ZMQTGPEU.js → chunk-GP45BMSR.js} +3 -3
- package/dist/{chunk-ZMQTGPEU.js.map → chunk-GP45BMSR.js.map} +1 -1
- package/dist/{chunk-GDACR4PY.js → chunk-HCIKFLLE.js} +2 -2
- package/dist/{chunk-GDACR4PY.js.map → chunk-HCIKFLLE.js.map} +1 -1
- package/dist/{chunk-J4FVO25L.cjs → chunk-HFF6QRLL.cjs} +6 -6
- package/dist/{chunk-J4FVO25L.cjs.map → chunk-HFF6QRLL.cjs.map} +1 -1
- package/dist/{chunk-IUXM3WA2.js → chunk-HLDBO2H6.js} +3 -3
- package/dist/{chunk-IUXM3WA2.js.map → chunk-HLDBO2H6.js.map} +1 -1
- package/dist/{chunk-767P6IDT.cjs → chunk-HN23LS75.cjs} +147 -147
- package/dist/chunk-HN23LS75.cjs.map +1 -0
- package/dist/{chunk-HERDIEC2.cjs → chunk-HNV2E454.cjs} +3 -3
- package/dist/{chunk-HERDIEC2.cjs.map → chunk-HNV2E454.cjs.map} +1 -1
- package/dist/{chunk-7756JXUH.cjs → chunk-HYYXUP35.cjs} +2 -2
- package/dist/{chunk-7756JXUH.cjs.map → chunk-HYYXUP35.cjs.map} +1 -1
- package/dist/{chunk-P2QL4REX.cjs → chunk-ICJ2ZVI2.cjs} +13 -13
- package/dist/{chunk-P2QL4REX.cjs.map → chunk-ICJ2ZVI2.cjs.map} +1 -1
- package/dist/{chunk-OSXOHBCO.js → chunk-IJFWBMHN.js} +4 -4
- package/dist/{chunk-OSXOHBCO.js.map → chunk-IJFWBMHN.js.map} +1 -1
- package/dist/{chunk-UOC4K3RU.js → chunk-JOUPK2UV.js} +3 -3
- package/dist/{chunk-UOC4K3RU.js.map → chunk-JOUPK2UV.js.map} +1 -1
- package/dist/{chunk-MZFFAVXZ.cjs → chunk-KFEM2S5D.cjs} +10 -10
- package/dist/{chunk-MZFFAVXZ.cjs.map → chunk-KFEM2S5D.cjs.map} +1 -1
- package/dist/{chunk-6Y4L2O5X.cjs → chunk-KRMMYAXW.cjs} +10 -10
- package/dist/{chunk-6Y4L2O5X.cjs.map → chunk-KRMMYAXW.cjs.map} +1 -1
- package/dist/{chunk-V67XVMFK.cjs → chunk-KUBAQ732.cjs} +10 -10
- package/dist/{chunk-V67XVMFK.cjs.map → chunk-KUBAQ732.cjs.map} +1 -1
- package/dist/{chunk-MF6GSHTO.js → chunk-LRYHYARK.js} +4 -4
- package/dist/{chunk-MF6GSHTO.js.map → chunk-LRYHYARK.js.map} +1 -1
- package/dist/{chunk-IYEGDP3G.js → chunk-M7DF3D2M.js} +3 -3
- package/dist/{chunk-IYEGDP3G.js.map → chunk-M7DF3D2M.js.map} +1 -1
- package/dist/{chunk-32OIQVBN.cjs → chunk-MAG4W3GZ.cjs} +8 -8
- package/dist/{chunk-32OIQVBN.cjs.map → chunk-MAG4W3GZ.cjs.map} +1 -1
- package/dist/{chunk-AV3ZGKEA.cjs → chunk-MCS43WKI.cjs} +10 -10
- package/dist/{chunk-AV3ZGKEA.cjs.map → chunk-MCS43WKI.cjs.map} +1 -1
- package/dist/{chunk-MUMWXLVB.cjs → chunk-MWXGGCHD.cjs} +10 -10
- package/dist/{chunk-MUMWXLVB.cjs.map → chunk-MWXGGCHD.cjs.map} +1 -1
- package/dist/{chunk-A3SH6O3E.js → chunk-NB7LJMYF.js} +3 -3
- package/dist/{chunk-A3SH6O3E.js.map → chunk-NB7LJMYF.js.map} +1 -1
- package/dist/{chunk-TZFIX2NI.js → chunk-NWD2SPUH.js} +4 -4
- package/dist/{chunk-TZFIX2NI.js.map → chunk-NWD2SPUH.js.map} +1 -1
- package/dist/{chunk-RNRF4YCD.cjs → chunk-OAE7ZFYO.cjs} +24 -24
- package/dist/{chunk-RNRF4YCD.cjs.map → chunk-OAE7ZFYO.cjs.map} +1 -1
- package/dist/{chunk-DWQGAKMB.cjs → chunk-OAWMKZCM.cjs} +11 -11
- package/dist/{chunk-DWQGAKMB.cjs.map → chunk-OAWMKZCM.cjs.map} +1 -1
- package/dist/{chunk-PALNMAC6.js → chunk-P5H4ILLH.js} +3 -3
- package/dist/{chunk-PALNMAC6.js.map → chunk-P5H4ILLH.js.map} +1 -1
- package/dist/{chunk-2XNLZANZ.cjs → chunk-PM3UPQWH.cjs} +11 -11
- package/dist/{chunk-2XNLZANZ.cjs.map → chunk-PM3UPQWH.cjs.map} +1 -1
- package/dist/{chunk-NHQKZEVJ.js → chunk-PX7NE2KG.js} +6 -6
- package/dist/{chunk-NHQKZEVJ.js.map → chunk-PX7NE2KG.js.map} +1 -1
- package/dist/{chunk-OCFLDDPE.js → chunk-PYT4SLHO.js} +3 -3
- package/dist/{chunk-OCFLDDPE.js.map → chunk-PYT4SLHO.js.map} +1 -1
- package/dist/{chunk-UP6HQJYH.js → chunk-Q3JFNANT.js} +4 -4
- package/dist/{chunk-UP6HQJYH.js.map → chunk-Q3JFNANT.js.map} +1 -1
- package/dist/{chunk-S65AMBAF.js → chunk-QJD675UA.js} +83 -32
- package/dist/chunk-QJD675UA.js.map +1 -0
- package/dist/{chunk-IQAV36GV.js → chunk-RVAPXLP2.js} +3 -3
- package/dist/{chunk-IQAV36GV.js.map → chunk-RVAPXLP2.js.map} +1 -1
- package/dist/{chunk-I45VWZBS.js → chunk-S4L4CSQD.js} +3 -3
- package/dist/{chunk-I45VWZBS.js.map → chunk-S4L4CSQD.js.map} +1 -1
- package/dist/{chunk-YCL2MS5R.js → chunk-SOH5VORA.js} +3 -3
- package/dist/{chunk-YCL2MS5R.js.map → chunk-SOH5VORA.js.map} +1 -1
- package/dist/{chunk-R2ODPDKE.cjs → chunk-SOQKSSPB.cjs} +74 -74
- package/dist/{chunk-R2ODPDKE.cjs.map → chunk-SOQKSSPB.cjs.map} +1 -1
- package/dist/{chunk-JNIAMBSQ.js → chunk-STNEFHHA.js} +4 -4
- package/dist/{chunk-JNIAMBSQ.js.map → chunk-STNEFHHA.js.map} +1 -1
- package/dist/{chunk-BQDKIKTT.cjs → chunk-SX3C7B3A.cjs} +28 -28
- package/dist/{chunk-BQDKIKTT.cjs.map → chunk-SX3C7B3A.cjs.map} +1 -1
- package/dist/{chunk-76TPFVVB.js → chunk-SYDZFUZI.js} +3 -3
- package/dist/{chunk-76TPFVVB.js.map → chunk-SYDZFUZI.js.map} +1 -1
- package/dist/{chunk-D5H4LH6V.cjs → chunk-T3X7ZXVR.cjs} +168 -64
- package/dist/chunk-T3X7ZXVR.cjs.map +1 -0
- package/dist/{chunk-N2JR3ER7.cjs → chunk-TFJZGWXX.cjs} +18 -18
- package/dist/{chunk-N2JR3ER7.cjs.map → chunk-TFJZGWXX.cjs.map} +1 -1
- package/dist/chunk-TLLV2JP5.js +983 -0
- package/dist/chunk-TLLV2JP5.js.map +1 -0
- package/dist/chunk-TTJ3DYZH.cjs +557 -0
- package/dist/chunk-TTJ3DYZH.cjs.map +1 -0
- package/dist/{chunk-LWBJ5GUU.cjs → chunk-UMXIU6E3.cjs} +7 -7
- package/dist/{chunk-LWBJ5GUU.cjs.map → chunk-UMXIU6E3.cjs.map} +1 -1
- package/dist/{chunk-E5BDG6JI.js → chunk-VESPCO5X.js} +3 -3
- package/dist/{chunk-E5BDG6JI.js.map → chunk-VESPCO5X.js.map} +1 -1
- package/dist/{chunk-BMACQWOU.js → chunk-VGNQKFWM.js} +3 -3
- package/dist/{chunk-BMACQWOU.js.map → chunk-VGNQKFWM.js.map} +1 -1
- package/dist/{chunk-WYH3OM52.cjs → chunk-VWBVA272.cjs} +5 -5
- package/dist/{chunk-WYH3OM52.cjs.map → chunk-VWBVA272.cjs.map} +1 -1
- package/dist/{chunk-GTHHWVCO.cjs → chunk-VZV7DUW7.cjs} +13 -13
- package/dist/{chunk-GTHHWVCO.cjs.map → chunk-VZV7DUW7.cjs.map} +1 -1
- package/dist/{chunk-JX5CEUXO.js → chunk-WE5GUI23.js} +3 -3
- package/dist/{chunk-JX5CEUXO.js.map → chunk-WE5GUI23.js.map} +1 -1
- package/dist/{chunk-2X3CMUG3.cjs → chunk-WLDDOYXP.cjs} +11 -11
- package/dist/{chunk-2X3CMUG3.cjs.map → chunk-WLDDOYXP.cjs.map} +1 -1
- package/dist/{chunk-NPNRCLYK.js → chunk-WN62DURP.js} +49 -21
- package/dist/chunk-WN62DURP.js.map +1 -0
- package/dist/{chunk-AH7FPYBH.cjs → chunk-WYQDPZNZ.cjs} +7 -7
- package/dist/{chunk-AH7FPYBH.cjs.map → chunk-WYQDPZNZ.cjs.map} +1 -1
- package/dist/{chunk-MOH4DZJP.cjs → chunk-XUFBFMUU.cjs} +71 -96
- package/dist/chunk-XUFBFMUU.cjs.map +1 -0
- package/dist/{chunk-BK2PRWVJ.cjs → chunk-Y5LNMKEY.cjs} +5 -5
- package/dist/{chunk-BK2PRWVJ.cjs.map → chunk-Y5LNMKEY.cjs.map} +1 -1
- package/dist/{chunk-OJRAH5VV.js → chunk-YARY4I5U.js} +18 -3
- package/dist/chunk-YARY4I5U.js.map +1 -0
- package/dist/{chunk-AJV6ZSUS.cjs → chunk-YN57WYLS.cjs} +11 -11
- package/dist/{chunk-AJV6ZSUS.cjs.map → chunk-YN57WYLS.cjs.map} +1 -1
- package/dist/{chunk-VQMQBGDO.cjs → chunk-YQILRC5Y.cjs} +10 -10
- package/dist/{chunk-VQMQBGDO.cjs.map → chunk-YQILRC5Y.cjs.map} +1 -1
- package/dist/{chunk-SZOC7JGR.cjs → chunk-Z7FXNI2N.cjs} +52 -52
- package/dist/{chunk-SZOC7JGR.cjs.map → chunk-Z7FXNI2N.cjs.map} +1 -1
- package/dist/{chunk-ING7J2GB.js → chunk-ZO7SOILM.js} +4 -4
- package/dist/{chunk-ING7J2GB.js.map → chunk-ZO7SOILM.js.map} +1 -1
- package/dist/{chunk-XOQX6DBB.cjs → chunk-ZOILZWQD.cjs} +6 -6
- package/dist/{chunk-XOQX6DBB.cjs.map → chunk-ZOILZWQD.cjs.map} +1 -1
- package/dist/{chunk-AN5GEDCI.js → chunk-ZSGVBBC4.js} +3 -3
- package/dist/{chunk-AN5GEDCI.js.map → chunk-ZSGVBBC4.js.map} +1 -1
- package/dist/{dist-6SY6NNDU.cjs → dist-22O7FBGT.cjs} +30 -30
- package/dist/{dist-6SY6NNDU.cjs.map → dist-22O7FBGT.cjs.map} +1 -1
- package/dist/{dist-RVKG65AN.js → dist-2APID4CW.js} +3 -3
- package/dist/{dist-RVKG65AN.js.map → dist-2APID4CW.js.map} +1 -1
- package/dist/{dist-GKNLMW5G.js → dist-3GSFJQXK.js} +3 -3
- package/dist/{dist-GKNLMW5G.js.map → dist-3GSFJQXK.js.map} +1 -1
- package/dist/{dist-47C5ZLC7.js → dist-7Q7BE2C5.js} +3 -3
- package/dist/{dist-47C5ZLC7.js.map → dist-7Q7BE2C5.js.map} +1 -1
- package/dist/{dist-IAVEFOC6.cjs → dist-7X6EJANH.cjs} +26 -26
- package/dist/{dist-IAVEFOC6.cjs.map → dist-7X6EJANH.cjs.map} +1 -1
- package/dist/dist-CC743ARY.cjs +16 -0
- package/dist/{dist-S6SWOZKE.cjs.map → dist-CC743ARY.cjs.map} +1 -1
- package/dist/{dist-VHDOPJW6.cjs → dist-DGCZK6BK.cjs} +20 -20
- package/dist/{dist-VHDOPJW6.cjs.map → dist-DGCZK6BK.cjs.map} +1 -1
- package/dist/{dist-BSWYTOHE.js → dist-F77PFLNC.js} +3 -3
- package/dist/{dist-BSWYTOHE.js.map → dist-F77PFLNC.js.map} +1 -1
- package/dist/{dist-LTT5BP7F.cjs → dist-SPP3XCYT.cjs} +28 -28
- package/dist/{dist-LTT5BP7F.cjs.map → dist-SPP3XCYT.cjs.map} +1 -1
- package/dist/dist-SPTCWKCU.js +3 -0
- package/dist/{dist-KEJZY3UJ.js.map → dist-SPTCWKCU.js.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{observational-memory-KH7G7Y6B-Y3XQXW3K.cjs → observational-memory-IP2RVQQG-5IHDRYAB.cjs} +26 -26
- package/dist/{observational-memory-KH7G7Y6B-Y3XQXW3K.cjs.map → observational-memory-IP2RVQQG-5IHDRYAB.cjs.map} +1 -1
- package/dist/{observational-memory-KH7G7Y6B-QKEOJZME.js → observational-memory-IP2RVQQG-DIZILT73.js} +3 -3
- package/dist/{observational-memory-KH7G7Y6B-QKEOJZME.js.map → observational-memory-IP2RVQQG-DIZILT73.js.map} +1 -1
- package/dist/server/auth/index.cjs +15 -15
- package/dist/server/auth/index.js +1 -1
- package/dist/server/constants.d.ts +5 -0
- package/dist/server/constants.d.ts.map +1 -1
- package/dist/server/handlers/a2a.cjs +14 -14
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +16 -16
- package/dist/server/handlers/agent-builder.js +1 -1
- package/dist/server/handlers/agent-versions.cjs +8 -8
- package/dist/server/handlers/agent-versions.js +1 -1
- package/dist/server/handlers/agents.cjs +39 -39
- package/dist/server/handlers/agents.d.ts.map +1 -1
- package/dist/server/handlers/agents.js +1 -1
- package/dist/server/handlers/auth.cjs +11 -11
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/background-tasks.cjs +4 -4
- package/dist/server/handlers/background-tasks.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/datasets.cjs +26 -26
- package/dist/server/handlers/datasets.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/mcp.cjs +11 -11
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +27 -27
- package/dist/server/handlers/memory.js +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +28 -28
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability.cjs +38 -38
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +3 -3
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +4 -4
- package/dist/server/handlers/processors.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +8 -8
- package/dist/server/handlers/prompt-block-versions.js +1 -1
- package/dist/server/handlers/responses.adapter.cjs +18 -14
- package/dist/server/handlers/responses.adapter.d.ts +96 -2
- package/dist/server/handlers/responses.adapter.d.ts.map +1 -1
- package/dist/server/handlers/responses.adapter.js +1 -1
- package/dist/server/handlers/responses.cjs +4 -4
- package/dist/server/handlers/responses.d.ts.map +1 -1
- package/dist/server/handlers/responses.js +1 -1
- package/dist/server/handlers/responses.storage.cjs +8 -8
- package/dist/server/handlers/responses.storage.d.ts +4 -2
- package/dist/server/handlers/responses.storage.d.ts.map +1 -1
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/schedules.cjs +6 -6
- package/dist/server/handlers/schedules.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +8 -8
- package/dist/server/handlers/scorer-versions.js +1 -1
- package/dist/server/handlers/scores.cjs +7 -7
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agents.cjs +7 -7
- 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-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 +5 -5
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +1 -1
- package/dist/server/handlers/utils.cjs +10 -10
- package/dist/server/handlers/utils.js +1 -1
- package/dist/server/handlers/vector.cjs +16 -16
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/voice.cjs +8 -8
- package/dist/server/handlers/voice.js +1 -1
- package/dist/server/handlers/workflows.cjs +32 -24
- package/dist/server/handlers/workflows.d.ts +83 -0
- package/dist/server/handlers/workflows.d.ts.map +1 -1
- package/dist/server/handlers/workflows.js +1 -1
- package/dist/server/handlers/workspace.cjs +26 -26
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +30 -30
- package/dist/server/handlers.js +15 -15
- package/dist/server/server-adapter/index.cjs +55 -28
- package/dist/server/server-adapter/index.cjs.map +1 -1
- package/dist/server/server-adapter/index.d.ts +5 -1
- package/dist/server/server-adapter/index.d.ts.map +1 -1
- package/dist/server/server-adapter/index.js +19 -11
- package/dist/server/server-adapter/index.js.map +1 -1
- package/dist/server/server-adapter/routes/workflows.d.ts +66 -1
- package/dist/server/server-adapter/routes/workflows.d.ts.map +1 -1
- package/package.json +6 -6
- package/dist/chunk-27MTROCI.js.map +0 -1
- package/dist/chunk-3S77SMGK.js.map +0 -1
- package/dist/chunk-4OJDWKDW.js.map +0 -1
- package/dist/chunk-767P6IDT.cjs.map +0 -1
- package/dist/chunk-AJYJ4H7P.js +0 -438
- package/dist/chunk-AJYJ4H7P.js.map +0 -1
- package/dist/chunk-BBX7Q7UG.cjs.map +0 -1
- package/dist/chunk-D5H4LH6V.cjs.map +0 -1
- package/dist/chunk-DFSUBEGE.js +0 -226
- package/dist/chunk-DFSUBEGE.js.map +0 -1
- package/dist/chunk-EFW6MWXU.cjs.map +0 -1
- package/dist/chunk-GWLMGMHI.cjs.map +0 -1
- package/dist/chunk-MOH4DZJP.cjs.map +0 -1
- package/dist/chunk-NPNRCLYK.js.map +0 -1
- package/dist/chunk-OJ72T77G.cjs +0 -452
- package/dist/chunk-OJ72T77G.cjs.map +0 -1
- package/dist/chunk-OJRAH5VV.js.map +0 -1
- package/dist/chunk-PJYQMPXT.cjs +0 -234
- package/dist/chunk-PJYQMPXT.cjs.map +0 -1
- package/dist/chunk-S65AMBAF.js.map +0 -1
- package/dist/chunk-UVLQSMYF.js.map +0 -1
- package/dist/chunk-Y5FNAVOR.cjs +0 -634
- package/dist/chunk-Y5FNAVOR.cjs.map +0 -1
- package/dist/dist-KEJZY3UJ.js +0 -3
- package/dist/dist-S6SWOZKE.cjs +0 -16
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunk72W42JL4_cjs = require('./chunk-72W42JL4.cjs');
|
|
4
|
+
var chunk64ITUOXI_cjs = require('./chunk-64ITUOXI.cjs');
|
|
5
|
+
|
|
6
|
+
// src/server/handlers/responses.storage.ts
|
|
7
|
+
function isPlainObject(value) {
|
|
8
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
async function getAgentMemoryStore({
|
|
11
|
+
agent,
|
|
12
|
+
requestContext
|
|
13
|
+
}) {
|
|
14
|
+
const memory = await agent.getMemory({ requestContext });
|
|
15
|
+
if (!memory) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return await memory.storage.getStore("memory") ?? null;
|
|
20
|
+
} catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
function readResponseTurnRecordMetadata(message) {
|
|
25
|
+
const mastraMetadata = isPlainObject(message.content?.metadata?.mastra) ? message.content.metadata.mastra : null;
|
|
26
|
+
const responseMetadata = mastraMetadata && isPlainObject(mastraMetadata.response) ? mastraMetadata.response : null;
|
|
27
|
+
if (!responseMetadata || typeof responseMetadata.agentId !== "string" || typeof responseMetadata.model !== "string" || typeof responseMetadata.createdAt !== "number" || responseMetadata.completedAt !== null && typeof responseMetadata.completedAt !== "number" || responseMetadata.instructions !== void 0 && typeof responseMetadata.instructions !== "string" || responseMetadata.text !== void 0 && (!isPlainObject(responseMetadata.text) || !isPlainObject(responseMetadata.text.format)) || responseMetadata.previousResponseId !== void 0 && typeof responseMetadata.previousResponseId !== "string" || !Array.isArray(responseMetadata.tools) || typeof responseMetadata.store !== "boolean" || !Array.isArray(responseMetadata.messageIds) || responseMetadata.outputItems !== void 0 && !Array.isArray(responseMetadata.outputItems)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
agentId: responseMetadata.agentId,
|
|
32
|
+
model: responseMetadata.model,
|
|
33
|
+
createdAt: responseMetadata.createdAt,
|
|
34
|
+
completedAt: responseMetadata.completedAt,
|
|
35
|
+
status: responseMetadata.status === "completed" ? "completed" : "incomplete",
|
|
36
|
+
usage: responseMetadata.usage,
|
|
37
|
+
instructions: responseMetadata.instructions,
|
|
38
|
+
text: responseMetadata.text,
|
|
39
|
+
previousResponseId: responseMetadata.previousResponseId,
|
|
40
|
+
providerOptions: responseMetadata.providerOptions,
|
|
41
|
+
tools: responseMetadata.tools,
|
|
42
|
+
store: responseMetadata.store,
|
|
43
|
+
messageIds: responseMetadata.messageIds.filter((value) => typeof value === "string"),
|
|
44
|
+
outputItems: responseMetadata.outputItems
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function writeResponseTurnRecordMetadata(message, metadata) {
|
|
48
|
+
const contentMetadata = isPlainObject(message.content?.metadata) ? message.content.metadata : {};
|
|
49
|
+
const mastraMetadata = isPlainObject(contentMetadata.mastra) ? contentMetadata.mastra : {};
|
|
50
|
+
return {
|
|
51
|
+
...message,
|
|
52
|
+
content: {
|
|
53
|
+
...message.content,
|
|
54
|
+
metadata: {
|
|
55
|
+
...contentMetadata,
|
|
56
|
+
mastra: {
|
|
57
|
+
...mastraMetadata,
|
|
58
|
+
response: metadata
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async function findResponseTurnRecord({
|
|
65
|
+
agent,
|
|
66
|
+
responseId,
|
|
67
|
+
requestContext
|
|
68
|
+
}) {
|
|
69
|
+
const memoryStore = await getAgentMemoryStore({ agent, requestContext });
|
|
70
|
+
if (!memoryStore) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const effectiveResourceId = chunk72W42JL4_cjs.getEffectiveResourceId(requestContext, void 0);
|
|
74
|
+
const { messages: matchedMessages } = await memoryStore.listMessagesById({ messageIds: [responseId] });
|
|
75
|
+
const message = matchedMessages[0];
|
|
76
|
+
if (!message || message.role !== "assistant") {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const metadata = readResponseTurnRecordMetadata(message);
|
|
80
|
+
if (!metadata || metadata.agentId !== agent.id) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
const thread = message.threadId ? await memoryStore.getThreadById({ threadId: message.threadId }) : null;
|
|
84
|
+
if (!thread) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
await chunk72W42JL4_cjs.validateThreadOwnership(thread, effectiveResourceId);
|
|
88
|
+
const messageIds = metadata.messageIds.length > 0 ? metadata.messageIds : [message.id];
|
|
89
|
+
const { messages: responseMessages } = await memoryStore.listMessagesById({ messageIds });
|
|
90
|
+
const messagesById = new Map(responseMessages.map((storedMessage) => [storedMessage.id, storedMessage]));
|
|
91
|
+
const orderedMessages = messageIds.map((messageId) => messagesById.get(messageId)).filter((storedMessage) => Boolean(storedMessage));
|
|
92
|
+
return { metadata, message, messages: orderedMessages, thread, memoryStore };
|
|
93
|
+
}
|
|
94
|
+
async function findResponseTurnRecordAcrossAgents({
|
|
95
|
+
mastra,
|
|
96
|
+
responseId,
|
|
97
|
+
requestContext
|
|
98
|
+
}) {
|
|
99
|
+
if (!mastra) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const agents = Object.values(mastra.listAgents());
|
|
103
|
+
for (const agent of agents) {
|
|
104
|
+
const match = await findResponseTurnRecord({ agent, responseId, requestContext });
|
|
105
|
+
if (match) {
|
|
106
|
+
return match;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
async function findConversationThreadAcrossAgents({
|
|
112
|
+
mastra,
|
|
113
|
+
conversationId,
|
|
114
|
+
requestContext
|
|
115
|
+
}) {
|
|
116
|
+
if (!mastra) {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
const effectiveResourceId = chunk72W42JL4_cjs.getEffectiveResourceId(requestContext, void 0);
|
|
120
|
+
const agents = Object.values(mastra.listAgents());
|
|
121
|
+
for (const agent of agents) {
|
|
122
|
+
const memoryStore = await getAgentMemoryStore({ agent, requestContext });
|
|
123
|
+
if (!memoryStore) {
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
const thread = await memoryStore.getThreadById({ threadId: conversationId });
|
|
127
|
+
if (!thread) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
await chunk72W42JL4_cjs.validateThreadOwnership(thread, effectiveResourceId);
|
|
131
|
+
return { thread, memoryStore };
|
|
132
|
+
}
|
|
133
|
+
return null;
|
|
134
|
+
}
|
|
135
|
+
function createSyntheticResponseMessage({
|
|
136
|
+
createdAt,
|
|
137
|
+
responseId,
|
|
138
|
+
text,
|
|
139
|
+
threadContext
|
|
140
|
+
}) {
|
|
141
|
+
return {
|
|
142
|
+
id: responseId,
|
|
143
|
+
role: "assistant",
|
|
144
|
+
type: "text",
|
|
145
|
+
createdAt: createdAt ?? /* @__PURE__ */ new Date(),
|
|
146
|
+
threadId: threadContext.threadId,
|
|
147
|
+
resourceId: threadContext.resourceId,
|
|
148
|
+
content: {
|
|
149
|
+
format: 2,
|
|
150
|
+
parts: text ? [{ type: "text", text }] : []
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function hasTextPart(message) {
|
|
155
|
+
return Boolean(
|
|
156
|
+
message.content?.parts?.some(
|
|
157
|
+
(part) => isPlainObject(part) && part.type === "text" && typeof part.text === "string" && part.text.length > 0
|
|
158
|
+
)
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
function isEmptyAssistantMessage(message) {
|
|
162
|
+
return message.role === "assistant" && Array.isArray(message.content?.parts) && message.content.parts.length === 0;
|
|
163
|
+
}
|
|
164
|
+
function hasToolInvocationPart(message) {
|
|
165
|
+
return Boolean(
|
|
166
|
+
message.content?.parts?.some(
|
|
167
|
+
(part) => isPlainObject(part) && part.type === "tool-invocation" && isPlainObject(part.toolInvocation)
|
|
168
|
+
)
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
function getMessageText(message) {
|
|
172
|
+
return message.content?.parts?.flatMap(
|
|
173
|
+
(part) => isPlainObject(part) && part.type === "text" && typeof part.text === "string" ? [part.text] : []
|
|
174
|
+
).join("") ?? "";
|
|
175
|
+
}
|
|
176
|
+
function getOutputMessageText(item) {
|
|
177
|
+
return item.content.map((part) => part.text).join("");
|
|
178
|
+
}
|
|
179
|
+
function normalizeFallbackComparisonText(text) {
|
|
180
|
+
return text.trim();
|
|
181
|
+
}
|
|
182
|
+
function matchesFallbackText(messageText, fallbackText) {
|
|
183
|
+
return messageText === fallbackText || normalizeFallbackComparisonText(messageText) === normalizeFallbackComparisonText(fallbackText);
|
|
184
|
+
}
|
|
185
|
+
function hasMatchingAssistantText(messages, item) {
|
|
186
|
+
const fallbackText = getOutputMessageText(item);
|
|
187
|
+
return messages.some(
|
|
188
|
+
(message) => message.role === "assistant" && hasTextPart(message) && matchesFallbackText(getMessageText(message), fallbackText)
|
|
189
|
+
);
|
|
190
|
+
}
|
|
191
|
+
function shouldReplaceAssistantText(messageText, fallbackText) {
|
|
192
|
+
const normalizedMessageText = normalizeFallbackComparisonText(messageText);
|
|
193
|
+
const normalizedFallbackText = normalizeFallbackComparisonText(fallbackText);
|
|
194
|
+
return normalizedFallbackText !== normalizedMessageText && (fallbackText.startsWith(messageText) || normalizedFallbackText.startsWith(normalizedMessageText));
|
|
195
|
+
}
|
|
196
|
+
function getAssistantMessageTexts(messages) {
|
|
197
|
+
return messages.flatMap(
|
|
198
|
+
(message) => message.role === "assistant" && hasTextPart(message) ? [getMessageText(message)] : []
|
|
199
|
+
);
|
|
200
|
+
}
|
|
201
|
+
function shouldAddFallbackMessageText(messages, item) {
|
|
202
|
+
const assistantTexts = getAssistantMessageTexts(messages);
|
|
203
|
+
if (assistantTexts.length === 0) {
|
|
204
|
+
return true;
|
|
205
|
+
}
|
|
206
|
+
const fallbackText = getOutputMessageText(item);
|
|
207
|
+
return assistantTexts.every((messageText) => shouldReplaceAssistantText(messageText, fallbackText));
|
|
208
|
+
}
|
|
209
|
+
function shouldReplaceAssistantTextWithFallback({
|
|
210
|
+
fallbackMessageTexts,
|
|
211
|
+
message,
|
|
212
|
+
textOnlyFallbackMessageTexts
|
|
213
|
+
}) {
|
|
214
|
+
if (message.role !== "assistant" || !hasTextPart(message)) {
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
const messageText = getMessageText(message);
|
|
218
|
+
if (!messageText) {
|
|
219
|
+
return false;
|
|
220
|
+
}
|
|
221
|
+
const comparisonTexts = hasToolInvocationPart(message) ? fallbackMessageTexts : textOnlyFallbackMessageTexts;
|
|
222
|
+
return [...comparisonTexts].some((fallbackText) => shouldReplaceAssistantText(messageText, fallbackText));
|
|
223
|
+
}
|
|
224
|
+
function replaceAssistantTextWithFallback({
|
|
225
|
+
fallbackMessageTexts,
|
|
226
|
+
message,
|
|
227
|
+
textOnlyFallbackMessageTexts
|
|
228
|
+
}) {
|
|
229
|
+
if (!shouldReplaceAssistantTextWithFallback({ fallbackMessageTexts, message, textOnlyFallbackMessageTexts })) {
|
|
230
|
+
return message;
|
|
231
|
+
}
|
|
232
|
+
const parts = message.content?.parts ?? [];
|
|
233
|
+
const remainingParts = parts.filter((part) => !(isPlainObject(part) && part.type === "text"));
|
|
234
|
+
return {
|
|
235
|
+
...message,
|
|
236
|
+
content: {
|
|
237
|
+
...message.content,
|
|
238
|
+
parts: remainingParts
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
function parseFunctionCallArguments(value) {
|
|
243
|
+
try {
|
|
244
|
+
return JSON.parse(value);
|
|
245
|
+
} catch {
|
|
246
|
+
return { __raw: value };
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function createSyntheticToolResultMessage({
|
|
250
|
+
baseMessage,
|
|
251
|
+
item,
|
|
252
|
+
responseId,
|
|
253
|
+
toolCall
|
|
254
|
+
}) {
|
|
255
|
+
return {
|
|
256
|
+
...baseMessage,
|
|
257
|
+
id: `${responseId}:tool-result:${item.call_id}`,
|
|
258
|
+
role: "tool",
|
|
259
|
+
type: "tool-result",
|
|
260
|
+
content: {
|
|
261
|
+
format: 2,
|
|
262
|
+
parts: [
|
|
263
|
+
{
|
|
264
|
+
type: "tool-invocation",
|
|
265
|
+
toolInvocation: {
|
|
266
|
+
state: "result",
|
|
267
|
+
toolCallId: item.call_id,
|
|
268
|
+
toolName: toolCall?.toolName ?? "unknown",
|
|
269
|
+
args: toolCall?.args ?? {},
|
|
270
|
+
result: item.output
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
]
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
function toMastraDBMessage(message) {
|
|
278
|
+
return message;
|
|
279
|
+
}
|
|
280
|
+
function createSyntheticMessagesFromOutputItems({
|
|
281
|
+
contextOutputItems,
|
|
282
|
+
outputItems,
|
|
283
|
+
responseId,
|
|
284
|
+
threadContext
|
|
285
|
+
}) {
|
|
286
|
+
const toolContextItems = contextOutputItems ?? outputItems;
|
|
287
|
+
const toolCallsById = new Map(
|
|
288
|
+
toolContextItems.flatMap(
|
|
289
|
+
(item) => item.type === "function_call" ? [[item.call_id, { args: parseFunctionCallArguments(item.arguments), toolName: item.name }]] : []
|
|
290
|
+
)
|
|
291
|
+
);
|
|
292
|
+
const baseCreatedAt = Date.now();
|
|
293
|
+
return outputItems.map((item, index) => {
|
|
294
|
+
const baseMessage = {
|
|
295
|
+
createdAt: new Date(baseCreatedAt + index),
|
|
296
|
+
threadId: threadContext.threadId,
|
|
297
|
+
resourceId: threadContext.resourceId
|
|
298
|
+
};
|
|
299
|
+
if (item.type === "function_call") {
|
|
300
|
+
return {
|
|
301
|
+
...baseMessage,
|
|
302
|
+
id: `${responseId}:tool-call:${item.call_id}`,
|
|
303
|
+
role: "assistant",
|
|
304
|
+
type: "tool-call",
|
|
305
|
+
content: {
|
|
306
|
+
format: 2,
|
|
307
|
+
parts: [
|
|
308
|
+
{
|
|
309
|
+
type: "tool-invocation",
|
|
310
|
+
toolInvocation: {
|
|
311
|
+
state: "call",
|
|
312
|
+
toolCallId: item.call_id,
|
|
313
|
+
toolName: item.name,
|
|
314
|
+
args: parseFunctionCallArguments(item.arguments)
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
]
|
|
318
|
+
}
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
if (item.type === "function_call_output") {
|
|
322
|
+
const toolCall = toolCallsById.get(item.call_id);
|
|
323
|
+
return toMastraDBMessage(createSyntheticToolResultMessage({ baseMessage, item, responseId, toolCall }));
|
|
324
|
+
}
|
|
325
|
+
return {
|
|
326
|
+
...baseMessage,
|
|
327
|
+
id: item.id,
|
|
328
|
+
role: "assistant",
|
|
329
|
+
type: "text",
|
|
330
|
+
content: {
|
|
331
|
+
format: 2,
|
|
332
|
+
parts: item.content.map((part) => ({ type: "text", text: part.text }))
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
function getToolInvocationParts(message) {
|
|
338
|
+
const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];
|
|
339
|
+
return parts.flatMap(
|
|
340
|
+
(part) => isPlainObject(part) && part.type === "tool-invocation" && isPlainObject(part.toolInvocation) ? [part.toolInvocation] : []
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
function getMissingFallbackOutputItems({
|
|
344
|
+
fallbackOutputItems = [],
|
|
345
|
+
messages
|
|
346
|
+
}) {
|
|
347
|
+
if (!fallbackOutputItems.length) {
|
|
348
|
+
return [];
|
|
349
|
+
}
|
|
350
|
+
const existingCallIds = /* @__PURE__ */ new Set();
|
|
351
|
+
const existingResultCallIds = /* @__PURE__ */ new Set();
|
|
352
|
+
for (const message of messages) {
|
|
353
|
+
for (const toolInvocation of getToolInvocationParts(message)) {
|
|
354
|
+
const toolCallId = typeof toolInvocation.toolCallId === "string" ? toolInvocation.toolCallId : null;
|
|
355
|
+
if (!toolCallId) {
|
|
356
|
+
continue;
|
|
357
|
+
}
|
|
358
|
+
if (message.role === "assistant" && (toolInvocation.args !== void 0 || toolInvocation.result === void 0)) {
|
|
359
|
+
existingCallIds.add(toolCallId);
|
|
360
|
+
}
|
|
361
|
+
if (toolInvocation.result !== void 0) {
|
|
362
|
+
existingResultCallIds.add(toolCallId);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
return fallbackOutputItems.filter((item) => {
|
|
367
|
+
if (item.type === "function_call") {
|
|
368
|
+
return !existingCallIds.has(item.call_id);
|
|
369
|
+
}
|
|
370
|
+
if (item.type === "function_call_output") {
|
|
371
|
+
return !existingResultCallIds.has(item.call_id);
|
|
372
|
+
}
|
|
373
|
+
if (item.type === "message") {
|
|
374
|
+
if (!item.content.some((part) => part.text.length > 0) || hasMatchingAssistantText(messages, item)) {
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
return shouldAddFallbackMessageText(messages, item);
|
|
378
|
+
}
|
|
379
|
+
return false;
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
function getFallbackOutputIdForMessage(message, responseId, fallbackOutputIds) {
|
|
383
|
+
for (const toolInvocation of getToolInvocationParts(message)) {
|
|
384
|
+
const toolCallId = typeof toolInvocation.toolCallId === "string" ? toolInvocation.toolCallId : null;
|
|
385
|
+
if (!toolCallId) {
|
|
386
|
+
continue;
|
|
387
|
+
}
|
|
388
|
+
if (message.role === "assistant" && toolInvocation.args !== void 0) {
|
|
389
|
+
return toolCallId;
|
|
390
|
+
}
|
|
391
|
+
if (toolInvocation.result !== void 0) {
|
|
392
|
+
return `${toolCallId}:output`;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
if (message.role === "assistant" && hasTextPart(message)) {
|
|
396
|
+
return fallbackOutputIds.has(message.id) ? message.id : responseId;
|
|
397
|
+
}
|
|
398
|
+
return null;
|
|
399
|
+
}
|
|
400
|
+
function sortMessagesByFallbackOutputOrder({
|
|
401
|
+
fallbackOutputItems = [],
|
|
402
|
+
messages,
|
|
403
|
+
responseId
|
|
404
|
+
}) {
|
|
405
|
+
if (!fallbackOutputItems.length) {
|
|
406
|
+
return messages;
|
|
407
|
+
}
|
|
408
|
+
const outputOrder = new Map(fallbackOutputItems.map((item, index) => [item.id, index]));
|
|
409
|
+
const fallbackOutputIds = new Set(outputOrder.keys());
|
|
410
|
+
return messages.map((message, index) => ({
|
|
411
|
+
index,
|
|
412
|
+
message,
|
|
413
|
+
outputIndex: outputOrder.get(getFallbackOutputIdForMessage(message, responseId, fallbackOutputIds) ?? "") ?? Number.MAX_SAFE_INTEGER
|
|
414
|
+
})).sort((left, right) => left.outputIndex - right.outputIndex || left.index - right.index).map(({ message }) => message);
|
|
415
|
+
}
|
|
416
|
+
async function resolveResponseTurnMessagesForStorage({
|
|
417
|
+
result,
|
|
418
|
+
responseId,
|
|
419
|
+
text,
|
|
420
|
+
threadContext,
|
|
421
|
+
fallbackOutputItems
|
|
422
|
+
}) {
|
|
423
|
+
const response = await result.response;
|
|
424
|
+
const responseMessages = response?.dbMessages?.length ? response.dbMessages : [];
|
|
425
|
+
if (!threadContext) {
|
|
426
|
+
return responseMessages;
|
|
427
|
+
}
|
|
428
|
+
if (responseMessages.length === 0) {
|
|
429
|
+
if (fallbackOutputItems?.length) {
|
|
430
|
+
const syntheticMessages = createSyntheticMessagesFromOutputItems({
|
|
431
|
+
outputItems: fallbackOutputItems,
|
|
432
|
+
responseId,
|
|
433
|
+
threadContext
|
|
434
|
+
});
|
|
435
|
+
return text && !syntheticMessages.some((message) => message.role === "assistant" && hasTextPart(message)) ? [
|
|
436
|
+
...syntheticMessages,
|
|
437
|
+
createSyntheticResponseMessage({
|
|
438
|
+
createdAt: new Date(new Date(syntheticMessages.at(-1)?.createdAt ?? Date.now()).getTime() + 1),
|
|
439
|
+
responseId,
|
|
440
|
+
text,
|
|
441
|
+
threadContext
|
|
442
|
+
})
|
|
443
|
+
] : syntheticMessages;
|
|
444
|
+
}
|
|
445
|
+
return [createSyntheticResponseMessage({ responseId, text, threadContext })];
|
|
446
|
+
}
|
|
447
|
+
const missingFallbackItems = getMissingFallbackOutputItems({ fallbackOutputItems, messages: responseMessages });
|
|
448
|
+
const missingFallbackMessageIds = new Set(
|
|
449
|
+
missingFallbackItems.filter((item) => item.type === "message").map((item) => item.id)
|
|
450
|
+
);
|
|
451
|
+
const fallbackItemsWithMatchingAssistantText = (fallbackOutputItems ?? []).filter(
|
|
452
|
+
(item) => item.type === "message" && hasMatchingAssistantText(responseMessages, item)
|
|
453
|
+
);
|
|
454
|
+
const textOnlyFallbackMessageTexts = new Set(
|
|
455
|
+
fallbackItemsWithMatchingAssistantText.map(getOutputMessageText).filter(Boolean)
|
|
456
|
+
);
|
|
457
|
+
const fallbackMessageTexts = new Set(
|
|
458
|
+
(fallbackOutputItems ?? []).filter((item) => item.type === "message").filter((item) => missingFallbackMessageIds.has(item.id) || fallbackItemsWithMatchingAssistantText.includes(item)).map(getOutputMessageText).filter(Boolean)
|
|
459
|
+
);
|
|
460
|
+
const baseMessages = fallbackMessageTexts.size ? responseMessages.map(
|
|
461
|
+
(message) => replaceAssistantTextWithFallback({ fallbackMessageTexts, message, textOnlyFallbackMessageTexts })
|
|
462
|
+
) : responseMessages;
|
|
463
|
+
const syntheticFallbackMessages = createSyntheticMessagesFromOutputItems({
|
|
464
|
+
contextOutputItems: fallbackOutputItems ?? [],
|
|
465
|
+
outputItems: missingFallbackItems,
|
|
466
|
+
responseId,
|
|
467
|
+
threadContext
|
|
468
|
+
});
|
|
469
|
+
const resolvedMessages = sortMessagesByFallbackOutputOrder({
|
|
470
|
+
fallbackOutputItems,
|
|
471
|
+
messages: [...baseMessages, ...syntheticFallbackMessages],
|
|
472
|
+
responseId
|
|
473
|
+
});
|
|
474
|
+
if (text && !resolvedMessages.some((message) => message.role === "assistant" && hasTextPart(message))) {
|
|
475
|
+
return [...resolvedMessages, createSyntheticResponseMessage({ responseId, text, threadContext })];
|
|
476
|
+
}
|
|
477
|
+
return resolvedMessages;
|
|
478
|
+
}
|
|
479
|
+
async function persistResponseTurnRecord({
|
|
480
|
+
memoryStore,
|
|
481
|
+
responseId,
|
|
482
|
+
metadata,
|
|
483
|
+
threadContext,
|
|
484
|
+
messages
|
|
485
|
+
}) {
|
|
486
|
+
if (!memoryStore) {
|
|
487
|
+
throw new chunk64ITUOXI_cjs.HTTPException(500, { message: "Memory storage was not available while storing the response" });
|
|
488
|
+
}
|
|
489
|
+
const normalizedMessages = messages.map((message) => ({
|
|
490
|
+
...message,
|
|
491
|
+
threadId: message.threadId ?? threadContext.threadId,
|
|
492
|
+
resourceId: message.resourceId ?? threadContext.resourceId
|
|
493
|
+
}));
|
|
494
|
+
const lastAssistantIndex = [...normalizedMessages].map((message) => message.role).lastIndexOf("assistant");
|
|
495
|
+
const responseAnchorIndex = [...normalizedMessages].map((message, index) => ({ index, message })).reverse().find(({ message }) => message.role === "assistant" && hasTextPart(message))?.index ?? lastAssistantIndex;
|
|
496
|
+
const lastAssistantMessage = responseAnchorIndex >= 0 ? {
|
|
497
|
+
...normalizedMessages[responseAnchorIndex],
|
|
498
|
+
id: responseId
|
|
499
|
+
} : {
|
|
500
|
+
id: responseId,
|
|
501
|
+
role: "assistant",
|
|
502
|
+
type: "text",
|
|
503
|
+
createdAt: new Date(metadata.completedAt ? metadata.completedAt * 1e3 : Date.now()),
|
|
504
|
+
threadId: threadContext.threadId,
|
|
505
|
+
resourceId: threadContext.resourceId,
|
|
506
|
+
content: {
|
|
507
|
+
format: 2,
|
|
508
|
+
parts: []
|
|
509
|
+
}
|
|
510
|
+
};
|
|
511
|
+
if (responseAnchorIndex >= 0) {
|
|
512
|
+
normalizedMessages[responseAnchorIndex] = lastAssistantMessage;
|
|
513
|
+
} else {
|
|
514
|
+
normalizedMessages.push(lastAssistantMessage);
|
|
515
|
+
}
|
|
516
|
+
const storedMessageIndex = responseAnchorIndex >= 0 ? responseAnchorIndex : normalizedMessages.length - 1;
|
|
517
|
+
const droppedSupersededMessageIds = normalizedMessages.flatMap(
|
|
518
|
+
(message, index) => index !== storedMessageIndex && isEmptyAssistantMessage(message) && messages[index]?.id ? [messages[index].id] : []
|
|
519
|
+
);
|
|
520
|
+
const staleMessageIds = responseAnchorIndex >= 0 && messages[responseAnchorIndex]?.id && messages[responseAnchorIndex]?.id !== responseId ? [messages[responseAnchorIndex].id] : [];
|
|
521
|
+
const messagesToSave = normalizedMessages.filter(
|
|
522
|
+
(message, index) => index === storedMessageIndex || !isEmptyAssistantMessage(message)
|
|
523
|
+
);
|
|
524
|
+
const storedMessage = writeResponseTurnRecordMetadata(lastAssistantMessage, {
|
|
525
|
+
...metadata,
|
|
526
|
+
messageIds: messagesToSave.map((message) => message.id)
|
|
527
|
+
});
|
|
528
|
+
if (responseAnchorIndex >= 0) {
|
|
529
|
+
normalizedMessages[responseAnchorIndex] = storedMessage;
|
|
530
|
+
} else {
|
|
531
|
+
normalizedMessages[normalizedMessages.length - 1] = storedMessage;
|
|
532
|
+
}
|
|
533
|
+
const savedMessages = normalizedMessages.filter(
|
|
534
|
+
(message, index) => index === storedMessageIndex || !isEmptyAssistantMessage(message)
|
|
535
|
+
);
|
|
536
|
+
await memoryStore.saveMessages({ messages: savedMessages });
|
|
537
|
+
const deleteMessageIds = [.../* @__PURE__ */ new Set([...staleMessageIds, ...droppedSupersededMessageIds])];
|
|
538
|
+
if (deleteMessageIds.length > 0) {
|
|
539
|
+
await memoryStore.deleteMessages(deleteMessageIds);
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
async function deleteResponseTurnRecord({
|
|
543
|
+
responseTurnRecord
|
|
544
|
+
}) {
|
|
545
|
+
const messageIds = responseTurnRecord.messages.length > 0 ? responseTurnRecord.messages.map((message) => message.id) : [responseTurnRecord.message.id];
|
|
546
|
+
await responseTurnRecord.memoryStore.deleteMessages(messageIds);
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
exports.deleteResponseTurnRecord = deleteResponseTurnRecord;
|
|
550
|
+
exports.findConversationThreadAcrossAgents = findConversationThreadAcrossAgents;
|
|
551
|
+
exports.findResponseTurnRecord = findResponseTurnRecord;
|
|
552
|
+
exports.findResponseTurnRecordAcrossAgents = findResponseTurnRecordAcrossAgents;
|
|
553
|
+
exports.getAgentMemoryStore = getAgentMemoryStore;
|
|
554
|
+
exports.persistResponseTurnRecord = persistResponseTurnRecord;
|
|
555
|
+
exports.resolveResponseTurnMessagesForStorage = resolveResponseTurnMessagesForStorage;
|
|
556
|
+
//# sourceMappingURL=chunk-TTJ3DYZH.cjs.map
|
|
557
|
+
//# sourceMappingURL=chunk-TTJ3DYZH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server/handlers/responses.storage.ts"],"names":["getEffectiveResourceId","validateThreadOwnership","HTTPException"],"mappings":"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","file":"chunk-TTJ3DYZH.cjs","sourcesContent":["import type { Agent, MastraDBMessage } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { StorageThreadType } from '@mastra/core/memory';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport { HTTPException } from '../http-exception';\nimport type {\n ResponseObject,\n ResponseOutputItem,\n ResponseTextConfig,\n ResponseTool,\n ResponseUsage,\n} from '../schemas/responses';\nimport { getEffectiveResourceId, validateThreadOwnership } from './utils';\n\nexport type ThreadExecutionContext = {\n threadId: string;\n resourceId: string;\n};\n\nexport type UsageLike = {\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n promptTokens?: number;\n completionTokens?: number;\n} | null;\n\nexport type ProviderMetadataLike = Record<string, Record<string, unknown> | undefined> | undefined;\n\nexport type ResponseTurnRecordMetadata = {\n agentId: string;\n model: string;\n createdAt: number;\n completedAt: number | null;\n status: ResponseObject['status'];\n usage: ResponseUsage | null;\n instructions?: string;\n text?: ResponseTextConfig;\n previousResponseId?: string;\n providerOptions?: ProviderMetadataLike;\n tools: ResponseTool[];\n store: boolean;\n messageIds: string[];\n outputItems?: ResponseOutputItem[];\n};\n\nexport type ResponseTurnRecord = {\n metadata: ResponseTurnRecordMetadata;\n message: MastraDBMessage;\n messages: MastraDBMessage[];\n thread: StorageThreadType;\n memoryStore: MemoryStorage;\n};\n\ntype ResponseResultLike = {\n response?:\n | Promise<{\n dbMessages?: MastraDBMessage[];\n }>\n | {\n dbMessages?: MastraDBMessage[];\n };\n};\n\ntype SyntheticToolResultMessage = Omit<MastraDBMessage, 'role'> & { role: 'tool' };\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Resolves the backing memory store for a specific agent.\n *\n * This follows the normal agent-memory path. `agent.getMemory()` injects Mastra\n * root storage when the memory has no own storage, so this naturally prefers\n * agent storage first and falls back to Mastra storage through the same codepath.\n */\nexport async function getAgentMemoryStore({\n agent,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n requestContext: RequestContext;\n}): Promise<MemoryStorage | null> {\n const memory = await agent.getMemory({ requestContext });\n if (!memory) {\n return null;\n }\n\n try {\n return (await memory.storage.getStore('memory')) ?? null;\n } catch {\n return null;\n }\n}\n\n/**\n * Reads the response-turn record metadata attached to a stored assistant message.\n */\nfunction readResponseTurnRecordMetadata(message: MastraDBMessage): ResponseTurnRecordMetadata | null {\n const mastraMetadata = isPlainObject(message.content?.metadata?.mastra) ? message.content.metadata.mastra : null;\n const responseMetadata = mastraMetadata && isPlainObject(mastraMetadata.response) ? mastraMetadata.response : null;\n\n if (\n !responseMetadata ||\n typeof responseMetadata.agentId !== 'string' ||\n typeof responseMetadata.model !== 'string' ||\n typeof responseMetadata.createdAt !== 'number' ||\n (responseMetadata.completedAt !== null && typeof responseMetadata.completedAt !== 'number') ||\n (responseMetadata.instructions !== undefined && typeof responseMetadata.instructions !== 'string') ||\n (responseMetadata.text !== undefined &&\n (!isPlainObject(responseMetadata.text) || !isPlainObject(responseMetadata.text.format))) ||\n (responseMetadata.previousResponseId !== undefined && typeof responseMetadata.previousResponseId !== 'string') ||\n !Array.isArray(responseMetadata.tools) ||\n typeof responseMetadata.store !== 'boolean' ||\n !Array.isArray(responseMetadata.messageIds) ||\n (responseMetadata.outputItems !== undefined && !Array.isArray(responseMetadata.outputItems))\n ) {\n return null;\n }\n\n return {\n agentId: responseMetadata.agentId,\n model: responseMetadata.model,\n createdAt: responseMetadata.createdAt,\n completedAt: responseMetadata.completedAt,\n status: responseMetadata.status === 'completed' ? 'completed' : 'incomplete',\n usage: responseMetadata.usage as ResponseUsage | null,\n instructions: responseMetadata.instructions,\n text: responseMetadata.text as ResponseTextConfig | undefined,\n previousResponseId: responseMetadata.previousResponseId,\n providerOptions: responseMetadata.providerOptions as ProviderMetadataLike,\n tools: responseMetadata.tools as ResponseTool[],\n store: responseMetadata.store,\n messageIds: responseMetadata.messageIds.filter((value): value is string => typeof value === 'string'),\n outputItems: responseMetadata.outputItems as ResponseOutputItem[] | undefined,\n };\n}\n\n/**\n * Writes response-turn record metadata onto a persisted assistant message.\n */\nfunction writeResponseTurnRecordMetadata(\n message: MastraDBMessage,\n metadata: ResponseTurnRecordMetadata,\n): MastraDBMessage {\n const contentMetadata = isPlainObject(message.content?.metadata) ? message.content.metadata : {};\n const mastraMetadata = isPlainObject(contentMetadata.mastra) ? contentMetadata.mastra : {};\n\n return {\n ...message,\n content: {\n ...message.content,\n metadata: {\n ...contentMetadata,\n mastra: {\n ...mastraMetadata,\n response: metadata,\n },\n },\n },\n };\n}\n\n/**\n * Looks up a stored response-turn record by response id.\n *\n * Response ids are assistant message ids, so this reconstructs the record by\n * loading that persisted assistant message, reading its response metadata, then\n * reloading the full set of stored turn messages referenced by the metadata.\n */\nexport async function findResponseTurnRecord({\n agent,\n responseId,\n requestContext,\n}: {\n agent: Agent<any, any, any, any>;\n responseId: string;\n requestContext: RequestContext;\n}): Promise<ResponseTurnRecord | null> {\n const memoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!memoryStore) {\n return null;\n }\n\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n const { messages: matchedMessages } = await memoryStore.listMessagesById({ messageIds: [responseId] });\n const message = matchedMessages[0];\n if (!message || message.role !== 'assistant') {\n return null;\n }\n\n const metadata = readResponseTurnRecordMetadata(message);\n if (!metadata || metadata.agentId !== agent.id) {\n return null;\n }\n\n const thread = message.threadId ? await memoryStore.getThreadById({ threadId: message.threadId }) : null;\n if (!thread) {\n return null;\n }\n\n await validateThreadOwnership(thread, effectiveResourceId);\n const messageIds = metadata.messageIds.length > 0 ? metadata.messageIds : [message.id];\n const { messages: responseMessages } = await memoryStore.listMessagesById({ messageIds });\n const messagesById = new Map(responseMessages.map(storedMessage => [storedMessage.id, storedMessage] as const));\n const orderedMessages = messageIds\n .map(messageId => messagesById.get(messageId))\n .filter((storedMessage): storedMessage is MastraDBMessage => Boolean(storedMessage));\n\n return { metadata, message, messages: orderedMessages, thread, memoryStore };\n}\n\nexport async function findResponseTurnRecordAcrossAgents({\n mastra,\n responseId,\n requestContext,\n}: {\n mastra: Mastra | undefined;\n responseId: string;\n requestContext: RequestContext;\n}): Promise<ResponseTurnRecord | null> {\n if (!mastra) {\n return null;\n }\n\n const agents = Object.values(mastra.listAgents()) as Agent<any, any, any, any>[];\n for (const agent of agents) {\n const match = await findResponseTurnRecord({ agent, responseId, requestContext });\n if (match) {\n return match;\n }\n }\n\n return null;\n}\n\nexport type ConversationThreadRecord = {\n thread: StorageThreadType;\n memoryStore: MemoryStorage;\n};\n\nexport async function findConversationThreadAcrossAgents({\n mastra,\n conversationId,\n requestContext,\n}: {\n mastra: Mastra | undefined;\n conversationId: string;\n requestContext: RequestContext;\n}): Promise<ConversationThreadRecord | null> {\n if (!mastra) {\n return null;\n }\n\n const effectiveResourceId = getEffectiveResourceId(requestContext, undefined);\n const agents = Object.values(mastra.listAgents()) as Agent<any, any, any, any>[];\n\n for (const agent of agents) {\n const memoryStore = await getAgentMemoryStore({ agent, requestContext });\n if (!memoryStore) {\n continue;\n }\n\n const thread = await memoryStore.getThreadById({ threadId: conversationId });\n if (!thread) {\n continue;\n }\n\n await validateThreadOwnership(thread, effectiveResourceId);\n return { thread, memoryStore };\n }\n\n return null;\n}\n\n/**\n * Creates a synthetic assistant message for responses that did not emit any\n * persisted DB messages but still need a durable response-turn record.\n */\nfunction createSyntheticResponseMessage({\n createdAt,\n responseId,\n text,\n threadContext,\n}: {\n createdAt?: Date;\n responseId: string;\n text: string;\n threadContext: ThreadExecutionContext;\n}): MastraDBMessage {\n return {\n id: responseId,\n role: 'assistant',\n type: 'text',\n createdAt: createdAt ?? new Date(),\n threadId: threadContext.threadId,\n resourceId: threadContext.resourceId,\n content: {\n format: 2 as const,\n parts: text ? [{ type: 'text', text }] : [],\n },\n };\n}\n\nfunction hasTextPart(message: MastraDBMessage): boolean {\n return Boolean(\n message.content?.parts?.some(\n part => isPlainObject(part) && part.type === 'text' && typeof part.text === 'string' && part.text.length > 0,\n ),\n );\n}\n\nfunction isEmptyAssistantMessage(message: MastraDBMessage): boolean {\n return message.role === 'assistant' && Array.isArray(message.content?.parts) && message.content.parts.length === 0;\n}\n\nfunction hasToolInvocationPart(message: MastraDBMessage): boolean {\n return Boolean(\n message.content?.parts?.some(\n part => isPlainObject(part) && part.type === 'tool-invocation' && isPlainObject(part.toolInvocation),\n ),\n );\n}\n\nfunction getMessageText(message: MastraDBMessage): string {\n return (\n message.content?.parts\n ?.flatMap(part =>\n isPlainObject(part) && part.type === 'text' && typeof part.text === 'string' ? [part.text] : [],\n )\n .join('') ?? ''\n );\n}\n\nfunction getOutputMessageText(item: Extract<ResponseOutputItem, { type: 'message' }>): string {\n return item.content.map(part => part.text).join('');\n}\n\nfunction normalizeFallbackComparisonText(text: string): string {\n return text.trim();\n}\n\nfunction matchesFallbackText(messageText: string, fallbackText: string): boolean {\n return (\n messageText === fallbackText ||\n normalizeFallbackComparisonText(messageText) === normalizeFallbackComparisonText(fallbackText)\n );\n}\n\nfunction hasMatchingAssistantText(\n messages: MastraDBMessage[],\n item: Extract<ResponseOutputItem, { type: 'message' }>,\n): boolean {\n const fallbackText = getOutputMessageText(item);\n\n return messages.some(\n message =>\n message.role === 'assistant' &&\n hasTextPart(message) &&\n matchesFallbackText(getMessageText(message), fallbackText),\n );\n}\n\nfunction shouldReplaceAssistantText(messageText: string, fallbackText: string): boolean {\n const normalizedMessageText = normalizeFallbackComparisonText(messageText);\n const normalizedFallbackText = normalizeFallbackComparisonText(fallbackText);\n\n return (\n normalizedFallbackText !== normalizedMessageText &&\n (fallbackText.startsWith(messageText) || normalizedFallbackText.startsWith(normalizedMessageText))\n );\n}\n\nfunction getAssistantMessageTexts(messages: MastraDBMessage[]): string[] {\n return messages.flatMap(message =>\n message.role === 'assistant' && hasTextPart(message) ? [getMessageText(message)] : [],\n );\n}\n\nfunction shouldAddFallbackMessageText(\n messages: MastraDBMessage[],\n item: Extract<ResponseOutputItem, { type: 'message' }>,\n): boolean {\n const assistantTexts = getAssistantMessageTexts(messages);\n if (assistantTexts.length === 0) {\n return true;\n }\n\n const fallbackText = getOutputMessageText(item);\n return assistantTexts.every(messageText => shouldReplaceAssistantText(messageText, fallbackText));\n}\n\nfunction shouldReplaceAssistantTextWithFallback({\n fallbackMessageTexts,\n message,\n textOnlyFallbackMessageTexts,\n}: {\n fallbackMessageTexts: Set<string>;\n message: MastraDBMessage;\n textOnlyFallbackMessageTexts: Set<string>;\n}): boolean {\n if (message.role !== 'assistant' || !hasTextPart(message)) {\n return false;\n }\n\n const messageText = getMessageText(message);\n if (!messageText) {\n return false;\n }\n\n const comparisonTexts = hasToolInvocationPart(message) ? fallbackMessageTexts : textOnlyFallbackMessageTexts;\n\n return [...comparisonTexts].some(fallbackText => shouldReplaceAssistantText(messageText, fallbackText));\n}\n\nfunction replaceAssistantTextWithFallback({\n fallbackMessageTexts,\n message,\n textOnlyFallbackMessageTexts,\n}: {\n fallbackMessageTexts: Set<string>;\n message: MastraDBMessage;\n textOnlyFallbackMessageTexts: Set<string>;\n}): MastraDBMessage {\n if (!shouldReplaceAssistantTextWithFallback({ fallbackMessageTexts, message, textOnlyFallbackMessageTexts })) {\n return message;\n }\n\n const parts = message.content?.parts ?? [];\n const remainingParts = parts.filter(part => !(isPlainObject(part) && part.type === 'text'));\n\n return {\n ...message,\n content: {\n ...message.content,\n parts: remainingParts,\n },\n };\n}\n\nfunction parseFunctionCallArguments(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return { __raw: value };\n }\n}\n\nfunction createSyntheticToolResultMessage({\n baseMessage,\n item,\n responseId,\n toolCall,\n}: {\n baseMessage: Pick<MastraDBMessage, 'createdAt' | 'threadId' | 'resourceId'>;\n item: Extract<ResponseOutputItem, { type: 'function_call_output' }>;\n responseId: string;\n toolCall?: { args: unknown; toolName: string };\n}): SyntheticToolResultMessage {\n return {\n ...baseMessage,\n id: `${responseId}:tool-result:${item.call_id}`,\n role: 'tool',\n type: 'tool-result',\n content: {\n format: 2 as const,\n parts: [\n {\n type: 'tool-invocation',\n toolInvocation: {\n state: 'result',\n toolCallId: item.call_id,\n toolName: toolCall?.toolName ?? 'unknown',\n args: toolCall?.args ?? {},\n result: item.output,\n },\n },\n ],\n },\n };\n}\n\nfunction toMastraDBMessage(message: SyntheticToolResultMessage): MastraDBMessage {\n // MastraDBMessage does not yet type persisted v2 tool-role messages, but\n // storage and response mapping already handle them at runtime.\n return message as unknown as MastraDBMessage;\n}\n\nfunction createSyntheticMessagesFromOutputItems({\n contextOutputItems,\n outputItems,\n responseId,\n threadContext,\n}: {\n contextOutputItems?: ResponseOutputItem[];\n outputItems: ResponseOutputItem[];\n responseId: string;\n threadContext: ThreadExecutionContext;\n}): MastraDBMessage[] {\n const toolContextItems = contextOutputItems ?? outputItems;\n const toolCallsById = new Map(\n toolContextItems.flatMap(item =>\n item.type === 'function_call'\n ? [[item.call_id, { args: parseFunctionCallArguments(item.arguments), toolName: item.name }] as const]\n : [],\n ),\n );\n\n const baseCreatedAt = Date.now();\n\n return outputItems.map((item, index): MastraDBMessage => {\n const baseMessage = {\n createdAt: new Date(baseCreatedAt + index),\n threadId: threadContext.threadId,\n resourceId: threadContext.resourceId,\n };\n\n if (item.type === 'function_call') {\n return {\n ...baseMessage,\n id: `${responseId}:tool-call:${item.call_id}`,\n role: 'assistant',\n type: 'tool-call',\n content: {\n format: 2 as const,\n parts: [\n {\n type: 'tool-invocation',\n toolInvocation: {\n state: 'call',\n toolCallId: item.call_id,\n toolName: item.name,\n args: parseFunctionCallArguments(item.arguments),\n },\n },\n ],\n },\n };\n }\n\n if (item.type === 'function_call_output') {\n const toolCall = toolCallsById.get(item.call_id);\n\n return toMastraDBMessage(createSyntheticToolResultMessage({ baseMessage, item, responseId, toolCall }));\n }\n\n return {\n ...baseMessage,\n id: item.id,\n role: 'assistant',\n type: 'text',\n content: {\n format: 2 as const,\n parts: item.content.map(part => ({ type: 'text' as const, text: part.text })),\n },\n };\n });\n}\n\nfunction getToolInvocationParts(message: MastraDBMessage): Array<Record<string, unknown>> {\n const parts = Array.isArray(message.content?.parts) ? message.content.parts : [];\n\n return parts.flatMap(part =>\n isPlainObject(part) && part.type === 'tool-invocation' && isPlainObject(part.toolInvocation)\n ? [part.toolInvocation]\n : [],\n );\n}\n\nfunction getMissingFallbackOutputItems({\n fallbackOutputItems = [],\n messages,\n}: {\n fallbackOutputItems?: ResponseObject['output'];\n messages: MastraDBMessage[];\n}): ResponseOutputItem[] {\n if (!fallbackOutputItems.length) {\n return [];\n }\n\n const existingCallIds = new Set<string>();\n const existingResultCallIds = new Set<string>();\n\n for (const message of messages) {\n for (const toolInvocation of getToolInvocationParts(message)) {\n const toolCallId = typeof toolInvocation.toolCallId === 'string' ? toolInvocation.toolCallId : null;\n if (!toolCallId) {\n continue;\n }\n\n if (message.role === 'assistant' && (toolInvocation.args !== undefined || toolInvocation.result === undefined)) {\n existingCallIds.add(toolCallId);\n }\n if (toolInvocation.result !== undefined) {\n existingResultCallIds.add(toolCallId);\n }\n }\n }\n\n return fallbackOutputItems.filter(item => {\n if (item.type === 'function_call') {\n return !existingCallIds.has(item.call_id);\n }\n\n if (item.type === 'function_call_output') {\n return !existingResultCallIds.has(item.call_id);\n }\n\n if (item.type === 'message') {\n if (!item.content.some(part => part.text.length > 0) || hasMatchingAssistantText(messages, item)) {\n return false;\n }\n\n return shouldAddFallbackMessageText(messages, item);\n }\n\n return false;\n });\n}\n\nfunction getFallbackOutputIdForMessage(\n message: MastraDBMessage,\n responseId: string,\n fallbackOutputIds: Set<string>,\n): string | null {\n for (const toolInvocation of getToolInvocationParts(message)) {\n const toolCallId = typeof toolInvocation.toolCallId === 'string' ? toolInvocation.toolCallId : null;\n if (!toolCallId) {\n continue;\n }\n\n if (message.role === 'assistant' && toolInvocation.args !== undefined) {\n return toolCallId;\n }\n\n if (toolInvocation.result !== undefined) {\n return `${toolCallId}:output`;\n }\n }\n\n if (message.role === 'assistant' && hasTextPart(message)) {\n return fallbackOutputIds.has(message.id) ? message.id : responseId;\n }\n\n return null;\n}\n\nfunction sortMessagesByFallbackOutputOrder({\n fallbackOutputItems = [],\n messages,\n responseId,\n}: {\n fallbackOutputItems?: ResponseObject['output'];\n messages: MastraDBMessage[];\n responseId: string;\n}): MastraDBMessage[] {\n if (!fallbackOutputItems.length) {\n return messages;\n }\n\n const outputOrder = new Map(fallbackOutputItems.map((item, index) => [item.id, index]));\n const fallbackOutputIds = new Set(outputOrder.keys());\n\n return messages\n .map((message, index) => ({\n index,\n message,\n outputIndex:\n outputOrder.get(getFallbackOutputIdForMessage(message, responseId, fallbackOutputIds) ?? '') ??\n Number.MAX_SAFE_INTEGER,\n }))\n .sort((left, right) => left.outputIndex - right.outputIndex || left.index - right.index)\n .map(({ message }) => message);\n}\n\n/**\n * Resolves the Mastra messages that belong to the response turn being stored.\n */\nexport async function resolveResponseTurnMessagesForStorage({\n result,\n responseId,\n text,\n threadContext,\n fallbackOutputItems,\n}: {\n result: ResponseResultLike;\n responseId: string;\n text: string;\n threadContext: ThreadExecutionContext | null;\n fallbackOutputItems?: ResponseObject['output'];\n}): Promise<MastraDBMessage[]> {\n const response = await result.response;\n const responseMessages = response?.dbMessages?.length ? response.dbMessages : [];\n\n if (!threadContext) {\n return responseMessages;\n }\n\n if (responseMessages.length === 0) {\n if (fallbackOutputItems?.length) {\n const syntheticMessages = createSyntheticMessagesFromOutputItems({\n outputItems: fallbackOutputItems,\n responseId,\n threadContext,\n });\n\n return text && !syntheticMessages.some(message => message.role === 'assistant' && hasTextPart(message))\n ? [\n ...syntheticMessages,\n createSyntheticResponseMessage({\n createdAt: new Date(new Date(syntheticMessages.at(-1)?.createdAt ?? Date.now()).getTime() + 1),\n responseId,\n text,\n threadContext,\n }),\n ]\n : syntheticMessages;\n }\n\n return [createSyntheticResponseMessage({ responseId, text, threadContext })];\n }\n\n const missingFallbackItems = getMissingFallbackOutputItems({ fallbackOutputItems, messages: responseMessages });\n const missingFallbackMessageIds = new Set(\n missingFallbackItems\n .filter((item): item is Extract<ResponseOutputItem, { type: 'message' }> => item.type === 'message')\n .map(item => item.id),\n );\n const fallbackItemsWithMatchingAssistantText = (fallbackOutputItems ?? []).filter(\n (item): item is Extract<ResponseOutputItem, { type: 'message' }> =>\n item.type === 'message' && hasMatchingAssistantText(responseMessages, item),\n );\n const textOnlyFallbackMessageTexts = new Set(\n fallbackItemsWithMatchingAssistantText.map(getOutputMessageText).filter(Boolean),\n );\n const fallbackMessageTexts = new Set(\n (fallbackOutputItems ?? [])\n .filter((item): item is Extract<ResponseOutputItem, { type: 'message' }> => item.type === 'message')\n .filter(item => missingFallbackMessageIds.has(item.id) || fallbackItemsWithMatchingAssistantText.includes(item))\n .map(getOutputMessageText)\n .filter(Boolean),\n );\n const baseMessages = fallbackMessageTexts.size\n ? responseMessages.map(message =>\n replaceAssistantTextWithFallback({ fallbackMessageTexts, message, textOnlyFallbackMessageTexts }),\n )\n : responseMessages;\n const syntheticFallbackMessages = createSyntheticMessagesFromOutputItems({\n contextOutputItems: fallbackOutputItems ?? [],\n outputItems: missingFallbackItems,\n responseId,\n threadContext,\n });\n const resolvedMessages = sortMessagesByFallbackOutputOrder({\n fallbackOutputItems,\n messages: [...baseMessages, ...syntheticFallbackMessages],\n responseId,\n });\n\n if (text && !resolvedMessages.some(message => message.role === 'assistant' && hasTextPart(message))) {\n return [...resolvedMessages, createSyntheticResponseMessage({ responseId, text, threadContext })];\n }\n\n return resolvedMessages;\n}\n\n/**\n * Persists a response-turn record by anchoring it on the final assistant\n * message in the stored turn.\n *\n * The response id becomes that assistant message id, and the response-specific\n * metadata is written onto the assistant message so later retrieval can rebuild\n * the Responses object from thread-backed storage.\n */\nexport async function persistResponseTurnRecord({\n memoryStore,\n responseId,\n metadata,\n threadContext,\n messages,\n}: {\n memoryStore: MemoryStorage | null;\n responseId: string;\n metadata: ResponseTurnRecordMetadata;\n threadContext: ThreadExecutionContext;\n messages: MastraDBMessage[];\n}): Promise<void> {\n if (!memoryStore) {\n throw new HTTPException(500, { message: 'Memory storage was not available while storing the response' });\n }\n\n const normalizedMessages: MastraDBMessage[] = messages.map(message => ({\n ...message,\n threadId: message.threadId ?? threadContext.threadId,\n resourceId: message.resourceId ?? threadContext.resourceId,\n }));\n\n const lastAssistantIndex = [...normalizedMessages].map(message => message.role).lastIndexOf('assistant');\n const responseAnchorIndex =\n [...normalizedMessages]\n .map((message, index) => ({ index, message }))\n .reverse()\n .find(({ message }) => message.role === 'assistant' && hasTextPart(message))?.index ?? lastAssistantIndex;\n const lastAssistantMessage =\n responseAnchorIndex >= 0\n ? {\n ...normalizedMessages[responseAnchorIndex]!,\n id: responseId,\n }\n : ({\n id: responseId,\n role: 'assistant' as const,\n type: 'text' as const,\n createdAt: new Date(metadata.completedAt ? metadata.completedAt * 1000 : Date.now()),\n threadId: threadContext.threadId,\n resourceId: threadContext.resourceId,\n content: {\n format: 2 as const,\n parts: [],\n },\n } satisfies MastraDBMessage);\n\n if (responseAnchorIndex >= 0) {\n normalizedMessages[responseAnchorIndex] = lastAssistantMessage;\n } else {\n normalizedMessages.push(lastAssistantMessage);\n }\n const storedMessageIndex = responseAnchorIndex >= 0 ? responseAnchorIndex : normalizedMessages.length - 1;\n\n const droppedSupersededMessageIds = normalizedMessages.flatMap((message, index) =>\n index !== storedMessageIndex && isEmptyAssistantMessage(message) && messages[index]?.id\n ? [messages[index]!.id]\n : [],\n );\n const staleMessageIds =\n responseAnchorIndex >= 0 && messages[responseAnchorIndex]?.id && messages[responseAnchorIndex]?.id !== responseId\n ? [messages[responseAnchorIndex]!.id]\n : [];\n const messagesToSave = normalizedMessages.filter(\n (message, index) => index === storedMessageIndex || !isEmptyAssistantMessage(message),\n );\n\n const storedMessage = writeResponseTurnRecordMetadata(lastAssistantMessage, {\n ...metadata,\n messageIds: messagesToSave.map(message => message.id),\n });\n\n if (responseAnchorIndex >= 0) {\n normalizedMessages[responseAnchorIndex] = storedMessage;\n } else {\n normalizedMessages[normalizedMessages.length - 1] = storedMessage;\n }\n\n const savedMessages = normalizedMessages.filter(\n (message, index) => index === storedMessageIndex || !isEmptyAssistantMessage(message),\n );\n\n await memoryStore.saveMessages({ messages: savedMessages });\n\n const deleteMessageIds = [...new Set([...staleMessageIds, ...droppedSupersededMessageIds])];\n if (deleteMessageIds.length > 0) {\n await memoryStore.deleteMessages(deleteMessageIds);\n }\n}\n\n/**\n * Removes all persisted messages for a stored response-turn record.\n */\nexport async function deleteResponseTurnRecord({\n responseTurnRecord,\n}: {\n responseTurnRecord: ResponseTurnRecord;\n}): Promise<void> {\n const messageIds =\n responseTurnRecord.messages.length > 0\n ? responseTurnRecord.messages.map(message => message.id)\n : [responseTurnRecord.message.id];\n\n await responseTurnRecord.memoryStore.deleteMessages(messageIds);\n}\n"]}
|