@mastra/server 1.80.0-alpha.3 → 1.80.0-alpha.5

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 (498) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +0 -12
  2. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +0 -2
  3. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/routes/index.d.ts +0 -2
  4. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/types/index.d.ts +0 -2
  5. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +65 -13
  6. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-v6/dist/index.d.ts +110 -35
  7. package/dist/{a2a-BKtK_s5o.cjs → a2a-BaRqCOUl.cjs} +14 -22
  8. package/dist/{a2a-BKtK_s5o.cjs.map → a2a-BaRqCOUl.cjs.map} +1 -1
  9. package/dist/{a2a-CBl-c-lm.cjs → a2a-BsBYrosr.cjs} +2 -3
  10. package/dist/{a2a-CBl-c-lm.cjs.map → a2a-BsBYrosr.cjs.map} +1 -1
  11. package/dist/{a2a-BS0gTQk3.js → a2a-C3ClP3C2.js} +2 -3
  12. package/dist/{a2a-BS0gTQk3.js.map → a2a-C3ClP3C2.js.map} +1 -1
  13. package/dist/{a2a-DKGBctKT.js → a2a-CApzjeDH.js} +13 -21
  14. package/dist/{a2a-DKGBctKT.js.map → a2a-CApzjeDH.js.map} +1 -1
  15. package/dist/{agent-builder-DDYdQvlQ.cjs → agent-builder-9-GSvpgR.cjs} +3 -4
  16. package/dist/{agent-builder-DDYdQvlQ.cjs.map → agent-builder-9-GSvpgR.cjs.map} +1 -1
  17. package/dist/{agent-builder-B8kc4OBs.js → agent-builder-Cr-52Ulb.js} +3 -4
  18. package/dist/{agent-builder-B8kc4OBs.js.map → agent-builder-Cr-52Ulb.js.map} +1 -1
  19. package/dist/{agent-builder-C-U5USc5.js → agent-builder-Cv6X2dKZ.js} +12 -13
  20. package/dist/{agent-builder-C-U5USc5.js.map → agent-builder-Cv6X2dKZ.js.map} +1 -1
  21. package/dist/{agent-builder-us2nwcWc.cjs → agent-builder-DExL1jAO.cjs} +12 -13
  22. package/dist/{agent-builder-us2nwcWc.cjs.map → agent-builder-DExL1jAO.cjs.map} +1 -1
  23. package/dist/{agent-versions-CzXJWn1T.cjs → agent-versions-De5bRBaa.cjs} +5 -6
  24. package/dist/{agent-versions-CzXJWn1T.cjs.map → agent-versions-De5bRBaa.cjs.map} +1 -1
  25. package/dist/{agent-versions-W600H1ME.js → agent-versions-Pa-ABszp.js} +5 -6
  26. package/dist/{agent-versions-W600H1ME.js.map → agent-versions-Pa-ABszp.js.map} +1 -1
  27. package/dist/{agents-D1-fgNeb.js → agents-A-ahR0eQ.js} +5 -6
  28. package/dist/{agents-D1-fgNeb.js.map → agents-A-ahR0eQ.js.map} +1 -1
  29. package/dist/{agents-AyHEkc2F.cjs → agents-BBaFtyAt.cjs} +20 -21
  30. package/dist/agents-BBaFtyAt.cjs.map +1 -0
  31. package/dist/{agents-BYE5Dmfk.js → agents-CGS0tE4p.js} +19 -20
  32. package/dist/agents-CGS0tE4p.js.map +1 -0
  33. package/dist/{agents-B1EiIdRs.cjs → agents-vFpMvK3w.cjs} +5 -6
  34. package/dist/{agents-B1EiIdRs.cjs.map → agents-vFpMvK3w.cjs.map} +1 -1
  35. package/dist/{api-schema-manifest-A066IsPX.js → api-schema-manifest-BCIpcado.js} +4 -5
  36. package/dist/{api-schema-manifest-A066IsPX.js.map → api-schema-manifest-BCIpcado.js.map} +1 -1
  37. package/dist/{api-schema-manifest-BaF6TE9d.cjs → api-schema-manifest-BRItYYlN.cjs} +5 -6
  38. package/dist/{api-schema-manifest-BaF6TE9d.cjs.map → api-schema-manifest-BRItYYlN.cjs.map} +1 -1
  39. package/dist/{auth-B8fQdEg-.cjs → auth-CM5AgF9l.cjs} +2 -3
  40. package/dist/{auth-B8fQdEg-.cjs.map → auth-CM5AgF9l.cjs.map} +1 -1
  41. package/dist/{auth-CZFXpwba.js → auth-CjT_a76k.js} +2 -3
  42. package/dist/{auth-CZFXpwba.js.map → auth-CjT_a76k.js.map} +1 -1
  43. package/dist/{background-tasks-B3VAKTJh.cjs → background-tasks-BMp9Q6SB.cjs} +7 -9
  44. package/dist/{background-tasks-B3VAKTJh.cjs.map → background-tasks-BMp9Q6SB.cjs.map} +1 -1
  45. package/dist/{background-tasks-Du2zYOPl.js → background-tasks-DIpPsqVy.js} +7 -9
  46. package/dist/{background-tasks-Du2zYOPl.js.map → background-tasks-DIpPsqVy.js.map} +1 -1
  47. package/dist/{builder-registry-DLdu9bWH.js → builder-registry-CtGv0Gj6.js} +7 -9
  48. package/dist/{builder-registry-DLdu9bWH.js.map → builder-registry-CtGv0Gj6.js.map} +1 -1
  49. package/dist/{builder-registry-DaFAaMTf.cjs → builder-registry-DWusXgse.cjs} +7 -9
  50. package/dist/{builder-registry-DaFAaMTf.cjs.map → builder-registry-DWusXgse.cjs.map} +1 -1
  51. package/dist/{channels-BnVRmnzK.cjs → channels-EqvuQQbv.cjs} +6 -8
  52. package/dist/{channels-BnVRmnzK.cjs.map → channels-EqvuQQbv.cjs.map} +1 -1
  53. package/dist/{channels-Db-4pXVZ.js → channels-LNR2QIkc.js} +6 -8
  54. package/dist/{channels-Db-4pXVZ.js.map → channels-LNR2QIkc.js.map} +1 -1
  55. package/dist/{common-DhKNoXGp.cjs → common-DVZqSEhZ.cjs} +2 -3
  56. package/dist/{common-DhKNoXGp.cjs.map → common-DVZqSEhZ.cjs.map} +1 -1
  57. package/dist/{common-Y30XtCyr.js → common-xUmaFUop.js} +2 -3
  58. package/dist/{common-Y30XtCyr.js.map → common-xUmaFUop.js.map} +1 -1
  59. package/dist/{constants-e7aaPCLj.cjs → constants-Co1XjPjd.cjs} +2 -3
  60. package/dist/{constants-e7aaPCLj.cjs.map → constants-Co1XjPjd.cjs.map} +1 -1
  61. package/dist/{constants-DazK_RZj.js → constants-ohUUT3Vg.js} +2 -3
  62. package/dist/{constants-DazK_RZj.js.map → constants-ohUUT3Vg.js.map} +1 -1
  63. package/dist/{conversations-D-ew5IXn.js → conversations-B-s9MWRb.js} +8 -9
  64. package/dist/{conversations-D-ew5IXn.js.map → conversations-B-s9MWRb.js.map} +1 -1
  65. package/dist/{conversations-DasqEDCF.cjs → conversations-BPQNrv5g.cjs} +5 -6
  66. package/dist/{conversations-DasqEDCF.cjs.map → conversations-BPQNrv5g.cjs.map} +1 -1
  67. package/dist/{conversations-DzuWI3w-.cjs → conversations-DLuMXWot.cjs} +8 -9
  68. package/dist/{conversations-DzuWI3w-.cjs.map → conversations-DLuMXWot.cjs.map} +1 -1
  69. package/dist/{conversations-BzBHVFYe.js → conversations-nNko6-H4.js} +4 -5
  70. package/dist/{conversations-BzBHVFYe.js.map → conversations-nNko6-H4.js.map} +1 -1
  71. package/dist/{datasets-Cgtczd13.cjs → datasets-BP2O5CSR.cjs} +3 -4
  72. package/dist/{datasets-Cgtczd13.cjs.map → datasets-BP2O5CSR.cjs.map} +1 -1
  73. package/dist/{datasets-FRp69Mwv.js → datasets-hLmYapTk.js} +3 -4
  74. package/dist/{datasets-FRp69Mwv.js.map → datasets-hLmYapTk.js.map} +1 -1
  75. package/dist/{default-options-C7tykjLq.cjs → default-options-DRN81WEQ.cjs} +2 -3
  76. package/dist/{default-options-C7tykjLq.cjs.map → default-options-DRN81WEQ.cjs.map} +1 -1
  77. package/dist/{default-options-oSlrqpuP.js → default-options-Dir6CKnE.js} +2 -3
  78. package/dist/{default-options-oSlrqpuP.js.map → default-options-Dir6CKnE.js.map} +1 -1
  79. package/dist/{dist-lT2rqyY9.cjs → dist-36GZrEvk.cjs} +4 -5
  80. package/dist/{dist-lT2rqyY9.cjs.map → dist-36GZrEvk.cjs.map} +1 -1
  81. package/dist/{dist-CeTLA-e5.cjs → dist-BZGewCGq.cjs} +6 -10
  82. package/dist/{dist-CeTLA-e5.cjs.map → dist-BZGewCGq.cjs.map} +1 -1
  83. package/dist/{dist-Bo3GdQwf.cjs → dist-Bal15xNO.cjs} +5 -7
  84. package/dist/{dist-Bo3GdQwf.cjs.map → dist-Bal15xNO.cjs.map} +1 -1
  85. package/dist/dist-C-L2kyKZ.js +1 -0
  86. package/dist/{dist-DjkPkAzV.js → dist-CNjm6d2Q.js} +5 -8
  87. package/dist/{dist-DjkPkAzV.js.map → dist-CNjm6d2Q.js.map} +1 -1
  88. package/dist/{dist-DLld1qjf.js → dist-CVoi_Dov.js} +3 -4
  89. package/dist/{dist-DLld1qjf.js.map → dist-CVoi_Dov.js.map} +1 -1
  90. package/dist/{dist-CukR8zi9.cjs → dist-Clj7hRKz.cjs} +1554 -725
  91. package/dist/dist-Clj7hRKz.cjs.map +1 -0
  92. package/dist/{dist-DsrJXwic.cjs → dist-D02J6PZG.cjs} +4 -5
  93. package/dist/{dist-DsrJXwic.cjs.map → dist-D02J6PZG.cjs.map} +1 -1
  94. package/dist/dist-D6oS7RF1.cjs +3 -0
  95. package/dist/{dist-CREG82cy.js → dist-DC9qnRcv.js} +3 -4
  96. package/dist/{dist-CREG82cy.js.map → dist-DC9qnRcv.js.map} +1 -1
  97. package/dist/{dist-BIrQLUV9.js → dist-Dc0g0QSi.js} +4 -6
  98. package/dist/{dist-BIrQLUV9.js.map → dist-Dc0g0QSi.js.map} +1 -1
  99. package/dist/{dist-BBOnrL_A.js → dist-Dwfkbwzg.js} +3 -4
  100. package/dist/{dist-BBOnrL_A.js.map → dist-Dwfkbwzg.js.map} +1 -1
  101. package/dist/{dist-5TAg2f91.js → dist-PlsLrwz8.js} +1549 -719
  102. package/dist/dist-PlsLrwz8.js.map +1 -0
  103. package/dist/{dist-B9ery9Zw.cjs → dist-lG-fYW7-.cjs} +4 -5
  104. package/dist/{dist-B9ery9Zw.cjs.map → dist-lG-fYW7-.cjs.map} +1 -1
  105. package/dist/docs/SKILL.md +1 -1
  106. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  107. package/dist/docs/references/docs-server-custom-adapters.md +53 -1
  108. package/dist/docs/references/docs-server-custom-api-routes.md +2 -0
  109. package/dist/{dynamic-workflows-HwPX3mcf.cjs → dynamic-workflows-CpCkqM1g.cjs} +6 -8
  110. package/dist/{dynamic-workflows-HwPX3mcf.cjs.map → dynamic-workflows-CpCkqM1g.cjs.map} +1 -1
  111. package/dist/{dynamic-workflows-CTUO0SFu.js → dynamic-workflows-DDauBnDt.js} +6 -8
  112. package/dist/{dynamic-workflows-CTUO0SFu.js.map → dynamic-workflows-DDauBnDt.js.map} +1 -1
  113. package/dist/{editor-builder-BSBHrTzY.cjs → editor-builder-8li-nXor.cjs} +3 -4
  114. package/dist/{editor-builder-BSBHrTzY.cjs.map → editor-builder-8li-nXor.cjs.map} +1 -1
  115. package/dist/{editor-builder-DCrTMwA4.js → editor-builder-BCZy1ZH1.js} +3 -4
  116. package/dist/{editor-builder-DCrTMwA4.js.map → editor-builder-BCZy1ZH1.js.map} +1 -1
  117. package/dist/{editor-builder-Bibw1X4q.cjs → editor-builder-DFqbiatl.cjs} +7 -9
  118. package/dist/{editor-builder-Bibw1X4q.cjs.map → editor-builder-DFqbiatl.cjs.map} +1 -1
  119. package/dist/{editor-builder-Dq03QZzH.js → editor-builder-qPFmAnZz.js} +7 -9
  120. package/dist/{editor-builder-Dq03QZzH.js.map → editor-builder-qPFmAnZz.js.map} +1 -1
  121. package/dist/{favorites-DWDyKxts.js → favorites-8aieznq3.js} +2 -3
  122. package/dist/{favorites-DWDyKxts.js.map → favorites-8aieznq3.js.map} +1 -1
  123. package/dist/{favorites-D1-AzGsK.cjs → favorites-D0CoxxQn.cjs} +2 -3
  124. package/dist/{favorites-D1-AzGsK.cjs.map → favorites-D0CoxxQn.cjs.map} +1 -1
  125. package/dist/{helpers-CewFtCva.cjs → helpers-CE1fJdLM.cjs} +6 -9
  126. package/dist/{helpers-CewFtCva.cjs.map → helpers-CE1fJdLM.cjs.map} +1 -1
  127. package/dist/{helpers-CxSa9O3X.js → helpers-CMCXsowL.js} +6 -9
  128. package/dist/{helpers-CxSa9O3X.js.map → helpers-CMCXsowL.js.map} +1 -1
  129. package/dist/{http-exception-CKDHupKw.cjs → http-exception-Co3MbFUf.cjs} +2 -3
  130. package/dist/{http-exception-CKDHupKw.cjs.map → http-exception-Co3MbFUf.cjs.map} +1 -1
  131. package/dist/{http-exception-CyfxZB6W.js → http-exception-CzaWkxMl.js} +2 -3
  132. package/dist/{http-exception-CyfxZB6W.js.map → http-exception-CzaWkxMl.js.map} +1 -1
  133. package/dist/index.cjs +2 -3
  134. package/dist/index.js +1 -2
  135. package/dist/{logs-CY8AGOCO.cjs → logs-CC6IycDY.cjs} +3 -4
  136. package/dist/{logs-CY8AGOCO.cjs.map → logs-CC6IycDY.cjs.map} +1 -1
  137. package/dist/{logs-CxfPk-iL.js → logs-DIBh_xCk.js} +7 -8
  138. package/dist/{logs-CxfPk-iL.js.map → logs-DIBh_xCk.js.map} +1 -1
  139. package/dist/{logs-Bd_xpsYw.js → logs-DpyTCDyt.js} +3 -4
  140. package/dist/{logs-Bd_xpsYw.js.map → logs-DpyTCDyt.js.map} +1 -1
  141. package/dist/{logs-CiSw7r0s.cjs → logs-NNur5jkf.cjs} +7 -8
  142. package/dist/{logs-CiSw7r0s.cjs.map → logs-NNur5jkf.cjs.map} +1 -1
  143. package/dist/{mcp-ziWVk7Ol.cjs → mcp-4iUBgZ7s.cjs} +3 -4
  144. package/dist/{mcp-ziWVk7Ol.cjs.map → mcp-4iUBgZ7s.cjs.map} +1 -1
  145. package/dist/{mcp-CWDfSu7w.js → mcp-CnV25lv0.js} +6 -7
  146. package/dist/{mcp-CWDfSu7w.js.map → mcp-CnV25lv0.js.map} +1 -1
  147. package/dist/{mcp-CWGJRqkC.cjs → mcp-DegWUDeB.cjs} +6 -7
  148. package/dist/{mcp-CWGJRqkC.cjs.map → mcp-DegWUDeB.cjs.map} +1 -1
  149. package/dist/{mcp-Drqt0GqD.js → mcp-DgdKiptb.js} +3 -4
  150. package/dist/{mcp-Drqt0GqD.js.map → mcp-DgdKiptb.js.map} +1 -1
  151. package/dist/{mcp-client-versions-DxBkzcYH.js → mcp-client-versions-B471u-DI.js} +3 -4
  152. package/dist/{mcp-client-versions-DxBkzcYH.js.map → mcp-client-versions-B471u-DI.js.map} +1 -1
  153. package/dist/{mcp-client-versions-Cq97zXiK.cjs → mcp-client-versions-HRTe5cRT.cjs} +3 -4
  154. package/dist/{mcp-client-versions-Cq97zXiK.cjs.map → mcp-client-versions-HRTe5cRT.cjs.map} +1 -1
  155. package/dist/{memory-CizEIbl1.cjs → memory-BnPGDrdg.cjs} +4 -5
  156. package/dist/{memory-CizEIbl1.cjs.map → memory-BnPGDrdg.cjs.map} +1 -1
  157. package/dist/{memory-B58Q2LgU.js → memory-CZ2ELVP0.js} +4 -5
  158. package/dist/{memory-B58Q2LgU.js.map → memory-CZ2ELVP0.js.map} +1 -1
  159. package/dist/{memory-BHtTSzvJ.js → memory-DeZ1je-b.js} +10 -12
  160. package/dist/memory-DeZ1je-b.js.map +1 -0
  161. package/dist/{memory-CwwkVDh1.cjs → memory-Pj9P9vsl.cjs} +10 -12
  162. package/dist/memory-Pj9P9vsl.cjs.map +1 -0
  163. package/dist/{message-history-_kbQlA4r.js → message-history-BBVH-ORZ.js} +2 -3
  164. package/dist/{message-history-_kbQlA4r.js.map → message-history-BBVH-ORZ.js.map} +1 -1
  165. package/dist/{message-history-CkUYxSaS.cjs → message-history-CtELj716.cjs} +2 -3
  166. package/dist/{message-history-CkUYxSaS.cjs.map → message-history-CtELj716.cjs.map} +1 -1
  167. package/dist/{observability-Dz9jvMJ3.js → observability-65rZOqJk.js} +6 -7
  168. package/dist/{observability-Dz9jvMJ3.js.map → observability-65rZOqJk.js.map} +1 -1
  169. package/dist/{observability-C2BZQ2jU.cjs → observability-CFKSxaff.cjs} +6 -7
  170. package/dist/{observability-C2BZQ2jU.cjs.map → observability-CFKSxaff.cjs.map} +1 -1
  171. package/dist/{observability-new-endpoints-3DlTYf34.js → observability-new-endpoints-B6MRJ5Rb.js} +8 -11
  172. package/dist/observability-new-endpoints-B6MRJ5Rb.js.map +1 -0
  173. package/dist/{observability-new-endpoints-Drr7q2Dj.cjs → observability-new-endpoints-CDeHfFNP.cjs} +9 -12
  174. package/dist/observability-new-endpoints-CDeHfFNP.cjs.map +1 -0
  175. package/dist/{plans-DZAJG1Et.cjs → plans-Dtt4D4-Y.cjs} +8 -9
  176. package/dist/{plans-DZAJG1Et.cjs.map → plans-Dtt4D4-Y.cjs.map} +1 -1
  177. package/dist/{plans-CKbStbWl.js → plans-YK-iaKqj.js} +8 -9
  178. package/dist/{plans-CKbStbWl.js.map → plans-YK-iaKqj.js.map} +1 -1
  179. package/dist/{probe-image-size-l1uuhbob.cjs → probe-image-size-C0psF6WM.cjs} +69 -120
  180. package/dist/probe-image-size-C0psF6WM.cjs.map +1 -0
  181. package/dist/{probe-image-size-DBmo2MAe.js → probe-image-size-CpV7slsd.js} +69 -120
  182. package/dist/probe-image-size-CpV7slsd.js.map +1 -0
  183. package/dist/{processor-providers-DHvTA9AL.cjs → processor-providers-CRrcV9ra.cjs} +2 -3
  184. package/dist/{processor-providers-DHvTA9AL.cjs.map → processor-providers-CRrcV9ra.cjs.map} +1 -1
  185. package/dist/{processor-providers-DBhZC6-4.js → processor-providers-WHdDe4aA.js} +2 -3
  186. package/dist/{processor-providers-DBhZC6-4.js.map → processor-providers-WHdDe4aA.js.map} +1 -1
  187. package/dist/{processors-80HWq8nr.cjs → processors-BEut-2a-.cjs} +2 -3
  188. package/dist/{processors-80HWq8nr.cjs.map → processors-BEut-2a-.cjs.map} +1 -1
  189. package/dist/{processors-33IULT8X.js → processors-IhyRC0xH.js} +2 -3
  190. package/dist/{processors-33IULT8X.js.map → processors-IhyRC0xH.js.map} +1 -1
  191. package/dist/{prompt-block-versions-Cl3Lh4H-.cjs → prompt-block-versions-BUPyaY8g.cjs} +4 -5
  192. package/dist/{prompt-block-versions-Cl3Lh4H-.cjs.map → prompt-block-versions-BUPyaY8g.cjs.map} +1 -1
  193. package/dist/{prompt-block-versions-cfq_e1Zi.js → prompt-block-versions-D1gjBkQx.js} +4 -5
  194. package/dist/{prompt-block-versions-cfq_e1Zi.js.map → prompt-block-versions-D1gjBkQx.js.map} +1 -1
  195. package/dist/{responses-CfcIc53b.cjs → responses-CTiwnWeF.cjs} +3 -4
  196. package/dist/{responses-CfcIc53b.cjs.map → responses-CTiwnWeF.cjs.map} +1 -1
  197. package/dist/{responses-jiVC-1lx.js → responses-CaixIxi0.js} +8 -9
  198. package/dist/{responses-jiVC-1lx.js.map → responses-CaixIxi0.js.map} +1 -1
  199. package/dist/{responses-DJNJgCTg.js → responses-D-fsDRLd.js} +2 -3
  200. package/dist/{responses-DJNJgCTg.js.map → responses-D-fsDRLd.js.map} +1 -1
  201. package/dist/{responses-BubMB79l.cjs → responses-Did1x3VK.cjs} +8 -9
  202. package/dist/{responses-BubMB79l.cjs.map → responses-Did1x3VK.cjs.map} +1 -1
  203. package/dist/{rolldown-runtime-BwC_XMyb.cjs → rolldown-runtime-10nMEhjP.cjs} +1 -2
  204. package/dist/{rolldown-runtime-D3Hj5m0v.js → rolldown-runtime-CQI-hT2b.js} +1 -2
  205. package/dist/{route-builder-CjkWxv4E.js → route-builder-BxPrwNog.js} +6 -10
  206. package/dist/route-builder-BxPrwNog.js.map +1 -0
  207. package/dist/{route-builder-B2Qhhd7C.cjs → route-builder-CvARmqnA.cjs} +8 -12
  208. package/dist/route-builder-CvARmqnA.cjs.map +1 -0
  209. package/dist/{routes-DKV9oxFW.js → routes-C434Lhz9.js} +59 -92
  210. package/dist/{routes-DKV9oxFW.js.map → routes-C434Lhz9.js.map} +1 -1
  211. package/dist/{routes-jXksmX9G.cjs → routes-CtGp_lBn.cjs} +4 -7
  212. package/dist/routes-CtGp_lBn.cjs.map +1 -0
  213. package/dist/{routes-CKfXiwRc.js → routes-MRZFTKei.js} +4 -7
  214. package/dist/routes-MRZFTKei.js.map +1 -0
  215. package/dist/{routes-D6bDACPd.cjs → routes-rU9Sku0f.cjs} +59 -92
  216. package/dist/{routes-D6bDACPd.cjs.map → routes-rU9Sku0f.cjs.map} +1 -1
  217. package/dist/{rule-group-C5eydl98.js → rule-group-4pWeG61q.js} +2 -3
  218. package/dist/{rule-group-C5eydl98.js.map → rule-group-4pWeG61q.js.map} +1 -1
  219. package/dist/{rule-group-Hyn4rN52.cjs → rule-group-CIacr-Zz.cjs} +2 -3
  220. package/dist/{rule-group-Hyn4rN52.cjs.map → rule-group-CIacr-Zz.cjs.map} +1 -1
  221. package/dist/{schedules-GokZKBYg.cjs → schedules-CL4IU7kS.cjs} +6 -8
  222. package/dist/{schedules-GokZKBYg.cjs.map → schedules-CL4IU7kS.cjs.map} +1 -1
  223. package/dist/{schedules-_3zPKyqm.js → schedules-CQPodXrR.js} +6 -8
  224. package/dist/{schedules-_3zPKyqm.js.map → schedules-CQPodXrR.js.map} +1 -1
  225. package/dist/{schema-CzbEIyhE-BsMcj9Ws.js → schema-Bf12g7KC-DBc4NSds.js} +104 -35
  226. package/dist/schema-Bf12g7KC-DBc4NSds.js.map +1 -0
  227. package/dist/{schema-CzbEIyhE-20gGIWkz.cjs → schema-Bf12g7KC-plP4Ir6h.cjs} +105 -36
  228. package/dist/schema-Bf12g7KC-plP4Ir6h.cjs.map +1 -0
  229. package/dist/{scorer-versions-CX8RM9a6.js → scorer-versions-DIqKt2kn.js} +4 -5
  230. package/dist/{scorer-versions-CX8RM9a6.js.map → scorer-versions-DIqKt2kn.js.map} +1 -1
  231. package/dist/{scorer-versions-DeCS12ym.cjs → scorer-versions-r7C61gWf.cjs} +4 -5
  232. package/dist/{scorer-versions-DeCS12ym.cjs.map → scorer-versions-r7C61gWf.cjs.map} +1 -1
  233. package/dist/{scores-CetVKM4g.cjs → scores-Bu70OP1U.cjs} +3 -4
  234. package/dist/{scores-CetVKM4g.cjs.map → scores-Bu70OP1U.cjs.map} +1 -1
  235. package/dist/{scores-BWTo-_L5.js → scores-DHnw31S7.js} +8 -9
  236. package/dist/{scores-BWTo-_L5.js.map → scores-DHnw31S7.js.map} +1 -1
  237. package/dist/{scores-BbqFfKcy.js → scores-DZ1hftoG.js} +3 -4
  238. package/dist/{scores-BbqFfKcy.js.map → scores-DZ1hftoG.js.map} +1 -1
  239. package/dist/{scores-C8XPZcwt.cjs → scores-K78lAAwd.cjs} +8 -9
  240. package/dist/{scores-C8XPZcwt.cjs.map → scores-K78lAAwd.cjs.map} +1 -1
  241. package/dist/server/a2a/store.cjs +2 -3
  242. package/dist/server/a2a/store.js +1 -2
  243. package/dist/server/auth/index.cjs +3 -3
  244. package/dist/server/auth/index.js +2 -2
  245. package/dist/server/browser-stream/index.cjs +3 -5
  246. package/dist/server/browser-stream/index.cjs.map +1 -1
  247. package/dist/server/browser-stream/index.js +2 -4
  248. package/dist/server/browser-stream/index.js.map +1 -1
  249. package/dist/server/handlers/a2a.cjs +2 -2
  250. package/dist/server/handlers/a2a.js +1 -1
  251. package/dist/server/handlers/agent-builder.cjs +2 -2
  252. package/dist/server/handlers/agent-builder.js +1 -1
  253. package/dist/server/handlers/agent-controller.cjs +20 -18
  254. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  255. package/dist/server/handlers/agent-controller.d.ts +2 -0
  256. package/dist/server/handlers/agent-controller.d.ts.map +1 -1
  257. package/dist/server/handlers/agent-controller.js +19 -17
  258. package/dist/server/handlers/agent-controller.js.map +1 -1
  259. package/dist/server/handlers/agent-versions.cjs +7 -8
  260. package/dist/server/handlers/agent-versions.js +6 -7
  261. package/dist/server/handlers/agents.cjs +2 -2
  262. package/dist/server/handlers/agents.d.ts.map +1 -1
  263. package/dist/server/handlers/agents.js +1 -1
  264. package/dist/server/handlers/auth.cjs +7 -8
  265. package/dist/server/handlers/auth.js +6 -7
  266. package/dist/server/handlers/author-enrichment.cjs +2 -3
  267. package/dist/server/handlers/author-enrichment.js +1 -2
  268. package/dist/server/handlers/authorship.cjs +4 -5
  269. package/dist/server/handlers/authorship.js +3 -4
  270. package/dist/server/handlers/background-tasks.cjs +2 -2
  271. package/dist/server/handlers/background-tasks.js +1 -1
  272. package/dist/server/handlers/builder-registry.cjs +2 -2
  273. package/dist/server/handlers/builder-registry.js +1 -1
  274. package/dist/server/handlers/channels.cjs +2 -2
  275. package/dist/server/handlers/channels.js +1 -1
  276. package/dist/server/handlers/conversations.cjs +2 -2
  277. package/dist/server/handlers/conversations.js +1 -1
  278. package/dist/server/handlers/datasets.cjs +7 -8
  279. package/dist/server/handlers/datasets.js +6 -7
  280. package/dist/server/handlers/dynamic-workflows.cjs +2 -2
  281. package/dist/server/handlers/dynamic-workflows.js +1 -1
  282. package/dist/server/handlers/editor-builder.cjs +2 -2
  283. package/dist/server/handlers/editor-builder.js +1 -1
  284. package/dist/server/handlers/error.cjs +3 -4
  285. package/dist/server/handlers/error.js +2 -3
  286. package/dist/server/handlers/favorites-enrichment.cjs +3 -4
  287. package/dist/server/handlers/favorites-enrichment.js +2 -3
  288. package/dist/server/handlers/gateway-memory-client.cjs +2 -3
  289. package/dist/server/handlers/gateway-memory-client.js +1 -2
  290. package/dist/server/handlers/logs.cjs +2 -2
  291. package/dist/server/handlers/logs.js +1 -1
  292. package/dist/server/handlers/mcp-client-versions.cjs +6 -7
  293. package/dist/server/handlers/mcp-client-versions.js +5 -6
  294. package/dist/server/handlers/mcp.cjs +2 -2
  295. package/dist/server/handlers/mcp.js +1 -1
  296. package/dist/server/handlers/memory.cjs +2 -2
  297. package/dist/server/handlers/memory.d.ts.map +1 -1
  298. package/dist/server/handlers/memory.js +1 -1
  299. package/dist/server/handlers/observability-list-query-schemas.cjs +2 -3
  300. package/dist/server/handlers/observability-list-query-schemas.js +1 -2
  301. package/dist/server/handlers/observability-new-endpoints.cjs +2 -2
  302. package/dist/server/handlers/observability-new-endpoints.d.ts +2 -10
  303. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  304. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  305. package/dist/server/handlers/observability-shared.cjs +4 -5
  306. package/dist/server/handlers/observability-shared.js +3 -4
  307. package/dist/server/handlers/observability-storage-schemas.cjs +2 -3
  308. package/dist/server/handlers/observability-storage-schemas.js +1 -2
  309. package/dist/server/handlers/observability.cjs +3 -3
  310. package/dist/server/handlers/observability.js +2 -2
  311. package/dist/server/handlers/plans.cjs +2 -2
  312. package/dist/server/handlers/plans.js +1 -1
  313. package/dist/server/handlers/processor-providers.cjs +5 -6
  314. package/dist/server/handlers/processor-providers.js +4 -5
  315. package/dist/server/handlers/processors.cjs +5 -6
  316. package/dist/server/handlers/processors.js +4 -5
  317. package/dist/server/handlers/prompt-block-versions.cjs +6 -7
  318. package/dist/server/handlers/prompt-block-versions.js +5 -6
  319. package/dist/server/handlers/responses.adapter.cjs +2 -3
  320. package/dist/server/handlers/responses.adapter.js +1 -2
  321. package/dist/server/handlers/responses.cjs +2 -2
  322. package/dist/server/handlers/responses.js +1 -1
  323. package/dist/server/handlers/responses.storage.cjs +4 -5
  324. package/dist/server/handlers/responses.storage.js +3 -4
  325. package/dist/server/handlers/schedules-workflows-shim.cjs +2 -3
  326. package/dist/server/handlers/schedules-workflows-shim.js +1 -2
  327. package/dist/server/handlers/schedules.cjs +2 -2
  328. package/dist/server/handlers/schedules.js +1 -1
  329. package/dist/server/handlers/scorer-versions.cjs +6 -7
  330. package/dist/server/handlers/scorer-versions.js +5 -6
  331. package/dist/server/handlers/scores.cjs +2 -2
  332. package/dist/server/handlers/scores.js +1 -1
  333. package/dist/server/handlers/skills-sh-shared.cjs +3 -4
  334. package/dist/server/handlers/skills-sh-shared.js +2 -3
  335. package/dist/server/handlers/stored-agent-favorites.cjs +8 -9
  336. package/dist/server/handlers/stored-agent-favorites.js +7 -8
  337. package/dist/server/handlers/stored-agents.cjs +8 -9
  338. package/dist/server/handlers/stored-agents.js +7 -8
  339. package/dist/server/handlers/stored-mcp-clients.cjs +7 -8
  340. package/dist/server/handlers/stored-mcp-clients.js +6 -7
  341. package/dist/server/handlers/stored-prompt-blocks.cjs +7 -8
  342. package/dist/server/handlers/stored-prompt-blocks.js +6 -7
  343. package/dist/server/handlers/stored-scorers.cjs +7 -8
  344. package/dist/server/handlers/stored-scorers.js +6 -7
  345. package/dist/server/handlers/stored-skill-favorites.cjs +8 -9
  346. package/dist/server/handlers/stored-skill-favorites.js +7 -8
  347. package/dist/server/handlers/stored-skills.cjs +7 -8
  348. package/dist/server/handlers/stored-skills.js +6 -7
  349. package/dist/server/handlers/stored-workspaces.cjs +6 -7
  350. package/dist/server/handlers/stored-workspaces.js +5 -6
  351. package/dist/server/handlers/system.cjs +5 -6
  352. package/dist/server/handlers/system.js +4 -5
  353. package/dist/server/handlers/test-utils.cjs +2 -3
  354. package/dist/server/handlers/test-utils.js +1 -2
  355. package/dist/server/handlers/tool-providers.cjs +6 -7
  356. package/dist/server/handlers/tool-providers.js +5 -6
  357. package/dist/server/handlers/tool-schema-overrides.cjs +2 -3
  358. package/dist/server/handlers/tool-schema-overrides.js +1 -2
  359. package/dist/server/handlers/tools.cjs +2 -2
  360. package/dist/server/handlers/tools.js +1 -1
  361. package/dist/server/handlers/utils.cjs +3 -2
  362. package/dist/server/handlers/utils.d.ts +17 -2
  363. package/dist/server/handlers/utils.d.ts.map +1 -1
  364. package/dist/server/handlers/utils.js +1 -1
  365. package/dist/server/handlers/validate-agent-instructions.cjs +4 -5
  366. package/dist/server/handlers/validate-agent-instructions.js +3 -4
  367. package/dist/server/handlers/validate-avatar.cjs +3 -4
  368. package/dist/server/handlers/validate-avatar.js +2 -3
  369. package/dist/server/handlers/vector.cjs +2 -2
  370. package/dist/server/handlers/vector.js +1 -1
  371. package/dist/server/handlers/version-helpers.cjs +2 -3
  372. package/dist/server/handlers/version-helpers.js +1 -2
  373. package/dist/server/handlers/voice.cjs +2 -2
  374. package/dist/server/handlers/voice.js +1 -1
  375. package/dist/server/handlers/workflow-builder.cjs +2 -2
  376. package/dist/server/handlers/workflow-builder.js +1 -1
  377. package/dist/server/handlers/workflows.cjs +2 -2
  378. package/dist/server/handlers/workflows.d.ts.map +1 -1
  379. package/dist/server/handlers/workflows.js +1 -1
  380. package/dist/server/handlers/workspace.cjs +2 -2
  381. package/dist/server/handlers/workspace.js +1 -1
  382. package/dist/server/handlers.cjs +18 -18
  383. package/dist/server/handlers.js +17 -17
  384. package/dist/server/schemas/index.cjs +35 -35
  385. package/dist/server/schemas/index.js +34 -34
  386. package/dist/server/server-adapter/index.cjs +14 -21
  387. package/dist/server/server-adapter/index.cjs.map +1 -1
  388. package/dist/server/server-adapter/index.js +13 -20
  389. package/dist/server/server-adapter/index.js.map +1 -1
  390. package/dist/server/server-adapter/routes/observability.d.ts +1 -5
  391. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  392. package/dist/{stored-agents-BtaEzKfr.js → stored-agents-BpxMmhtz.js} +9 -11
  393. package/dist/{stored-agents-BtaEzKfr.js.map → stored-agents-BpxMmhtz.js.map} +1 -1
  394. package/dist/{stored-agents-BTL-o6aM.cjs → stored-agents-CDlh3CQQ.cjs} +9 -11
  395. package/dist/{stored-agents-BTL-o6aM.cjs.map → stored-agents-CDlh3CQQ.cjs.map} +1 -1
  396. package/dist/{stored-mcp-clients-D7bNkmTM.cjs → stored-mcp-clients-BA7OSGZ_.cjs} +3 -4
  397. package/dist/{stored-mcp-clients-D7bNkmTM.cjs.map → stored-mcp-clients-BA7OSGZ_.cjs.map} +1 -1
  398. package/dist/{stored-mcp-clients-DMR6NvCp.js → stored-mcp-clients-DtLv0Tly.js} +3 -4
  399. package/dist/{stored-mcp-clients-DMR6NvCp.js.map → stored-mcp-clients-DtLv0Tly.js.map} +1 -1
  400. package/dist/{stored-prompt-blocks-BjHxMCuC.cjs → stored-prompt-blocks-Cqi0vnTE.cjs} +4 -5
  401. package/dist/{stored-prompt-blocks-BjHxMCuC.cjs.map → stored-prompt-blocks-Cqi0vnTE.cjs.map} +1 -1
  402. package/dist/{stored-prompt-blocks-C7qmiWSB.js → stored-prompt-blocks-Z_BuhsUq.js} +4 -5
  403. package/dist/{stored-prompt-blocks-C7qmiWSB.js.map → stored-prompt-blocks-Z_BuhsUq.js.map} +1 -1
  404. package/dist/{stored-scorers-BSxh7JZX.js → stored-scorers-BdJadnUS.js} +4 -5
  405. package/dist/{stored-scorers-BSxh7JZX.js.map → stored-scorers-BdJadnUS.js.map} +1 -1
  406. package/dist/{stored-scorers-I8L1-bAI.cjs → stored-scorers-D1zYUEXg.cjs} +4 -5
  407. package/dist/{stored-scorers-I8L1-bAI.cjs.map → stored-scorers-D1zYUEXg.cjs.map} +1 -1
  408. package/dist/{stored-skills-DzW8hLnI.js → stored-skills-D8Q1NmsH.js} +3 -4
  409. package/dist/{stored-skills-DzW8hLnI.js.map → stored-skills-D8Q1NmsH.js.map} +1 -1
  410. package/dist/{stored-skills-C1e8kf2k.cjs → stored-skills-DppdzQY0.cjs} +3 -4
  411. package/dist/{stored-skills-C1e8kf2k.cjs.map → stored-skills-DppdzQY0.cjs.map} +1 -1
  412. package/dist/{stored-workspaces-DSfChCJ0.cjs → stored-workspaces-BOwJwkec.cjs} +3 -4
  413. package/dist/{stored-workspaces-DSfChCJ0.cjs.map → stored-workspaces-BOwJwkec.cjs.map} +1 -1
  414. package/dist/{stored-workspaces-AkC68rSw.js → stored-workspaces-CYXLBJy5.js} +3 -4
  415. package/dist/{stored-workspaces-AkC68rSw.js.map → stored-workspaces-CYXLBJy5.js.map} +1 -1
  416. package/dist/{system-sSSmmt7I.js → system-B8L_G4oo.js} +2 -3
  417. package/dist/{system-sSSmmt7I.js.map → system-B8L_G4oo.js.map} +1 -1
  418. package/dist/{system-B_Sod-Le.cjs → system-DGfJlOxK.cjs} +2 -3
  419. package/dist/{system-B_Sod-Le.cjs.map → system-DGfJlOxK.cjs.map} +1 -1
  420. package/dist/{tool-providers-DFQkhO4R.cjs → tool-providers-BVwRJTtB.cjs} +2 -3
  421. package/dist/{tool-providers-DFQkhO4R.cjs.map → tool-providers-BVwRJTtB.cjs.map} +1 -1
  422. package/dist/{tool-providers-CIESXi7M.js → tool-providers-Cq3vFqgE.js} +2 -3
  423. package/dist/{tool-providers-CIESXi7M.js.map → tool-providers-Cq3vFqgE.js.map} +1 -1
  424. package/dist/{tools-Ci71xxGP.cjs → tools-CeVJwkPP.cjs} +13 -14
  425. package/dist/tools-CeVJwkPP.cjs.map +1 -0
  426. package/dist/{tools--oMljfqq.js → tools-hd_ZCJkE.js} +12 -13
  427. package/dist/tools-hd_ZCJkE.js.map +1 -0
  428. package/dist/{utils-dDLIDg8O.cjs → utils-BbYUI6Yn.cjs} +37 -14
  429. package/dist/utils-BbYUI6Yn.cjs.map +1 -0
  430. package/dist/{utils-CF76qzZR.cjs → utils-BnH77wPf.cjs} +107 -81
  431. package/dist/utils-BnH77wPf.cjs.map +1 -0
  432. package/dist/{utils-BBJlS81s.js → utils-DHxjw4Tn.js} +31 -14
  433. package/dist/utils-DHxjw4Tn.js.map +1 -0
  434. package/dist/{utils-aoLN3Wfi.js → utils-YEuwVEc2.js} +104 -78
  435. package/dist/utils-YEuwVEc2.js.map +1 -0
  436. package/dist/{vector-TWv4t-4g.js → vector-Deod39jt.js} +6 -7
  437. package/dist/{vector-TWv4t-4g.js.map → vector-Deod39jt.js.map} +1 -1
  438. package/dist/{vector-BKDD1kwc.cjs → vector-IxK1t4Cb.cjs} +6 -7
  439. package/dist/{vector-BKDD1kwc.cjs.map → vector-IxK1t4Cb.cjs.map} +1 -1
  440. package/dist/{vectors-LFI1jch0.cjs → vectors-CqV387sY.cjs} +3 -4
  441. package/dist/{vectors-LFI1jch0.cjs.map → vectors-CqV387sY.cjs.map} +1 -1
  442. package/dist/{vectors-CJtupgIF.js → vectors-CvHLWqjC.js} +3 -4
  443. package/dist/{vectors-CJtupgIF.js.map → vectors-CvHLWqjC.js.map} +1 -1
  444. package/dist/{version-common-DrzXq7Ct.cjs → version-common-B2n_ML_w.cjs} +3 -4
  445. package/dist/{version-common-DrzXq7Ct.cjs.map → version-common-B2n_ML_w.cjs.map} +1 -1
  446. package/dist/{version-common-4xFzvCS5.js → version-common-Di2U8VWH.js} +3 -4
  447. package/dist/{version-common-4xFzvCS5.js.map → version-common-Di2U8VWH.js.map} +1 -1
  448. package/dist/{voice-BnGwlZ75.cjs → voice-CBbxcsCM.cjs} +4 -5
  449. package/dist/{voice-BnGwlZ75.cjs.map → voice-CBbxcsCM.cjs.map} +1 -1
  450. package/dist/{voice-DjG8tBAD.js → voice-CzFWhWPJ.js} +4 -5
  451. package/dist/{voice-DjG8tBAD.js.map → voice-CzFWhWPJ.js.map} +1 -1
  452. package/dist/{workflow-builder-Dguv4rc0.cjs → workflow-builder-B33pXjdu.cjs} +8 -10
  453. package/dist/{workflow-builder-Dguv4rc0.cjs.map → workflow-builder-B33pXjdu.cjs.map} +1 -1
  454. package/dist/{workflow-builder-BoI-XXsT.js → workflow-builder-D4Po74yJ.js} +8 -10
  455. package/dist/{workflow-builder-BoI-XXsT.js.map → workflow-builder-D4Po74yJ.js.map} +1 -1
  456. package/dist/{workflows-Dcx4Ib0t.js → workflows-C9BMJV_C.js} +3 -4
  457. package/dist/{workflows-Dcx4Ib0t.js.map → workflows-C9BMJV_C.js.map} +1 -1
  458. package/dist/{workflows-5AytZqK_.cjs → workflows-CiP6r_nw.cjs} +35 -36
  459. package/dist/workflows-CiP6r_nw.cjs.map +1 -0
  460. package/dist/{workflows-C8rDpHyY.cjs → workflows-SYBpQupF.cjs} +3 -4
  461. package/dist/{workflows-C8rDpHyY.cjs.map → workflows-SYBpQupF.cjs.map} +1 -1
  462. package/dist/{workflows-D7Oq5On9.js → workflows-tk1Ixg8M.js} +35 -36
  463. package/dist/workflows-tk1Ixg8M.js.map +1 -0
  464. package/dist/{workspace-BVHXoKmP.js → workspace-C9dE6D1U.js} +6 -7
  465. package/dist/{workspace-BVHXoKmP.js.map → workspace-C9dE6D1U.js.map} +1 -1
  466. package/dist/{workspace-d25MZ9dj.cjs → workspace-CyH_iu8w.cjs} +6 -7
  467. package/dist/{workspace-d25MZ9dj.cjs.map → workspace-CyH_iu8w.cjs.map} +1 -1
  468. package/dist/{workspace-BJYV2lkt.cjs → workspace-KeHGZvNV.cjs} +2 -3
  469. package/dist/{workspace-BJYV2lkt.cjs.map → workspace-KeHGZvNV.cjs.map} +1 -1
  470. package/dist/{workspace-4dBGFdV2.js → workspace-muaSMxVS.js} +2 -3
  471. package/dist/{workspace-4dBGFdV2.js.map → workspace-muaSMxVS.js.map} +1 -1
  472. package/package.json +10 -10
  473. package/dist/agents-AyHEkc2F.cjs.map +0 -1
  474. package/dist/agents-BYE5Dmfk.js.map +0 -1
  475. package/dist/dist-5TAg2f91.js.map +0 -1
  476. package/dist/dist-C9Jwt1f0.cjs +0 -3
  477. package/dist/dist-CukR8zi9.cjs.map +0 -1
  478. package/dist/dist-Dgae8Imb.js +0 -1
  479. package/dist/memory-BHtTSzvJ.js.map +0 -1
  480. package/dist/memory-CwwkVDh1.cjs.map +0 -1
  481. package/dist/observability-new-endpoints-3DlTYf34.js.map +0 -1
  482. package/dist/observability-new-endpoints-Drr7q2Dj.cjs.map +0 -1
  483. package/dist/probe-image-size-DBmo2MAe.js.map +0 -1
  484. package/dist/probe-image-size-l1uuhbob.cjs.map +0 -1
  485. package/dist/route-builder-B2Qhhd7C.cjs.map +0 -1
  486. package/dist/route-builder-CjkWxv4E.js.map +0 -1
  487. package/dist/routes-CKfXiwRc.js.map +0 -1
  488. package/dist/routes-jXksmX9G.cjs.map +0 -1
  489. package/dist/schema-CzbEIyhE-20gGIWkz.cjs.map +0 -1
  490. package/dist/schema-CzbEIyhE-BsMcj9Ws.js.map +0 -1
  491. package/dist/tools--oMljfqq.js.map +0 -1
  492. package/dist/tools-Ci71xxGP.cjs.map +0 -1
  493. package/dist/utils-BBJlS81s.js.map +0 -1
  494. package/dist/utils-CF76qzZR.cjs.map +0 -1
  495. package/dist/utils-aoLN3Wfi.js.map +0 -1
  496. package/dist/utils-dDLIDg8O.cjs.map +0 -1
  497. package/dist/workflows-5AytZqK_.cjs.map +0 -1
  498. package/dist/workflows-D7Oq5On9.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-CeVJwkPP.cjs","names":["standardSchemaToJSONSchema","toStandardSchema","stringify","stripInjectedToolOverrideFields","isProviderDefinedTool","createRoute","listToolsResponseSchema","getHandlerFGAProvider","MastraFGAPermissions","handleError","toolIdPathParams","serializedToolSchema","HTTPException","optionalRunIdSchema","executeToolContextBodySchema","executeToolResponseSchema","isVercelTool","agentToolPathParams","getAgentFromSystem","executeToolBodySchema"],"sources":["../src/server/handlers/tools.ts"],"sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { stripInjectedToolOverrideFields } from './tool-schema-overrides';\nimport { getHandlerFGAProvider, validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown, options?: { stripInjectedOverrides?: boolean }): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(options?.stripInjectedOverrides ? stripInjectedToolOverrideFields(jsonSchema) : jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema, { stripInjectedOverrides: true }),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce<Record<string, any>>((acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n }, {});\n\n // Filter tools by FGA if configured\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
- import { r as __exportAll } from "./rolldown-runtime-D3Hj5m0v.js";
2
- import { t as HTTPException } from "./http-exception-CyfxZB6W.js";
3
- import { o as optionalRunIdSchema } from "./common-Y30XtCyr.js";
4
- import { D as listToolsResponseSchema, J as serializedToolSchema, S as executeToolResponseSchema, b as executeToolBodySchema, et as toolIdPathParams, u as agentToolPathParams, x as executeToolContextBodySchema } from "./agents-D1-fgNeb.js";
5
- import { n as standardSchemaToJSONSchema, r as toStandardSchema } from "./schema-CzbEIyhE-BsMcj9Ws.js";
6
- import { n as createRoute } from "./route-builder-CjkWxv4E.js";
7
- import { l as stringify } from "./utils-aoLN3Wfi.js";
1
+ import { r as __exportAll } from "./rolldown-runtime-CQI-hT2b.js";
2
+ import { t as HTTPException } from "./http-exception-CzaWkxMl.js";
3
+ import { o as optionalRunIdSchema } from "./common-xUmaFUop.js";
4
+ import { D as listToolsResponseSchema, J as serializedToolSchema, S as executeToolResponseSchema, b as executeToolBodySchema, et as toolIdPathParams, u as agentToolPathParams, x as executeToolContextBodySchema } from "./agents-A-ahR0eQ.js";
5
+ import { n as standardSchemaToJSONSchema, r as toStandardSchema } from "./schema-Bf12g7KC-DBc4NSds.js";
6
+ import { n as createRoute } from "./route-builder-BxPrwNog.js";
7
+ import { l as stringify } from "./utils-YEuwVEc2.js";
8
8
  import { handleError } from "./server/handlers/error.js";
9
- import { g as MastraFGAPermissions, p as validateBody } from "./utils-BBJlS81s.js";
9
+ import { _ as MastraFGAPermissions, m as validateBody, o as getHandlerFGAProvider } from "./utils-DHxjw4Tn.js";
10
10
  import { stripInjectedToolOverrideFields } from "./server/handlers/tool-schema-overrides.js";
11
- import { G as getAgentFromSystem } from "./agents-BYE5Dmfk.js";
11
+ import { G as getAgentFromSystem } from "./agents-CGS0tE4p.js";
12
12
  import { isProviderDefinedTool, isVercelTool } from "@mastra/core/tools";
13
- //#region src/server/handlers/tools.ts
13
+ // src/server/handlers/tools.ts
14
14
  var tools_exports = /* @__PURE__ */ __exportAll({
15
15
  EXECUTE_AGENT_TOOL_ROUTE: () => EXECUTE_AGENT_TOOL_ROUTE,
16
16
  EXECUTE_TOOL_ROUTE: () => EXECUTE_TOOL_ROUTE,
@@ -110,7 +110,7 @@ const LIST_TOOLS_ROUTE = createRoute({
110
110
  acc[id] = serializeTool(_tool);
111
111
  return acc;
112
112
  }, {});
113
- const fgaProvider = mastra.getServer?.()?.fga;
113
+ const fgaProvider = getHandlerFGAProvider(mastra, requestContext);
114
114
  const user = requestContext?.get("user");
115
115
  if (fgaProvider && user) {
116
116
  const toolList = Object.entries(serializedTools).map(([id, t]) => ({
@@ -250,7 +250,6 @@ const EXECUTE_AGENT_TOOL_ROUTE = createRoute({
250
250
  }
251
251
  }
252
252
  });
253
- //#endregion
254
253
  export { LIST_TOOLS_ROUTE as a, GET_TOOL_BY_ID_ROUTE as i, EXECUTE_TOOL_ROUTE as n, tools_exports as o, GET_AGENT_TOOL_ROUTE as r, EXECUTE_AGENT_TOOL_ROUTE as t };
255
254
 
256
- //# sourceMappingURL=tools--oMljfqq.js.map
255
+ //# sourceMappingURL=tools-hd_ZCJkE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools-hd_ZCJkE.js","names":[],"sources":["../src/server/handlers/tools.ts"],"sourcesContent":["import { isVercelTool, isProviderDefinedTool } from '@mastra/core/tools';\nimport { toStandardSchema, standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { PublicSchema } from '@mastra/schema-compat/schema';\nimport { stringify } from 'superjson';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n executeToolContextBodySchema,\n executeToolResponseSchema,\n listToolsResponseSchema,\n serializedToolSchema,\n toolIdPathParams,\n agentToolPathParams,\n executeToolBodySchema,\n} from '../schemas/agents';\nimport { optionalRunIdSchema } from '../schemas/common';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { getAgentFromSystem } from './agents';\nimport { handleError } from './error';\nimport { stripInjectedToolOverrideFields } from './tool-schema-overrides';\nimport { getHandlerFGAProvider, validateBody } from './utils';\n\n/**\n * Resolves a schema that may be a lazy function (e.g. AI SDK provider tools).\n * Recursively resolves until a non-function value is returned.\n * Skips functions that are themselves valid schemas (e.g. ArkType types are\n * callable but also implement StandardSchema via ~standard).\n */\nfunction resolveLazySchema(schema: unknown): unknown {\n if (typeof schema === 'function' && !('~standard' in schema)) {\n return resolveLazySchema(schema());\n }\n return schema;\n}\n\nfunction schemaToJsonSchema(schema: PublicSchema<unknown> | undefined) {\n if (!schema) {\n return undefined;\n }\n\n return standardSchemaToJSONSchema(toStandardSchema(schema), { target: 'draft-2020-12' });\n}\n\nfunction serializeSchema(schema: unknown, options?: { stripInjectedOverrides?: boolean }): string | undefined {\n const jsonSchema = schemaToJsonSchema(resolveLazySchema(schema) as PublicSchema<unknown> | undefined);\n if (jsonSchema === undefined) return undefined;\n return stringify(options?.stripInjectedOverrides ? stripInjectedToolOverrideFields(jsonSchema) : jsonSchema);\n}\n\n/**\n * Searches dynamically-resolved agent tools (provided via `toolsResolver` /\n * function-based `tools`) for a tool with the given id. Used as a fallback\n * after the static tool registry (`registeredTools` + `mastra.getToolById`)\n * misses, so global tool routes can resolve tools that only exist on agents.\n *\n * Errors thrown by an individual agent's `listTools()` are logged and\n * skipped so a single broken resolver doesn't take down the whole lookup.\n */\nasync function findToolInAgents(mastra: any, toolId: string, requestContext: any): Promise<any | undefined> {\n const agents = mastra.listAgents() || {};\n for (const agent of Object.values(agents) as any[]) {\n try {\n const agentTools = await agent.listTools({ requestContext });\n const found = Object.values(agentTools || {}).find((t: any) => t.id === toolId);\n if (found) return found;\n } catch (error) {\n mastra.getLogger?.()?.warn?.('Failed to list tools for agent while resolving tool by id', {\n agentId: agent?.id,\n toolId,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n return undefined;\n}\n\n/**\n * Serializes a tool for API responses, handling both regular tools (with Zod schemas)\n * and provider-defined tools (with AI SDK lazy schemas).\n */\nfunction serializeTool(tool: any): any {\n // Provider-defined tools (e.g. google.tools.googleSearch(), openai.tools.webSearch())\n // have lazy inputSchema functions that return AI SDK Schema objects, not Zod schemas.\n // We resolve them and use the jsonSchema property directly.\n if (isProviderDefinedTool(tool)) {\n const resolvedInput = resolveLazySchema(tool.inputSchema);\n const resolvedOutput = resolveLazySchema(tool.outputSchema);\n return {\n ...tool,\n inputSchema:\n resolvedInput && typeof resolvedInput === 'object' && 'jsonSchema' in resolvedInput\n ? stringify(resolvedInput.jsonSchema)\n : undefined,\n outputSchema:\n resolvedOutput && typeof resolvedOutput === 'object' && 'jsonSchema' in resolvedOutput\n ? stringify(resolvedOutput.jsonSchema)\n : undefined,\n };\n }\n\n return {\n ...tool,\n inputSchema: serializeSchema(tool.inputSchema, { stripInjectedOverrides: true }),\n outputSchema: serializeSchema(tool.outputSchema),\n requestContextSchema: serializeSchema(tool.requestContextSchema),\n };\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\nexport const LIST_TOOLS_ROUTE = createRoute({\n method: 'GET',\n path: '/tools',\n responseType: 'json',\n responseSchema: listToolsResponseSchema,\n summary: 'List all tools',\n description: 'Returns a list of all available tools in the system',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, requestContext }) => {\n try {\n // Merge tools from two sources: mastra.listTools() includes dynamically created tools\n // (e.g. MCP tools, or agent tools registered by their intrinsic id), while registeredTools\n // includes tools discovered by the CLI bundler (keyed by export name).\n //\n // The same tool instance can appear in both maps under different keys (e.g. an agent\n // registers it by `tool.id` while the bundler registers it by export name). Dedupe by\n // `tool.id`, preferring the registeredTools (bundler) key, so each tool appears once.\n const registered = registeredTools && Object.keys(registeredTools).length > 0 ? registeredTools : {};\n\n const allTools: Record<string, any> = {};\n const seenToolIds = new Map<string, string>();\n\n // registeredTools first so their key wins for a given tool.id.\n for (const [key, tool] of Object.entries(registered)) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n for (const [key, tool] of Object.entries(mastra.listTools() ?? {})) {\n const toolId = typeof (tool as any)?.id === 'string' ? (tool as any).id : undefined;\n // Skip if this exact tool.id was already registered (under any key) by registeredTools.\n if (toolId !== undefined && seenToolIds.has(toolId)) continue;\n if (toolId !== undefined) seenToolIds.set(toolId, key);\n allTools[key] = tool;\n }\n\n const serializedTools = Object.entries(allTools).reduce<Record<string, any>>((acc, [id, _tool]) => {\n acc[id] = serializeTool(_tool);\n return acc;\n }, {});\n\n // Filter tools by FGA if configured\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (fgaProvider && user) {\n const toolList = Object.entries(serializedTools).map(([id, t]) => ({ id, ...t }));\n const accessible = await fgaProvider.filterAccessible(user, toolList, 'tool', MastraFGAPermissions.TOOLS_READ);\n const accessibleSet = new Set(accessible.map((t: any) => t.id));\n for (const id of Object.keys(serializedTools)) {\n if (!accessibleSet.has(id)) {\n delete serializedTools[id];\n }\n }\n }\n\n return serializedTools;\n } catch (error) {\n return handleError(error, 'Error getting tools');\n }\n },\n});\n\nexport const GET_TOOL_BY_ID_ROUTE = createRoute({\n method: 'GET',\n path: '/tools/:toolId',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get tool by ID',\n description: 'Returns details for a specific tool including its schema and configuration',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, registeredTools, toolId, requestContext }) => {\n try {\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting tool');\n }\n },\n});\n\nexport const EXECUTE_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: toolIdPathParams,\n queryParamSchema: optionalRunIdSchema,\n bodySchema: executeToolContextBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute tool',\n description: 'Executes a specific tool with the provided input data',\n tags: ['Tools'],\n requiresAuth: true,\n handler: async ({ mastra, runId, toolId, registeredTools, requestContext, ...bodyParams }) => {\n try {\n if (!toolId) {\n throw new HTTPException(400, { message: 'Tool ID is required' });\n }\n\n let tool: any;\n\n // Try explicit registeredTools first, then fallback to mastra\n if (registeredTools && Object.keys(registeredTools).length > 0) {\n tool = Object.values(registeredTools).find((t: any) => t.id === toolId);\n }\n if (!tool) {\n try {\n tool = mastra.getToolById(toolId);\n } catch {\n // tool not found in global registry, continue to agent fallback\n }\n }\n\n // Fallback: search dynamically-resolved agent tools (toolsResolver)\n if (!tool) {\n tool = await findToolInAgents(mastra, toolId, requestContext);\n }\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const { data } = bodyParams;\n\n validateBody({ data });\n\n let result;\n if (isVercelTool(tool)) {\n result = await (tool as any).execute(data);\n } else {\n result = await tool.execute(data!, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n ...(runId\n ? {\n workflow: {\n runId,\n suspend: async () => {},\n },\n }\n : {}),\n });\n }\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing tool');\n }\n },\n});\n\n// ============================================================================\n// Agent Tool Routes\n// ============================================================================\n\nexport const GET_AGENT_TOOL_ROUTE = createRoute({\n method: 'GET',\n path: '/agents/:agentId/tools/:toolId',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n responseSchema: serializedToolSchema,\n summary: 'Get agent tool',\n description: 'Returns details for a specific tool assigned to the agent',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n return serializeTool(tool);\n } catch (error) {\n return handleError(error, 'Error getting agent tool');\n }\n },\n});\n\nexport const EXECUTE_AGENT_TOOL_ROUTE = createRoute({\n method: 'POST',\n path: '/agents/:agentId/tools/:toolId/execute',\n responseType: 'json',\n pathParamSchema: agentToolPathParams,\n bodySchema: executeToolBodySchema,\n responseSchema: executeToolResponseSchema,\n summary: 'Execute agent tool',\n description: 'Executes a specific tool assigned to the agent with the provided input data',\n tags: ['Agents', 'Tools'],\n requiresAuth: true,\n handler: async ({ mastra, agentId, toolId, data, requestContext }) => {\n try {\n if (!agentId) {\n throw new HTTPException(400, { message: 'Agent ID is required' });\n }\n const agent = await getAgentFromSystem({ mastra, agentId });\n\n const agentTools = await agent.listTools({ requestContext });\n\n const tool = Object.values(agentTools || {}).find((tool: any) => tool.id === toolId) as any;\n\n if (!tool) {\n throw new HTTPException(404, { message: 'Tool not found' });\n }\n\n if (!tool?.execute) {\n throw new HTTPException(400, { message: 'Tool is not executable' });\n }\n\n const result = await tool.execute(data, {\n mastra,\n requestContext,\n // TODO: Pass proper tracing context when server API supports tracing\n tracingContext: { currentSpan: undefined },\n });\n\n return result;\n } catch (error) {\n return handleError(error, 'Error executing agent tool');\n }\n },\n});\n"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- const require_rolldown_runtime = require("./rolldown-runtime-BwC_XMyb.cjs");
2
- const require_http_exception = require("./http-exception-CKDHupKw.cjs");
3
- const require_constants = require("./constants-e7aaPCLj.cjs");
1
+ const require_rolldown_runtime = require("./rolldown-runtime-10nMEhjP.cjs");
2
+ const require_http_exception = require("./http-exception-Co3MbFUf.cjs");
3
+ const require_constants = require("./constants-Co1XjPjd.cjs");
4
4
  let _mastra_core_auth_ee = require("@mastra/core/auth/ee");
5
5
  _mastra_core_auth_ee = require_rolldown_runtime.__toESM(_mastra_core_auth_ee, 1);
6
6
  let _mastra_core_memory = require("@mastra/core/memory");
7
- //#region src/server/fga-permissions.ts
7
+ // src/server/fga-permissions.ts
8
8
  /**
9
9
  * Safe re-export of `MastraFGAPermissions` from `@mastra/core/auth/ee`.
10
10
  *
@@ -51,8 +51,7 @@ const FALLBACK_PERMISSIONS = {
51
51
  };
52
52
  const realPermissions = _mastra_core_auth_ee.MastraFGAPermissions;
53
53
  const MastraFGAPermissions = realPermissions && Object.keys(realPermissions).length > 0 ? realPermissions : FALLBACK_PERMISSIONS;
54
- //#endregion
55
- //#region src/server/handlers/utils.ts
54
+ // src/server/handlers/utils.ts
56
55
  /**
57
56
  * Resolves a workflow by id or registration key from the set Mastra exposes
58
57
  * publicly. Unlike `mastra.getWorkflowById`, this excludes hidden internal
@@ -63,6 +62,24 @@ function getPublicWorkflowById(mastra, workflowId) {
63
62
  const workflows = mastra.listWorkflows();
64
63
  return Object.values(workflows).find((workflow) => workflow.id === workflowId) ?? (Object.hasOwn(workflows, workflowId) ? workflows[workflowId] : void 0);
65
64
  }
65
+ /**
66
+ * Resolves the FGA provider a handler should use for this request, following
67
+ * the same auth-mode-aware selection as the route-level checks: Studio auth
68
+ * requests use `studio.fga` when it is configured, and everything else uses
69
+ * `server.fga`.
70
+ *
71
+ * Returns `undefined` when FGA is not configured at all. When FGA is
72
+ * configured but no provider applies to this request (for example `studio.fga`
73
+ * is set and the request used server auth), the request is denied rather than
74
+ * treated as unrestricted.
75
+ */
76
+ function getHandlerFGAProvider(mastra, requestContext) {
77
+ const studioFga = mastra?.getStudio?.()?.fga;
78
+ const serverFga = mastra?.getServer?.()?.fga;
79
+ if (requestContext?.get("mastra__authMode") === "studio" && studioFga) return studioFga;
80
+ if (serverFga) return serverFga;
81
+ if (studioFga) throw new require_http_exception.HTTPException(403, { message: "Access denied: no FGA provider is configured for this request" });
82
+ }
66
83
  function validateBody(body) {
67
84
  const errorResponse = Object.entries(body).reduce((acc, [key, value]) => {
68
85
  if (!value) acc[key] = `Argument "${key}" is required`;
@@ -194,7 +211,8 @@ async function validateThreadOwnership(thread, effectiveResourceId) {
194
211
  */
195
212
  async function enforceThreadAccess({ mastra, requestContext, threadId, thread, effectiveResourceId, permission = MastraFGAPermissions.MEMORY_READ }) {
196
213
  await validateThreadOwnership(thread, effectiveResourceId);
197
- if (!mastra?.getServer?.()?.fga) return;
214
+ const fgaProvider = getHandlerFGAProvider(mastra, requestContext);
215
+ if (!fgaProvider) return;
198
216
  const user = requestContext?.get("user");
199
217
  if (!user || typeof user !== "object") throw new require_http_exception.HTTPException(403, { message: "FGA authorization denied: authenticated user is required" });
200
218
  await _mastra_core_memory.MastraMemory.checkThreadFGA({
@@ -203,7 +221,8 @@ async function enforceThreadAccess({ mastra, requestContext, threadId, thread, e
203
221
  threadId,
204
222
  resourceId: thread?.resourceId ?? effectiveResourceId,
205
223
  requestContext,
206
- permission
224
+ permission,
225
+ fgaProvider
207
226
  });
208
227
  }
209
228
  /**
@@ -216,10 +235,9 @@ async function enforceThreadAccess({ mastra, requestContext, threadId, thread, e
216
235
  * an FGA provider authorizes the route; otherwise it is refused rather than granted implicitly,
217
236
  * as on the thread-transfer route.
218
237
  */
219
- async function validateRunOwnership(run, effectiveResourceId, mastra) {
238
+ async function validateRunOwnership(run, effectiveResourceId, mastra, requestContext) {
220
239
  if (!run) return;
221
- const server = mastra?.getServer?.();
222
- if (!(typeof (server?.auth)?.mapUserToResourceId === "function")) {
240
+ if (!(typeof ((mastra?.getServer?.())?.auth)?.mapUserToResourceId === "function")) {
223
241
  if (effectiveResourceId && run.resourceId && run.resourceId !== effectiveResourceId) throw new require_http_exception.HTTPException(403, { message: "Access denied: workflow run belongs to a different resource" });
224
242
  return;
225
243
  }
@@ -227,9 +245,8 @@ async function validateRunOwnership(run, effectiveResourceId, mastra) {
227
245
  if (run.resourceId !== effectiveResourceId) throw new require_http_exception.HTTPException(403, { message: "Access denied: workflow run belongs to a different resource" });
228
246
  return;
229
247
  }
230
- if (!server?.fga) throw new require_http_exception.HTTPException(403, { message: "Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access." });
248
+ if (!getHandlerFGAProvider(mastra, requestContext)) throw new require_http_exception.HTTPException(403, { message: "Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access." });
231
249
  }
232
- //#endregion
233
250
  Object.defineProperty(exports, "MastraFGAPermissions", {
234
251
  enumerable: true,
235
252
  get: function() {
@@ -266,6 +283,12 @@ Object.defineProperty(exports, "getEffectiveThreadId", {
266
283
  return getEffectiveThreadId;
267
284
  }
268
285
  });
286
+ Object.defineProperty(exports, "getHandlerFGAProvider", {
287
+ enumerable: true,
288
+ get: function() {
289
+ return getHandlerFGAProvider;
290
+ }
291
+ });
269
292
  Object.defineProperty(exports, "getPublicWorkflowById", {
270
293
  enumerable: true,
271
294
  get: function() {
@@ -327,4 +350,4 @@ Object.defineProperty(exports, "validateThreadOwnership", {
327
350
  }
328
351
  });
329
352
 
330
- //# sourceMappingURL=utils-dDLIDg8O.cjs.map
353
+ //# sourceMappingURL=utils-BbYUI6Yn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-BbYUI6Yn.cjs","names":["authEE","HTTPException","isReservedRequestContextKey","MASTRA_RESOURCE_ID_KEY","MastraMemory"],"sources":["../src/server/fga-permissions.ts","../src/server/handlers/utils.ts"],"sourcesContent":["/**\n * Safe re-export of `MastraFGAPermissions` from `@mastra/core/auth/ee`.\n *\n * Why this shim exists:\n * `MastraFGAPermissions` was introduced in `@mastra/core@1.32.0`. Earlier\n * versions of `@mastra/core` ship `@mastra/core/auth/ee` but do not export\n * this constant. A direct named import (`import { MastraFGAPermissions }\n * from '@mastra/core/auth/ee'`) fails at ESM link time when this version\n * of `@mastra/server` is paired with `@mastra/core < 1.32.0`, taking the\n * entire user bundle down before any code runs.\n *\n * A namespace import tolerates missing names — `ns.MissingExport` is just\n * `undefined`, no link-time error. We then expose the permission map.\n *\n * Fallback values:\n * If the consuming `@mastra/core` does not export `MastraFGAPermissions`,\n * we substitute a hardcoded map of the canonical permission strings used\n * by routes in `@mastra/server`. This preserves the explicit RBAC\n * permission overrides those routes already had as string literals in\n * `@mastra/server@1.31.0` (e.g. `requiresPermission: \"agents:execute\"`\n * on `/v1/responses`). Without this fallback, `requiresPermission` would\n * be `undefined` on old core and the auth layer would derive the wrong\n * permission from the route path (e.g. `v1:write` instead of\n * `agents:execute`), breaking RBAC users who upgrade `@mastra/server`\n * but stay on `@mastra/core@1.31.0`.\n *\n * Once the consuming `@mastra/core` is on `1.32.0+` the values are real\n * and behaviour is identical to a direct named import.\n */\n\nimport * as authEE from '@mastra/core/auth/ee';\n\n// Canonical strings for the FGA permission keys actually referenced by\n// `@mastra/server` source. Mirrors `MastraFGAPermissions` in\n// `@mastra/core@1.32.0+` for these specific keys, and matches the string\n// literals previously hardcoded on the same routes in `@mastra/server@1.31.0`.\nconst FALLBACK_PERMISSIONS = {\n AGENTS_CREATE: 'agents:create',\n AGENTS_DELETE: 'agents:delete',\n AGENTS_EXECUTE: 'agents:execute',\n AGENTS_READ: 'agents:read',\n MEMORY_DELETE: 'memory:delete',\n MEMORY_READ: 'memory:read',\n MEMORY_WRITE: 'memory:write',\n TOOLS_EXECUTE: 'tools:execute',\n TOOLS_READ: 'tools:read',\n STORED_WORKFLOWS_READ: 'stored-workflows:read',\n STORED_WORKFLOWS_WRITE: 'stored-workflows:write',\n WORKFLOWS_EXECUTE: 'workflows:execute',\n WORKFLOWS_READ: 'workflows:read',\n} as const;\n\nconst realPermissions = (authEE as any).MastraFGAPermissions;\n\n// Typed as `any` on purpose: consumers of `@mastra/server` may run their\n// typecheck against a `@mastra/core` that doesn't export `MastraFGAPermissions`\n// (anything < 1.32.0). Pinning to the real type would push that name into the\n// emitted `.d.ts` and break downstream typecheck. `any` lets the property\n// accesses (`MastraFGAPermissions.AGENTS_READ`) flow through cleanly on every\n// supported core.\nexport const MastraFGAPermissions: any =\n realPermissions && Object.keys(realPermissions).length > 0 ? realPermissions : FALLBACK_PERMISSIONS;\n","import type { Mastra } from '@mastra/core';\nimport type { IFGAProvider, MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\nimport { MastraMemory } from '@mastra/core/memory';\nimport type { Workflow } from '@mastra/core/workflows';\nimport {\n MASTRA_AUTH_MODE_KEY,\n MASTRA_RESOURCE_ID_KEY,\n MASTRA_THREAD_ID_KEY,\n isReservedRequestContextKey,\n} from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Resolves a workflow by id or registration key from the set Mastra exposes\n * publicly. Unlike `mastra.getWorkflowById`, this excludes hidden internal\n * workflows (e.g. a durable agent's backing loop), which must never be\n * runnable through HTTP routes.\n */\nexport function getPublicWorkflowById(mastra: Mastra, workflowId: string): Workflow | undefined {\n const workflows = mastra.listWorkflows();\n return (\n Object.values(workflows).find(workflow => workflow.id === workflowId) ??\n (Object.hasOwn(workflows, workflowId) ? workflows[workflowId] : undefined)\n );\n}\n\n/**\n * Resolves the FGA provider a handler should use for this request, following\n * the same auth-mode-aware selection as the route-level checks: Studio auth\n * requests use `studio.fga` when it is configured, and everything else uses\n * `server.fga`.\n *\n * Returns `undefined` when FGA is not configured at all. When FGA is\n * configured but no provider applies to this request (for example `studio.fga`\n * is set and the request used server auth), the request is denied rather than\n * treated as unrestricted.\n */\nexport function getHandlerFGAProvider(mastra: any, requestContext?: RequestContext): IFGAProvider | undefined {\n const studioFga = mastra?.getStudio?.()?.fga as IFGAProvider | undefined;\n const serverFga = mastra?.getServer?.()?.fga as IFGAProvider | undefined;\n\n if (requestContext?.get(MASTRA_AUTH_MODE_KEY) === 'studio' && studioFga) return studioFga;\n if (serverFga) return serverFga;\n if (studioFga) {\n throw new HTTPException(403, { message: 'Access denied: no FGA provider is configured for this request' });\n }\n return undefined;\n}\n\n// Validation helper\nexport function validateBody(body: Record<string, unknown>) {\n const errorResponse = Object.entries(body).reduce<Record<string, string>>((acc, [key, value]) => {\n if (!value) {\n acc[key] = `Argument \"${key}\" is required`;\n }\n return acc;\n }, {});\n\n if (Object.keys(errorResponse).length > 0) {\n throw new HTTPException(400, { message: Object.values(errorResponse)[0] });\n }\n}\n\n/**\n * sanitizes the body by removing disallowed keys.\n * @param body body to sanitize\n * @param disallowedKeys keys to remove from the body\n */\nexport function sanitizeBody(body: Record<string, unknown>, disallowedKeys: string[]) {\n for (const key of disallowedKeys) {\n if (key in body) {\n delete body[key];\n }\n }\n}\n\nconst CREDENTIAL_HEADER_NAMES = new Set([\n 'authorization',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'x-goog-api-key',\n 'cookie',\n]);\n\n/**\n * Removes credential-bearing headers from client-supplied `modelSettings.headers`\n * so a caller's own auth (e.g. the app's bearer token) can never override the\n * provider credential configured on the server. Non-credential headers are kept.\n */\nexport function stripClientCredentialHeaders(body: Record<string, unknown>) {\n const modelSettings = body.modelSettings;\n if (!modelSettings || typeof modelSettings !== 'object') return;\n const headers = (modelSettings as { headers?: unknown }).headers;\n if (!headers || typeof headers !== 'object') return;\n\n const kept = Object.fromEntries(\n Object.entries(headers).filter(([name]) => !CREDENTIAL_HEADER_NAMES.has(name.toLowerCase())),\n );\n body.modelSettings = { ...modelSettings, headers: kept };\n}\n\nexport function parsePerPage(\n value: string | undefined,\n defaultValue: number = 100,\n max: number = 1000,\n): number | false {\n const normalized = (value || '').trim().toLowerCase();\n // Handle explicit false to bypass pagination\n if (normalized === 'false') {\n return false;\n }\n const parsed = parseInt(value || String(defaultValue), 10);\n if (isNaN(parsed)) return defaultValue;\n return Math.min(max, Math.max(1, parsed));\n}\n\n/**\n * Parses filter query parameters into a key-value object.\n */\nexport function parseFilters(filters: string | string[] | undefined): Record<string, string> | undefined {\n if (!filters) return undefined;\n\n return Object.fromEntries(\n (Array.isArray(filters) ? filters : [filters]).map((attr: string) => {\n const [key, ...valueParts] = attr.split(':');\n const value = valueParts.join(':'); // ✅ Handles colons in values\n return [key, value];\n }),\n );\n}\n\n/**\n * Merges a body-supplied requestContext into the trusted server RequestContext.\n * The server context is authoritative: reserved keys are skipped and body values\n * only fill keys the server context has not already set.\n */\nexport function mergeBodyRequestContext(serverRequestContext: RequestContext, bodyRequestContext: unknown): void {\n if (!bodyRequestContext || typeof bodyRequestContext !== 'object') {\n return;\n }\n\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n}\n\n// ============================================================================\n// Authorization Utilities\n// ============================================================================\n\n/**\n * Gets the effective resourceId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveResourceId(\n requestContext: RequestContext | undefined,\n clientResourceId: string | undefined,\n): string | undefined {\n const contextResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n return contextResourceId || clientResourceId;\n}\n\n/**\n * Returns the resource id resolved from the request context alone (set via\n * `mapUserToResourceId` or the `x-resource-id` header), ignoring any\n * client-provided value. Its presence indicates a resource-scoped caller;\n * its absence indicates a privileged/service context.\n */\nexport function getContextResourceId(requestContext: RequestContext | undefined): string | undefined {\n return requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n}\n\n/**\n * Ensures a memory request has a resolvable resource ID. The body's\n * `memory.resource` is optional so authenticated setups can rely on the\n * server-derived resource ID (MASTRA_RESOURCE_ID_KEY set via mapUserToResourceId).\n * When neither the body nor the request context provides one, reject with a\n * clear 400 instead of failing deep inside agent execution.\n */\nexport function requireEffectiveResourceId(\n effectiveResourceId: string | undefined,\n): asserts effectiveResourceId is string {\n if (!effectiveResourceId) {\n throw new HTTPException(400, {\n message:\n 'A resource ID is required when using memory. Provide memory.resource in the request body, or configure server auth with mapUserToResourceId to derive it from the authenticated user.',\n });\n }\n}\n\n/**\n * Gets the effective threadId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveThreadId(\n requestContext: RequestContext | undefined,\n clientThreadId: string | undefined,\n): string | undefined {\n const contextThreadId = requestContext?.get(MASTRA_THREAD_ID_KEY) as string | undefined;\n return contextThreadId || clientThreadId;\n}\n\n/**\n * Applies the effective threadId to a client memory thread option. Object\n * threads keep their other fields (metadata, title, ...) so they reach thread\n * creation; a client-supplied resourceId is dropped because the server decides\n * the resource.\n */\nexport function applyEffectiveThreadId<T extends string | { id: string } | undefined>(\n thread: T,\n effectiveThreadId: string | undefined,\n): T | string {\n if (!effectiveThreadId) return thread;\n if (thread && typeof thread === 'object') {\n const { resourceId: _resourceId, ...fields } = thread as { id: string; resourceId?: unknown };\n return { ...fields, id: effectiveThreadId } as T;\n }\n return effectiveThreadId;\n}\n\n/**\n * Validates that a thread belongs to the specified resourceId.\n * Throws 403 if the thread exists but belongs to a different resource.\n * Threads with no resourceId are accessible to all (shared threads).\n */\nexport async function validateThreadOwnership(\n thread: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n): Promise<void> {\n if (thread && effectiveResourceId && thread.resourceId && thread.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: thread belongs to a different resource' });\n }\n}\n\n/**\n * Validates both coarse resource ownership and fine-grained thread access.\n * FGA enforcement is a no-op when no FGA provider is configured.\n */\nexport async function enforceThreadAccess({\n mastra,\n requestContext,\n threadId,\n thread,\n effectiveResourceId,\n permission = MastraFGAPermissions.MEMORY_READ,\n}: {\n mastra: any;\n requestContext?: RequestContext;\n threadId: string;\n thread?: { resourceId?: string | null } | null;\n effectiveResourceId?: string;\n permission?: MastraFGAPermissionInput;\n}): Promise<void> {\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n if (!fgaProvider) {\n return;\n }\n\n const user = requestContext?.get('user');\n if (!user || typeof user !== 'object') {\n throw new HTTPException(403, { message: 'FGA authorization denied: authenticated user is required' });\n }\n\n await MastraMemory.checkThreadFGA({\n mastra,\n user: user as { id: string; [key: string]: unknown },\n threadId,\n resourceId: thread?.resourceId ?? effectiveResourceId,\n requestContext,\n permission,\n fgaProvider,\n });\n}\n\n/**\n * Validates that a caller may act on a workflow run.\n *\n * Without `server.auth.mapUserToResourceId` there is no tenancy model, and only a mismatch\n * between two present resource ids is denied. With a mapper, a resource-scoped caller may only\n * act on runs it owns (an owner-less run is not its run). An unscoped caller is a\n * privileged/service context (see getContextResourceId), but that privilege is only granted when\n * an FGA provider authorizes the route; otherwise it is refused rather than granted implicitly,\n * as on the thread-transfer route.\n */\nexport async function validateRunOwnership(\n run: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n mastra?: {\n getServer?: () => { auth?: unknown; fga?: unknown } | undefined;\n getStudio?: () => { fga?: unknown } | undefined;\n },\n requestContext?: RequestContext,\n): Promise<void> {\n if (!run) return;\n const server = mastra?.getServer?.();\n const tenancy =\n typeof (server?.auth as { mapUserToResourceId?: unknown } | undefined)?.mapUserToResourceId === 'function';\n if (!tenancy) {\n if (effectiveResourceId && run.resourceId && run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (effectiveResourceId) {\n if (run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (!getHandlerFGAProvider(mastra, requestContext)) {\n throw new HTTPException(403, {\n message:\n 'Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access.',\n });\n }\n}\n"],"mappings":"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"}