@mastra/server 1.79.0-alpha.10 → 1.79.0-alpha.11

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 (381) hide show
  1. package/dist/{a2a-CHBSYHxu.js → a2a-BqLB3McP.js} +17 -16
  2. package/dist/a2a-BqLB3McP.js.map +1 -0
  3. package/dist/{a2a-B465DD1u.cjs → a2a-Uood_0DN.cjs} +19 -18
  4. package/dist/a2a-Uood_0DN.cjs.map +1 -0
  5. package/dist/agent-builder-CuBD1tpv.cjs +728 -0
  6. package/dist/agent-builder-CuBD1tpv.cjs.map +1 -0
  7. package/dist/agent-builder-VhM8ADW-.js +627 -0
  8. package/dist/agent-builder-VhM8ADW-.js.map +1 -0
  9. package/dist/{agents-X1E7fW3p.js → agents-BHLTMBff.js} +2 -2
  10. package/dist/{agents-X1E7fW3p.js.map → agents-BHLTMBff.js.map} +1 -1
  11. package/dist/agents-BOWEUKyV.cjs +3127 -0
  12. package/dist/agents-BOWEUKyV.cjs.map +1 -0
  13. package/dist/agents-DRQ3ScbX.js +2828 -0
  14. package/dist/agents-DRQ3ScbX.js.map +1 -0
  15. package/dist/{agents-DoNMSCMt.cjs → agents-T-OIM9IK.cjs} +2 -2
  16. package/dist/{agents-DoNMSCMt.cjs.map → agents-T-OIM9IK.cjs.map} +1 -1
  17. package/dist/{api-schema-manifest-DUseI2VG.cjs → api-schema-manifest-A2qfi54Y.cjs} +4 -4
  18. package/dist/{api-schema-manifest-DUseI2VG.cjs.map → api-schema-manifest-A2qfi54Y.cjs.map} +1 -1
  19. package/dist/{api-schema-manifest-CWRIJP-B.js → api-schema-manifest-Dun5VMRT.js} +3 -3
  20. package/dist/{api-schema-manifest-CWRIJP-B.js.map → api-schema-manifest-Dun5VMRT.js.map} +1 -1
  21. package/dist/{background-tasks-CabImVak.cjs → background-tasks-B3VAKTJh.cjs} +3 -3
  22. package/dist/{background-tasks-CabImVak.cjs.map → background-tasks-B3VAKTJh.cjs.map} +1 -1
  23. package/dist/{background-tasks-oBaLtnCn.js → background-tasks-Du2zYOPl.js} +2 -2
  24. package/dist/{background-tasks-oBaLtnCn.js.map → background-tasks-Du2zYOPl.js.map} +1 -1
  25. package/dist/{builder-registry-DOkLe8ES.js → builder-registry-DLdu9bWH.js} +3 -3
  26. package/dist/{builder-registry-DOkLe8ES.js.map → builder-registry-DLdu9bWH.js.map} +1 -1
  27. package/dist/{builder-registry-D0frV8lQ.cjs → builder-registry-DaFAaMTf.cjs} +3 -3
  28. package/dist/{builder-registry-D0frV8lQ.cjs.map → builder-registry-DaFAaMTf.cjs.map} +1 -1
  29. package/dist/{channels-CBIopVWd.cjs → channels-BnVRmnzK.cjs} +6 -3
  30. package/dist/{channels-CBIopVWd.cjs.map → channels-BnVRmnzK.cjs.map} +1 -1
  31. package/dist/{channels-BOxgHvzI.js → channels-Db-4pXVZ.js} +6 -3
  32. package/dist/{channels-BOxgHvzI.js.map → channels-Db-4pXVZ.js.map} +1 -1
  33. package/dist/conversations-8BWryNlF.js +165 -0
  34. package/dist/conversations-8BWryNlF.js.map +1 -0
  35. package/dist/conversations-C5MkQBB8.cjs +194 -0
  36. package/dist/conversations-C5MkQBB8.cjs.map +1 -0
  37. package/dist/{conversations-Bj5TLNqF.cjs → conversations-DasqEDCF.cjs} +3 -3
  38. package/dist/{conversations-Bj5TLNqF.cjs.map → conversations-DasqEDCF.cjs.map} +1 -1
  39. package/dist/{dist-9c3PXXpk.cjs → dist-B-bEVWlJ.cjs} +4733 -1251
  40. package/dist/dist-B-bEVWlJ.cjs.map +1 -0
  41. package/dist/dist-B3kC8Yd0.cjs +3 -0
  42. package/dist/{dist-CQ3FSKT-.cjs → dist-B9ery9Zw.cjs} +38 -35
  43. package/dist/{dist-CQ3FSKT-.cjs.map → dist-B9ery9Zw.cjs.map} +1 -1
  44. package/dist/{dist-BxMmGD3n.js → dist-BBOnrL_A.js} +10 -12
  45. package/dist/{dist-BxMmGD3n.js.map → dist-BBOnrL_A.js.map} +1 -1
  46. package/dist/{dist-DOWsEmo6.js → dist-BIrQLUV9.js} +20 -20
  47. package/dist/{dist-DOWsEmo6.js.map → dist-BIrQLUV9.js.map} +1 -1
  48. package/dist/dist-BM9J-PTK.js +1 -0
  49. package/dist/{dist-DC1Pewf5.cjs → dist-Bo3GdQwf.cjs} +21 -21
  50. package/dist/{dist-DC1Pewf5.cjs.map → dist-Bo3GdQwf.cjs.map} +1 -1
  51. package/dist/{dist-BwYL7Ykb.js → dist-CREG82cy.js} +37 -34
  52. package/dist/{dist-BwYL7Ykb.js.map → dist-CREG82cy.js.map} +1 -1
  53. package/dist/{dist-rDRetJVY.cjs → dist-CeTLA-e5.cjs} +2 -3
  54. package/dist/{dist-rDRetJVY.cjs.map → dist-CeTLA-e5.cjs.map} +1 -1
  55. package/dist/{dist-CBRJax5e.js → dist-DLld1qjf.js} +25 -31
  56. package/dist/{dist-CBRJax5e.js.map → dist-DLld1qjf.js.map} +1 -1
  57. package/dist/{dist-B_bet8uz.js → dist-DjkPkAzV.js} +2 -3
  58. package/dist/{dist-B_bet8uz.js.map → dist-DjkPkAzV.js.map} +1 -1
  59. package/dist/{dist-UKEksCGq.cjs → dist-DsrJXwic.cjs} +11 -13
  60. package/dist/{dist-UKEksCGq.cjs.map → dist-DsrJXwic.cjs.map} +1 -1
  61. package/dist/{dist-DGCnbhNe.js → dist-k77XQGUn.js} +4493 -1043
  62. package/dist/dist-k77XQGUn.js.map +1 -0
  63. package/dist/{dist-3FPW9nVj.cjs → dist-lT2rqyY9.cjs} +26 -32
  64. package/dist/{dist-3FPW9nVj.cjs.map → dist-lT2rqyY9.cjs.map} +1 -1
  65. package/dist/docs/SKILL.md +1 -1
  66. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  67. package/dist/{dynamic-workflows-Rr_6ac1y.js → dynamic-workflows-CTUO0SFu.js} +3 -3
  68. package/dist/{dynamic-workflows-Rr_6ac1y.js.map → dynamic-workflows-CTUO0SFu.js.map} +1 -1
  69. package/dist/{dynamic-workflows-DXlkr-jK.cjs → dynamic-workflows-HwPX3mcf.cjs} +3 -3
  70. package/dist/{dynamic-workflows-DXlkr-jK.cjs.map → dynamic-workflows-HwPX3mcf.cjs.map} +1 -1
  71. package/dist/{editor-builder-BclcHxN6.cjs → editor-builder-BDtiWw0f.cjs} +2 -2
  72. package/dist/{editor-builder-BclcHxN6.cjs.map → editor-builder-BDtiWw0f.cjs.map} +1 -1
  73. package/dist/{editor-builder-D16kc1P6.js → editor-builder-ClFlGXoX.js} +4 -4
  74. package/dist/{editor-builder-D16kc1P6.js.map → editor-builder-ClFlGXoX.js.map} +1 -1
  75. package/dist/{editor-builder-s9WqPJgA.js → editor-builder-DnLCfqnY.js} +2 -2
  76. package/dist/{editor-builder-s9WqPJgA.js.map → editor-builder-DnLCfqnY.js.map} +1 -1
  77. package/dist/{editor-builder-DXHiPX1A.cjs → editor-builder-DtpP1FtW.cjs} +5 -5
  78. package/dist/{editor-builder-DXHiPX1A.cjs.map → editor-builder-DtpP1FtW.cjs.map} +1 -1
  79. package/dist/{helpers-ElhPeCSK.cjs → helpers-CAcEhq38.cjs} +21 -17
  80. package/dist/{helpers-ElhPeCSK.cjs.map → helpers-CAcEhq38.cjs.map} +1 -1
  81. package/dist/{helpers-DLhX1fqc.js → helpers-vrqddDd5.js} +21 -17
  82. package/dist/{helpers-DLhX1fqc.js.map → helpers-vrqddDd5.js.map} +1 -1
  83. package/dist/index.cjs +1 -1
  84. package/dist/logs-CiSw7r0s.cjs +119 -0
  85. package/dist/logs-CiSw7r0s.cjs.map +1 -0
  86. package/dist/logs-CxfPk-iL.js +96 -0
  87. package/dist/logs-CxfPk-iL.js.map +1 -0
  88. package/dist/mcp-BTdLh6E_.js +274 -0
  89. package/dist/mcp-BTdLh6E_.js.map +1 -0
  90. package/dist/mcp-BYqFR5q-.cjs +339 -0
  91. package/dist/mcp-BYqFR5q-.cjs.map +1 -0
  92. package/dist/memory-BHtTSzvJ.js +1739 -0
  93. package/dist/memory-BHtTSzvJ.js.map +1 -0
  94. package/dist/memory-CwwkVDh1.cjs +1906 -0
  95. package/dist/memory-CwwkVDh1.cjs.map +1 -0
  96. package/dist/observability-BBMCMeT-.cjs +502 -0
  97. package/dist/observability-BBMCMeT-.cjs.map +1 -0
  98. package/dist/observability-ZRgRcvoX.js +431 -0
  99. package/dist/observability-ZRgRcvoX.js.map +1 -0
  100. package/dist/{observability-new-endpoints-BU8JYPfh.js → observability-new-endpoints-fjoZzEtk.js} +10 -9
  101. package/dist/{observability-new-endpoints-BU8JYPfh.js.map → observability-new-endpoints-fjoZzEtk.js.map} +1 -1
  102. package/dist/{observability-new-endpoints-AMp9bnMV.cjs → observability-new-endpoints-tG3-odLa.cjs} +11 -10
  103. package/dist/observability-new-endpoints-tG3-odLa.cjs.map +1 -0
  104. package/dist/plans-CiPgWBhO.cjs +68 -0
  105. package/dist/plans-CiPgWBhO.cjs.map +1 -0
  106. package/dist/plans-DCepEY7n.js +57 -0
  107. package/dist/plans-DCepEY7n.js.map +1 -0
  108. package/dist/{probe-image-size-DBGjhUtJ.cjs → probe-image-size-Alv3gwKl.cjs} +194 -184
  109. package/dist/probe-image-size-Alv3gwKl.cjs.map +1 -0
  110. package/dist/{probe-image-size-Dmoxv93t.js → probe-image-size-BdfbUHxx.js} +158 -148
  111. package/dist/probe-image-size-BdfbUHxx.js.map +1 -0
  112. package/dist/responses-4FwMNxoJ.js +628 -0
  113. package/dist/responses-4FwMNxoJ.js.map +1 -0
  114. package/dist/responses-CCRijwDF.cjs +651 -0
  115. package/dist/responses-CCRijwDF.cjs.map +1 -0
  116. package/dist/{responses-CKNdSRkS.cjs → responses-CfcIc53b.cjs} +2 -2
  117. package/dist/{responses-CKNdSRkS.cjs.map → responses-CfcIc53b.cjs.map} +1 -1
  118. package/dist/{rolldown-runtime-Bd6kNlEP.cjs → rolldown-runtime-BwC_XMyb.cjs} +2 -2
  119. package/dist/{rolldown-runtime-maW3aOIk.js → rolldown-runtime-D3Hj5m0v.js} +2 -2
  120. package/dist/{route-builder-BNZs643f.cjs → route-builder-B2Qhhd7C.cjs} +52 -66
  121. package/dist/route-builder-B2Qhhd7C.cjs.map +1 -0
  122. package/dist/{route-builder-BfQYtclb.js → route-builder-CjkWxv4E.js} +51 -65
  123. package/dist/route-builder-CjkWxv4E.js.map +1 -0
  124. package/dist/{routes-Dl6_kWm7.js → routes-CKfXiwRc.js} +5 -3
  125. package/dist/routes-CKfXiwRc.js.map +1 -0
  126. package/dist/{routes-rwufkyUe.js → routes-D1cP2OeF.js} +26 -26
  127. package/dist/{routes-rwufkyUe.js.map → routes-D1cP2OeF.js.map} +1 -1
  128. package/dist/{routes-DPojsNf1.cjs → routes-bxG4x1MV.cjs} +199 -199
  129. package/dist/{routes-DPojsNf1.cjs.map → routes-bxG4x1MV.cjs.map} +1 -1
  130. package/dist/{routes-BULZI-PU.cjs → routes-jXksmX9G.cjs} +5 -3
  131. package/dist/routes-jXksmX9G.cjs.map +1 -0
  132. package/dist/{schedules-Bj-giFbc.cjs → schedules-CTTTCgbk.cjs} +3 -3
  133. package/dist/{schedules-Bj-giFbc.cjs.map → schedules-CTTTCgbk.cjs.map} +1 -1
  134. package/dist/{schedules-BQYgaz66.js → schedules-DXh37n6-.js} +2 -2
  135. package/dist/{schedules-BQYgaz66.js.map → schedules-DXh37n6-.js.map} +1 -1
  136. package/dist/{schema-e0VHpMt0-C0452jOk.cjs → schema-CzbEIyhE-20gGIWkz.cjs} +83 -88
  137. package/dist/schema-CzbEIyhE-20gGIWkz.cjs.map +1 -0
  138. package/dist/{schema-e0VHpMt0-CVP5Hnxy.js → schema-CzbEIyhE-BsMcj9Ws.js} +82 -87
  139. package/dist/schema-CzbEIyhE-BsMcj9Ws.js.map +1 -0
  140. package/dist/scores-D9UgETt_.js +288 -0
  141. package/dist/scores-D9UgETt_.js.map +1 -0
  142. package/dist/scores-DRdtS7NT.cjs +329 -0
  143. package/dist/scores-DRdtS7NT.cjs.map +1 -0
  144. package/dist/server/a2a/store.cjs +1 -1
  145. package/dist/server/auth/index.cjs +2 -2
  146. package/dist/server/auth/index.js +1 -1
  147. package/dist/server/browser-stream/index.cjs +9 -11
  148. package/dist/server/browser-stream/index.cjs.map +1 -1
  149. package/dist/server/browser-stream/index.js +8 -10
  150. package/dist/server/browser-stream/index.js.map +1 -1
  151. package/dist/server/handlers/a2a.cjs +2 -2
  152. package/dist/server/handlers/a2a.js +1 -2
  153. package/dist/server/handlers/agent-builder.cjs +18 -648
  154. package/dist/server/handlers/agent-builder.js +1 -627
  155. package/dist/server/handlers/agent-controller.cjs +5 -5
  156. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  157. package/dist/server/handlers/agent-controller.js +11 -9
  158. package/dist/server/handlers/agent-controller.js.map +1 -1
  159. package/dist/server/handlers/agent-versions.cjs +15 -8
  160. package/dist/server/handlers/agent-versions.cjs.map +1 -1
  161. package/dist/server/handlers/agent-versions.js +14 -7
  162. package/dist/server/handlers/agent-versions.js.map +1 -1
  163. package/dist/server/handlers/agents.cjs +51 -2860
  164. package/dist/server/handlers/agents.js +1 -2806
  165. package/dist/server/handlers/auth.cjs +14 -12
  166. package/dist/server/handlers/auth.cjs.map +1 -1
  167. package/dist/server/handlers/auth.js +20 -16
  168. package/dist/server/handlers/auth.js.map +1 -1
  169. package/dist/server/handlers/author-enrichment.cjs +1 -1
  170. package/dist/server/handlers/authorship.cjs +1 -1
  171. package/dist/server/handlers/authorship.cjs.map +1 -1
  172. package/dist/server/handlers/background-tasks.cjs +2 -2
  173. package/dist/server/handlers/background-tasks.js +1 -2
  174. package/dist/server/handlers/builder-registry.cjs +2 -2
  175. package/dist/server/handlers/builder-registry.js +1 -2
  176. package/dist/server/handlers/channels.cjs +2 -2
  177. package/dist/server/handlers/channels.js +1 -2
  178. package/dist/server/handlers/conversations.cjs +6 -171
  179. package/dist/server/handlers/conversations.js +1 -162
  180. package/dist/server/handlers/datasets.cjs +2 -2
  181. package/dist/server/handlers/datasets.cjs.map +1 -1
  182. package/dist/server/handlers/datasets.js +1 -1
  183. package/dist/server/handlers/dynamic-workflows.cjs +2 -2
  184. package/dist/server/handlers/dynamic-workflows.js +1 -2
  185. package/dist/server/handlers/editor-builder.cjs +2 -2
  186. package/dist/server/handlers/editor-builder.js +1 -2
  187. package/dist/server/handlers/error.cjs +18 -13
  188. package/dist/server/handlers/error.cjs.map +1 -1
  189. package/dist/server/handlers/error.js +17 -12
  190. package/dist/server/handlers/error.js.map +1 -1
  191. package/dist/server/handlers/favorites-enrichment.cjs +2 -2
  192. package/dist/server/handlers/favorites-enrichment.js +1 -1
  193. package/dist/server/handlers/gateway-memory-client.cjs +1 -1
  194. package/dist/server/handlers/logs.cjs +5 -104
  195. package/dist/server/handlers/logs.js +1 -96
  196. package/dist/server/handlers/mcp-client-versions.cjs +15 -8
  197. package/dist/server/handlers/mcp-client-versions.cjs.map +1 -1
  198. package/dist/server/handlers/mcp-client-versions.js +14 -7
  199. package/dist/server/handlers/mcp-client-versions.js.map +1 -1
  200. package/dist/server/handlers/mcp.cjs +12 -289
  201. package/dist/server/handlers/mcp.js +1 -274
  202. package/dist/server/handlers/memory.cjs +29 -1763
  203. package/dist/server/handlers/memory.js +1 -1731
  204. package/dist/server/handlers/observability-list-query-schemas.cjs +1 -1
  205. package/dist/server/handlers/observability-new-endpoints.cjs +2 -2
  206. package/dist/server/handlers/observability-new-endpoints.js +1 -2
  207. package/dist/server/handlers/observability-shared.cjs +2 -2
  208. package/dist/server/handlers/observability-shared.js +1 -1
  209. package/dist/server/handlers/observability-storage-schemas.cjs +1 -1
  210. package/dist/server/handlers/observability.cjs +14 -445
  211. package/dist/server/handlers/observability.js +3 -429
  212. package/dist/server/handlers/plans.cjs +3 -63
  213. package/dist/server/handlers/plans.js +1 -57
  214. package/dist/server/handlers/processor-providers.cjs +2 -2
  215. package/dist/server/handlers/processor-providers.cjs.map +1 -1
  216. package/dist/server/handlers/processor-providers.js +1 -1
  217. package/dist/server/handlers/processors.cjs +13 -15
  218. package/dist/server/handlers/processors.cjs.map +1 -1
  219. package/dist/server/handlers/processors.js +12 -14
  220. package/dist/server/handlers/processors.js.map +1 -1
  221. package/dist/server/handlers/prompt-block-versions.cjs +15 -8
  222. package/dist/server/handlers/prompt-block-versions.cjs.map +1 -1
  223. package/dist/server/handlers/prompt-block-versions.js +14 -7
  224. package/dist/server/handlers/prompt-block-versions.js.map +1 -1
  225. package/dist/server/handlers/responses.adapter.cjs +1 -1
  226. package/dist/server/handlers/responses.adapter.cjs.map +1 -1
  227. package/dist/server/handlers/responses.cjs +5 -632
  228. package/dist/server/handlers/responses.js +1 -624
  229. package/dist/server/handlers/responses.storage.cjs +2 -2
  230. package/dist/server/handlers/schedules-workflows-shim.cjs +1 -1
  231. package/dist/server/handlers/schedules.cjs +2 -2
  232. package/dist/server/handlers/schedules.js +1 -2
  233. package/dist/server/handlers/scorer-versions.cjs +15 -8
  234. package/dist/server/handlers/scorer-versions.cjs.map +1 -1
  235. package/dist/server/handlers/scorer-versions.js +14 -7
  236. package/dist/server/handlers/scorer-versions.js.map +1 -1
  237. package/dist/server/handlers/scores.cjs +8 -299
  238. package/dist/server/handlers/scores.js +1 -288
  239. package/dist/server/handlers/skills-sh-shared.cjs +1 -1
  240. package/dist/server/handlers/stored-agent-favorites.cjs +4 -4
  241. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  242. package/dist/server/handlers/stored-agents.cjs +19 -13
  243. package/dist/server/handlers/stored-agents.cjs.map +1 -1
  244. package/dist/server/handlers/stored-agents.js +18 -12
  245. package/dist/server/handlers/stored-agents.js.map +1 -1
  246. package/dist/server/handlers/stored-mcp-clients.cjs +8 -6
  247. package/dist/server/handlers/stored-mcp-clients.cjs.map +1 -1
  248. package/dist/server/handlers/stored-mcp-clients.js +7 -5
  249. package/dist/server/handlers/stored-mcp-clients.js.map +1 -1
  250. package/dist/server/handlers/stored-prompt-blocks.cjs +3 -3
  251. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  252. package/dist/server/handlers/stored-scorers.cjs +3 -3
  253. package/dist/server/handlers/stored-scorers.js +2 -2
  254. package/dist/server/handlers/stored-skill-favorites.cjs +4 -4
  255. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  256. package/dist/server/handlers/stored-skills.cjs +6 -5
  257. package/dist/server/handlers/stored-skills.cjs.map +1 -1
  258. package/dist/server/handlers/stored-skills.js +5 -4
  259. package/dist/server/handlers/stored-skills.js.map +1 -1
  260. package/dist/server/handlers/stored-workspaces.cjs +3 -3
  261. package/dist/server/handlers/stored-workspaces.js +2 -2
  262. package/dist/server/handlers/system.cjs +3 -3
  263. package/dist/server/handlers/system.cjs.map +1 -1
  264. package/dist/server/handlers/system.js +2 -2
  265. package/dist/server/handlers/test-utils.cjs +1 -1
  266. package/dist/server/handlers/tool-providers.cjs +2 -2
  267. package/dist/server/handlers/tool-providers.js +1 -1
  268. package/dist/server/handlers/tool-schema-overrides.cjs +1 -1
  269. package/dist/server/handlers/tools.cjs +7 -267
  270. package/dist/server/handlers/tools.js +1 -257
  271. package/dist/server/handlers/utils.cjs +2 -2
  272. package/dist/server/handlers/utils.js +1 -2
  273. package/dist/server/handlers/validate-agent-instructions.cjs +2 -2
  274. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  275. package/dist/server/handlers/validate-avatar.cjs +2 -2
  276. package/dist/server/handlers/validate-avatar.cjs.map +1 -1
  277. package/dist/server/handlers/validate-avatar.js +1 -1
  278. package/dist/server/handlers/validate-avatar.js.map +1 -1
  279. package/dist/server/handlers/vector.cjs +17 -334
  280. package/dist/server/handlers/vector.js +1 -314
  281. package/dist/server/handlers/version-helpers.cjs +1 -1
  282. package/dist/server/handlers/voice.cjs +9 -35
  283. package/dist/server/handlers/voice.js +1 -23
  284. package/dist/server/handlers/workflow-builder.cjs +2 -2
  285. package/dist/server/handlers/workflow-builder.js +1 -2
  286. package/dist/server/handlers/workflows.cjs +30 -1293
  287. package/dist/server/handlers/workflows.js +1 -1257
  288. package/dist/server/handlers/workspace.cjs +27 -1176
  289. package/dist/server/handlers/workspace.js +1 -1146
  290. package/dist/server/handlers.cjs +33 -33
  291. package/dist/server/handlers.js +17 -17
  292. package/dist/server/schemas/index.cjs +6 -6
  293. package/dist/server/schemas/index.js +3 -3
  294. package/dist/server/server-adapter/index.cjs +5 -5
  295. package/dist/server/server-adapter/index.cjs.map +1 -1
  296. package/dist/server/server-adapter/index.js +4 -4
  297. package/dist/server/server-adapter/index.js.map +1 -1
  298. package/dist/tools-CmFSfDMn.js +256 -0
  299. package/dist/tools-CmFSfDMn.js.map +1 -0
  300. package/dist/tools-SPJtxG9N.cjs +291 -0
  301. package/dist/tools-SPJtxG9N.cjs.map +1 -0
  302. package/dist/{utils-DCgeTrq2.cjs → utils-CF76qzZR.cjs} +12 -17
  303. package/dist/{utils-DCgeTrq2.cjs.map → utils-CF76qzZR.cjs.map} +1 -1
  304. package/dist/{utils-DCAUeb6M.js → utils-aoLN3Wfi.js} +11 -16
  305. package/dist/{utils-DCAUeb6M.js.map → utils-aoLN3Wfi.js.map} +1 -1
  306. package/dist/{utils-Du-EpvDs.cjs → utils-dDLIDg8O.cjs} +2 -2
  307. package/dist/{utils-Du-EpvDs.cjs.map → utils-dDLIDg8O.cjs.map} +1 -1
  308. package/dist/vector-BKDD1kwc.cjs +409 -0
  309. package/dist/vector-BKDD1kwc.cjs.map +1 -0
  310. package/dist/vector-TWv4t-4g.js +314 -0
  311. package/dist/vector-TWv4t-4g.js.map +1 -0
  312. package/dist/voice-BnGwlZ75.cjs +70 -0
  313. package/dist/voice-BnGwlZ75.cjs.map +1 -0
  314. package/dist/voice-DjG8tBAD.js +23 -0
  315. package/dist/voice-DjG8tBAD.js.map +1 -0
  316. package/dist/{workflow-builder-Brj3IArM.cjs → workflow-builder-C9-8ZOWF.cjs} +5 -5
  317. package/dist/{workflow-builder-Brj3IArM.cjs.map → workflow-builder-C9-8ZOWF.cjs.map} +1 -1
  318. package/dist/{workflow-builder-DOa1Vx6w.js → workflow-builder-CjlLoQvo.js} +10 -8
  319. package/dist/{workflow-builder-DOa1Vx6w.js.map → workflow-builder-CjlLoQvo.js.map} +1 -1
  320. package/dist/workflows-DjqeJcdJ.cjs +1446 -0
  321. package/dist/workflows-DjqeJcdJ.cjs.map +1 -0
  322. package/dist/workflows-bb-otd2o.js +1273 -0
  323. package/dist/workflows-bb-otd2o.js.map +1 -0
  324. package/dist/workspace-B6kzp-bo.js +1154 -0
  325. package/dist/workspace-B6kzp-bo.js.map +1 -0
  326. package/dist/workspace-COKR1SxH.cjs +1309 -0
  327. package/dist/workspace-COKR1SxH.cjs.map +1 -0
  328. package/package.json +4 -4
  329. package/dist/a2a-B465DD1u.cjs.map +0 -1
  330. package/dist/a2a-CHBSYHxu.js.map +0 -1
  331. package/dist/dist-9c3PXXpk.cjs.map +0 -1
  332. package/dist/dist-B5OwHWTo.cjs +0 -2294
  333. package/dist/dist-B5OwHWTo.cjs.map +0 -1
  334. package/dist/dist-DGCnbhNe.js.map +0 -1
  335. package/dist/dist-DcoIg_tp.js +0 -2293
  336. package/dist/dist-DcoIg_tp.js.map +0 -1
  337. package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +0 -1
  338. package/dist/probe-image-size-DBGjhUtJ.cjs.map +0 -1
  339. package/dist/probe-image-size-Dmoxv93t.js.map +0 -1
  340. package/dist/route-builder-BNZs643f.cjs.map +0 -1
  341. package/dist/route-builder-BfQYtclb.js.map +0 -1
  342. package/dist/routes-BULZI-PU.cjs.map +0 -1
  343. package/dist/routes-Dl6_kWm7.js.map +0 -1
  344. package/dist/schema-Drf2W04o.js +0 -2
  345. package/dist/schema-EQanefYq.cjs +0 -1
  346. package/dist/schema-e0VHpMt0-C0452jOk.cjs.map +0 -1
  347. package/dist/schema-e0VHpMt0-CVP5Hnxy.js.map +0 -1
  348. package/dist/server/handlers/agent-builder.cjs.map +0 -1
  349. package/dist/server/handlers/agent-builder.js.map +0 -1
  350. package/dist/server/handlers/agents.cjs.map +0 -1
  351. package/dist/server/handlers/agents.js.map +0 -1
  352. package/dist/server/handlers/conversations.cjs.map +0 -1
  353. package/dist/server/handlers/conversations.js.map +0 -1
  354. package/dist/server/handlers/logs.cjs.map +0 -1
  355. package/dist/server/handlers/logs.js.map +0 -1
  356. package/dist/server/handlers/mcp.cjs.map +0 -1
  357. package/dist/server/handlers/mcp.js.map +0 -1
  358. package/dist/server/handlers/memory.cjs.map +0 -1
  359. package/dist/server/handlers/memory.js.map +0 -1
  360. package/dist/server/handlers/observability.cjs.map +0 -1
  361. package/dist/server/handlers/observability.js.map +0 -1
  362. package/dist/server/handlers/plans.cjs.map +0 -1
  363. package/dist/server/handlers/plans.js.map +0 -1
  364. package/dist/server/handlers/responses.cjs.map +0 -1
  365. package/dist/server/handlers/responses.js.map +0 -1
  366. package/dist/server/handlers/scores.cjs.map +0 -1
  367. package/dist/server/handlers/scores.js.map +0 -1
  368. package/dist/server/handlers/tools.cjs.map +0 -1
  369. package/dist/server/handlers/tools.js.map +0 -1
  370. package/dist/server/handlers/vector.cjs.map +0 -1
  371. package/dist/server/handlers/vector.js.map +0 -1
  372. package/dist/server/handlers/voice.cjs.map +0 -1
  373. package/dist/server/handlers/voice.js.map +0 -1
  374. package/dist/server/handlers/workflows.cjs.map +0 -1
  375. package/dist/server/handlers/workflows.js.map +0 -1
  376. package/dist/server/handlers/workspace.cjs.map +0 -1
  377. package/dist/server/handlers/workspace.js.map +0 -1
  378. package/dist/sync-Ai_ZDz7U.js +0 -1700
  379. package/dist/sync-Ai_ZDz7U.js.map +0 -1
  380. package/dist/sync-BrO5MtSe.cjs +0 -1729
  381. package/dist/sync-BrO5MtSe.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"authorship.cjs","names":["MASTRA_RESOURCE_ID_KEY","MASTRA_USER_KEY","MASTRA_USER_PERMISSIONS_KEY","HTTPException"],"sources":["../../../src/server/handlers/authorship.ts"],"sourcesContent":["import { matchesPermission } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\n\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from '../constants';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Shape of a stored record that carries ownership + visibility metadata.\n * Used by `matchesAuthorFilter` and the access-assertion helpers.\n */\nexport type OwnedRecord = {\n authorId?: string | null;\n visibility?: 'private' | 'public';\n};\n\n/**\n * Returns the author id associated with the authenticated caller, or `null`\n * if auth is not configured / the caller cannot be resolved.\n *\n * Prefers `MASTRA_RESOURCE_ID_KEY` (set by `authConfig.mapUserToResourceId`)\n * and falls back to `user.id` on the authenticated user object.\n */\nexport function getCallerAuthorId(requestContext: RequestContext): string | null {\n const resourceId = requestContext.get(MASTRA_RESOURCE_ID_KEY);\n if (typeof resourceId === 'string' && resourceId.length > 0) {\n return resourceId;\n }\n\n const user = requestContext.get(MASTRA_USER_KEY);\n if (user && typeof user === 'object' && 'id' in user) {\n const id = user.id;\n if (typeof id === 'string' && id.length > 0) {\n return id;\n }\n }\n\n return null;\n}\n\n/**\n * Returns the list of permission strings currently attached to the caller by\n * the RBAC provider. Returns an empty array when RBAC isn't configured.\n */\nexport function getCallerPermissions(requestContext: RequestContext): string[] {\n const raw = requestContext.get(MASTRA_USER_PERMISSIONS_KEY);\n if (Array.isArray(raw)) {\n return raw.filter((p): p is string => typeof p === 'string');\n }\n return [];\n}\n\n/**\n * True if the caller holds a wildcard permission that lets them manage a\n * resource they don't own (e.g. admins listing agents across tenants).\n *\n * Recognizes `*`, `<resource>:*`, and `<resource>:admin`.\n */\nexport function hasAdminBypass(requestContext: RequestContext, resource: string): boolean {\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n const wildcardAll = '*';\n const resourceWildcard = `${resource}:*`;\n const resourceAdmin = `${resource}:admin`;\n return permissions.some(p => p === wildcardAll || p === resourceWildcard || p === resourceAdmin);\n}\n\n/**\n * True if the caller holds a permission explicitly scoped to a specific\n * resource id — e.g. `agents:read:agent-123` or `agents:*:agent-123`.\n *\n * Broad grants without a resource-id segment (e.g. the role-default\n * `agents:execute`) are intentionally NOT treated as satisfying ownership\n * overrides. Those broad grants already gate route access at the\n * `requiresPermission` layer; giving them a second life as per-record\n * overrides would defeat the owner/visibility model.\n *\n * When called without `resourceId` (the legacy shape), falls back to the\n * original \"any matching permission\" behavior.\n */\nexport function hasScopedPermission(args: {\n requestContext: RequestContext;\n resource: string;\n action: string;\n resourceId?: string;\n}): boolean {\n const { requestContext, resource, action, resourceId } = args;\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n\n if (!resourceId) {\n const required = `${resource}:${action}`;\n return permissions.some(p => matchesPermission(p, required));\n }\n\n const required = `${resource}:${action}:${resourceId}`;\n return permissions.some(p => {\n // Only honor grants that explicitly name a resource id. A granted\n // permission with just `<resource>:<action>` (no id segment) is\n // considered a broad role grant, not a per-record override.\n const parts = p.split(':');\n if (parts.length < 3) return false;\n return matchesPermission(p, required);\n });\n}\n\nexport type AuthorFilter =\n | { kind: 'unrestricted' }\n | { kind: 'exact'; authorId: string }\n | { kind: 'ownedOrPublic'; callerAuthorId: string }\n | { kind: 'publicOnly' }\n | { kind: 'ownedOrPublicOthers'; callerAuthorId: string; queryAuthorId: string };\n\n/**\n * Resolves the filter to apply when listing owner-scoped records.\n *\n * Behavior matrix:\n * - Admin bypass + no query overrides → `unrestricted`.\n * - Admin bypass + `authorId=X` → `exact` (all of X's rows).\n * - `visibility=public` (any caller) → `publicOnly` (aggregate public rows across owners).\n * - `authorId=X`, caller === X → `exact` (all of caller's rows).\n * - `authorId=X`, caller !== X (non-admin) → `ownedOrPublicOthers` (only X's public rows).\n * - No caller (auth off) → `unrestricted` (or `exact` if query supplied).\n * - Default → `ownedOrPublic` (caller's rows + legacy unowned + any public rows).\n */\nexport function resolveAuthorFilter(args: {\n requestContext: RequestContext;\n resource: string;\n queryAuthorId?: string;\n queryVisibility?: 'public';\n}): AuthorFilter {\n const { requestContext, resource, queryAuthorId, queryVisibility } = args;\n const callerAuthorId = getCallerAuthorId(requestContext);\n const bypass = hasAdminBypass(requestContext, resource);\n\n if (queryVisibility === 'public' && !queryAuthorId) {\n return { kind: 'publicOnly' };\n }\n\n if (bypass) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n // Auth isn't configured (no caller) → treat as unrestricted. The route's\n // `requiresAuth`/`requiresPermission` is what gates access in that mode.\n if (!callerAuthorId) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n if (queryAuthorId) {\n if (queryAuthorId === callerAuthorId) {\n return { kind: 'exact', authorId: callerAuthorId };\n }\n // Non-owner asking about another user: only that user's public rows are visible.\n return { kind: 'ownedOrPublicOthers', callerAuthorId, queryAuthorId };\n }\n\n return { kind: 'ownedOrPublic', callerAuthorId };\n}\n\n/**\n * Returns `true` if the record is visible to the caller given the resolved\n * filter. See `resolveAuthorFilter` for the filter semantics.\n *\n * Legacy rows with `authorId == null` are treated as public (visible to all).\n */\nexport function matchesAuthorFilter(record: OwnedRecord, filter: AuthorFilter): boolean {\n const owner = record.authorId ?? null;\n const isPublic = record.visibility === 'public';\n\n switch (filter.kind) {\n case 'unrestricted':\n return true;\n case 'exact':\n return owner === filter.authorId;\n case 'ownedOrPublic':\n return owner === null || owner === filter.callerAuthorId || isPublic;\n case 'publicOnly':\n return owner === null || isPublic;\n case 'ownedOrPublicOthers':\n // Filtering by another author's rows: only expose their public ones.\n // Legacy unowned rows match if the query is for `null`; here the query\n // is always for a concrete id, so unowned rows don't match.\n return owner === filter.queryAuthorId && isPublic;\n }\n}\n\n/**\n * Asserts the caller has read access to the record. Throws 404 if not.\n *\n * Read access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:read` or `<resource>:read:<resourceId>`.\n */\nexport function assertReadAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n // No authenticated user on the request context means auth is not configured\n // (single-user/dev mode). When auth IS configured, coreAuthMiddleware\n // rejects unauthenticated requests with 401 before they reach handlers,\n // so an absent user here genuinely means no auth provider.\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return;\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has execute access to the record. Throws 404 if not.\n *\n * Execute access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:execute` / `<resource>:execute:<resourceId>`, OR\n * - The caller holds `<resource>:read` / `<resource>:read:<resourceId>`\n * (read implies the ability to consume/chat with the resource).\n */\nexport function assertExecuteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'execute', resourceId })) {\n return;\n }\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has write access (edit or delete) to the record.\n * Throws 404 if not.\n *\n * Write access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record, OR\n * - The caller has admin bypass, OR\n * - The caller holds `<resource>:<action>` or `<resource>:<action>:<resourceId>`.\n *\n * `visibility: 'public'` alone does NOT grant write access.\n */\nexport function assertWriteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n action: 'edit' | 'delete' | 'write';\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, action, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action, resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has share access to the record. Throws 404 if not.\n *\n * Share access controls who can change a record's audience/visibility\n * (e.g. flipping `private` ↔ `public`). It is intentionally separate from\n * `write`: a caller with only `<resource>:write` MUST NOT be able to flip\n * visibility — that would let any editor expose private records.\n *\n * Share access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record (creators can share their own records), OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:share` / `<resource>:share:<resourceId>`\n * (or any pattern that matches it, e.g. `*:share`).\n *\n * `visibility: 'public'` does NOT grant share access — being readable doesn't\n * imply the right to change who else can read.\n */\nexport function assertShareAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'share', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Alias for `assertWriteAccess` with `action: 'edit'`. Prefer `assertWriteAccess`\n * in new code so the action is explicit.\n */\nexport function assertOwnership(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n assertWriteAccess({ ...args, action: 'edit' });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"authorship.cjs","names":["MASTRA_RESOURCE_ID_KEY","MASTRA_USER_KEY","MASTRA_USER_PERMISSIONS_KEY","matchesPermission","HTTPException"],"sources":["../../../src/server/handlers/authorship.ts"],"sourcesContent":["import { matchesPermission } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\n\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_USER_KEY, MASTRA_USER_PERMISSIONS_KEY } from '../constants';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Shape of a stored record that carries ownership + visibility metadata.\n * Used by `matchesAuthorFilter` and the access-assertion helpers.\n */\nexport type OwnedRecord = {\n authorId?: string | null;\n visibility?: 'private' | 'public';\n};\n\n/**\n * Returns the author id associated with the authenticated caller, or `null`\n * if auth is not configured / the caller cannot be resolved.\n *\n * Prefers `MASTRA_RESOURCE_ID_KEY` (set by `authConfig.mapUserToResourceId`)\n * and falls back to `user.id` on the authenticated user object.\n */\nexport function getCallerAuthorId(requestContext: RequestContext): string | null {\n const resourceId = requestContext.get(MASTRA_RESOURCE_ID_KEY);\n if (typeof resourceId === 'string' && resourceId.length > 0) {\n return resourceId;\n }\n\n const user = requestContext.get(MASTRA_USER_KEY);\n if (user && typeof user === 'object' && 'id' in user) {\n const id = user.id;\n if (typeof id === 'string' && id.length > 0) {\n return id;\n }\n }\n\n return null;\n}\n\n/**\n * Returns the list of permission strings currently attached to the caller by\n * the RBAC provider. Returns an empty array when RBAC isn't configured.\n */\nexport function getCallerPermissions(requestContext: RequestContext): string[] {\n const raw = requestContext.get(MASTRA_USER_PERMISSIONS_KEY);\n if (Array.isArray(raw)) {\n return raw.filter((p): p is string => typeof p === 'string');\n }\n return [];\n}\n\n/**\n * True if the caller holds a wildcard permission that lets them manage a\n * resource they don't own (e.g. admins listing agents across tenants).\n *\n * Recognizes `*`, `<resource>:*`, and `<resource>:admin`.\n */\nexport function hasAdminBypass(requestContext: RequestContext, resource: string): boolean {\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n const wildcardAll = '*';\n const resourceWildcard = `${resource}:*`;\n const resourceAdmin = `${resource}:admin`;\n return permissions.some(p => p === wildcardAll || p === resourceWildcard || p === resourceAdmin);\n}\n\n/**\n * True if the caller holds a permission explicitly scoped to a specific\n * resource id — e.g. `agents:read:agent-123` or `agents:*:agent-123`.\n *\n * Broad grants without a resource-id segment (e.g. the role-default\n * `agents:execute`) are intentionally NOT treated as satisfying ownership\n * overrides. Those broad grants already gate route access at the\n * `requiresPermission` layer; giving them a second life as per-record\n * overrides would defeat the owner/visibility model.\n *\n * When called without `resourceId` (the legacy shape), falls back to the\n * original \"any matching permission\" behavior.\n */\nexport function hasScopedPermission(args: {\n requestContext: RequestContext;\n resource: string;\n action: string;\n resourceId?: string;\n}): boolean {\n const { requestContext, resource, action, resourceId } = args;\n const permissions = getCallerPermissions(requestContext);\n if (permissions.length === 0) return false;\n\n if (!resourceId) {\n const required = `${resource}:${action}`;\n return permissions.some(p => matchesPermission(p, required));\n }\n\n const required = `${resource}:${action}:${resourceId}`;\n return permissions.some(p => {\n // Only honor grants that explicitly name a resource id. A granted\n // permission with just `<resource>:<action>` (no id segment) is\n // considered a broad role grant, not a per-record override.\n const parts = p.split(':');\n if (parts.length < 3) return false;\n return matchesPermission(p, required);\n });\n}\n\nexport type AuthorFilter =\n | { kind: 'unrestricted' }\n | { kind: 'exact'; authorId: string }\n | { kind: 'ownedOrPublic'; callerAuthorId: string }\n | { kind: 'publicOnly' }\n | { kind: 'ownedOrPublicOthers'; callerAuthorId: string; queryAuthorId: string };\n\n/**\n * Resolves the filter to apply when listing owner-scoped records.\n *\n * Behavior matrix:\n * - Admin bypass + no query overrides → `unrestricted`.\n * - Admin bypass + `authorId=X` → `exact` (all of X's rows).\n * - `visibility=public` (any caller) → `publicOnly` (aggregate public rows across owners).\n * - `authorId=X`, caller === X → `exact` (all of caller's rows).\n * - `authorId=X`, caller !== X (non-admin) → `ownedOrPublicOthers` (only X's public rows).\n * - No caller (auth off) → `unrestricted` (or `exact` if query supplied).\n * - Default → `ownedOrPublic` (caller's rows + legacy unowned + any public rows).\n */\nexport function resolveAuthorFilter(args: {\n requestContext: RequestContext;\n resource: string;\n queryAuthorId?: string;\n queryVisibility?: 'public';\n}): AuthorFilter {\n const { requestContext, resource, queryAuthorId, queryVisibility } = args;\n const callerAuthorId = getCallerAuthorId(requestContext);\n const bypass = hasAdminBypass(requestContext, resource);\n\n if (queryVisibility === 'public' && !queryAuthorId) {\n return { kind: 'publicOnly' };\n }\n\n if (bypass) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n // Auth isn't configured (no caller) → treat as unrestricted. The route's\n // `requiresAuth`/`requiresPermission` is what gates access in that mode.\n if (!callerAuthorId) {\n return queryAuthorId ? { kind: 'exact', authorId: queryAuthorId } : { kind: 'unrestricted' };\n }\n\n if (queryAuthorId) {\n if (queryAuthorId === callerAuthorId) {\n return { kind: 'exact', authorId: callerAuthorId };\n }\n // Non-owner asking about another user: only that user's public rows are visible.\n return { kind: 'ownedOrPublicOthers', callerAuthorId, queryAuthorId };\n }\n\n return { kind: 'ownedOrPublic', callerAuthorId };\n}\n\n/**\n * Returns `true` if the record is visible to the caller given the resolved\n * filter. See `resolveAuthorFilter` for the filter semantics.\n *\n * Legacy rows with `authorId == null` are treated as public (visible to all).\n */\nexport function matchesAuthorFilter(record: OwnedRecord, filter: AuthorFilter): boolean {\n const owner = record.authorId ?? null;\n const isPublic = record.visibility === 'public';\n\n switch (filter.kind) {\n case 'unrestricted':\n return true;\n case 'exact':\n return owner === filter.authorId;\n case 'ownedOrPublic':\n return owner === null || owner === filter.callerAuthorId || isPublic;\n case 'publicOnly':\n return owner === null || isPublic;\n case 'ownedOrPublicOthers':\n // Filtering by another author's rows: only expose their public ones.\n // Legacy unowned rows match if the query is for `null`; here the query\n // is always for a concrete id, so unowned rows don't match.\n return owner === filter.queryAuthorId && isPublic;\n }\n}\n\n/**\n * Asserts the caller has read access to the record. Throws 404 if not.\n *\n * Read access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:read` or `<resource>:read:<resourceId>`.\n */\nexport function assertReadAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n // No authenticated user on the request context means auth is not configured\n // (single-user/dev mode). When auth IS configured, coreAuthMiddleware\n // rejects unauthenticated requests with 401 before they reach handlers,\n // so an absent user here genuinely means no auth provider.\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return;\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has execute access to the record. Throws 404 if not.\n *\n * Execute access is granted when:\n * - The record has no owner (legacy/public), OR\n * - The record is marked `visibility: 'public'`, OR\n * - The caller owns the record, OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:execute` / `<resource>:execute:<resourceId>`, OR\n * - The caller holds `<resource>:read` / `<resource>:read:<resourceId>`\n * (read implies the ability to consume/chat with the resource).\n */\nexport function assertExecuteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (record.visibility === 'public') return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'execute', resourceId })) {\n return;\n }\n if (hasScopedPermission({ requestContext, resource, action: 'read', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has write access (edit or delete) to the record.\n * Throws 404 if not.\n *\n * Write access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record, OR\n * - The caller has admin bypass, OR\n * - The caller holds `<resource>:<action>` or `<resource>:<action>:<resourceId>`.\n *\n * `visibility: 'public'` alone does NOT grant write access.\n */\nexport function assertWriteAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n action: 'edit' | 'delete' | 'write';\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, action, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action, resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Asserts the caller has share access to the record. Throws 404 if not.\n *\n * Share access controls who can change a record's audience/visibility\n * (e.g. flipping `private` ↔ `public`). It is intentionally separate from\n * `write`: a caller with only `<resource>:write` MUST NOT be able to flip\n * visibility — that would let any editor expose private records.\n *\n * Share access is granted when:\n * - The record has no owner (legacy), OR\n * - The caller owns the record (creators can share their own records), OR\n * - The caller has admin bypass (`*`, `<resource>:*`, `<resource>:admin`), OR\n * - The caller holds `<resource>:share` / `<resource>:share:<resourceId>`\n * (or any pattern that matches it, e.g. `*:share`).\n *\n * `visibility: 'public'` does NOT grant share access — being readable doesn't\n * imply the right to change who else can read.\n */\nexport function assertShareAccess(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n const { requestContext, resource, resourceId, record } = args;\n const owner = record.authorId ?? null;\n\n if (owner === null) return;\n if (hasAdminBypass(requestContext, resource)) return;\n\n const callerAuthorId = getCallerAuthorId(requestContext);\n if (!callerAuthorId && !requestContext.get(MASTRA_USER_KEY)) return; // No auth configured (see assertReadAccess)\n if (callerAuthorId === owner) return;\n\n if (hasScopedPermission({ requestContext, resource, action: 'share', resourceId })) {\n return;\n }\n\n throw new HTTPException(404, { message: 'Not found' });\n}\n\n/**\n * Alias for `assertWriteAccess` with `action: 'edit'`. Prefer `assertWriteAccess`\n * in new code so the action is explicit.\n */\nexport function assertOwnership(args: {\n requestContext: RequestContext;\n resource: string;\n resourceId?: string;\n record: OwnedRecord;\n}): void {\n assertWriteAccess({ ...args, action: 'edit' });\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
3
- const require_background_tasks = require("../../background-tasks-CabImVak.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
+ const require_background_tasks = require("../../background-tasks-B3VAKTJh.cjs");
4
4
  exports.BACKGROUND_TASK_STREAM_ROUTE = require_background_tasks.BACKGROUND_TASK_STREAM_ROUTE;
5
5
  exports.GET_BACKGROUND_TASK_ROUTE = require_background_tasks.GET_BACKGROUND_TASK_ROUTE;
6
6
  exports.LIST_BACKGROUND_TASKS_ROUTE = require_background_tasks.LIST_BACKGROUND_TASKS_ROUTE;
@@ -1,2 +1 @@
1
- import { n as GET_BACKGROUND_TASK_ROUTE, r as LIST_BACKGROUND_TASKS_ROUTE, t as BACKGROUND_TASK_STREAM_ROUTE } from "../../background-tasks-oBaLtnCn.js";
2
- export { BACKGROUND_TASK_STREAM_ROUTE, GET_BACKGROUND_TASK_ROUTE, LIST_BACKGROUND_TASKS_ROUTE };
1
+ export { t as BACKGROUND_TASK_STREAM_ROUTE, n as GET_BACKGROUND_TASK_ROUTE, r as LIST_BACKGROUND_TASKS_ROUTE } from "../../background-tasks-Du2zYOPl.js";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
3
- const require_builder_registry = require("../../builder-registry-D0frV8lQ.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
+ const require_builder_registry = require("../../builder-registry-DaFAaMTf.cjs");
4
4
  exports.BUILDER_REGISTRY_INSTALL_ROUTE = require_builder_registry.BUILDER_REGISTRY_INSTALL_ROUTE;
5
5
  exports.BUILDER_REGISTRY_POPULAR_ROUTE = require_builder_registry.BUILDER_REGISTRY_POPULAR_ROUTE;
6
6
  exports.BUILDER_REGISTRY_PREVIEW_ROUTE = require_builder_registry.BUILDER_REGISTRY_PREVIEW_ROUTE;
@@ -1,2 +1 @@
1
- import { a as LIST_BUILDER_REGISTRIES_ROUTE, i as BUILDER_REGISTRY_SEARCH_ROUTE, n as BUILDER_REGISTRY_POPULAR_ROUTE, r as BUILDER_REGISTRY_PREVIEW_ROUTE, t as BUILDER_REGISTRY_INSTALL_ROUTE } from "../../builder-registry-DOkLe8ES.js";
2
- export { BUILDER_REGISTRY_INSTALL_ROUTE, BUILDER_REGISTRY_POPULAR_ROUTE, BUILDER_REGISTRY_PREVIEW_ROUTE, BUILDER_REGISTRY_SEARCH_ROUTE, LIST_BUILDER_REGISTRIES_ROUTE };
1
+ export { t as BUILDER_REGISTRY_INSTALL_ROUTE, n as BUILDER_REGISTRY_POPULAR_ROUTE, r as BUILDER_REGISTRY_PREVIEW_ROUTE, i as BUILDER_REGISTRY_SEARCH_ROUTE, a as LIST_BUILDER_REGISTRIES_ROUTE } from "../../builder-registry-DLdu9bWH.js";
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
3
- const require_channels = require("../../channels-CBIopVWd.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
+ const require_channels = require("../../channels-BnVRmnzK.cjs");
4
4
  exports.CONNECT_CHANNEL_ROUTE = require_channels.CONNECT_CHANNEL_ROUTE;
5
5
  exports.DISCONNECT_CHANNEL_ROUTE = require_channels.DISCONNECT_CHANNEL_ROUTE;
6
6
  exports.LIST_CHANNEL_INSTALLATIONS_ROUTE = require_channels.LIST_CHANNEL_INSTALLATIONS_ROUTE;
@@ -1,2 +1 @@
1
- import { a as RECONCILE_CHANNEL_ROUTE, i as LIST_CHANNEL_PLATFORMS_ROUTE, n as DISCONNECT_CHANNEL_ROUTE, r as LIST_CHANNEL_INSTALLATIONS_ROUTE, t as CONNECT_CHANNEL_ROUTE } from "../../channels-BOxgHvzI.js";
2
- export { CONNECT_CHANNEL_ROUTE, DISCONNECT_CHANNEL_ROUTE, LIST_CHANNEL_INSTALLATIONS_ROUTE, LIST_CHANNEL_PLATFORMS_ROUTE, RECONCILE_CHANNEL_ROUTE };
1
+ export { t as CONNECT_CHANNEL_ROUTE, n as DISCONNECT_CHANNEL_ROUTE, r as LIST_CHANNEL_INSTALLATIONS_ROUTE, i as LIST_CHANNEL_PLATFORMS_ROUTE, a as RECONCILE_CHANNEL_ROUTE } from "../../channels-Db-4pXVZ.js";
@@ -1,172 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_rolldown_runtime = require("../../rolldown-runtime-Bd6kNlEP.cjs");
3
- const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
4
- const require_route_builder = require("../../route-builder-BNZs643f.cjs");
5
- const require_server_handlers_error = require("./error.cjs");
6
- const require_utils = require("../../utils-Du-EpvDs.cjs");
7
- const require_server_handlers_agents = require("./agents.cjs");
8
- const require_conversations = require("../../conversations-Bj5TLNqF.cjs");
9
- const require_server_handlers_responses_adapter = require("./responses.adapter.cjs");
10
- const require_server_handlers_responses_storage = require("./responses.storage.cjs");
11
- //#region src/server/handlers/conversations.ts
12
- var conversations_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
13
- CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
14
- DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
15
- GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
16
- GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
17
- });
18
- function buildConversationObject({ thread }) {
19
- return {
20
- id: thread.id,
21
- object: "conversation",
22
- thread
23
- };
24
- }
25
- function buildConversationItemsList(items) {
26
- return {
27
- object: "list",
28
- data: items,
29
- first_id: items[0]?.id ?? null,
30
- last_id: items.at(-1)?.id ?? null,
31
- has_more: false
32
- };
33
- }
34
- function buildConversationDeleted(conversationId) {
35
- return {
36
- id: conversationId,
37
- object: "conversation.deleted",
38
- deleted: true
39
- };
40
- }
41
- const CREATE_CONVERSATION_ROUTE = require_route_builder.createRoute({
42
- method: "POST",
43
- path: "/v1/conversations",
44
- responseType: "json",
45
- bodySchema: require_conversations.createConversationBodySchema,
46
- responseSchema: require_conversations.conversationObjectSchema,
47
- summary: "Create a conversation",
48
- description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
49
- tags: ["Responses"],
50
- requiresAuth: true,
51
- requiresPermission: require_utils.MastraFGAPermissions.AGENTS_CREATE,
52
- handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
53
- try {
54
- if (!mastra) throw new require_http_exception.HTTPException(500, { message: "Mastra instance is required for conversations" });
55
- const agent = await require_server_handlers_agents.getAgentFromSystem({
56
- mastra,
57
- agentId: agent_id
58
- });
59
- const memory = await agent.getMemory({ requestContext });
60
- if (!memory) throw new require_http_exception.HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
61
- if (!await require_server_handlers_responses_storage.getAgentMemoryStore({
62
- agent,
63
- requestContext
64
- })) throw new require_http_exception.HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
65
- const threadId = conversation_id ?? globalThis.crypto.randomUUID();
66
- const resourceId = require_utils.getEffectiveResourceId(requestContext, resource_id) ?? threadId;
67
- if (conversation_id) await require_utils.validateThreadOwnership(await memory.getThreadById({ threadId }), require_utils.getEffectiveResourceId(requestContext, void 0));
68
- return buildConversationObject({ thread: await memory.createThread({
69
- threadId,
70
- resourceId,
71
- title,
72
- metadata
73
- }) });
74
- } catch (error) {
75
- return require_server_handlers_error.handleError(error, "Error creating conversation");
76
- }
77
- }
78
- });
79
- const GET_CONVERSATION_ROUTE = require_route_builder.createRoute({
80
- method: "GET",
81
- path: "/v1/conversations/:conversationId",
82
- responseType: "json",
83
- pathParamSchema: require_conversations.conversationIdPathParams,
84
- responseSchema: require_conversations.conversationObjectSchema,
85
- summary: "Retrieve a conversation",
86
- description: "Returns a conversation object backed by a Mastra memory thread",
87
- tags: ["Responses"],
88
- requiresAuth: true,
89
- requiresPermission: require_utils.MastraFGAPermissions.AGENTS_READ,
90
- handler: async ({ mastra, requestContext, conversationId }) => {
91
- try {
92
- const match = await require_server_handlers_responses_storage.findConversationThreadAcrossAgents({
93
- mastra,
94
- conversationId,
95
- requestContext
96
- });
97
- if (!match) throw new require_http_exception.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
98
- return buildConversationObject({ thread: match.thread });
99
- } catch (error) {
100
- return require_server_handlers_error.handleError(error, "Error retrieving conversation");
101
- }
102
- }
103
- });
104
- const GET_CONVERSATION_ITEMS_ROUTE = require_route_builder.createRoute({
105
- method: "GET",
106
- path: "/v1/conversations/:conversationId/items",
107
- responseType: "json",
108
- pathParamSchema: require_conversations.conversationIdPathParams,
109
- responseSchema: require_conversations.conversationItemsListSchema,
110
- summary: "List conversation items",
111
- description: "Returns OpenAI-style conversation items derived from the stored thread messages",
112
- tags: ["Responses"],
113
- requiresAuth: true,
114
- requiresPermission: require_utils.MastraFGAPermissions.AGENTS_READ,
115
- handler: async ({ mastra, requestContext, conversationId }) => {
116
- try {
117
- const match = await require_server_handlers_responses_storage.findConversationThreadAcrossAgents({
118
- mastra,
119
- conversationId,
120
- requestContext
121
- });
122
- if (!match) throw new require_http_exception.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
123
- const { messages } = await match.memoryStore.listMessages({
124
- threadId: conversationId,
125
- page: 0,
126
- perPage: 1e3
127
- });
128
- return buildConversationItemsList(require_server_handlers_responses_adapter.mapMastraMessagesToConversationItems(messages));
129
- } catch (error) {
130
- return require_server_handlers_error.handleError(error, "Error retrieving conversation");
131
- }
132
- }
133
- });
134
- const DELETE_CONVERSATION_ROUTE = require_route_builder.createRoute({
135
- method: "DELETE",
136
- path: "/v1/conversations/:conversationId",
137
- responseType: "json",
138
- pathParamSchema: require_conversations.conversationIdPathParams,
139
- responseSchema: require_conversations.conversationDeletedSchema,
140
- summary: "Delete a conversation",
141
- description: "Deletes a thread-backed conversation and its stored items",
142
- tags: ["Responses"],
143
- requiresAuth: true,
144
- requiresPermission: require_utils.MastraFGAPermissions.AGENTS_DELETE,
145
- handler: async ({ mastra, requestContext, conversationId }) => {
146
- try {
147
- const match = await require_server_handlers_responses_storage.findConversationThreadAcrossAgents({
148
- mastra,
149
- conversationId,
150
- requestContext
151
- });
152
- if (!match) throw new require_http_exception.HTTPException(404, { message: `Conversation ${conversationId} was not found` });
153
- await match.memoryStore.deleteThread({ threadId: conversationId });
154
- return buildConversationDeleted(conversationId);
155
- } catch (error) {
156
- return require_server_handlers_error.handleError(error, "Error deleting conversation");
157
- }
158
- }
159
- });
160
- //#endregion
161
- exports.CREATE_CONVERSATION_ROUTE = CREATE_CONVERSATION_ROUTE;
162
- exports.DELETE_CONVERSATION_ROUTE = DELETE_CONVERSATION_ROUTE;
163
- exports.GET_CONVERSATION_ITEMS_ROUTE = GET_CONVERSATION_ITEMS_ROUTE;
164
- exports.GET_CONVERSATION_ROUTE = GET_CONVERSATION_ROUTE;
165
- Object.defineProperty(exports, "conversations_exports", {
166
- enumerable: true,
167
- get: function() {
168
- return conversations_exports;
169
- }
170
- });
171
-
172
- //# sourceMappingURL=conversations.cjs.map
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
+ const require_conversations = require("../../conversations-C5MkQBB8.cjs");
4
+ exports.CREATE_CONVERSATION_ROUTE = require_conversations.CREATE_CONVERSATION_ROUTE;
5
+ exports.DELETE_CONVERSATION_ROUTE = require_conversations.DELETE_CONVERSATION_ROUTE;
6
+ exports.GET_CONVERSATION_ITEMS_ROUTE = require_conversations.GET_CONVERSATION_ITEMS_ROUTE;
7
+ exports.GET_CONVERSATION_ROUTE = require_conversations.GET_CONVERSATION_ROUTE;
@@ -1,162 +1 @@
1
- import { r as __exportAll } from "../../rolldown-runtime-maW3aOIk.js";
2
- import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
3
- import { n as createRoute } from "../../route-builder-BfQYtclb.js";
4
- import { handleError } from "./error.js";
5
- import { g as MastraFGAPermissions, h as validateThreadOwnership, i as getEffectiveResourceId } from "../../utils-BBJlS81s.js";
6
- import { getAgentFromSystem } from "./agents.js";
7
- import { a as createConversationBodySchema, i as conversationObjectSchema, n as conversationIdPathParams, r as conversationItemsListSchema, t as conversationDeletedSchema } from "../../conversations-BzBHVFYe.js";
8
- import { mapMastraMessagesToConversationItems } from "./responses.adapter.js";
9
- import { findConversationThreadAcrossAgents, getAgentMemoryStore } from "./responses.storage.js";
10
- //#region src/server/handlers/conversations.ts
11
- var conversations_exports = /* @__PURE__ */ __exportAll({
12
- CREATE_CONVERSATION_ROUTE: () => CREATE_CONVERSATION_ROUTE,
13
- DELETE_CONVERSATION_ROUTE: () => DELETE_CONVERSATION_ROUTE,
14
- GET_CONVERSATION_ITEMS_ROUTE: () => GET_CONVERSATION_ITEMS_ROUTE,
15
- GET_CONVERSATION_ROUTE: () => GET_CONVERSATION_ROUTE
16
- });
17
- function buildConversationObject({ thread }) {
18
- return {
19
- id: thread.id,
20
- object: "conversation",
21
- thread
22
- };
23
- }
24
- function buildConversationItemsList(items) {
25
- return {
26
- object: "list",
27
- data: items,
28
- first_id: items[0]?.id ?? null,
29
- last_id: items.at(-1)?.id ?? null,
30
- has_more: false
31
- };
32
- }
33
- function buildConversationDeleted(conversationId) {
34
- return {
35
- id: conversationId,
36
- object: "conversation.deleted",
37
- deleted: true
38
- };
39
- }
40
- const CREATE_CONVERSATION_ROUTE = createRoute({
41
- method: "POST",
42
- path: "/v1/conversations",
43
- responseType: "json",
44
- bodySchema: createConversationBodySchema,
45
- responseSchema: conversationObjectSchema,
46
- summary: "Create a conversation",
47
- description: "Creates a new thread-backed conversation for agent-backed Responses API requests",
48
- tags: ["Responses"],
49
- requiresAuth: true,
50
- requiresPermission: MastraFGAPermissions.AGENTS_CREATE,
51
- handler: async ({ mastra, requestContext, agent_id, conversation_id, resource_id, title, metadata }) => {
52
- try {
53
- if (!mastra) throw new HTTPException(500, { message: "Mastra instance is required for conversations" });
54
- const agent = await getAgentFromSystem({
55
- mastra,
56
- agentId: agent_id
57
- });
58
- const memory = await agent.getMemory({ requestContext });
59
- if (!memory) throw new HTTPException(400, { message: `Agent "${agent.id}" does not have memory configured` });
60
- if (!await getAgentMemoryStore({
61
- agent,
62
- requestContext
63
- })) throw new HTTPException(400, { message: `Memory storage is not configured for agent "${agent.id}"` });
64
- const threadId = conversation_id ?? globalThis.crypto.randomUUID();
65
- const resourceId = getEffectiveResourceId(requestContext, resource_id) ?? threadId;
66
- if (conversation_id) await validateThreadOwnership(await memory.getThreadById({ threadId }), getEffectiveResourceId(requestContext, void 0));
67
- return buildConversationObject({ thread: await memory.createThread({
68
- threadId,
69
- resourceId,
70
- title,
71
- metadata
72
- }) });
73
- } catch (error) {
74
- return handleError(error, "Error creating conversation");
75
- }
76
- }
77
- });
78
- const GET_CONVERSATION_ROUTE = createRoute({
79
- method: "GET",
80
- path: "/v1/conversations/:conversationId",
81
- responseType: "json",
82
- pathParamSchema: conversationIdPathParams,
83
- responseSchema: conversationObjectSchema,
84
- summary: "Retrieve a conversation",
85
- description: "Returns a conversation object backed by a Mastra memory thread",
86
- tags: ["Responses"],
87
- requiresAuth: true,
88
- requiresPermission: MastraFGAPermissions.AGENTS_READ,
89
- handler: async ({ mastra, requestContext, conversationId }) => {
90
- try {
91
- const match = await findConversationThreadAcrossAgents({
92
- mastra,
93
- conversationId,
94
- requestContext
95
- });
96
- if (!match) throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
97
- return buildConversationObject({ thread: match.thread });
98
- } catch (error) {
99
- return handleError(error, "Error retrieving conversation");
100
- }
101
- }
102
- });
103
- const GET_CONVERSATION_ITEMS_ROUTE = createRoute({
104
- method: "GET",
105
- path: "/v1/conversations/:conversationId/items",
106
- responseType: "json",
107
- pathParamSchema: conversationIdPathParams,
108
- responseSchema: conversationItemsListSchema,
109
- summary: "List conversation items",
110
- description: "Returns OpenAI-style conversation items derived from the stored thread messages",
111
- tags: ["Responses"],
112
- requiresAuth: true,
113
- requiresPermission: MastraFGAPermissions.AGENTS_READ,
114
- handler: async ({ mastra, requestContext, conversationId }) => {
115
- try {
116
- const match = await findConversationThreadAcrossAgents({
117
- mastra,
118
- conversationId,
119
- requestContext
120
- });
121
- if (!match) throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
122
- const { messages } = await match.memoryStore.listMessages({
123
- threadId: conversationId,
124
- page: 0,
125
- perPage: 1e3
126
- });
127
- return buildConversationItemsList(mapMastraMessagesToConversationItems(messages));
128
- } catch (error) {
129
- return handleError(error, "Error retrieving conversation");
130
- }
131
- }
132
- });
133
- const DELETE_CONVERSATION_ROUTE = createRoute({
134
- method: "DELETE",
135
- path: "/v1/conversations/:conversationId",
136
- responseType: "json",
137
- pathParamSchema: conversationIdPathParams,
138
- responseSchema: conversationDeletedSchema,
139
- summary: "Delete a conversation",
140
- description: "Deletes a thread-backed conversation and its stored items",
141
- tags: ["Responses"],
142
- requiresAuth: true,
143
- requiresPermission: MastraFGAPermissions.AGENTS_DELETE,
144
- handler: async ({ mastra, requestContext, conversationId }) => {
145
- try {
146
- const match = await findConversationThreadAcrossAgents({
147
- mastra,
148
- conversationId,
149
- requestContext
150
- });
151
- if (!match) throw new HTTPException(404, { message: `Conversation ${conversationId} was not found` });
152
- await match.memoryStore.deleteThread({ threadId: conversationId });
153
- return buildConversationDeleted(conversationId);
154
- } catch (error) {
155
- return handleError(error, "Error deleting conversation");
156
- }
157
- }
158
- });
159
- //#endregion
160
- export { CREATE_CONVERSATION_ROUTE, DELETE_CONVERSATION_ROUTE, GET_CONVERSATION_ITEMS_ROUTE, GET_CONVERSATION_ROUTE, conversations_exports as t };
161
-
162
- //# sourceMappingURL=conversations.js.map
1
+ export { t as CREATE_CONVERSATION_ROUTE, n as DELETE_CONVERSATION_ROUTE, r as GET_CONVERSATION_ITEMS_ROUTE, i as GET_CONVERSATION_ROUTE } from "../../conversations-8BWryNlF.js";
@@ -1,8 +1,8 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- require("../../rolldown-runtime-Bd6kNlEP.cjs");
2
+ require("../../rolldown-runtime-BwC_XMyb.cjs");
3
3
  const require_http_exception = require("../../http-exception-CKDHupKw.cjs");
4
4
  const require_common = require("../../common-DhKNoXGp.cjs");
5
- const require_route_builder = require("../../route-builder-BNZs643f.cjs");
5
+ const require_route_builder = require("../../route-builder-B2Qhhd7C.cjs");
6
6
  const require_constants = require("../../constants-e7aaPCLj.cjs");
7
7
  const require_server_handlers_error = require("./error.cjs");
8
8
  const require_datasets = require("../../datasets-BUC5T-fd.cjs");