@mastra/server 1.31.1-alpha.0 → 1.32.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/_types/@internal_core/dist/index.d.ts +82 -1
  3. package/dist/{chunk-7VXUWPHS.cjs → chunk-2REMDR2Q.cjs} +12 -12
  4. package/dist/{chunk-7VXUWPHS.cjs.map → chunk-2REMDR2Q.cjs.map} +1 -1
  5. package/dist/chunk-33USMBWV.js +250 -0
  6. package/dist/chunk-33USMBWV.js.map +1 -0
  7. package/dist/{chunk-KW2MZGRE.js → chunk-4JWF4VAL.js} +3 -3
  8. package/dist/{chunk-KW2MZGRE.js.map → chunk-4JWF4VAL.js.map} +1 -1
  9. package/dist/{chunk-53YFG5AY.js → chunk-4L2UVFJO.js} +8 -2
  10. package/dist/chunk-4L2UVFJO.js.map +1 -0
  11. package/dist/{chunk-CXBX2UAP.cjs → chunk-4UMO2IGR.cjs} +7 -7
  12. package/dist/{chunk-CXBX2UAP.cjs.map → chunk-4UMO2IGR.cjs.map} +1 -1
  13. package/dist/{chunk-5KM5P23Q.cjs → chunk-5VMRQT5S.cjs} +29 -29
  14. package/dist/{chunk-5KM5P23Q.cjs.map → chunk-5VMRQT5S.cjs.map} +1 -1
  15. package/dist/{chunk-FIP7YYSO.js → chunk-64M357LE.js} +6 -6
  16. package/dist/{chunk-FIP7YYSO.js.map → chunk-64M357LE.js.map} +1 -1
  17. package/dist/{chunk-CUIH4FYN.js → chunk-67TYG7WH.js} +3 -3
  18. package/dist/{chunk-CUIH4FYN.js.map → chunk-67TYG7WH.js.map} +1 -1
  19. package/dist/{chunk-65MQD7JR.js → chunk-6M7OOHNA.js} +6 -6
  20. package/dist/{chunk-65MQD7JR.js.map → chunk-6M7OOHNA.js.map} +1 -1
  21. package/dist/{chunk-HSU5D2KT.js → chunk-72RVQAAZ.js} +4 -4
  22. package/dist/{chunk-HSU5D2KT.js.map → chunk-72RVQAAZ.js.map} +1 -1
  23. package/dist/{chunk-5UKYK7YK.cjs → chunk-7LAFXMXB.cjs} +2 -2
  24. package/dist/{chunk-5UKYK7YK.cjs.map → chunk-7LAFXMXB.cjs.map} +1 -1
  25. package/dist/{chunk-2HIGXJMR.cjs → chunk-AF6AYXRW.cjs} +103 -103
  26. package/dist/{chunk-2HIGXJMR.cjs.map → chunk-AF6AYXRW.cjs.map} +1 -1
  27. package/dist/{chunk-Y2SA2JZT.cjs → chunk-ANEBYNP6.cjs} +89 -67
  28. package/dist/chunk-ANEBYNP6.cjs.map +1 -0
  29. package/dist/{chunk-YI2LXCWB.js → chunk-AOKUS5NX.js} +3 -3
  30. package/dist/{chunk-YI2LXCWB.js.map → chunk-AOKUS5NX.js.map} +1 -1
  31. package/dist/{chunk-MROI3O6S.cjs → chunk-ASVWXKET.cjs} +12 -12
  32. package/dist/{chunk-MROI3O6S.cjs.map → chunk-ASVWXKET.cjs.map} +1 -1
  33. package/dist/{chunk-XG2VRXG5.cjs → chunk-BK2PRWVJ.cjs} +22 -2
  34. package/dist/chunk-BK2PRWVJ.cjs.map +1 -0
  35. package/dist/{chunk-4GOK3PCO.js → chunk-CBSIIPHQ.js} +6 -6
  36. package/dist/{chunk-4GOK3PCO.js.map → chunk-CBSIIPHQ.js.map} +1 -1
  37. package/dist/{chunk-VGR4DSXQ.cjs → chunk-CEZZQMPM.cjs} +11 -11
  38. package/dist/{chunk-VGR4DSXQ.cjs.map → chunk-CEZZQMPM.cjs.map} +1 -1
  39. package/dist/{chunk-RPMBPQNO.cjs → chunk-CPZEA2XG.cjs} +10 -3
  40. package/dist/chunk-CPZEA2XG.cjs.map +1 -0
  41. package/dist/{chunk-OES3CANB.js → chunk-CR7RGILH.js} +3 -3
  42. package/dist/{chunk-OES3CANB.js.map → chunk-CR7RGILH.js.map} +1 -1
  43. package/dist/{chunk-ARZ6W3O3.cjs → chunk-CTYPGLJG.cjs} +46 -21
  44. package/dist/chunk-CTYPGLJG.cjs.map +1 -0
  45. package/dist/{chunk-H6NJWTER.cjs → chunk-CZU262RD.cjs} +20 -15
  46. package/dist/chunk-CZU262RD.cjs.map +1 -0
  47. package/dist/{chunk-4IYALPXO.js → chunk-DCMRHRHR.js} +4 -4
  48. package/dist/{chunk-4IYALPXO.js.map → chunk-DCMRHRHR.js.map} +1 -1
  49. package/dist/{chunk-B346SGRP.cjs → chunk-DIBOFJUK.cjs} +11 -11
  50. package/dist/{chunk-B346SGRP.cjs.map → chunk-DIBOFJUK.cjs.map} +1 -1
  51. package/dist/{chunk-DY6OYCMG.js → chunk-DOTOVTE2.js} +4 -4
  52. package/dist/{chunk-DY6OYCMG.js.map → chunk-DOTOVTE2.js.map} +1 -1
  53. package/dist/{chunk-VOAVPKTH.js → chunk-EAJSW5GK.js} +3 -3
  54. package/dist/{chunk-VOAVPKTH.js.map → chunk-EAJSW5GK.js.map} +1 -1
  55. package/dist/{chunk-S7REEERK.cjs → chunk-EWNTXTFB.cjs} +11 -11
  56. package/dist/{chunk-S7REEERK.cjs.map → chunk-EWNTXTFB.cjs.map} +1 -1
  57. package/dist/{chunk-DBPJYWAH.js → chunk-F23SQINQ.js} +30 -8
  58. package/dist/chunk-F23SQINQ.js.map +1 -0
  59. package/dist/{chunk-TKHLXCSZ.cjs → chunk-F5RU45N6.cjs} +7 -7
  60. package/dist/{chunk-TKHLXCSZ.cjs.map → chunk-F5RU45N6.cjs.map} +1 -1
  61. package/dist/{chunk-TNNU7IZK.cjs → chunk-FFDMYX2V.cjs} +25 -25
  62. package/dist/{chunk-TNNU7IZK.cjs.map → chunk-FFDMYX2V.cjs.map} +1 -1
  63. package/dist/{chunk-ANP3ESTF.js → chunk-FICILXAQ.js} +3 -3
  64. package/dist/{chunk-ANP3ESTF.js.map → chunk-FICILXAQ.js.map} +1 -1
  65. package/dist/{chunk-2QNJHTKM.cjs → chunk-GME2ZNSG.cjs} +11 -11
  66. package/dist/{chunk-2QNJHTKM.cjs.map → chunk-GME2ZNSG.cjs.map} +1 -1
  67. package/dist/{chunk-6SBH6SYP.js → chunk-GOFGQSF7.js} +20 -7
  68. package/dist/chunk-GOFGQSF7.js.map +1 -0
  69. package/dist/{chunk-PQETTP2F.js → chunk-GQOWV33T.js} +3 -3
  70. package/dist/{chunk-PQETTP2F.js.map → chunk-GQOWV33T.js.map} +1 -1
  71. package/dist/{chunk-OV64VJ5L.js → chunk-HBWNPGIL.js} +5 -5
  72. package/dist/{chunk-OV64VJ5L.js.map → chunk-HBWNPGIL.js.map} +1 -1
  73. package/dist/{chunk-H23VTK56.js → chunk-HKXIZNJC.js} +4 -4
  74. package/dist/{chunk-H23VTK56.js.map → chunk-HKXIZNJC.js.map} +1 -1
  75. package/dist/{chunk-EQR4MMSL.cjs → chunk-HN3V6UA4.cjs} +12 -12
  76. package/dist/{chunk-EQR4MMSL.cjs.map → chunk-HN3V6UA4.cjs.map} +1 -1
  77. package/dist/{chunk-OGV23F3H.cjs → chunk-IMPWOZUQ.cjs} +28 -15
  78. package/dist/chunk-IMPWOZUQ.cjs.map +1 -0
  79. package/dist/{chunk-AMC32S2M.js → chunk-IRKGFNRR.js} +34 -9
  80. package/dist/chunk-IRKGFNRR.js.map +1 -0
  81. package/dist/{chunk-EPM6ILRW.js → chunk-IYEGDP3G.js} +22 -3
  82. package/dist/chunk-IYEGDP3G.js.map +1 -0
  83. package/dist/{chunk-JZNOIGOQ.js → chunk-K2KWDOYR.js} +32 -5
  84. package/dist/chunk-K2KWDOYR.js.map +1 -0
  85. package/dist/{chunk-Q2N5GR7X.cjs → chunk-K745HNW2.cjs} +11 -11
  86. package/dist/{chunk-Q2N5GR7X.cjs.map → chunk-K745HNW2.cjs.map} +1 -1
  87. package/dist/{chunk-YJQYJ5WD.cjs → chunk-K7IVZQKI.cjs} +6 -6
  88. package/dist/{chunk-YJQYJ5WD.cjs.map → chunk-K7IVZQKI.cjs.map} +1 -1
  89. package/dist/{chunk-PA2BYLKF.js → chunk-KDUX3YN3.js} +2 -2
  90. package/dist/{chunk-PA2BYLKF.js.map → chunk-KDUX3YN3.js.map} +1 -1
  91. package/dist/{chunk-LVGLLXRY.cjs → chunk-KQU6VKAO.cjs} +7 -7
  92. package/dist/{chunk-LVGLLXRY.cjs.map → chunk-KQU6VKAO.cjs.map} +1 -1
  93. package/dist/{chunk-UZRD3SEA.js → chunk-KTTHNIBJ.js} +89 -26
  94. package/dist/chunk-KTTHNIBJ.js.map +1 -0
  95. package/dist/{chunk-LY6Q36YN.cjs → chunk-LGR7SFQ5.cjs} +38 -25
  96. package/dist/chunk-LGR7SFQ5.cjs.map +1 -0
  97. package/dist/{chunk-7GNVIWZY.js → chunk-LO7CBY5Q.js} +6 -6
  98. package/dist/{chunk-7GNVIWZY.js.map → chunk-LO7CBY5Q.js.map} +1 -1
  99. package/dist/{chunk-UQLJDNXU.cjs → chunk-M7L5EVQE.cjs} +12 -12
  100. package/dist/{chunk-UQLJDNXU.cjs.map → chunk-M7L5EVQE.cjs.map} +1 -1
  101. package/dist/{chunk-BMWSQ6HM.cjs → chunk-NIRJGDC6.cjs} +4 -4
  102. package/dist/{chunk-BMWSQ6HM.cjs.map → chunk-NIRJGDC6.cjs.map} +1 -1
  103. package/dist/{chunk-VZNOKYP5.js → chunk-NKD5XK43.js} +5 -5
  104. package/dist/{chunk-VZNOKYP5.js.map → chunk-NKD5XK43.js.map} +1 -1
  105. package/dist/{chunk-LTLTS3RN.js → chunk-NRKGN3C5.js} +4 -4
  106. package/dist/{chunk-LTLTS3RN.js.map → chunk-NRKGN3C5.js.map} +1 -1
  107. package/dist/{chunk-EETF75CE.cjs → chunk-OBRYBTX6.cjs} +12 -12
  108. package/dist/{chunk-EETF75CE.cjs.map → chunk-OBRYBTX6.cjs.map} +1 -1
  109. package/dist/{chunk-7E2JRYIE.js → chunk-OCBL7S62.js} +6 -6
  110. package/dist/{chunk-7E2JRYIE.js.map → chunk-OCBL7S62.js.map} +1 -1
  111. package/dist/chunk-ODCWNXTX.cjs +256 -0
  112. package/dist/chunk-ODCWNXTX.cjs.map +1 -0
  113. package/dist/{chunk-JQUNK754.js → chunk-OJ7SK6PH.js} +374 -53
  114. package/dist/chunk-OJ7SK6PH.js.map +1 -0
  115. package/dist/{chunk-4J4K36CU.js → chunk-OPBMOOBR.js} +5 -5
  116. package/dist/{chunk-4J4K36CU.js.map → chunk-OPBMOOBR.js.map} +1 -1
  117. package/dist/{chunk-2MWLNHBG.cjs → chunk-OQHTG2JK.cjs} +11 -11
  118. package/dist/{chunk-2MWLNHBG.cjs.map → chunk-OQHTG2JK.cjs.map} +1 -1
  119. package/dist/{chunk-4BSJHDYP.js → chunk-OUS6FNA7.js} +11 -6
  120. package/dist/chunk-OUS6FNA7.js.map +1 -0
  121. package/dist/{chunk-OGEXISZT.cjs → chunk-OZC7GEO5.cjs} +11 -11
  122. package/dist/{chunk-OGEXISZT.cjs.map → chunk-OZC7GEO5.cjs.map} +1 -1
  123. package/dist/{chunk-WFVK6ZXR.cjs → chunk-Q2T2Q4S5.cjs} +6 -6
  124. package/dist/{chunk-WFVK6ZXR.cjs.map → chunk-Q2T2Q4S5.cjs.map} +1 -1
  125. package/dist/{chunk-CKZMJIUO.cjs → chunk-R3DQGOTC.cjs} +6 -6
  126. package/dist/{chunk-CKZMJIUO.cjs.map → chunk-R3DQGOTC.cjs.map} +1 -1
  127. package/dist/{chunk-IQA7HL2V.js → chunk-R7X4YOSH.js} +51 -10
  128. package/dist/chunk-R7X4YOSH.js.map +1 -0
  129. package/dist/{chunk-NRFMMYTG.js → chunk-RF5ZDERV.js} +4 -4
  130. package/dist/{chunk-NRFMMYTG.js.map → chunk-RF5ZDERV.js.map} +1 -1
  131. package/dist/{chunk-KI7TGMMV.cjs → chunk-RL34ZMLF.cjs} +159 -96
  132. package/dist/chunk-RL34ZMLF.cjs.map +1 -0
  133. package/dist/{chunk-2HVAN7FF.js → chunk-RP7OLAVZ.js} +10 -3
  134. package/dist/chunk-RP7OLAVZ.js.map +1 -0
  135. package/dist/{chunk-K6VEDPBD.js → chunk-RPEPKUZQ.js} +12 -11
  136. package/dist/chunk-RPEPKUZQ.js.map +1 -0
  137. package/dist/{chunk-TU7U5XUE.cjs → chunk-SUT6SU4I.cjs} +8 -2
  138. package/dist/chunk-SUT6SU4I.cjs.map +1 -0
  139. package/dist/{chunk-DG5RFCGJ.cjs → chunk-T6MMZWHW.cjs} +427 -106
  140. package/dist/chunk-T6MMZWHW.cjs.map +1 -0
  141. package/dist/{chunk-RTD3NZ4G.js → chunk-TLOT3CIB.js} +6 -6
  142. package/dist/{chunk-RTD3NZ4G.js.map → chunk-TLOT3CIB.js.map} +1 -1
  143. package/dist/{chunk-3NNQG5XP.js → chunk-VG6A54JE.js} +3 -3
  144. package/dist/{chunk-3NNQG5XP.js.map → chunk-VG6A54JE.js.map} +1 -1
  145. package/dist/{chunk-QL62CV5V.js → chunk-VRPAOMXW.js} +25 -12
  146. package/dist/chunk-VRPAOMXW.js.map +1 -0
  147. package/dist/{chunk-EFP5PJBY.cjs → chunk-WMFH3SH2.cjs} +136 -94
  148. package/dist/chunk-WMFH3SH2.cjs.map +1 -0
  149. package/dist/{chunk-S4EHZQFI.js → chunk-WYSQECWW.js} +10 -10
  150. package/dist/{chunk-S4EHZQFI.js.map → chunk-WYSQECWW.js.map} +1 -1
  151. package/dist/{chunk-ERKUFMCT.js → chunk-X2LYM3QK.js} +3 -3
  152. package/dist/{chunk-ERKUFMCT.js.map → chunk-X2LYM3QK.js.map} +1 -1
  153. package/dist/{chunk-OGZ6ROYD.js → chunk-X3RINDH6.js} +6 -5
  154. package/dist/chunk-X3RINDH6.js.map +1 -0
  155. package/dist/{chunk-NGYGE7QW.cjs → chunk-X47OINMY.cjs} +17 -17
  156. package/dist/{chunk-NGYGE7QW.cjs.map → chunk-X47OINMY.cjs.map} +1 -1
  157. package/dist/{chunk-245BXYGJ.cjs → chunk-XCXPPGJ3.cjs} +13 -13
  158. package/dist/{chunk-245BXYGJ.cjs.map → chunk-XCXPPGJ3.cjs.map} +1 -1
  159. package/dist/{chunk-2CFH32YO.cjs → chunk-XEERRXWL.cjs} +32 -4
  160. package/dist/chunk-XEERRXWL.cjs.map +1 -0
  161. package/dist/{chunk-NUGBBASK.js → chunk-XOHBH6NQ.js} +4 -4
  162. package/dist/{chunk-NUGBBASK.js.map → chunk-XOHBH6NQ.js.map} +1 -1
  163. package/dist/{chunk-OLPARCPM.cjs → chunk-XUFQVLBC.cjs} +5 -5
  164. package/dist/{chunk-OLPARCPM.cjs.map → chunk-XUFQVLBC.cjs.map} +1 -1
  165. package/dist/{chunk-5XQIAEWJ.cjs → chunk-YMBKVVDF.cjs} +22 -21
  166. package/dist/chunk-YMBKVVDF.cjs.map +1 -0
  167. package/dist/{chunk-DZZBC6UV.cjs → chunk-ZCCXXT7V.cjs} +12 -12
  168. package/dist/{chunk-DZZBC6UV.cjs.map → chunk-ZCCXXT7V.cjs.map} +1 -1
  169. package/dist/{chunk-EBKNX5RM.cjs → chunk-ZHEQYOTL.cjs} +53 -52
  170. package/dist/chunk-ZHEQYOTL.cjs.map +1 -0
  171. package/dist/docs/SKILL.md +1 -1
  172. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  173. package/dist/{observational-memory-ZS2HJPUO-472SI4TK.cjs → observational-memory-UMDC4VC2-3I52URYY.cjs} +26 -26
  174. package/dist/{observational-memory-ZS2HJPUO-472SI4TK.cjs.map → observational-memory-UMDC4VC2-3I52URYY.cjs.map} +1 -1
  175. package/dist/{observational-memory-ZS2HJPUO-2ZBP2HCP.js → observational-memory-UMDC4VC2-X5QMTUND.js} +3 -3
  176. package/dist/{observational-memory-ZS2HJPUO-2ZBP2HCP.js.map → observational-memory-UMDC4VC2-X5QMTUND.js.map} +1 -1
  177. package/dist/server/auth/helpers.d.ts +9 -1
  178. package/dist/server/auth/helpers.d.ts.map +1 -1
  179. package/dist/server/auth/index.cjs +18 -14
  180. package/dist/server/auth/index.js +1 -1
  181. package/dist/server/handlers/a2a.cjs +10 -10
  182. package/dist/server/handlers/a2a.js +1 -1
  183. package/dist/server/handlers/agent-builder.cjs +16 -16
  184. package/dist/server/handlers/agent-builder.js +1 -1
  185. package/dist/server/handlers/agent-versions.cjs +8 -8
  186. package/dist/server/handlers/agent-versions.js +1 -1
  187. package/dist/server/handlers/agents.cjs +38 -38
  188. package/dist/server/handlers/agents.d.ts.map +1 -1
  189. package/dist/server/handlers/agents.js +1 -1
  190. package/dist/server/handlers/auth.cjs +11 -11
  191. package/dist/server/handlers/auth.d.ts.map +1 -1
  192. package/dist/server/handlers/auth.js +1 -1
  193. package/dist/server/handlers/background-tasks.cjs +4 -4
  194. package/dist/server/handlers/background-tasks.js +1 -1
  195. package/dist/server/handlers/channels.cjs +5 -5
  196. package/dist/server/handlers/channels.js +1 -1
  197. package/dist/server/handlers/conversations.cjs +5 -5
  198. package/dist/server/handlers/conversations.d.ts.map +1 -1
  199. package/dist/server/handlers/conversations.js +1 -1
  200. package/dist/server/handlers/datasets.cjs +26 -26
  201. package/dist/server/handlers/datasets.js +1 -1
  202. package/dist/server/handlers/logs.cjs +4 -4
  203. package/dist/server/handlers/logs.js +1 -1
  204. package/dist/server/handlers/mcp-client-versions.cjs +8 -8
  205. package/dist/server/handlers/mcp-client-versions.js +1 -1
  206. package/dist/server/handlers/mcp.cjs +9 -9
  207. package/dist/server/handlers/mcp.d.ts.map +1 -1
  208. package/dist/server/handlers/mcp.js +1 -1
  209. package/dist/server/handlers/memory.cjs +27 -27
  210. package/dist/server/handlers/memory.d.ts.map +1 -1
  211. package/dist/server/handlers/memory.js +1 -1
  212. package/dist/server/handlers/observability-new-endpoints.cjs +31 -27
  213. package/dist/server/handlers/observability-new-endpoints.d.ts +315 -19
  214. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  215. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  216. package/dist/server/handlers/observability-shared.cjs +5 -5
  217. package/dist/server/handlers/observability-shared.d.ts +6 -0
  218. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  219. package/dist/server/handlers/observability-shared.js +1 -1
  220. package/dist/server/handlers/observability.cjs +39 -35
  221. package/dist/server/handlers/observability.js +2 -2
  222. package/dist/server/handlers/processor-providers.cjs +3 -3
  223. package/dist/server/handlers/processor-providers.js +1 -1
  224. package/dist/server/handlers/processors.cjs +4 -4
  225. package/dist/server/handlers/processors.js +1 -1
  226. package/dist/server/handlers/prompt-block-versions.cjs +8 -8
  227. package/dist/server/handlers/prompt-block-versions.js +1 -1
  228. package/dist/server/handlers/responses.cjs +4 -4
  229. package/dist/server/handlers/responses.d.ts.map +1 -1
  230. package/dist/server/handlers/responses.js +1 -1
  231. package/dist/server/handlers/responses.storage.cjs +8 -8
  232. package/dist/server/handlers/responses.storage.js +1 -1
  233. package/dist/server/handlers/schedules.cjs +28 -0
  234. package/dist/server/handlers/schedules.cjs.map +1 -0
  235. package/dist/server/handlers/schedules.d.ts +345 -0
  236. package/dist/server/handlers/schedules.d.ts.map +1 -0
  237. package/dist/server/handlers/schedules.js +3 -0
  238. package/dist/server/handlers/schedules.js.map +1 -0
  239. package/dist/server/handlers/scorer-versions.cjs +8 -8
  240. package/dist/server/handlers/scorer-versions.js +1 -1
  241. package/dist/server/handlers/scores.cjs +7 -7
  242. package/dist/server/handlers/scores.js +1 -1
  243. package/dist/server/handlers/stored-agents.cjs +7 -7
  244. package/dist/server/handlers/stored-agents.js +1 -1
  245. package/dist/server/handlers/stored-mcp-clients.cjs +6 -6
  246. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  247. package/dist/server/handlers/stored-prompt-blocks.cjs +6 -6
  248. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  249. package/dist/server/handlers/stored-scorers.cjs +6 -6
  250. package/dist/server/handlers/stored-scorers.js +1 -1
  251. package/dist/server/handlers/stored-skills.cjs +7 -7
  252. package/dist/server/handlers/stored-skills.js +1 -1
  253. package/dist/server/handlers/stored-workspaces.cjs +6 -6
  254. package/dist/server/handlers/stored-workspaces.js +1 -1
  255. package/dist/server/handlers/system.cjs +2 -2
  256. package/dist/server/handlers/system.js +1 -1
  257. package/dist/server/handlers/tool-providers.cjs +5 -5
  258. package/dist/server/handlers/tool-providers.js +1 -1
  259. package/dist/server/handlers/tools.cjs +6 -6
  260. package/dist/server/handlers/tools.d.ts.map +1 -1
  261. package/dist/server/handlers/tools.js +1 -1
  262. package/dist/server/handlers/utils.cjs +13 -9
  263. package/dist/server/handlers/utils.d.ts +15 -0
  264. package/dist/server/handlers/utils.d.ts.map +1 -1
  265. package/dist/server/handlers/utils.js +1 -1
  266. package/dist/server/handlers/vector.cjs +16 -16
  267. package/dist/server/handlers/vector.js +1 -1
  268. package/dist/server/handlers/voice.cjs +8 -8
  269. package/dist/server/handlers/voice.js +1 -1
  270. package/dist/server/handlers/workflows.cjs +24 -24
  271. package/dist/server/handlers/workflows.d.ts.map +1 -1
  272. package/dist/server/handlers/workflows.js +1 -1
  273. package/dist/server/handlers/workspace.cjs +26 -26
  274. package/dist/server/handlers/workspace.js +1 -1
  275. package/dist/server/handlers.cjs +40 -40
  276. package/dist/server/handlers.js +15 -15
  277. package/dist/server/schemas/index.cjs +232 -232
  278. package/dist/server/schemas/index.js +8 -8
  279. package/dist/server/schemas/schedules.d.ts +204 -0
  280. package/dist/server/schemas/schedules.d.ts.map +1 -0
  281. package/dist/server/server-adapter/index.cjs +391 -319
  282. package/dist/server/server-adapter/index.cjs.map +1 -1
  283. package/dist/server/server-adapter/index.d.ts +9 -0
  284. package/dist/server/server-adapter/index.d.ts.map +1 -1
  285. package/dist/server/server-adapter/index.js +112 -41
  286. package/dist/server/server-adapter/index.js.map +1 -1
  287. package/dist/server/server-adapter/routes/index.d.ts +19 -3
  288. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  289. package/dist/server/server-adapter/routes/observability.d.ts +156 -9
  290. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  291. package/dist/server/server-adapter/routes/route-builder.d.ts +15 -1
  292. package/dist/server/server-adapter/routes/route-builder.d.ts.map +1 -1
  293. package/dist/server/server-adapter/routes/schedules.d.ts +3 -0
  294. package/dist/server/server-adapter/routes/schedules.d.ts.map +1 -0
  295. package/package.json +6 -4
  296. package/dist/chunk-2CFH32YO.cjs.map +0 -1
  297. package/dist/chunk-2HVAN7FF.js.map +0 -1
  298. package/dist/chunk-4BSJHDYP.js.map +0 -1
  299. package/dist/chunk-53YFG5AY.js.map +0 -1
  300. package/dist/chunk-5XQIAEWJ.cjs.map +0 -1
  301. package/dist/chunk-6SBH6SYP.js.map +0 -1
  302. package/dist/chunk-AMC32S2M.js.map +0 -1
  303. package/dist/chunk-ARZ6W3O3.cjs.map +0 -1
  304. package/dist/chunk-DBPJYWAH.js.map +0 -1
  305. package/dist/chunk-DG5RFCGJ.cjs.map +0 -1
  306. package/dist/chunk-EBKNX5RM.cjs.map +0 -1
  307. package/dist/chunk-EFP5PJBY.cjs.map +0 -1
  308. package/dist/chunk-EPM6ILRW.js.map +0 -1
  309. package/dist/chunk-H6NJWTER.cjs.map +0 -1
  310. package/dist/chunk-IQA7HL2V.js.map +0 -1
  311. package/dist/chunk-JQUNK754.js.map +0 -1
  312. package/dist/chunk-JZNOIGOQ.js.map +0 -1
  313. package/dist/chunk-K6VEDPBD.js.map +0 -1
  314. package/dist/chunk-KI7TGMMV.cjs.map +0 -1
  315. package/dist/chunk-LY6Q36YN.cjs.map +0 -1
  316. package/dist/chunk-OGV23F3H.cjs.map +0 -1
  317. package/dist/chunk-OGZ6ROYD.js.map +0 -1
  318. package/dist/chunk-QL62CV5V.js.map +0 -1
  319. package/dist/chunk-RPMBPQNO.cjs.map +0 -1
  320. package/dist/chunk-TU7U5XUE.cjs.map +0 -1
  321. package/dist/chunk-UZRD3SEA.js.map +0 -1
  322. package/dist/chunk-XG2VRXG5.cjs.map +0 -1
  323. package/dist/chunk-Y2SA2JZT.cjs.map +0 -1
@@ -1,10 +1,11 @@
1
- import { memoryStatusResponseSchema, getMemoryStatusQuerySchema, memoryConfigResponseSchema, getMemoryConfigQuerySchema, getObservationalMemoryResponseSchema, getObservationalMemoryQuerySchema, awaitBufferStatusResponseSchema, awaitBufferStatusBodySchema, listThreadsResponseSchema, listThreadsQuerySchema, getThreadByIdResponseSchema, getThreadByIdQuerySchema, threadIdPathParams, listMessagesResponseSchema, listMessagesQuerySchema, getWorkingMemoryResponseSchema, getWorkingMemoryQuerySchema, saveMessagesResponseSchema, saveMessagesBodySchema, agentIdQuerySchema, createThreadBodySchema, updateThreadBodySchema, deleteThreadResponseSchema, deleteThreadQuerySchema, cloneThreadResponseSchema, cloneThreadBodySchema, updateWorkingMemoryResponseSchema, updateWorkingMemoryBodySchema, deleteMessagesResponseSchema, deleteMessagesBodySchema, deleteMessagesQuerySchema, searchMemoryResponseSchema, searchMemoryQuerySchema, getMemoryStatusNetworkQuerySchema, listThreadsNetworkQuerySchema, getThreadByIdNetworkQuerySchema, listMessagesNetworkQuerySchema, saveMessagesNetworkQuerySchema, createThreadNetworkQuerySchema, updateThreadNetworkQuerySchema, deleteThreadNetworkQuerySchema, deleteMessagesNetworkQuerySchema } from './chunk-CJFSLVFA.js';
2
1
  import { isGatewayAgentAsync, getGatewayClient, toLocalOMRecord, toLocalThread, toLocalMessage } from './chunk-UTRP4B2Q.js';
3
- import { getEffectiveResourceId, getEffectiveThreadId, validateBody, validateThreadOwnership } from './chunk-JZNOIGOQ.js';
4
- import { createRoute } from './chunk-PA2BYLKF.js';
2
+ import { memoryStatusResponseSchema, getMemoryStatusQuerySchema, memoryConfigResponseSchema, getMemoryConfigQuerySchema, getObservationalMemoryResponseSchema, getObservationalMemoryQuerySchema, awaitBufferStatusResponseSchema, awaitBufferStatusBodySchema, listThreadsResponseSchema, listThreadsQuerySchema, getThreadByIdResponseSchema, getThreadByIdQuerySchema, threadIdPathParams, listMessagesResponseSchema, listMessagesQuerySchema, getWorkingMemoryResponseSchema, getWorkingMemoryQuerySchema, saveMessagesResponseSchema, saveMessagesBodySchema, agentIdQuerySchema, createThreadBodySchema, updateThreadBodySchema, deleteThreadResponseSchema, deleteThreadQuerySchema, cloneThreadResponseSchema, cloneThreadBodySchema, updateWorkingMemoryResponseSchema, updateWorkingMemoryBodySchema, deleteMessagesResponseSchema, deleteMessagesBodySchema, deleteMessagesQuerySchema, searchMemoryResponseSchema, searchMemoryQuerySchema, getMemoryStatusNetworkQuerySchema, listThreadsNetworkQuerySchema, getThreadByIdNetworkQuerySchema, listMessagesNetworkQuerySchema, saveMessagesNetworkQuerySchema, createThreadNetworkQuerySchema, updateThreadNetworkQuerySchema, deleteThreadNetworkQuerySchema, deleteMessagesNetworkQuerySchema } from './chunk-CJFSLVFA.js';
3
+ import { getEffectiveResourceId, getEffectiveThreadId, validateBody, enforceThreadAccess } from './chunk-K2KWDOYR.js';
5
4
  import { handleError } from './chunk-P23KBWKB.js';
5
+ import { createRoute } from './chunk-KDUX3YN3.js';
6
6
  import { HTTPException } from './chunk-6QWQZI4Q.js';
7
7
  import { __export } from './chunk-PR4QN5HX.js';
8
+ import { MastraFGAPermissions } from '@mastra/core/auth/ee';
8
9
  import { generateEmptyFromSchema } from '@mastra/core/utils';
9
10
 
10
11
  // src/server/handlers/memory.ts
@@ -37,6 +38,82 @@ __export(memory_exports, {
37
38
  UPDATE_WORKING_MEMORY_ROUTE: () => UPDATE_WORKING_MEMORY_ROUTE,
38
39
  getTextContent: () => getTextContent
39
40
  });
41
+ function hasFGAUser(requestContext) {
42
+ const user = requestContext?.get("user");
43
+ return !!user && typeof user === "object";
44
+ }
45
+ function shouldFilterThreadsWithFGA(mastra, requestContext) {
46
+ return !!mastra.getServer?.()?.fga && hasFGAUser(requestContext);
47
+ }
48
+ async function filterAccessibleThreads({
49
+ mastra,
50
+ requestContext,
51
+ threads
52
+ }) {
53
+ const fgaProvider = mastra.getServer?.()?.fga;
54
+ if (!fgaProvider || !hasFGAUser(requestContext) || threads.length === 0) {
55
+ return threads;
56
+ }
57
+ return fgaProvider.filterAccessible(
58
+ requestContext.get("user"),
59
+ threads,
60
+ "thread",
61
+ MastraFGAPermissions.MEMORY_READ
62
+ );
63
+ }
64
+ function paginateThreads({
65
+ threads,
66
+ page,
67
+ perPage
68
+ }) {
69
+ const effectivePage = page ?? 0;
70
+ const effectivePerPage = perPage ?? 100;
71
+ if (effectivePerPage === false) {
72
+ return {
73
+ threads,
74
+ page: effectivePage,
75
+ perPage: false,
76
+ total: threads.length,
77
+ hasMore: false
78
+ };
79
+ }
80
+ const start = effectivePage * effectivePerPage;
81
+ const pagedThreads = threads.slice(start, start + effectivePerPage);
82
+ return {
83
+ threads: pagedThreads,
84
+ page: effectivePage,
85
+ perPage: effectivePerPage,
86
+ total: threads.length,
87
+ hasMore: start + pagedThreads.length < threads.length
88
+ };
89
+ }
90
+ async function enforceDeleteMessagesThreadAccess({
91
+ mastra,
92
+ requestContext,
93
+ memoryStore,
94
+ messageIds,
95
+ effectiveResourceId
96
+ }) {
97
+ const { messages } = await memoryStore.listMessagesById({ messageIds });
98
+ const threadIds = [...new Set(messages.map((m) => m.threadId).filter(Boolean))];
99
+ if (messages.some((message) => !message.threadId)) {
100
+ throw new HTTPException(403, { message: "Access denied: unable to verify message thread access" });
101
+ }
102
+ for (const threadId of threadIds) {
103
+ const thread = await memoryStore.getThreadById({ threadId });
104
+ if (!thread) {
105
+ throw new HTTPException(403, { message: "Access denied: unable to verify message thread access" });
106
+ }
107
+ await enforceThreadAccess({
108
+ mastra,
109
+ requestContext,
110
+ threadId,
111
+ thread,
112
+ effectiveResourceId,
113
+ permission: MastraFGAPermissions.MEMORY_DELETE
114
+ });
115
+ }
116
+ }
40
117
  function getTextContent(message) {
41
118
  if (typeof message.content === "string") {
42
119
  return message.content;
@@ -497,6 +574,28 @@ var LIST_THREADS_ROUTE = createRoute({
497
574
  if (agent && isGateway) {
498
575
  const gwClient = getGatewayClient();
499
576
  if (gwClient) {
577
+ if (shouldFilterThreadsWithFGA(mastra, requestContext)) {
578
+ const initialResult = await gwClient.listThreads({
579
+ resourceId: effectiveResourceId,
580
+ limit: 1,
581
+ offset: 0
582
+ });
583
+ const allThreads = initialResult.total > 0 ? (await gwClient.listThreads({
584
+ resourceId: effectiveResourceId,
585
+ limit: initialResult.total,
586
+ offset: 0
587
+ })).threads.map(toLocalThread) : [];
588
+ const accessibleThreads = await filterAccessibleThreads({
589
+ mastra,
590
+ requestContext,
591
+ threads: allThreads
592
+ });
593
+ return paginateThreads({
594
+ threads: accessibleThreads,
595
+ page,
596
+ perPage
597
+ });
598
+ }
500
599
  const effectivePage = page ?? 0;
501
600
  const effectivePerPage = perPage ?? 100;
502
601
  const offset = effectivePage * effectivePerPage;
@@ -523,25 +622,61 @@ var LIST_THREADS_ROUTE = createRoute({
523
622
  }
524
623
  const memory = await getMemoryFromContext({ mastra, agentId, requestContext, allowMissingAgent: true });
525
624
  if (memory) {
526
- const result = await memory.listThreads({
527
- filter,
625
+ const result = await memory.listThreads(
626
+ shouldFilterThreadsWithFGA(mastra, requestContext) ? {
627
+ filter,
628
+ perPage: false,
629
+ orderBy
630
+ } : {
631
+ filter,
632
+ page,
633
+ perPage,
634
+ orderBy
635
+ }
636
+ );
637
+ if (!shouldFilterThreadsWithFGA(mastra, requestContext)) {
638
+ return result;
639
+ }
640
+ const accessibleThreads = await filterAccessibleThreads({
641
+ mastra,
642
+ requestContext,
643
+ threads: result.threads
644
+ });
645
+ return paginateThreads({
646
+ threads: accessibleThreads,
528
647
  page,
529
- perPage,
530
- orderBy
648
+ perPage
531
649
  });
532
- return result;
533
650
  }
534
651
  const storage = getStorageFromContext({ mastra });
535
652
  if (storage) {
536
653
  const memoryStore = await storage.getStore("memory");
537
654
  if (memoryStore) {
538
- const result = await memoryStore.listThreads({
539
- filter,
655
+ const result = await memoryStore.listThreads(
656
+ shouldFilterThreadsWithFGA(mastra, requestContext) ? {
657
+ filter,
658
+ perPage: false,
659
+ orderBy
660
+ } : {
661
+ filter,
662
+ page,
663
+ perPage,
664
+ orderBy
665
+ }
666
+ );
667
+ if (!shouldFilterThreadsWithFGA(mastra, requestContext)) {
668
+ return result;
669
+ }
670
+ const accessibleThreads = await filterAccessibleThreads({
671
+ mastra,
672
+ requestContext,
673
+ threads: result.threads
674
+ });
675
+ return paginateThreads({
676
+ threads: accessibleThreads,
540
677
  page,
541
- perPage,
542
- orderBy
678
+ perPage
543
679
  });
544
- return result;
545
680
  }
546
681
  }
547
682
  throw new HTTPException(400, { message: "Memory is not initialized" });
@@ -583,7 +718,13 @@ var GET_THREAD_BY_ID_ROUTE = createRoute({
583
718
  };
584
719
  }
585
720
  const thread = toLocalThread(result.thread);
586
- await validateThreadOwnership(thread, effectiveResourceId);
721
+ await enforceThreadAccess({
722
+ mastra,
723
+ requestContext,
724
+ threadId: effectiveThreadId,
725
+ thread,
726
+ effectiveResourceId
727
+ });
587
728
  return thread;
588
729
  }
589
730
  }
@@ -593,7 +734,13 @@ var GET_THREAD_BY_ID_ROUTE = createRoute({
593
734
  if (!thread) {
594
735
  throw new HTTPException(404, { message: "Thread not found" });
595
736
  }
596
- await validateThreadOwnership(thread, effectiveResourceId);
737
+ await enforceThreadAccess({
738
+ mastra,
739
+ requestContext,
740
+ threadId: effectiveThreadId,
741
+ thread,
742
+ effectiveResourceId
743
+ });
597
744
  return thread;
598
745
  }
599
746
  const storage = getStorageFromContext({ mastra });
@@ -604,7 +751,13 @@ var GET_THREAD_BY_ID_ROUTE = createRoute({
604
751
  if (!thread) {
605
752
  throw new HTTPException(404, { message: "Thread not found" });
606
753
  }
607
- await validateThreadOwnership(thread, effectiveResourceId);
754
+ await enforceThreadAccess({
755
+ mastra,
756
+ requestContext,
757
+ threadId: effectiveThreadId,
758
+ thread,
759
+ effectiveResourceId
760
+ });
608
761
  return thread;
609
762
  }
610
763
  }
@@ -651,7 +804,13 @@ var LIST_MESSAGES_ROUTE = createRoute({
651
804
  if (gwClient) {
652
805
  const threadResult = await gwClient.getThread(effectiveThreadId);
653
806
  if (threadResult) {
654
- await validateThreadOwnership(toLocalThread(threadResult.thread), effectiveResourceId);
807
+ await enforceThreadAccess({
808
+ mastra,
809
+ requestContext,
810
+ threadId: effectiveThreadId,
811
+ thread: toLocalThread(threadResult.thread),
812
+ effectiveResourceId
813
+ });
655
814
  }
656
815
  const effectivePage = page ?? 0;
657
816
  const effectivePerPage = perPage ?? 100;
@@ -676,7 +835,13 @@ var LIST_MESSAGES_ROUTE = createRoute({
676
835
  if (!thread) {
677
836
  throw new HTTPException(404, { message: "Thread not found" });
678
837
  }
679
- await validateThreadOwnership(thread, effectiveResourceId);
838
+ await enforceThreadAccess({
839
+ mastra,
840
+ requestContext,
841
+ threadId: effectiveThreadId,
842
+ thread,
843
+ effectiveResourceId
844
+ });
680
845
  const result = await memory.recall({
681
846
  threadId: effectiveThreadId,
682
847
  resourceId: effectiveResourceId,
@@ -697,7 +862,13 @@ var LIST_MESSAGES_ROUTE = createRoute({
697
862
  if (!thread) {
698
863
  throw new HTTPException(404, { message: "Thread not found" });
699
864
  }
700
- await validateThreadOwnership(thread, effectiveResourceId);
865
+ await enforceThreadAccess({
866
+ mastra,
867
+ requestContext,
868
+ threadId: effectiveThreadId,
869
+ thread,
870
+ effectiveResourceId
871
+ });
701
872
  const result = await memoryStore.listMessages({
702
873
  threadId: effectiveThreadId,
703
874
  resourceId: effectiveResourceId,
@@ -741,8 +912,16 @@ var GET_WORKING_MEMORY_ROUTE = createRoute({
741
912
  return { workingMemory: null, source: "thread", workingMemoryTemplate: null, threadExists: false };
742
913
  }
743
914
  const thread = await memory.getThreadById({ threadId: effectiveThreadId });
744
- if (thread) {
745
- await validateThreadOwnership(thread, effectiveResourceId);
915
+ const config = memory.getMergedThreadConfig(memoryConfig || {});
916
+ const source = config.workingMemory?.scope !== "thread" && effectiveResourceId ? "resource" : "thread";
917
+ if (thread || source === "resource") {
918
+ await enforceThreadAccess({
919
+ mastra,
920
+ requestContext,
921
+ threadId: effectiveThreadId,
922
+ thread,
923
+ effectiveResourceId
924
+ });
746
925
  }
747
926
  const threadExists = !!thread;
748
927
  const template = await memory.getWorkingMemoryTemplate({ memoryConfig });
@@ -752,8 +931,6 @@ var GET_WORKING_MEMORY_ROUTE = createRoute({
752
931
  resourceId: effectiveResourceId,
753
932
  memoryConfig
754
933
  });
755
- const config = memory.getMergedThreadConfig(memoryConfig || {});
756
- const source = config.workingMemory?.scope !== "thread" && effectiveResourceId ? "resource" : "thread";
757
934
  return { workingMemory, source, workingMemoryTemplate, threadExists };
758
935
  } catch (error) {
759
936
  return handleError(error, "Error getting working memory");
@@ -784,6 +961,20 @@ var SAVE_MESSAGES_ROUTE = createRoute({
784
961
  if (!Array.isArray(messages)) {
785
962
  throw new HTTPException(400, { message: "Messages should be an array" });
786
963
  }
964
+ const resourceIdByThread = /* @__PURE__ */ new Map();
965
+ for (const message of messages) {
966
+ if (!message.threadId || !message.resourceId) {
967
+ continue;
968
+ }
969
+ const existingResourceId = resourceIdByThread.get(message.threadId);
970
+ if (!existingResourceId) {
971
+ resourceIdByThread.set(message.threadId, message.resourceId);
972
+ } else if (existingResourceId !== message.resourceId) {
973
+ throw new HTTPException(400, {
974
+ message: "All messages for the same threadId must use the same resourceId."
975
+ });
976
+ }
977
+ }
787
978
  const invalidMessages = messages.filter((message) => !message.threadId || !message.resourceId);
788
979
  if (invalidMessages.length > 0) {
789
980
  throw new HTTPException(400, {
@@ -800,7 +991,27 @@ var SAVE_MESSAGES_ROUTE = createRoute({
800
991
  const threadIds = [...new Set(messages.map((m) => m.threadId).filter(Boolean))];
801
992
  for (const threadId of threadIds) {
802
993
  const thread = await memory.getThreadById({ threadId });
803
- await validateThreadOwnership(thread, effectiveResourceId);
994
+ await enforceThreadAccess({
995
+ mastra,
996
+ requestContext,
997
+ threadId,
998
+ thread,
999
+ effectiveResourceId,
1000
+ permission: MastraFGAPermissions.MEMORY_WRITE
1001
+ });
1002
+ }
1003
+ } else {
1004
+ const threadIds = [...new Set(messages.map((m) => m.threadId).filter(Boolean))];
1005
+ for (const threadId of threadIds) {
1006
+ const thread = await memory.getThreadById({ threadId });
1007
+ await enforceThreadAccess({
1008
+ mastra,
1009
+ requestContext,
1010
+ threadId,
1011
+ thread,
1012
+ effectiveResourceId: resourceIdByThread.get(threadId),
1013
+ permission: MastraFGAPermissions.MEMORY_WRITE
1014
+ });
804
1015
  }
805
1016
  }
806
1017
  const processedMessages = messages.map((message) => ({
@@ -829,13 +1040,21 @@ var CREATE_THREAD_ROUTE = createRoute({
829
1040
  handler: async ({ mastra, agentId, resourceId, title, metadata, threadId, requestContext }) => {
830
1041
  try {
831
1042
  const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
1043
+ const effectiveThreadId = threadId ?? mastra.generateId();
1044
+ validateBody({ resourceId: effectiveResourceId });
1045
+ await enforceThreadAccess({
1046
+ mastra,
1047
+ requestContext,
1048
+ threadId: effectiveThreadId,
1049
+ effectiveResourceId,
1050
+ permission: MastraFGAPermissions.MEMORY_WRITE
1051
+ });
832
1052
  const agent = await getAgentFromContext({ mastra, agentId, requestContext });
833
1053
  if (agent && await isGatewayAgentAsync(agent)) {
834
1054
  const gwClient = getGatewayClient();
835
1055
  if (gwClient) {
836
- validateBody({ resourceId: effectiveResourceId });
837
1056
  const result2 = await gwClient.createThread({
838
- id: threadId,
1057
+ id: effectiveThreadId,
839
1058
  resourceId: effectiveResourceId,
840
1059
  title,
841
1060
  metadata
@@ -847,12 +1066,11 @@ var CREATE_THREAD_ROUTE = createRoute({
847
1066
  if (!memory) {
848
1067
  throw new HTTPException(400, { message: "Memory is not initialized" });
849
1068
  }
850
- validateBody({ resourceId: effectiveResourceId });
851
1069
  const result = await memory.createThread({
852
1070
  resourceId: effectiveResourceId,
853
1071
  title,
854
1072
  metadata,
855
- threadId
1073
+ threadId: effectiveThreadId
856
1074
  });
857
1075
  return result;
858
1076
  } catch (error) {
@@ -883,7 +1101,14 @@ var UPDATE_THREAD_ROUTE = createRoute({
883
1101
  if (gwClient) {
884
1102
  const existing = await gwClient.getThread(effectiveThreadId);
885
1103
  if (existing) {
886
- await validateThreadOwnership(toLocalThread(existing.thread), effectiveResourceId);
1104
+ await enforceThreadAccess({
1105
+ mastra,
1106
+ requestContext,
1107
+ threadId: effectiveThreadId,
1108
+ thread: toLocalThread(existing.thread),
1109
+ effectiveResourceId,
1110
+ permission: MastraFGAPermissions.MEMORY_WRITE
1111
+ });
887
1112
  }
888
1113
  const result2 = await gwClient.updateThread(effectiveThreadId, { title, metadata });
889
1114
  if (!result2) {
@@ -901,7 +1126,14 @@ var UPDATE_THREAD_ROUTE = createRoute({
901
1126
  if (!thread) {
902
1127
  throw new HTTPException(404, { message: "Thread not found" });
903
1128
  }
904
- await validateThreadOwnership(thread, effectiveResourceId);
1129
+ await enforceThreadAccess({
1130
+ mastra,
1131
+ requestContext,
1132
+ threadId: effectiveThreadId,
1133
+ thread,
1134
+ effectiveResourceId,
1135
+ permission: MastraFGAPermissions.MEMORY_WRITE
1136
+ });
905
1137
  const updatedThread = {
906
1138
  ...thread,
907
1139
  title: title || thread.title,
@@ -943,7 +1175,14 @@ var DELETE_THREAD_ROUTE = createRoute({
943
1175
  if (gwClient) {
944
1176
  const existing = await gwClient.getThread(effectiveThreadId);
945
1177
  if (existing) {
946
- await validateThreadOwnership(toLocalThread(existing.thread), effectiveResourceId);
1178
+ await enforceThreadAccess({
1179
+ mastra,
1180
+ requestContext,
1181
+ threadId: effectiveThreadId,
1182
+ thread: toLocalThread(existing.thread),
1183
+ effectiveResourceId,
1184
+ permission: MastraFGAPermissions.MEMORY_DELETE
1185
+ });
947
1186
  }
948
1187
  const deleteResult = await gwClient.deleteThread(effectiveThreadId);
949
1188
  if (!deleteResult.ok) {
@@ -960,7 +1199,14 @@ var DELETE_THREAD_ROUTE = createRoute({
960
1199
  if (!thread) {
961
1200
  throw new HTTPException(404, { message: "Thread not found" });
962
1201
  }
963
- await validateThreadOwnership(thread, effectiveResourceId);
1202
+ await enforceThreadAccess({
1203
+ mastra,
1204
+ requestContext,
1205
+ threadId: effectiveThreadId,
1206
+ thread,
1207
+ effectiveResourceId,
1208
+ permission: MastraFGAPermissions.MEMORY_DELETE
1209
+ });
964
1210
  await memory.deleteThread(effectiveThreadId);
965
1211
  return { result: "Thread deleted" };
966
1212
  } catch (error) {
@@ -984,6 +1230,7 @@ var CLONE_THREAD_ROUTE = createRoute({
984
1230
  try {
985
1231
  const effectiveThreadId = getEffectiveThreadId(requestContext, threadId);
986
1232
  const effectiveResourceId = getEffectiveResourceId(requestContext, resourceId);
1233
+ const effectiveNewThreadId = newThreadId ?? mastra.generateId();
987
1234
  validateBody({ threadId: effectiveThreadId });
988
1235
  const memory = await getMemoryFromContext({ mastra, agentId, requestContext });
989
1236
  if (!memory) {
@@ -993,12 +1240,25 @@ var CLONE_THREAD_ROUTE = createRoute({
993
1240
  if (!sourceThread) {
994
1241
  throw new HTTPException(404, { message: "Source thread not found" });
995
1242
  }
996
- await validateThreadOwnership(sourceThread, effectiveResourceId);
1243
+ const cloneResourceId = effectiveResourceId ?? sourceThread.resourceId ?? void 0;
1244
+ await enforceThreadAccess({
1245
+ mastra,
1246
+ requestContext,
1247
+ threadId: effectiveThreadId,
1248
+ thread: sourceThread,
1249
+ effectiveResourceId
1250
+ });
1251
+ await enforceThreadAccess({
1252
+ mastra,
1253
+ requestContext,
1254
+ threadId: effectiveNewThreadId,
1255
+ effectiveResourceId: cloneResourceId,
1256
+ permission: MastraFGAPermissions.MEMORY_WRITE
1257
+ });
997
1258
  const result = await memory.cloneThread({
998
1259
  sourceThreadId: effectiveThreadId,
999
- newThreadId,
1000
- // Use effective resourceId for the cloned thread
1001
- resourceId: effectiveResourceId,
1260
+ newThreadId: effectiveNewThreadId,
1261
+ resourceId: cloneResourceId,
1002
1262
  title,
1003
1263
  metadata,
1004
1264
  options
@@ -1038,7 +1298,14 @@ var UPDATE_WORKING_MEMORY_ROUTE = createRoute({
1038
1298
  if (!thread) {
1039
1299
  throw new HTTPException(404, { message: "Thread not found" });
1040
1300
  }
1041
- await validateThreadOwnership(thread, effectiveResourceId);
1301
+ await enforceThreadAccess({
1302
+ mastra,
1303
+ requestContext,
1304
+ threadId: effectiveThreadId,
1305
+ thread,
1306
+ effectiveResourceId,
1307
+ permission: MastraFGAPermissions.MEMORY_WRITE
1308
+ });
1042
1309
  await memory.updateWorkingMemory({
1043
1310
  threadId: effectiveThreadId,
1044
1311
  resourceId: effectiveResourceId,
@@ -1087,16 +1354,28 @@ var DELETE_MESSAGES_ROUTE = createRoute({
1087
1354
  if (!memoryStore) {
1088
1355
  throw new HTTPException(400, { message: "Memory is not initialized" });
1089
1356
  }
1090
- const { messages } = await memoryStore.listMessagesById({ messageIds: stringIds });
1091
- const threadIds = [...new Set(messages.map((m) => m.threadId).filter(Boolean))];
1092
- for (const threadId of threadIds) {
1093
- const thread = await memoryStore.getThreadById({ threadId });
1094
- if (thread && thread.resourceId && thread.resourceId !== effectiveResourceId) {
1095
- throw new HTTPException(403, {
1096
- message: "Access denied: message belongs to a thread owned by a different resource"
1097
- });
1098
- }
1357
+ await enforceDeleteMessagesThreadAccess({
1358
+ mastra,
1359
+ requestContext,
1360
+ memoryStore,
1361
+ messageIds: stringIds,
1362
+ effectiveResourceId
1363
+ });
1364
+ } else if (stringIds.length > 0) {
1365
+ const storage = memory?.storage || getStorageFromContext({ mastra });
1366
+ if (!storage) {
1367
+ throw new HTTPException(400, { message: "Memory is not initialized" });
1368
+ }
1369
+ const memoryStore = await storage.getStore("memory");
1370
+ if (!memoryStore) {
1371
+ throw new HTTPException(400, { message: "Memory is not initialized" });
1099
1372
  }
1373
+ await enforceDeleteMessagesThreadAccess({
1374
+ mastra,
1375
+ requestContext,
1376
+ memoryStore,
1377
+ messageIds: stringIds
1378
+ });
1100
1379
  }
1101
1380
  if (memory) {
1102
1381
  await memory.deleteMessages(normalizedIds);
@@ -1153,6 +1432,30 @@ var SEARCH_MEMORY_ROUTE = createRoute({
1153
1432
  const hasSemanticRecall = !!config?.semanticRecall;
1154
1433
  const resourceScope = typeof config?.semanticRecall === "object" ? config?.semanticRecall?.scope !== "thread" : true;
1155
1434
  const searchResults = [];
1435
+ let accessibleThreadsForResource;
1436
+ let accessibleThreadIds;
1437
+ if (resourceScope && effectiveResourceId && shouldFilterThreadsWithFGA(mastra, requestContext)) {
1438
+ const { threads } = await memory.listThreads({
1439
+ filter: { resourceId: effectiveResourceId },
1440
+ perPage: false,
1441
+ orderBy: { field: "updatedAt", direction: "DESC" }
1442
+ });
1443
+ accessibleThreadsForResource = await filterAccessibleThreads({
1444
+ mastra,
1445
+ requestContext,
1446
+ threads
1447
+ });
1448
+ accessibleThreadIds = new Set(accessibleThreadsForResource.map((thread) => thread.id));
1449
+ if (accessibleThreadsForResource.length === 0) {
1450
+ return {
1451
+ results: [],
1452
+ count: 0,
1453
+ query: searchQuery,
1454
+ searchScope: resourceScope ? "resource" : "thread",
1455
+ searchType: hasSemanticRecall ? "semantic" : "text"
1456
+ };
1457
+ }
1458
+ }
1156
1459
  if (effectiveThreadId && !resourceScope) {
1157
1460
  const thread = await memory.getThreadById({ threadId: effectiveThreadId });
1158
1461
  if (!thread) {
@@ -1164,16 +1467,22 @@ var SEARCH_MEMORY_ROUTE = createRoute({
1164
1467
  searchType: hasSemanticRecall ? "semantic" : "text"
1165
1468
  };
1166
1469
  }
1167
- await validateThreadOwnership(thread, effectiveResourceId);
1470
+ await enforceThreadAccess({
1471
+ mastra,
1472
+ requestContext,
1473
+ threadId: effectiveThreadId,
1474
+ thread,
1475
+ effectiveResourceId
1476
+ });
1168
1477
  }
1169
1478
  let searchThreadId = effectiveThreadId;
1170
1479
  if (!searchThreadId) {
1171
- const { threads } = await memory.listThreads({
1480
+ const threads = accessibleThreadsForResource ?? (await memory.listThreads({
1172
1481
  filter: { resourceId: effectiveResourceId },
1173
1482
  page: 0,
1174
1483
  perPage: 1,
1175
1484
  orderBy: { field: "updatedAt", direction: "DESC" }
1176
- });
1485
+ })).threads;
1177
1486
  if (threads.length === 0) {
1178
1487
  return {
1179
1488
  results: [],
@@ -1205,12 +1514,24 @@ var SEARCH_MEMORY_ROUTE = createRoute({
1205
1514
  threadConfig: config,
1206
1515
  vectorSearchString: threadConfig.semanticRecall && searchQuery ? searchQuery : void 0
1207
1516
  });
1517
+ const accessibleMessages = accessibleThreadIds ? result.messages.filter(
1518
+ (message) => accessibleThreadIds.has(message.threadId || searchThreadId)
1519
+ ) : result.messages;
1520
+ if (accessibleMessages.length === 0) {
1521
+ return {
1522
+ results: [],
1523
+ count: 0,
1524
+ query: searchQuery,
1525
+ searchScope: resourceScope ? "resource" : "thread",
1526
+ searchType: hasSemanticRecall ? "semantic" : "text"
1527
+ };
1528
+ }
1208
1529
  const threadIds = Array.from(
1209
- new Set(result.messages.map((m) => m.threadId || searchThreadId).filter(Boolean))
1530
+ new Set(accessibleMessages.map((m) => m.threadId || searchThreadId).filter(Boolean))
1210
1531
  );
1211
1532
  const fetched = await Promise.all(threadIds.map((id) => memory.getThreadById({ threadId: id })));
1212
1533
  const threadMap = new Map(fetched.filter(Boolean).map((t) => [t.id, t]));
1213
- for (const msg of result.messages) {
1534
+ for (const msg of accessibleMessages) {
1214
1535
  const content = getTextContent(msg);
1215
1536
  const msgThreadId = msg.threadId || searchThreadId;
1216
1537
  const thread = threadMap.get(msgThreadId);
@@ -1373,5 +1694,5 @@ var DELETE_MESSAGES_NETWORK_ROUTE = createRoute({
1373
1694
  });
1374
1695
 
1375
1696
  export { AWAIT_BUFFER_STATUS_ROUTE, CLONE_THREAD_ROUTE, CREATE_THREAD_NETWORK_ROUTE, CREATE_THREAD_ROUTE, DELETE_MESSAGES_NETWORK_ROUTE, DELETE_MESSAGES_ROUTE, DELETE_THREAD_NETWORK_ROUTE, DELETE_THREAD_ROUTE, GET_MEMORY_CONFIG_ROUTE, GET_MEMORY_STATUS_NETWORK_ROUTE, GET_MEMORY_STATUS_ROUTE, GET_OBSERVATIONAL_MEMORY_ROUTE, GET_THREAD_BY_ID_NETWORK_ROUTE, GET_THREAD_BY_ID_ROUTE, GET_WORKING_MEMORY_ROUTE, LIST_MESSAGES_NETWORK_ROUTE, LIST_MESSAGES_ROUTE, LIST_THREADS_NETWORK_ROUTE, LIST_THREADS_ROUTE, SAVE_MESSAGES_NETWORK_ROUTE, SAVE_MESSAGES_ROUTE, SEARCH_MEMORY_ROUTE, UPDATE_THREAD_NETWORK_ROUTE, UPDATE_THREAD_ROUTE, UPDATE_WORKING_MEMORY_ROUTE, getTextContent, memory_exports };
1376
- //# sourceMappingURL=chunk-JQUNK754.js.map
1377
- //# sourceMappingURL=chunk-JQUNK754.js.map
1697
+ //# sourceMappingURL=chunk-OJ7SK6PH.js.map
1698
+ //# sourceMappingURL=chunk-OJ7SK6PH.js.map