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

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 (274) hide show
  1. package/dist/_types/@internal_core/dist/storage/index.d.ts +3 -1
  2. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/schemas.d.ts +3 -1
  3. package/dist/_types/@internal_voice/dist/_types/zod/v4/core/util.d.ts +2 -0
  4. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-sdk-v5/dist/index.d.ts +206 -873
  5. package/dist/_types/@mastra_schema-compat/dist/_types/@internal_ai-v6/dist/index.d.ts +851 -1176
  6. package/dist/{a2a-D5CGFO8W.cjs → a2a-B465DD1u.cjs} +3 -3
  7. package/dist/a2a-B465DD1u.cjs.map +1 -0
  8. package/dist/{a2a-Dg3ylOKc.js → a2a-CHBSYHxu.js} +3 -3
  9. package/dist/{a2a-D5CGFO8W.cjs.map → a2a-CHBSYHxu.js.map} +1 -1
  10. package/dist/{agents-D9vpLghy.cjs → agents-DoNMSCMt.cjs} +4 -2
  11. package/dist/agents-DoNMSCMt.cjs.map +1 -0
  12. package/dist/{agents-DNWDET4U.js → agents-X1E7fW3p.js} +4 -2
  13. package/dist/agents-X1E7fW3p.js.map +1 -0
  14. package/dist/{api-schema-manifest-BiW4tqad.js → api-schema-manifest-CWRIJP-B.js} +9 -3
  15. package/dist/api-schema-manifest-CWRIJP-B.js.map +1 -0
  16. package/dist/{api-schema-manifest-DvcVwlpA.cjs → api-schema-manifest-DUseI2VG.cjs} +9 -3
  17. package/dist/api-schema-manifest-DUseI2VG.cjs.map +1 -0
  18. package/dist/{background-tasks-BbYzMhlD.cjs → background-tasks-CabImVak.cjs} +3 -3
  19. package/dist/{background-tasks-BbYzMhlD.cjs.map → background-tasks-CabImVak.cjs.map} +1 -1
  20. package/dist/{background-tasks-zvlIcbhg.js → background-tasks-oBaLtnCn.js} +3 -3
  21. package/dist/{background-tasks-zvlIcbhg.js.map → background-tasks-oBaLtnCn.js.map} +1 -1
  22. package/dist/{builder-registry-DagCZI4A.cjs → builder-registry-D0frV8lQ.cjs} +3 -3
  23. package/dist/{builder-registry-DagCZI4A.cjs.map → builder-registry-D0frV8lQ.cjs.map} +1 -1
  24. package/dist/{builder-registry-1GwmVVwr.js → builder-registry-DOkLe8ES.js} +3 -3
  25. package/dist/{builder-registry-1GwmVVwr.js.map → builder-registry-DOkLe8ES.js.map} +1 -1
  26. package/dist/{channels-B3aoI-f1.js → channels-BOxgHvzI.js} +2 -2
  27. package/dist/{channels-B3aoI-f1.js.map → channels-BOxgHvzI.js.map} +1 -1
  28. package/dist/{channels-5J7CTFyY.cjs → channels-CBIopVWd.cjs} +2 -2
  29. package/dist/{channels-5J7CTFyY.cjs.map → channels-CBIopVWd.cjs.map} +1 -1
  30. package/dist/{dist-D5O8s1u2.cjs → dist-3FPW9nVj.cjs} +3 -3
  31. package/dist/{dist-D5O8s1u2.cjs.map → dist-3FPW9nVj.cjs.map} +1 -1
  32. package/dist/{dist-CKHUMrWI.cjs → dist-9c3PXXpk.cjs} +36611 -30312
  33. package/dist/dist-9c3PXXpk.cjs.map +1 -0
  34. package/dist/{dist-Bw2XgCSY.cjs → dist-B5OwHWTo.cjs} +3 -3
  35. package/dist/{dist-Bw2XgCSY.cjs.map → dist-B5OwHWTo.cjs.map} +1 -1
  36. package/dist/{dist-C5TZXkhS.js → dist-B_bet8uz.js} +2 -2
  37. package/dist/{dist-C5TZXkhS.js.map → dist-B_bet8uz.js.map} +1 -1
  38. package/dist/{dist-8fx1_bLF.js → dist-BwYL7Ykb.js} +3 -3
  39. package/dist/{dist-8fx1_bLF.js.map → dist-BwYL7Ykb.js.map} +1 -1
  40. package/dist/{dist-_RnqhYfY.js → dist-BxMmGD3n.js} +3 -3
  41. package/dist/{dist-_RnqhYfY.js.map → dist-BxMmGD3n.js.map} +1 -1
  42. package/dist/{dist-D1oSHJhK.js → dist-CBRJax5e.js} +3 -3
  43. package/dist/{dist-D1oSHJhK.js.map → dist-CBRJax5e.js.map} +1 -1
  44. package/dist/{dist-D5mpJHHH.cjs → dist-CQ3FSKT-.cjs} +3 -3
  45. package/dist/{dist-D5mpJHHH.cjs.map → dist-CQ3FSKT-.cjs.map} +1 -1
  46. package/dist/{dist-CgemVduI.cjs → dist-DC1Pewf5.cjs} +4 -4
  47. package/dist/{dist-CgemVduI.cjs.map → dist-DC1Pewf5.cjs.map} +1 -1
  48. package/dist/{dist-hfFDNas-.js → dist-DGCnbhNe.js} +36546 -30247
  49. package/dist/dist-DGCnbhNe.js.map +1 -0
  50. package/dist/{dist-BCTqy9i3.js → dist-DOWsEmo6.js} +4 -4
  51. package/dist/{dist-BCTqy9i3.js.map → dist-DOWsEmo6.js.map} +1 -1
  52. package/dist/{dist-Bz4l8I_x.js → dist-DcoIg_tp.js} +3 -3
  53. package/dist/{dist-Bz4l8I_x.js.map → dist-DcoIg_tp.js.map} +1 -1
  54. package/dist/{dist-UACuV_1t.cjs → dist-UKEksCGq.cjs} +3 -3
  55. package/dist/{dist-UACuV_1t.cjs.map → dist-UKEksCGq.cjs.map} +1 -1
  56. package/dist/{dist-tYOY8gEs.cjs → dist-rDRetJVY.cjs} +2 -2
  57. package/dist/{dist-tYOY8gEs.cjs.map → dist-rDRetJVY.cjs.map} +1 -1
  58. package/dist/docs/SKILL.md +2 -2
  59. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  60. package/dist/docs/references/docs-guides-mcp-authentication-authorization.md +2 -2
  61. package/dist/docs/references/{reference-observability-tracing-trace-query.md → reference-observability-tracing-advanced-queries.md} +486 -158
  62. package/dist/{dynamic-workflows-BL3eD0zL.cjs → dynamic-workflows-DXlkr-jK.cjs} +2 -2
  63. package/dist/{dynamic-workflows-BL3eD0zL.cjs.map → dynamic-workflows-DXlkr-jK.cjs.map} +1 -1
  64. package/dist/{dynamic-workflows-BJfoQMo8.js → dynamic-workflows-Rr_6ac1y.js} +2 -2
  65. package/dist/{dynamic-workflows-BJfoQMo8.js.map → dynamic-workflows-Rr_6ac1y.js.map} +1 -1
  66. package/dist/{editor-builder-DqHKoEDx.cjs → editor-builder-BclcHxN6.cjs} +2 -2
  67. package/dist/{editor-builder-DqHKoEDx.cjs.map → editor-builder-BclcHxN6.cjs.map} +1 -1
  68. package/dist/{editor-builder-CeLVu_FT.js → editor-builder-D16kc1P6.js} +3 -3
  69. package/dist/{editor-builder-CeLVu_FT.js.map → editor-builder-D16kc1P6.js.map} +1 -1
  70. package/dist/{editor-builder-BOmAPurW.cjs → editor-builder-DXHiPX1A.cjs} +3 -3
  71. package/dist/{editor-builder-BOmAPurW.cjs.map → editor-builder-DXHiPX1A.cjs.map} +1 -1
  72. package/dist/{editor-builder-DHqCWGd2.js → editor-builder-s9WqPJgA.js} +2 -2
  73. package/dist/{editor-builder-DHqCWGd2.js.map → editor-builder-s9WqPJgA.js.map} +1 -1
  74. package/dist/{observability-new-endpoints-BKFVVMTS.cjs → observability-new-endpoints-AMp9bnMV.cjs} +78 -17
  75. package/dist/observability-new-endpoints-AMp9bnMV.cjs.map +1 -0
  76. package/dist/{observability-new-endpoints-C5VO7nLK.js → observability-new-endpoints-BU8JYPfh.js} +79 -18
  77. package/dist/observability-new-endpoints-BU8JYPfh.js.map +1 -0
  78. package/dist/{route-builder-2yrD15TL.cjs → route-builder-BNZs643f.cjs} +123 -17
  79. package/dist/{route-builder-2yrD15TL.cjs.map → route-builder-BNZs643f.cjs.map} +1 -1
  80. package/dist/{route-builder-lBil8Cvo.js → route-builder-BfQYtclb.js} +125 -19
  81. package/dist/route-builder-BfQYtclb.js.map +1 -0
  82. package/dist/{routes-D36OQQe5.cjs → routes-DPojsNf1.cjs} +12 -11
  83. package/dist/routes-DPojsNf1.cjs.map +1 -0
  84. package/dist/{routes-gjTcauG8.js → routes-rwufkyUe.js} +13 -12
  85. package/dist/routes-rwufkyUe.js.map +1 -0
  86. package/dist/{schedules-CrAmZ2gu.js → schedules-BQYgaz66.js} +3 -3
  87. package/dist/{schedules-CrAmZ2gu.js.map → schedules-BQYgaz66.js.map} +1 -1
  88. package/dist/{schedules-B0g72u5Y.cjs → schedules-Bj-giFbc.cjs} +3 -3
  89. package/dist/{schedules-B0g72u5Y.cjs.map → schedules-Bj-giFbc.cjs.map} +1 -1
  90. package/dist/schema-Drf2W04o.js +2 -0
  91. package/dist/schema-EQanefYq.cjs +1 -0
  92. package/dist/{schema-e0VHpMt0-BS9KHnuT.cjs → schema-e0VHpMt0-C0452jOk.cjs} +2 -2
  93. package/dist/{schema-e0VHpMt0-BS9KHnuT.cjs.map → schema-e0VHpMt0-C0452jOk.cjs.map} +1 -1
  94. package/dist/{schema-e0VHpMt0-CvPvLS06.js → schema-e0VHpMt0-CVP5Hnxy.js} +2 -2
  95. package/dist/{schema-e0VHpMt0-CvPvLS06.js.map → schema-e0VHpMt0-CVP5Hnxy.js.map} +1 -1
  96. package/dist/server/a2a/tasks.d.ts +2 -2
  97. package/dist/server/a2a/tasks.d.ts.map +1 -1
  98. package/dist/server/handlers/a2a.cjs +1 -1
  99. package/dist/server/handlers/a2a.d.ts +2 -2
  100. package/dist/server/handlers/a2a.d.ts.map +1 -1
  101. package/dist/server/handlers/a2a.js +1 -1
  102. package/dist/server/handlers/agent-builder.cjs +4 -4
  103. package/dist/server/handlers/agent-builder.js +4 -4
  104. package/dist/server/handlers/agent-controller.cjs +259 -156
  105. package/dist/server/handlers/agent-controller.cjs.map +1 -1
  106. package/dist/server/handlers/agent-controller.d.ts +201 -150
  107. package/dist/server/handlers/agent-controller.d.ts.map +1 -1
  108. package/dist/server/handlers/agent-controller.js +259 -157
  109. package/dist/server/handlers/agent-controller.js.map +1 -1
  110. package/dist/server/handlers/agent-versions.cjs +2 -2
  111. package/dist/server/handlers/agent-versions.js +2 -2
  112. package/dist/server/handlers/agents.cjs +47 -27
  113. package/dist/server/handlers/agents.cjs.map +1 -1
  114. package/dist/server/handlers/agents.d.ts +14 -0
  115. package/dist/server/handlers/agents.d.ts.map +1 -1
  116. package/dist/server/handlers/agents.js +47 -27
  117. package/dist/server/handlers/agents.js.map +1 -1
  118. package/dist/server/handlers/auth.cjs +1 -1
  119. package/dist/server/handlers/auth.js +1 -1
  120. package/dist/server/handlers/background-tasks.cjs +1 -1
  121. package/dist/server/handlers/background-tasks.js +1 -1
  122. package/dist/server/handlers/builder-registry.cjs +1 -1
  123. package/dist/server/handlers/builder-registry.js +1 -1
  124. package/dist/server/handlers/channels.cjs +1 -1
  125. package/dist/server/handlers/channels.js +1 -1
  126. package/dist/server/handlers/conversations.cjs +2 -2
  127. package/dist/server/handlers/conversations.js +2 -2
  128. package/dist/server/handlers/datasets.cjs +1 -1
  129. package/dist/server/handlers/datasets.js +1 -1
  130. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  131. package/dist/server/handlers/dynamic-workflows.js +1 -1
  132. package/dist/server/handlers/editor-builder.cjs +1 -1
  133. package/dist/server/handlers/editor-builder.js +1 -1
  134. package/dist/server/handlers/error.cjs +14 -5
  135. package/dist/server/handlers/error.cjs.map +1 -1
  136. package/dist/server/handlers/error.d.ts.map +1 -1
  137. package/dist/server/handlers/error.js +14 -5
  138. package/dist/server/handlers/error.js.map +1 -1
  139. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  140. package/dist/server/handlers/favorites-enrichment.js +1 -1
  141. package/dist/server/handlers/logs.cjs +2 -2
  142. package/dist/server/handlers/logs.js +2 -2
  143. package/dist/server/handlers/mcp-client-versions.cjs +2 -2
  144. package/dist/server/handlers/mcp-client-versions.js +2 -2
  145. package/dist/server/handlers/mcp.cjs +1 -1
  146. package/dist/server/handlers/mcp.js +1 -1
  147. package/dist/server/handlers/memory.cjs +2 -2
  148. package/dist/server/handlers/memory.js +2 -2
  149. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  150. package/dist/server/handlers/observability-new-endpoints.d.ts +355 -35
  151. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  152. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  153. package/dist/server/handlers/observability-shared.cjs +96 -9
  154. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  155. package/dist/server/handlers/observability-shared.d.ts +36 -1
  156. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  157. package/dist/server/handlers/observability-shared.js +90 -10
  158. package/dist/server/handlers/observability-shared.js.map +1 -1
  159. package/dist/server/handlers/observability.cjs +2 -2
  160. package/dist/server/handlers/observability.js +2 -2
  161. package/dist/server/handlers/plans.cjs +3 -3
  162. package/dist/server/handlers/plans.js +3 -3
  163. package/dist/server/handlers/processor-providers.cjs +1 -1
  164. package/dist/server/handlers/processor-providers.js +1 -1
  165. package/dist/server/handlers/processors.cjs +1 -1
  166. package/dist/server/handlers/processors.js +1 -1
  167. package/dist/server/handlers/prompt-block-versions.cjs +2 -2
  168. package/dist/server/handlers/prompt-block-versions.js +2 -2
  169. package/dist/server/handlers/responses.cjs +2 -2
  170. package/dist/server/handlers/responses.js +2 -2
  171. package/dist/server/handlers/responses.storage.cjs +1 -1
  172. package/dist/server/handlers/responses.storage.js +1 -1
  173. package/dist/server/handlers/schedules.cjs +1 -1
  174. package/dist/server/handlers/schedules.js +1 -1
  175. package/dist/server/handlers/scorer-versions.cjs +2 -2
  176. package/dist/server/handlers/scorer-versions.js +2 -2
  177. package/dist/server/handlers/scores.cjs +1 -1
  178. package/dist/server/handlers/scores.js +1 -1
  179. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  180. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  181. package/dist/server/handlers/stored-agents.cjs +3 -3
  182. package/dist/server/handlers/stored-agents.js +3 -3
  183. package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
  184. package/dist/server/handlers/stored-mcp-clients.js +2 -2
  185. package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
  186. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  187. package/dist/server/handlers/stored-scorers.cjs +2 -2
  188. package/dist/server/handlers/stored-scorers.js +2 -2
  189. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  190. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  191. package/dist/server/handlers/stored-skills.cjs +3 -3
  192. package/dist/server/handlers/stored-skills.js +3 -3
  193. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  194. package/dist/server/handlers/stored-workspaces.js +2 -2
  195. package/dist/server/handlers/system.cjs +3 -3
  196. package/dist/server/handlers/system.d.ts +12 -0
  197. package/dist/server/handlers/system.d.ts.map +1 -1
  198. package/dist/server/handlers/system.js +3 -3
  199. package/dist/server/handlers/tool-providers.cjs +1 -1
  200. package/dist/server/handlers/tool-providers.js +1 -1
  201. package/dist/server/handlers/tools.cjs +6 -6
  202. package/dist/server/handlers/tools.js +6 -6
  203. package/dist/server/handlers/utils.cjs +2 -1
  204. package/dist/server/handlers/utils.d.ts +9 -0
  205. package/dist/server/handlers/utils.d.ts.map +1 -1
  206. package/dist/server/handlers/utils.js +2 -2
  207. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  208. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  209. package/dist/server/handlers/vector.cjs +1 -1
  210. package/dist/server/handlers/vector.js +1 -1
  211. package/dist/server/handlers/workflow-builder.cjs +1 -1
  212. package/dist/server/handlers/workflow-builder.d.ts.map +1 -1
  213. package/dist/server/handlers/workflow-builder.js +1 -1
  214. package/dist/server/handlers/workflows.cjs +4 -4
  215. package/dist/server/handlers/workflows.js +4 -4
  216. package/dist/server/handlers/workspace.cjs +1 -1
  217. package/dist/server/handlers/workspace.js +1 -1
  218. package/dist/server/handlers.cjs +2 -2
  219. package/dist/server/handlers.js +2 -2
  220. package/dist/server/schemas/agents.d.ts +5 -0
  221. package/dist/server/schemas/agents.d.ts.map +1 -1
  222. package/dist/server/schemas/index.cjs +3 -3
  223. package/dist/server/schemas/index.js +3 -3
  224. package/dist/server/schemas/system.d.ts +12 -0
  225. package/dist/server/schemas/system.d.ts.map +1 -1
  226. package/dist/server/server-adapter/api-schema-manifest.d.ts +2 -0
  227. package/dist/server/server-adapter/api-schema-manifest.d.ts.map +1 -1
  228. package/dist/server/server-adapter/index.cjs +9 -4
  229. package/dist/server/server-adapter/index.cjs.map +1 -1
  230. package/dist/server/server-adapter/index.d.ts.map +1 -1
  231. package/dist/server/server-adapter/index.js +9 -4
  232. package/dist/server/server-adapter/index.js.map +1 -1
  233. package/dist/server/server-adapter/openapi-utils.d.ts +19 -1
  234. package/dist/server/server-adapter/openapi-utils.d.ts.map +1 -1
  235. package/dist/server/server-adapter/routes/agent-controller.d.ts.map +1 -1
  236. package/dist/server/server-adapter/routes/observability.d.ts +177 -17
  237. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  238. package/dist/server/server-adapter/routes/system.d.ts +12 -0
  239. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  240. package/dist/{system-DY6UweSl.cjs → system-BvpFMIJB.cjs} +7 -1
  241. package/dist/system-BvpFMIJB.cjs.map +1 -0
  242. package/dist/{system-MGpkVA20.js → system-CpzPxRRq.js} +7 -1
  243. package/dist/system-CpzPxRRq.js.map +1 -0
  244. package/dist/{utils-D5DHrO3K.js → utils-BBJlS81s.js} +19 -2
  245. package/dist/{utils-D5DHrO3K.js.map → utils-BBJlS81s.js.map} +1 -1
  246. package/dist/{utils-tmrFs-gf.js → utils-DCAUeb6M.js} +3 -3
  247. package/dist/{utils-tmrFs-gf.js.map → utils-DCAUeb6M.js.map} +1 -1
  248. package/dist/{utils-BZdnPmsW.cjs → utils-DCgeTrq2.cjs} +3 -3
  249. package/dist/{utils-BZdnPmsW.cjs.map → utils-DCgeTrq2.cjs.map} +1 -1
  250. package/dist/{utils-CczRcgHQ.cjs → utils-Du-EpvDs.cjs} +24 -1
  251. package/dist/{utils-CczRcgHQ.cjs.map → utils-Du-EpvDs.cjs.map} +1 -1
  252. package/dist/{workflow-builder-DdSutoga.cjs → workflow-builder-Brj3IArM.cjs} +6 -6
  253. package/dist/workflow-builder-Brj3IArM.cjs.map +1 -0
  254. package/dist/{workflow-builder-DJ0eeJuG.js → workflow-builder-DOa1Vx6w.js} +6 -6
  255. package/dist/workflow-builder-DOa1Vx6w.js.map +1 -0
  256. package/package.json +9 -10
  257. package/dist/a2a-Dg3ylOKc.js.map +0 -1
  258. package/dist/agents-D9vpLghy.cjs.map +0 -1
  259. package/dist/agents-DNWDET4U.js.map +0 -1
  260. package/dist/api-schema-manifest-BiW4tqad.js.map +0 -1
  261. package/dist/api-schema-manifest-DvcVwlpA.cjs.map +0 -1
  262. package/dist/dist-CKHUMrWI.cjs.map +0 -1
  263. package/dist/dist-hfFDNas-.js.map +0 -1
  264. package/dist/observability-new-endpoints-BKFVVMTS.cjs.map +0 -1
  265. package/dist/observability-new-endpoints-C5VO7nLK.js.map +0 -1
  266. package/dist/route-builder-lBil8Cvo.js.map +0 -1
  267. package/dist/routes-D36OQQe5.cjs.map +0 -1
  268. package/dist/routes-gjTcauG8.js.map +0 -1
  269. package/dist/schema-BVcoNfni.cjs +0 -1
  270. package/dist/schema-Xxr5X5Je.js +0 -2
  271. package/dist/system-DY6UweSl.cjs.map +0 -1
  272. package/dist/system-MGpkVA20.js.map +0 -1
  273. package/dist/workflow-builder-DJ0eeJuG.js.map +0 -1
  274. package/dist/workflow-builder-DdSutoga.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { t as HTTPException } from "../../http-exception-CyfxZB6W.js";
2
- import { n as createRoute } from "../../route-builder-lBil8Cvo.js";
2
+ import { n as createRoute } from "../../route-builder-BfQYtclb.js";
3
3
  import { l as MASTRA_USER_KEY } from "../../constants-DazK_RZj.js";
4
4
  import { handleError } from "./error.js";
5
- import { t as enforceThreadAccess } from "../../utils-D5DHrO3K.js";
5
+ import { g as MastraFGAPermissions, n as enforceThreadAccess } from "../../utils-BBJlS81s.js";
6
6
  import { E as includeSchema, F as messageOrderBySchema, h as filterSchema } from "../../memory-B58Q2LgU.js";
7
7
  import { z } from "zod/v4";
8
8
  //#region src/server/handlers/agent-controller.ts
@@ -13,8 +13,9 @@ import { z } from "zod/v4";
13
13
  * `new Mastra({ agentControllers })`) exposes its sessions over HTTP so
14
14
  * non-terminal clients — e.g. a browser-based MastraCode — can create sessions,
15
15
  * send messages, stream events, and drive run-control. Each route resolves its
16
- * target AgentController by id, then operates on a session bound to a
17
- * `resourceId`. Mutating routes use get-or-create resolution so reconnects
16
+ * target AgentController by id, then operates on the session addressed by
17
+ * `sessionId` (which works on the threads and memory of its `resourceId`).
18
+ * Mutating routes use get-or-create resolution so reconnects
18
19
  * resume rather than fork the conversation; read routes only inspect existing
19
20
  * live sessions.
20
21
  */
@@ -61,25 +62,51 @@ function getAgentControllerOrThrow(mastra, controllerId) {
61
62
  if (!controller) throw new HTTPException(404, { message: `agent controller "${controllerId}" not found` });
62
63
  return controller;
63
64
  }
64
- async function getSession(controller, resourceId, options, requestContext) {
65
+ /**
66
+ * The resource of the session addressed by `sessionId`, without materializing
67
+ * it: the live session's resource, else the resource of the thread sharing the
68
+ * session's id, else `sessionId` itself (the default when a session is created
69
+ * without a `sessionId`).
70
+ */
71
+ async function resolveSessionResourceId(controller, sessionId) {
72
+ const live = await controller.getSession(sessionId);
73
+ if (live) return live.identity.getResourceId();
74
+ return (await controller.queryThreadById({ threadId: sessionId }))?.resourceId ?? sessionId;
75
+ }
76
+ /**
77
+ * Resolve the session addressed by `sessionId` that every route other than create acts on: the live one, or a
78
+ * lost one (e.g. after a restart) rebuilt from storage. When a thread with the session's id exists, the session
79
+ * resumes on that thread under the thread's resource (hosts that use `sessionId === threadId` recover their own
80
+ * thread even when many sessions share one resource); otherwise it resumes on `resourceId = sessionId`, the
81
+ * default `POST /sessions` applies when no `sessionId` is sent. Never starts a conversation, so a write that
82
+ * arrives before the session was started fails instead of landing on a thread nobody reads.
83
+ */
84
+ async function getSession(controller, sessionId, requestContext) {
65
85
  await controller.init();
66
- const { tags, scope, threadId } = options ?? {};
67
- const id = threadId ?? (scope ? `${resourceId}::${scope}` : resourceId);
68
- return controller.createSession({
69
- resourceId,
70
- id,
71
- ownerId: controller.id,
72
- tags,
73
- scope,
74
- threadId,
75
- requestContext
76
- });
86
+ const live = await controller.getSession(sessionId);
87
+ const thread = live ? null : await controller.queryThreadById({ threadId: sessionId });
88
+ try {
89
+ return await controller.createSession({
90
+ id: sessionId,
91
+ resourceId: live?.identity.getResourceId() ?? thread?.resourceId ?? sessionId,
92
+ ownerId: controller.id,
93
+ threadId: thread ? sessionId : void 0,
94
+ resumeOnly: true,
95
+ requestContext
96
+ });
97
+ } catch (error) {
98
+ if (error instanceof Error && error.code === "SESSION_NOT_STARTED") throw new HTTPException(404, {
99
+ message: `No session "${sessionId}" has been started. Create it with POST /agent-controller/:controllerId/sessions first.`,
100
+ cause: error
101
+ });
102
+ throw error;
103
+ }
77
104
  }
78
- async function getExistingSession(controller, resourceId, scope, requestContext) {
105
+ async function getExistingSession(controller, sessionId, requestContext) {
79
106
  await controller.init();
80
- const session = await controller.getSessionByResource(resourceId, scope, requestContext);
107
+ const session = await controller.getSession(sessionId, requestContext);
81
108
  if (session) return session;
82
- return getSession(controller, resourceId, { scope }, requestContext);
109
+ return getSession(controller, sessionId, requestContext);
83
110
  }
84
111
  /**
85
112
  * Acknowledges a session operation that keeps running after the response is
@@ -116,22 +143,29 @@ function ackBackgroundSessionWork({ work, session, mastra, operation }) {
116
143
  const controllerIdPathParams = z.object({ controllerId: z.string() });
117
144
  const sessionPathParams = z.object({
118
145
  controllerId: z.string(),
119
- resourceId: z.string()
146
+ sessionId: z.string()
120
147
  });
121
148
  /**
122
- * Optional session scope (mirrors `AgentController.createSession`'s `scope`):
123
- * requests with the same resourceId but different scopes address independent
124
- * sessions (e.g. one per git worktree). Sent as a `sessionScope` query param
125
- * on session routes; named to avoid colliding with the model-switch `scope`.
149
+ * Sessions used to be addressed by `resourceId` plus `sessionScope`. The param is gone: reject it
150
+ * rather than drop it, so an older client's scoped session can't quietly merge into another one.
126
151
  */
127
- const sessionScopeQuerySchema = z.object({ sessionScope: z.string().optional() });
128
- const sessionStateQuerySchema = sessionScopeQuerySchema.extend({ threadId: z.string().optional() });
152
+ const removedSessionScope = z.never({ error: "sessionScope was removed; address the session by sessionId" }).optional();
153
+ const sessionQuerySchema = z.object({ sessionScope: removedSessionScope });
154
+ const sessionStateQuerySchema = sessionQuerySchema.extend({ threadId: z.string().optional() });
129
155
  const createSessionBodySchema = z.object({
130
- resourceId: z.string(),
156
+ /**
157
+ * Whose threads and memory the session works on. Optional when `sessionId` is
158
+ * sent: the session then resumes on the resource it already has (the live
159
+ * session's, or the resource of the thread with the session's id), falling
160
+ * back to the session id.
161
+ */
162
+ resourceId: z.string().optional(),
163
+ /** Address of the session. Defaults to `resourceId`. */
164
+ sessionId: z.string().optional(),
165
+ sessionScope: removedSessionScope,
131
166
  tags: z.record(z.string(), z.string()).optional(),
132
- threadId: z.string().optional(),
133
- sessionScope: z.string().optional()
134
- });
167
+ threadId: z.string().optional()
168
+ }).refine((body) => body.resourceId !== void 0 || body.sessionId !== void 0, { message: "resourceId or sessionId is required" });
135
169
  const MAX_FILE_DATA_LENGTH = 14 * 1024 * 1024;
136
170
  const MAX_TOTAL_FILE_DATA_LENGTH = 28 * 1024 * 1024;
137
171
  /**
@@ -159,7 +193,16 @@ const steerBodySchema = z.object({
159
193
  const toolApprovalBodySchema = z.object({
160
194
  toolCallId: z.string(),
161
195
  approved: z.boolean(),
196
+ /**
197
+ * Grants the gated tool's category to the thread that owns the call, then
198
+ * approves — the same "always allow" the in-process TUI offers. Requires
199
+ * `approved: true`.
200
+ */
201
+ alwaysAllowCategory: z.boolean().optional(),
162
202
  requestContext: bodyRequestContextSchema
203
+ }).refine((body) => !body.alwaysAllowCategory || body.approved, {
204
+ message: "alwaysAllowCategory requires approved: true",
205
+ path: ["alwaysAllowCategory"]
163
206
  });
164
207
  const toolSuspensionBodySchema = z.object({
165
208
  toolCallId: z.string().min(1),
@@ -184,7 +227,7 @@ const createThreadBodySchema = z.object({ title: z.string().optional() });
184
227
  const renameThreadBodySchema = z.object({ title: z.string() });
185
228
  const threadPathParams = z.object({
186
229
  controllerId: z.string(),
187
- resourceId: z.string(),
230
+ sessionId: z.string(),
188
231
  threadId: z.string()
189
232
  });
190
233
  const cloneThreadBodySchema = z.object({
@@ -193,14 +236,14 @@ const cloneThreadBodySchema = z.object({
193
236
  });
194
237
  const controllerPaginationNumber = z.coerce.number().int().min(0);
195
238
  const listMessagesQuerySchema = z.object({
239
+ sessionScope: removedSessionScope,
196
240
  /** @deprecated Use page and perPage instead. */
197
241
  limit: controllerPaginationNumber.optional(),
198
242
  page: controllerPaginationNumber.optional(),
199
243
  perPage: z.preprocess((value) => value === "false" ? false : value, z.union([z.literal(false), controllerPaginationNumber])).optional(),
200
244
  orderBy: messageOrderBySchema,
201
245
  include: includeSchema,
202
- filter: filterSchema,
203
- sessionScope: z.string().optional()
246
+ filter: filterSchema
204
247
  }).superRefine((value, ctx) => {
205
248
  if (value.limit === void 0) return;
206
249
  for (const field of [
@@ -221,8 +264,8 @@ const listMessagesQuerySchema = z.object({
221
264
  * only their own threads. Malformed JSON is treated as "no filter".
222
265
  */
223
266
  const listThreadsQuerySchema = z.object({
267
+ sessionScope: removedSessionScope,
224
268
  limit: z.coerce.number().optional(),
225
- sessionScope: z.string().optional(),
226
269
  tags: z.preprocess((value) => {
227
270
  if (typeof value !== "string" || value.length === 0) return void 0;
228
271
  try {
@@ -257,10 +300,12 @@ const sendNotificationBodySchema = z.object({
257
300
  const listAgentControllersResponseSchema = z.object({ agentControllers: z.array(z.object({ id: z.string() })) });
258
301
  const createSessionResponseSchema = z.object({
259
302
  controllerId: z.string(),
303
+ sessionId: z.string(),
260
304
  resourceId: z.string(),
261
305
  threadId: z.string().optional()
262
306
  });
263
307
  const ackResponseSchema = z.object({ ok: z.boolean() });
308
+ const transferOwnershipResponseSchema = ackResponseSchema.extend({ ownerId: z.string() });
264
309
  const toolCommandAckResponseSchema = z.object({
265
310
  ok: z.boolean(),
266
311
  reason: z.enum([
@@ -331,6 +376,7 @@ const taskSnapshotSchema = z.object({
331
376
  });
332
377
  const sessionStateResponseSchema = z.object({
333
378
  controllerId: z.string(),
379
+ sessionId: z.string(),
334
380
  resourceId: z.string(),
335
381
  threadId: z.string().optional(),
336
382
  modeId: z.string(),
@@ -447,25 +493,34 @@ const LIST_AGENT_CONTROLLERS_ROUTE = createRoute({
447
493
  const CREATE_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
448
494
  method: "POST",
449
495
  path: "/agent-controller/:controllerId/sessions",
496
+ queryParamSchema: sessionQuerySchema,
450
497
  responseType: "json",
451
498
  pathParamSchema: controllerIdPathParams,
452
499
  bodySchema: createSessionBodySchema,
453
500
  responseSchema: createSessionResponseSchema,
454
501
  summary: "Create or resume a controller session",
455
- description: "Creates a session for the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation.",
502
+ description: "Creates the session addressed by `sessionId` on the given resourceId, or returns the existing one (get-or-create), so reconnects resume the conversation. Without a `sessionId` the session is addressed by `resourceId`; without a `resourceId` it resumes on the resource it already has. Every other session route requires a started session and returns 404 until one exists or can be recovered from a stored thread.",
456
503
  tags: ["AgentController"],
457
504
  requiresAuth: true,
458
505
  requiresPermission: "agent-controller:execute",
459
- handler: async ({ mastra, controllerId, resourceId, sessionScope, tags, threadId, requestContext }) => {
506
+ handler: async ({ mastra, controllerId, resourceId, sessionId, tags, threadId, requestContext }) => {
460
507
  try {
508
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
509
+ await controller.init();
510
+ const id = sessionId ?? resourceId;
511
+ const session = await controller.createSession({
512
+ id,
513
+ resourceId: resourceId ?? await resolveSessionResourceId(controller, id),
514
+ ownerId: controller.id,
515
+ tags,
516
+ threadId,
517
+ requestContext
518
+ });
461
519
  return {
462
520
  controllerId,
463
- resourceId,
464
- threadId: (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, {
465
- tags,
466
- scope: sessionScope,
467
- threadId
468
- }, requestContext)).thread.getId() ?? void 0
521
+ sessionId: session.identity.getId(),
522
+ resourceId: session.identity.getResourceId(),
523
+ threadId: session.thread.getId() ?? void 0
469
524
  };
470
525
  } catch (error) {
471
526
  return handleError(error, "error creating controller session");
@@ -512,20 +567,20 @@ function toWireEvent(event) {
512
567
  }
513
568
  const STREAM_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
514
569
  method: "GET",
515
- path: "/agent-controller/:controllerId/sessions/:resourceId/stream",
570
+ path: "/agent-controller/:controllerId/sessions/:sessionId/stream",
571
+ queryParamSchema: sessionQuerySchema,
516
572
  responseType: "stream",
517
573
  streamFormat: "sse",
518
574
  sseFlushOnConnect: true,
519
575
  pathParamSchema: sessionPathParams,
520
- queryParamSchema: sessionScopeQuerySchema,
521
576
  summary: "Stream controller session events",
522
577
  description: "Subscribes to a session’s event bus and streams events to the client over SSE.",
523
578
  tags: ["AgentController", "Streaming"],
524
579
  requiresAuth: true,
525
580
  requiresPermission: "agent-controller:read",
526
- handler: async ({ mastra, controllerId, resourceId, sessionScope, abortSignal, requestContext }) => {
581
+ handler: async ({ mastra, controllerId, sessionId, abortSignal, requestContext }) => {
527
582
  try {
528
- const session = await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, sessionScope, requestContext);
583
+ const session = await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
529
584
  let cleanedUp = false;
530
585
  let heartbeat;
531
586
  let unsubscribe;
@@ -594,10 +649,10 @@ const STREAM_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
594
649
  });
595
650
  const SEND_AGENT_CONTROLLER_MESSAGE_ROUTE = createRoute({
596
651
  method: "POST",
597
- path: "/agent-controller/:controllerId/sessions/:resourceId/messages",
652
+ path: "/agent-controller/:controllerId/sessions/:sessionId/messages",
653
+ queryParamSchema: sessionQuerySchema,
598
654
  responseType: "json",
599
655
  pathParamSchema: sessionPathParams,
600
- queryParamSchema: sessionScopeQuerySchema,
601
656
  bodySchema: sendMessageBodySchema,
602
657
  responseSchema: ackResponseSchema,
603
658
  summary: "Send a message to a controller session",
@@ -605,9 +660,9 @@ const SEND_AGENT_CONTROLLER_MESSAGE_ROUTE = createRoute({
605
660
  tags: ["AgentController", "Streaming"],
606
661
  requiresAuth: true,
607
662
  requiresPermission: "agent-controller:execute",
608
- handler: async ({ mastra, controllerId, resourceId, sessionScope, message, files, requestContext }) => {
663
+ handler: async ({ mastra, controllerId, sessionId, message, files, requestContext }) => {
609
664
  try {
610
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
665
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
611
666
  const author = getRequestMessageAuthor(requestContext);
612
667
  ackBackgroundSessionWork({
613
668
  work: session.sendMessage({
@@ -628,19 +683,19 @@ const SEND_AGENT_CONTROLLER_MESSAGE_ROUTE = createRoute({
628
683
  });
629
684
  const ABORT_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
630
685
  method: "POST",
631
- path: "/agent-controller/:controllerId/sessions/:resourceId/abort",
686
+ path: "/agent-controller/:controllerId/sessions/:sessionId/abort",
687
+ queryParamSchema: sessionQuerySchema,
632
688
  responseType: "json",
633
689
  pathParamSchema: sessionPathParams,
634
- queryParamSchema: sessionScopeQuerySchema,
635
690
  responseSchema: ackResponseSchema,
636
691
  summary: "Abort a controller session run",
637
692
  description: "Aborts the in-flight run for the session, if any.",
638
693
  tags: ["AgentController"],
639
694
  requiresAuth: true,
640
695
  requiresPermission: "agent-controller:execute",
641
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
696
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
642
697
  try {
643
- (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).abort();
698
+ (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).abort();
644
699
  return { ok: true };
645
700
  } catch (error) {
646
701
  return handleError(error, "error aborting controller session");
@@ -649,10 +704,10 @@ const ABORT_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
649
704
  });
650
705
  const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
651
706
  method: "POST",
652
- path: "/agent-controller/:controllerId/sessions/:resourceId/tool-approval",
707
+ path: "/agent-controller/:controllerId/sessions/:sessionId/tool-approval",
708
+ queryParamSchema: sessionQuerySchema,
653
709
  responseType: "json",
654
710
  pathParamSchema: sessionPathParams,
655
- queryParamSchema: sessionScopeQuerySchema,
656
711
  bodySchema: toolApprovalBodySchema,
657
712
  responseSchema: toolCommandAckResponseSchema,
658
713
  summary: "Respond to a controller tool approval",
@@ -660,13 +715,13 @@ const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
660
715
  tags: ["AgentController"],
661
716
  requiresAuth: true,
662
717
  requiresPermission: "agent-controller:execute",
663
- handler: async ({ mastra, controllerId, resourceId, sessionScope, toolCallId, approved, requestContext }) => {
718
+ handler: async ({ mastra, controllerId, sessionId, toolCallId, approved, alwaysAllowCategory, requestContext }) => {
664
719
  try {
665
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
720
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
666
721
  if ((toolCallId ? session.approval.isArmed({ toolCallId }) : session.approval.isArmed()) || !toolCallId) {
667
722
  const result = session.respondToToolApproval({
668
723
  toolCallId,
669
- decision: approved ? "approve" : "decline",
724
+ decision: !approved ? "decline" : alwaysAllowCategory ? "always_allow_category" : "approve",
670
725
  requestContext
671
726
  });
672
727
  if (!result.accepted) return {
@@ -686,6 +741,7 @@ const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
686
741
  work: session.respondToPersistedToolApproval({
687
742
  toolCallId,
688
743
  approved,
744
+ alwaysAllowCategory,
689
745
  requestContext
690
746
  }).finally(() => session.releaseToolResponse(toolCallId)),
691
747
  session,
@@ -701,10 +757,10 @@ const AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE = createRoute({
701
757
  });
702
758
  const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
703
759
  method: "POST",
704
- path: "/agent-controller/:controllerId/sessions/:resourceId/tool-suspension",
760
+ path: "/agent-controller/:controllerId/sessions/:sessionId/tool-suspension",
761
+ queryParamSchema: sessionQuerySchema,
705
762
  responseType: "json",
706
763
  pathParamSchema: sessionPathParams,
707
- queryParamSchema: sessionScopeQuerySchema,
708
764
  bodySchema: toolSuspensionBodySchema,
709
765
  responseSchema: toolCommandAckResponseSchema,
710
766
  summary: "Respond to a suspended controller tool",
@@ -712,9 +768,9 @@ const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
712
768
  tags: ["AgentController"],
713
769
  requiresAuth: true,
714
770
  requiresPermission: "agent-controller:execute",
715
- handler: async ({ mastra, controllerId, resourceId, sessionScope, toolCallId, runId, resumeData, requestContext }) => {
771
+ handler: async ({ mastra, controllerId, sessionId, toolCallId, runId, resumeData, requestContext }) => {
716
772
  try {
717
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
773
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
718
774
  const claim = session.claimToolSuspension(toolCallId, runId);
719
775
  if (!claim.accepted) return {
720
776
  ok: false,
@@ -738,10 +794,10 @@ const AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE = createRoute({
738
794
  });
739
795
  const STEER_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
740
796
  method: "POST",
741
- path: "/agent-controller/:controllerId/sessions/:resourceId/steer",
797
+ path: "/agent-controller/:controllerId/sessions/:sessionId/steer",
798
+ queryParamSchema: sessionQuerySchema,
742
799
  responseType: "json",
743
800
  pathParamSchema: sessionPathParams,
744
- queryParamSchema: sessionScopeQuerySchema,
745
801
  bodySchema: steerBodySchema,
746
802
  responseSchema: ackResponseSchema,
747
803
  summary: "Steer the in-flight run",
@@ -749,9 +805,9 @@ const STEER_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
749
805
  tags: ["AgentController"],
750
806
  requiresAuth: true,
751
807
  requiresPermission: "agent-controller:execute",
752
- handler: async ({ mastra, controllerId, resourceId, sessionScope, message, files, requestContext }) => {
808
+ handler: async ({ mastra, controllerId, sessionId, message, files, requestContext }) => {
753
809
  try {
754
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
810
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
755
811
  const author = getRequestMessageAuthor(requestContext);
756
812
  ackBackgroundSessionWork({
757
813
  work: session.steer({
@@ -772,10 +828,10 @@ const STEER_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
772
828
  });
773
829
  const SWITCH_AGENT_CONTROLLER_MODE_ROUTE = createRoute({
774
830
  method: "POST",
775
- path: "/agent-controller/:controllerId/sessions/:resourceId/mode",
831
+ path: "/agent-controller/:controllerId/sessions/:sessionId/mode",
832
+ queryParamSchema: sessionQuerySchema,
776
833
  responseType: "json",
777
834
  pathParamSchema: sessionPathParams,
778
- queryParamSchema: sessionScopeQuerySchema,
779
835
  bodySchema: switchModeBodySchema,
780
836
  responseSchema: ackResponseSchema,
781
837
  summary: "Switch the session mode",
@@ -783,9 +839,9 @@ const SWITCH_AGENT_CONTROLLER_MODE_ROUTE = createRoute({
783
839
  tags: ["AgentController"],
784
840
  requiresAuth: true,
785
841
  requiresPermission: "agent-controller:execute",
786
- handler: async ({ mastra, controllerId, resourceId, sessionScope, modeId, requestContext }) => {
842
+ handler: async ({ mastra, controllerId, sessionId, modeId, requestContext }) => {
787
843
  try {
788
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).mode.switch({ modeId });
844
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).mode.switch({ modeId });
789
845
  return { ok: true };
790
846
  } catch (error) {
791
847
  return handleError(error, "error switching controller mode");
@@ -794,10 +850,10 @@ const SWITCH_AGENT_CONTROLLER_MODE_ROUTE = createRoute({
794
850
  });
795
851
  const SWITCH_AGENT_CONTROLLER_MODEL_ROUTE = createRoute({
796
852
  method: "POST",
797
- path: "/agent-controller/:controllerId/sessions/:resourceId/model",
853
+ path: "/agent-controller/:controllerId/sessions/:sessionId/model",
854
+ queryParamSchema: sessionQuerySchema,
798
855
  responseType: "json",
799
856
  pathParamSchema: sessionPathParams,
800
- queryParamSchema: sessionScopeQuerySchema,
801
857
  bodySchema: switchModelBodySchema,
802
858
  responseSchema: ackResponseSchema,
803
859
  summary: "Switch the session model",
@@ -805,9 +861,9 @@ const SWITCH_AGENT_CONTROLLER_MODEL_ROUTE = createRoute({
805
861
  tags: ["AgentController"],
806
862
  requiresAuth: true,
807
863
  requiresPermission: "agent-controller:execute",
808
- handler: async ({ mastra, controllerId, resourceId, sessionScope, modelId, thinkingLevel, requestContext }) => {
864
+ handler: async ({ mastra, controllerId, sessionId, modelId, thinkingLevel, requestContext }) => {
809
865
  try {
810
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).model.switch(modelId, { thinkingLevel });
866
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).model.switch(modelId, { thinkingLevel });
811
867
  return { ok: true };
812
868
  } catch (error) {
813
869
  return handleError(error, "error switching controller model");
@@ -816,10 +872,10 @@ const SWITCH_AGENT_CONTROLLER_MODEL_ROUTE = createRoute({
816
872
  });
817
873
  const SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
818
874
  method: "POST",
819
- path: "/agent-controller/:controllerId/sessions/:resourceId/thread",
875
+ path: "/agent-controller/:controllerId/sessions/:sessionId/thread",
876
+ queryParamSchema: sessionQuerySchema,
820
877
  responseType: "json",
821
878
  pathParamSchema: sessionPathParams,
822
- queryParamSchema: sessionScopeQuerySchema,
823
879
  bodySchema: switchThreadBodySchema,
824
880
  responseSchema: ackResponseSchema,
825
881
  summary: "Switch the session thread",
@@ -827,9 +883,9 @@ const SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
827
883
  tags: ["AgentController"],
828
884
  requiresAuth: true,
829
885
  requiresPermission: "agent-controller:execute",
830
- handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, requestContext }) => {
886
+ handler: async ({ mastra, controllerId, sessionId, threadId, requestContext }) => {
831
887
  try {
832
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
888
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
833
889
  if (session.thread.getId() !== threadId) await session.thread.switch({
834
890
  threadId,
835
891
  requestContext
@@ -840,9 +896,51 @@ const SWITCH_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
840
896
  }
841
897
  }
842
898
  });
899
+ const TRANSFER_AGENT_CONTROLLER_THREAD_OWNERSHIP_ROUTE = createRoute({
900
+ method: "POST",
901
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads/:threadId/owner",
902
+ queryParamSchema: sessionQuerySchema,
903
+ responseType: "json",
904
+ pathParamSchema: threadPathParams,
905
+ responseSchema: transferOwnershipResponseSchema,
906
+ summary: "Take ownership of a thread",
907
+ description: "Transfers ownership of the specified thread to the authenticated user from the request context. The thread must belong to the session's resource, and the caller needs memory write access to it. The session's active thread does not change.",
908
+ tags: ["AgentController", "Threads"],
909
+ requiresAuth: true,
910
+ requiresPermission: "agent-controller:execute",
911
+ handler: async ({ mastra, controllerId, sessionId, threadId, requestContext }) => {
912
+ try {
913
+ const ownerId = getRequestMessageAuthor(requestContext)?.id;
914
+ if (!ownerId) throw new HTTPException(401, { message: "An authenticated user is required to transfer thread ownership" });
915
+ const controller = getAgentControllerOrThrow(mastra, controllerId);
916
+ await controller.init();
917
+ const resourceId = await resolveSessionResourceId(controller, sessionId);
918
+ const thread = await controller.queryThreadById({ threadId });
919
+ if (!thread || thread.resourceId !== resourceId) throw new HTTPException(404, { message: "Thread not found" });
920
+ await enforceThreadAccess({
921
+ mastra,
922
+ requestContext,
923
+ threadId,
924
+ thread,
925
+ effectiveResourceId: resourceId,
926
+ permission: MastraFGAPermissions.MEMORY_WRITE
927
+ });
928
+ await (await getSession(controller, sessionId, requestContext)).thread.transferOwnership({
929
+ toOwnerId: ownerId,
930
+ threadId
931
+ });
932
+ return {
933
+ ok: true,
934
+ ownerId
935
+ };
936
+ } catch (error) {
937
+ return handleError(error, "error transferring controller thread ownership");
938
+ }
939
+ }
940
+ });
843
941
  const GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
844
942
  method: "GET",
845
- path: "/agent-controller/:controllerId/sessions/:resourceId",
943
+ path: "/agent-controller/:controllerId/sessions/:sessionId",
846
944
  responseType: "json",
847
945
  pathParamSchema: sessionPathParams,
848
946
  queryParamSchema: sessionStateQuerySchema,
@@ -852,9 +950,10 @@ const GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
852
950
  tags: ["AgentController"],
853
951
  requiresAuth: true,
854
952
  requiresPermission: "agent-controller:read",
855
- handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId: requestedThreadId, requestContext }) => {
953
+ handler: async ({ mastra, controllerId, sessionId, threadId: requestedThreadId, requestContext }) => {
856
954
  try {
857
- const session = await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, sessionScope, requestContext);
955
+ const session = await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
956
+ const resourceId = session.identity.getResourceId();
858
957
  const ds = session.displayState.get();
859
958
  const threadId = requestedThreadId ?? session.thread.getId() ?? void 0;
860
959
  const storage = mastra.getStorage();
@@ -878,6 +977,7 @@ const GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
878
977
  const oneOfOptional = (value, allowed) => allowed.includes(value) ? value : void 0;
879
978
  return {
880
979
  controllerId,
980
+ sessionId: session.identity.getId(),
881
981
  resourceId,
882
982
  threadId,
883
983
  modeId: session.mode.get(),
@@ -967,19 +1067,20 @@ const LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE = createRoute({
967
1067
  });
968
1068
  const LIST_AGENT_CONTROLLER_THREADS_ROUTE = createRoute({
969
1069
  method: "GET",
970
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads",
1070
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads",
971
1071
  responseType: "json",
972
1072
  pathParamSchema: sessionPathParams,
973
1073
  queryParamSchema: listThreadsQuerySchema,
974
1074
  responseSchema: listThreadsResponseSchema,
975
1075
  summary: "List session threads",
976
- description: "Lists the threads for the session’s resource, most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar). Pass `tags` (a JSON-encoded object) to scope the list to threads matching every tag — e.g. `{ projectPath }` so git worktrees sharing a resourceId each see only their own threads.",
1076
+ description: "Lists every thread of the session’s resource (not only the session’s own threads), most-recently-updated first. Pass `limit` to return only the newest N (e.g. for a sidebar). Pass `tags` (a JSON-encoded object) to scope the list to threads matching every tag — e.g. `{ projectPath }` so git worktrees sharing a resourceId each see only their own threads.",
977
1077
  tags: ["AgentController"],
978
1078
  requiresAuth: true,
979
1079
  requiresPermission: "agent-controller:read",
980
- handler: async ({ mastra, controllerId, resourceId, limit, tags }) => {
1080
+ handler: async ({ mastra, controllerId, sessionId, limit, tags }) => {
981
1081
  try {
982
1082
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1083
+ const resourceId = await resolveSessionResourceId(controller, sessionId);
983
1084
  const threads = await controller.queryThreads({ resourceId });
984
1085
  const getTags = (t) => {
985
1086
  const metadata = t.metadata ?? {};
@@ -1014,10 +1115,10 @@ const LIST_AGENT_CONTROLLER_THREADS_ROUTE = createRoute({
1014
1115
  });
1015
1116
  const SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({
1016
1117
  method: "POST",
1017
- path: "/agent-controller/:controllerId/sessions/:resourceId/notifications",
1118
+ path: "/agent-controller/:controllerId/sessions/:sessionId/notifications",
1119
+ queryParamSchema: sessionQuerySchema,
1018
1120
  responseType: "json",
1019
1121
  pathParamSchema: sessionPathParams,
1020
- queryParamSchema: sessionScopeQuerySchema,
1021
1122
  bodySchema: sendNotificationBodySchema,
1022
1123
  responseSchema: z.object({
1023
1124
  accepted: z.boolean(),
@@ -1030,9 +1131,9 @@ const SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({
1030
1131
  tags: ["AgentController"],
1031
1132
  requiresAuth: true,
1032
1133
  requiresPermission: "agent-controller:execute",
1033
- handler: async ({ mastra, controllerId, resourceId, sessionScope, source, kind, summary, priority, payload, sourceId, dedupeKey, coalesceKey, attributes, metadata, requestContext }) => {
1134
+ handler: async ({ mastra, controllerId, sessionId, source, kind, summary, priority, payload, sourceId, dedupeKey, coalesceKey, attributes, metadata, requestContext }) => {
1034
1135
  try {
1035
- const result = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).sendNotificationSignal({
1136
+ const result = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).sendNotificationSignal({
1036
1137
  source,
1037
1138
  kind,
1038
1139
  summary,
@@ -1057,10 +1158,10 @@ const SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE = createRoute({
1057
1158
  });
1058
1159
  const CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1059
1160
  method: "POST",
1060
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads",
1161
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads",
1162
+ queryParamSchema: sessionQuerySchema,
1061
1163
  responseType: "json",
1062
1164
  pathParamSchema: sessionPathParams,
1063
- queryParamSchema: sessionScopeQuerySchema,
1064
1165
  bodySchema: createThreadBodySchema,
1065
1166
  responseSchema: threadResponseSchema,
1066
1167
  summary: "Create a new thread",
@@ -1068,9 +1169,9 @@ const CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1068
1169
  tags: ["AgentController", "Threads"],
1069
1170
  requiresAuth: true,
1070
1171
  requiresPermission: "agent-controller:execute",
1071
- handler: async ({ mastra, controllerId, resourceId, sessionScope, title, requestContext }) => {
1172
+ handler: async ({ mastra, controllerId, sessionId, title, requestContext }) => {
1072
1173
  try {
1073
- const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.create({
1174
+ const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).thread.create({
1074
1175
  title,
1075
1176
  requestContext
1076
1177
  });
@@ -1088,19 +1189,19 @@ const CREATE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1088
1189
  });
1089
1190
  const DELETE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1090
1191
  method: "DELETE",
1091
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId",
1192
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads/:threadId",
1193
+ queryParamSchema: sessionQuerySchema,
1092
1194
  responseType: "json",
1093
1195
  pathParamSchema: threadPathParams,
1094
- queryParamSchema: sessionScopeQuerySchema,
1095
1196
  responseSchema: ackResponseSchema,
1096
1197
  summary: "Delete a thread",
1097
1198
  description: "Deletes a thread. If the deleted thread is the active one, the session is unbound.",
1098
1199
  tags: ["AgentController", "Threads"],
1099
1200
  requiresAuth: true,
1100
1201
  requiresPermission: "agent-controller:execute",
1101
- handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, requestContext }) => {
1202
+ handler: async ({ mastra, controllerId, sessionId, threadId, requestContext }) => {
1102
1203
  try {
1103
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.delete({
1204
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).thread.delete({
1104
1205
  threadId,
1105
1206
  requestContext
1106
1207
  });
@@ -1112,10 +1213,10 @@ const DELETE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1112
1213
  });
1113
1214
  const RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1114
1215
  method: "PUT",
1115
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId",
1216
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads/:threadId",
1217
+ queryParamSchema: sessionQuerySchema,
1116
1218
  responseType: "json",
1117
1219
  pathParamSchema: threadPathParams,
1118
- queryParamSchema: sessionScopeQuerySchema,
1119
1220
  bodySchema: renameThreadBodySchema,
1120
1221
  responseSchema: ackResponseSchema,
1121
1222
  summary: "Rename a thread",
@@ -1123,9 +1224,9 @@ const RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1123
1224
  tags: ["AgentController", "Threads"],
1124
1225
  requiresAuth: true,
1125
1226
  requiresPermission: "agent-controller:execute",
1126
- handler: async ({ mastra, controllerId, resourceId, sessionScope, threadId, title, requestContext }) => {
1227
+ handler: async ({ mastra, controllerId, sessionId, threadId, title, requestContext }) => {
1127
1228
  try {
1128
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
1229
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
1129
1230
  if (session.thread.getId() !== threadId) await session.thread.switch({
1130
1231
  threadId,
1131
1232
  requestContext
@@ -1139,10 +1240,10 @@ const RENAME_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1139
1240
  });
1140
1241
  const CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1141
1242
  method: "POST",
1142
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads/clone",
1243
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads/clone",
1244
+ queryParamSchema: sessionQuerySchema,
1143
1245
  responseType: "json",
1144
1246
  pathParamSchema: sessionPathParams,
1145
- queryParamSchema: sessionScopeQuerySchema,
1146
1247
  bodySchema: cloneThreadBodySchema,
1147
1248
  responseSchema: threadResponseSchema,
1148
1249
  summary: "Clone a thread",
@@ -1150,9 +1251,9 @@ const CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1150
1251
  tags: ["AgentController", "Threads"],
1151
1252
  requiresAuth: true,
1152
1253
  requiresPermission: "agent-controller:execute",
1153
- handler: async ({ mastra, controllerId, resourceId, sessionScope, sourceThreadId, title, requestContext }) => {
1254
+ handler: async ({ mastra, controllerId, sessionId, sourceThreadId, title, requestContext }) => {
1154
1255
  try {
1155
- const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).thread.clone({
1256
+ const thread = await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).thread.clone({
1156
1257
  sourceThreadId,
1157
1258
  title,
1158
1259
  requestContext
@@ -1171,7 +1272,7 @@ const CLONE_AGENT_CONTROLLER_THREAD_ROUTE = createRoute({
1171
1272
  });
1172
1273
  const LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE = createRoute({
1173
1274
  method: "GET",
1174
- path: "/agent-controller/:controllerId/sessions/:resourceId/threads/:threadId/messages",
1275
+ path: "/agent-controller/:controllerId/sessions/:sessionId/threads/:threadId/messages",
1175
1276
  responseType: "json",
1176
1277
  pathParamSchema: threadPathParams,
1177
1278
  queryParamSchema: listMessagesQuerySchema,
@@ -1181,12 +1282,13 @@ const LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE = createRoute({
1181
1282
  tags: ["AgentController", "Threads"],
1182
1283
  requiresAuth: true,
1183
1284
  requiresPermission: "agent-controller:read",
1184
- handler: async ({ mastra, controllerId, resourceId, threadId, limit, page, perPage, orderBy, include, filter, requestContext }) => {
1285
+ handler: async ({ mastra, controllerId, sessionId, threadId, limit, page, perPage, orderBy, include, filter, requestContext }) => {
1185
1286
  try {
1186
1287
  if (limit !== void 0 && (perPage !== void 0 || orderBy !== void 0 || include !== void 0 || filter !== void 0)) throw new HTTPException(400, { message: "limit can only be combined with page; use perPage instead" });
1187
1288
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1289
+ const resourceId = await resolveSessionResourceId(controller, sessionId);
1188
1290
  const thread = await controller.queryThreadById({ threadId });
1189
- if (!thread || resourceId && thread.resourceId && thread.resourceId !== resourceId) throw new HTTPException(404, { message: "Thread not found" });
1291
+ if (!thread || thread.resourceId && thread.resourceId !== resourceId) throw new HTTPException(404, { message: "Thread not found" });
1190
1292
  await enforceThreadAccess({
1191
1293
  mastra,
1192
1294
  requestContext,
@@ -1233,10 +1335,10 @@ const LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE = createRoute({
1233
1335
  });
1234
1336
  const FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
1235
1337
  method: "POST",
1236
- path: "/agent-controller/:controllerId/sessions/:resourceId/follow-up",
1338
+ path: "/agent-controller/:controllerId/sessions/:sessionId/follow-up",
1339
+ queryParamSchema: sessionQuerySchema,
1237
1340
  responseType: "json",
1238
1341
  pathParamSchema: sessionPathParams,
1239
- queryParamSchema: sessionScopeQuerySchema,
1240
1342
  bodySchema: followUpBodySchema,
1241
1343
  responseSchema: ackResponseSchema,
1242
1344
  summary: "Queue a follow-up message",
@@ -1244,9 +1346,9 @@ const FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE = createRoute({
1244
1346
  tags: ["AgentController"],
1245
1347
  requiresAuth: true,
1246
1348
  requiresPermission: "agent-controller:execute",
1247
- handler: async ({ mastra, controllerId, resourceId, sessionScope, message, files, requestContext }) => {
1349
+ handler: async ({ mastra, controllerId, sessionId, message, files, requestContext }) => {
1248
1350
  try {
1249
- const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext);
1351
+ const session = await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext);
1250
1352
  ackBackgroundSessionWork({
1251
1353
  work: session.followUp({
1252
1354
  content: message,
@@ -1316,20 +1418,20 @@ const GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE = createRoute({
1316
1418
  });
1317
1419
  const GET_AGENT_CONTROLLER_OM_RECORD_ROUTE = createRoute({
1318
1420
  method: "GET",
1319
- path: "/agent-controller/:controllerId/sessions/:resourceId/om",
1421
+ path: "/agent-controller/:controllerId/sessions/:sessionId/om",
1422
+ queryParamSchema: sessionQuerySchema,
1320
1423
  responseType: "json",
1321
1424
  pathParamSchema: sessionPathParams,
1322
- queryParamSchema: sessionScopeQuerySchema,
1323
1425
  responseSchema: omRecordResponseSchema,
1324
1426
  summary: "Get observational memory record",
1325
1427
  description: "Returns the current observational memory record for the session’s thread/resource.",
1326
1428
  tags: ["AgentController"],
1327
1429
  requiresAuth: true,
1328
1430
  requiresPermission: "agent-controller:read",
1329
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
1431
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
1330
1432
  try {
1331
1433
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1332
- const session = await getExistingSession(controller, resourceId, sessionScope, requestContext);
1434
+ const session = await getExistingSession(controller, sessionId, requestContext);
1333
1435
  return { record: await controller.getObservationalMemoryRecord(session) ?? void 0 };
1334
1436
  } catch (error) {
1335
1437
  return handleError(error, "error reading controller OM record");
@@ -1338,10 +1440,10 @@ const GET_AGENT_CONTROLLER_OM_RECORD_ROUTE = createRoute({
1338
1440
  });
1339
1441
  const SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE = createRoute({
1340
1442
  method: "POST",
1341
- path: "/agent-controller/:controllerId/sessions/:resourceId/resource",
1443
+ path: "/agent-controller/:controllerId/sessions/:sessionId/resource",
1444
+ queryParamSchema: sessionQuerySchema,
1342
1445
  responseType: "json",
1343
1446
  pathParamSchema: sessionPathParams,
1344
- queryParamSchema: sessionScopeQuerySchema,
1345
1447
  bodySchema: z.object({ newResourceId: z.string() }),
1346
1448
  responseSchema: ackResponseSchema,
1347
1449
  summary: "Change the session resource ID",
@@ -1349,10 +1451,10 @@ const SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE = createRoute({
1349
1451
  tags: ["AgentController"],
1350
1452
  requiresAuth: true,
1351
1453
  requiresPermission: "agent-controller:execute",
1352
- handler: async ({ mastra, controllerId, resourceId, sessionScope, newResourceId, requestContext }) => {
1454
+ handler: async ({ mastra, controllerId, sessionId, newResourceId, requestContext }) => {
1353
1455
  try {
1354
1456
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1355
- const session = await getSession(controller, resourceId, { scope: sessionScope }, requestContext);
1457
+ const session = await getSession(controller, sessionId, requestContext);
1356
1458
  await controller.setResourceId(session, { resourceId: newResourceId });
1357
1459
  return { ok: true };
1358
1460
  } catch (error) {
@@ -1362,20 +1464,20 @@ const SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE = createRoute({
1362
1464
  });
1363
1465
  const GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE = createRoute({
1364
1466
  method: "GET",
1365
- path: "/agent-controller/:controllerId/sessions/:resourceId/resources",
1467
+ path: "/agent-controller/:controllerId/sessions/:sessionId/resources",
1468
+ queryParamSchema: sessionQuerySchema,
1366
1469
  responseType: "json",
1367
1470
  pathParamSchema: sessionPathParams,
1368
- queryParamSchema: sessionScopeQuerySchema,
1369
1471
  responseSchema: z.object({ resourceIds: z.array(z.string()) }),
1370
1472
  summary: "Get known resource IDs",
1371
1473
  description: "Lists the resource IDs known to this session (from threads).",
1372
1474
  tags: ["AgentController"],
1373
1475
  requiresAuth: true,
1374
1476
  requiresPermission: "agent-controller:read",
1375
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
1477
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
1376
1478
  try {
1377
1479
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1378
- const session = await getExistingSession(controller, resourceId, sessionScope, requestContext);
1480
+ const session = await getExistingSession(controller, sessionId, requestContext);
1379
1481
  return { resourceIds: await controller.getKnownResourceIds(session) };
1380
1482
  } catch (error) {
1381
1483
  return handleError(error, "error listing controller resource IDs");
@@ -1417,20 +1519,20 @@ function getAgentForSession(controller, session) {
1417
1519
  }
1418
1520
  const GET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1419
1521
  method: "GET",
1420
- path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1522
+ path: "/agent-controller/:controllerId/sessions/:sessionId/goal",
1523
+ queryParamSchema: sessionQuerySchema,
1421
1524
  responseType: "json",
1422
1525
  pathParamSchema: sessionPathParams,
1423
- queryParamSchema: sessionScopeQuerySchema,
1424
1526
  responseSchema: goalResponseSchema,
1425
1527
  summary: "Get the current goal",
1426
1528
  description: "Returns the active/paused/done goal objective for the session’s thread, if any.",
1427
1529
  tags: ["AgentController", "Goals"],
1428
1530
  requiresAuth: true,
1429
1531
  requiresPermission: "agent-controller:read",
1430
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
1532
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
1431
1533
  try {
1432
1534
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1433
- const session = await getExistingSession(controller, resourceId, sessionScope, requestContext);
1535
+ const session = await getExistingSession(controller, sessionId, requestContext);
1434
1536
  const threadId = session.thread.getId();
1435
1537
  if (!threadId) return { goal: void 0 };
1436
1538
  return { goal: await getAgentForSession(controller, session).getObjective({ threadId }) ?? void 0 };
@@ -1441,10 +1543,10 @@ const GET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1441
1543
  });
1442
1544
  const SET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1443
1545
  method: "POST",
1444
- path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1546
+ path: "/agent-controller/:controllerId/sessions/:sessionId/goal",
1547
+ queryParamSchema: sessionQuerySchema,
1445
1548
  responseType: "json",
1446
1549
  pathParamSchema: sessionPathParams,
1447
- queryParamSchema: sessionScopeQuerySchema,
1448
1550
  bodySchema: setGoalBodySchema,
1449
1551
  responseSchema: goalResponseSchema,
1450
1552
  summary: "Set a goal",
@@ -1452,10 +1554,10 @@ const SET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1452
1554
  tags: ["AgentController", "Goals"],
1453
1555
  requiresAuth: true,
1454
1556
  requiresPermission: "agent-controller:execute",
1455
- handler: async ({ mastra, controllerId, resourceId, sessionScope, objective, judgeModelId, maxRuns, requestContext }) => {
1557
+ handler: async ({ mastra, controllerId, sessionId, objective, judgeModelId, maxRuns, requestContext }) => {
1456
1558
  try {
1457
1559
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1458
- const session = await getSession(controller, resourceId, { scope: sessionScope }, requestContext);
1560
+ const session = await getSession(controller, sessionId, requestContext);
1459
1561
  const threadId = session.thread.getId();
1460
1562
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1461
1563
  return { goal: await getAgentForSession(controller, session).setObjective(objective, {
@@ -1471,10 +1573,10 @@ const SET_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1471
1573
  });
1472
1574
  const UPDATE_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1473
1575
  method: "PUT",
1474
- path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1576
+ path: "/agent-controller/:controllerId/sessions/:sessionId/goal",
1577
+ queryParamSchema: sessionQuerySchema,
1475
1578
  responseType: "json",
1476
1579
  pathParamSchema: sessionPathParams,
1477
- queryParamSchema: sessionScopeQuerySchema,
1478
1580
  bodySchema: updateGoalBodySchema,
1479
1581
  responseSchema: goalResponseSchema,
1480
1582
  summary: "Update goal options",
@@ -1482,10 +1584,10 @@ const UPDATE_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1482
1584
  tags: ["AgentController", "Goals"],
1483
1585
  requiresAuth: true,
1484
1586
  requiresPermission: "agent-controller:execute",
1485
- handler: async ({ mastra, controllerId, resourceId, sessionScope, judgeModelId, maxRuns, status, requestContext }) => {
1587
+ handler: async ({ mastra, controllerId, sessionId, judgeModelId, maxRuns, status, requestContext }) => {
1486
1588
  try {
1487
1589
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1488
- const session = await getSession(controller, resourceId, { scope: sessionScope }, requestContext);
1590
+ const session = await getSession(controller, sessionId, requestContext);
1489
1591
  const threadId = session.thread.getId();
1490
1592
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1491
1593
  return { goal: await getAgentForSession(controller, session).updateObjectiveOptions({
@@ -1501,20 +1603,20 @@ const UPDATE_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1501
1603
  });
1502
1604
  const CLEAR_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1503
1605
  method: "DELETE",
1504
- path: "/agent-controller/:controllerId/sessions/:resourceId/goal",
1606
+ path: "/agent-controller/:controllerId/sessions/:sessionId/goal",
1607
+ queryParamSchema: sessionQuerySchema,
1505
1608
  responseType: "json",
1506
1609
  pathParamSchema: sessionPathParams,
1507
- queryParamSchema: sessionScopeQuerySchema,
1508
1610
  responseSchema: ackResponseSchema,
1509
1611
  summary: "Clear the goal",
1510
1612
  description: "Removes the active goal from the session’s thread.",
1511
1613
  tags: ["AgentController", "Goals"],
1512
1614
  requiresAuth: true,
1513
1615
  requiresPermission: "agent-controller:execute",
1514
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
1616
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
1515
1617
  try {
1516
1618
  const controller = getAgentControllerOrThrow(mastra, controllerId);
1517
- const session = await getSession(controller, resourceId, { scope: sessionScope }, requestContext);
1619
+ const session = await getSession(controller, sessionId, requestContext);
1518
1620
  const threadId = session.thread.getId();
1519
1621
  if (!threadId) throw new HTTPException(400, { message: "session has no active thread" });
1520
1622
  await getAgentForSession(controller, session).clearObjective({ threadId });
@@ -1526,19 +1628,19 @@ const CLEAR_AGENT_CONTROLLER_GOAL_ROUTE = createRoute({
1526
1628
  });
1527
1629
  const GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE = createRoute({
1528
1630
  method: "GET",
1529
- path: "/agent-controller/:controllerId/sessions/:resourceId/permissions",
1631
+ path: "/agent-controller/:controllerId/sessions/:sessionId/permissions",
1632
+ queryParamSchema: sessionQuerySchema,
1530
1633
  responseType: "json",
1531
1634
  pathParamSchema: sessionPathParams,
1532
- queryParamSchema: sessionScopeQuerySchema,
1533
1635
  responseSchema: permissionRulesResponseSchema,
1534
1636
  summary: "Get permission rules",
1535
1637
  description: "Returns the current permission rules (per-category and per-tool policies) for the session.",
1536
1638
  tags: ["AgentController", "Permissions"],
1537
1639
  requiresAuth: true,
1538
1640
  requiresPermission: "agent-controller:read",
1539
- handler: async ({ mastra, controllerId, resourceId, sessionScope, requestContext }) => {
1641
+ handler: async ({ mastra, controllerId, sessionId, requestContext }) => {
1540
1642
  try {
1541
- const rules = (await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, sessionScope, requestContext)).permissions.getRules();
1643
+ const rules = (await getExistingSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).permissions.getRules();
1542
1644
  return {
1543
1645
  categories: rules.categories,
1544
1646
  tools: rules.tools
@@ -1550,10 +1652,10 @@ const GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE = createRoute({
1550
1652
  });
1551
1653
  const SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE = createRoute({
1552
1654
  method: "PUT",
1553
- path: "/agent-controller/:controllerId/sessions/:resourceId/permissions/category",
1655
+ path: "/agent-controller/:controllerId/sessions/:sessionId/permissions/category",
1656
+ queryParamSchema: sessionQuerySchema,
1554
1657
  responseType: "json",
1555
1658
  pathParamSchema: sessionPathParams,
1556
- queryParamSchema: sessionScopeQuerySchema,
1557
1659
  bodySchema: setCategoryPermissionBodySchema,
1558
1660
  responseSchema: ackResponseSchema,
1559
1661
  summary: "Set permission for a tool category",
@@ -1561,9 +1663,9 @@ const SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE = createRoute({
1561
1663
  tags: ["AgentController", "Permissions"],
1562
1664
  requiresAuth: true,
1563
1665
  requiresPermission: "agent-controller:execute",
1564
- handler: async ({ mastra, controllerId, resourceId, sessionScope, category, policy, requestContext }) => {
1666
+ handler: async ({ mastra, controllerId, sessionId, category, policy, requestContext }) => {
1565
1667
  try {
1566
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).permissions.setForCategory({
1668
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).permissions.setForCategory({
1567
1669
  category,
1568
1670
  policy
1569
1671
  });
@@ -1575,10 +1677,10 @@ const SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE = createRoute({
1575
1677
  });
1576
1678
  const SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE = createRoute({
1577
1679
  method: "PUT",
1578
- path: "/agent-controller/:controllerId/sessions/:resourceId/permissions/tool",
1680
+ path: "/agent-controller/:controllerId/sessions/:sessionId/permissions/tool",
1681
+ queryParamSchema: sessionQuerySchema,
1579
1682
  responseType: "json",
1580
1683
  pathParamSchema: sessionPathParams,
1581
- queryParamSchema: sessionScopeQuerySchema,
1582
1684
  bodySchema: setToolPermissionBodySchema,
1583
1685
  responseSchema: ackResponseSchema,
1584
1686
  summary: "Set permission for a specific tool",
@@ -1586,9 +1688,9 @@ const SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE = createRoute({
1586
1688
  tags: ["AgentController", "Permissions"],
1587
1689
  requiresAuth: true,
1588
1690
  requiresPermission: "agent-controller:execute",
1589
- handler: async ({ mastra, controllerId, resourceId, sessionScope, toolName, policy, requestContext }) => {
1691
+ handler: async ({ mastra, controllerId, sessionId, toolName, policy, requestContext }) => {
1590
1692
  try {
1591
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).permissions.setForTool({
1693
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).permissions.setForTool({
1592
1694
  toolName,
1593
1695
  policy
1594
1696
  });
@@ -1600,10 +1702,10 @@ const SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE = createRoute({
1600
1702
  });
1601
1703
  const SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
1602
1704
  method: "PUT",
1603
- path: "/agent-controller/:controllerId/sessions/:resourceId/state",
1705
+ path: "/agent-controller/:controllerId/sessions/:sessionId/state",
1706
+ queryParamSchema: sessionQuerySchema,
1604
1707
  responseType: "json",
1605
1708
  pathParamSchema: sessionPathParams,
1606
- queryParamSchema: sessionScopeQuerySchema,
1607
1709
  bodySchema: z.object({ state: z.record(z.string(), z.unknown()) }),
1608
1710
  responseSchema: ackResponseSchema,
1609
1711
  summary: "Set session state",
@@ -1611,9 +1713,9 @@ const SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
1611
1713
  tags: ["AgentController"],
1612
1714
  requiresAuth: true,
1613
1715
  requiresPermission: "agent-controller:execute",
1614
- handler: async ({ mastra, controllerId, resourceId, sessionScope, state, requestContext }) => {
1716
+ handler: async ({ mastra, controllerId, sessionId, state, requestContext }) => {
1615
1717
  try {
1616
- await (await getSession(getAgentControllerOrThrow(mastra, controllerId), resourceId, { scope: sessionScope }, requestContext)).state.set(state);
1718
+ await (await getSession(getAgentControllerOrThrow(mastra, controllerId), sessionId, requestContext)).state.set(state);
1617
1719
  return { ok: true };
1618
1720
  } catch (error) {
1619
1721
  return handleError(error, "error setting controller session state");
@@ -1621,6 +1723,6 @@ const SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE = createRoute({
1621
1723
  }
1622
1724
  });
1623
1725
  //#endregion
1624
- export { ABORT_AGENT_CONTROLLER_SESSION_ROUTE, AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE, AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE, CLEAR_AGENT_CONTROLLER_GOAL_ROUTE, CLONE_AGENT_CONTROLLER_THREAD_ROUTE, CREATE_AGENT_CONTROLLER_SESSION_ROUTE, CREATE_AGENT_CONTROLLER_THREAD_ROUTE, DELETE_AGENT_CONTROLLER_THREAD_ROUTE, FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE, GET_AGENT_CONTROLLER_GOAL_ROUTE, GET_AGENT_CONTROLLER_OM_RECORD_ROUTE, GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE, GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE, GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE, LIST_AGENT_CONTROLLERS_ROUTE, LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE, LIST_AGENT_CONTROLLER_MODELS_ROUTE, LIST_AGENT_CONTROLLER_MODES_ROUTE, LIST_AGENT_CONTROLLER_THREADS_ROUTE, LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE, RENAME_AGENT_CONTROLLER_THREAD_ROUTE, SEND_AGENT_CONTROLLER_MESSAGE_ROUTE, SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE, SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_GOAL_ROUTE, SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE, SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE, STEER_AGENT_CONTROLLER_SESSION_ROUTE, STREAM_AGENT_CONTROLLER_SESSION_ROUTE, SWITCH_AGENT_CONTROLLER_MODEL_ROUTE, SWITCH_AGENT_CONTROLLER_MODE_ROUTE, SWITCH_AGENT_CONTROLLER_THREAD_ROUTE, UPDATE_AGENT_CONTROLLER_GOAL_ROUTE };
1726
+ export { ABORT_AGENT_CONTROLLER_SESSION_ROUTE, AGENT_CONTROLLER_TOOL_APPROVAL_ROUTE, AGENT_CONTROLLER_TOOL_SUSPENSION_ROUTE, CLEAR_AGENT_CONTROLLER_GOAL_ROUTE, CLONE_AGENT_CONTROLLER_THREAD_ROUTE, CREATE_AGENT_CONTROLLER_SESSION_ROUTE, CREATE_AGENT_CONTROLLER_THREAD_ROUTE, DELETE_AGENT_CONTROLLER_THREAD_ROUTE, FOLLOW_UP_AGENT_CONTROLLER_SESSION_ROUTE, GET_AGENT_CONTROLLER_GOAL_ROUTE, GET_AGENT_CONTROLLER_OM_RECORD_ROUTE, GET_AGENT_CONTROLLER_PERMISSIONS_ROUTE, GET_AGENT_CONTROLLER_RESOURCE_IDS_ROUTE, GET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, GET_AGENT_CONTROLLER_WORKSPACE_STATUS_ROUTE, LIST_AGENT_CONTROLLERS_ROUTE, LIST_AGENT_CONTROLLER_ACTIVE_RUNS_ROUTE, LIST_AGENT_CONTROLLER_MODELS_ROUTE, LIST_AGENT_CONTROLLER_MODES_ROUTE, LIST_AGENT_CONTROLLER_THREADS_ROUTE, LIST_AGENT_CONTROLLER_THREAD_MESSAGES_ROUTE, RENAME_AGENT_CONTROLLER_THREAD_ROUTE, SEND_AGENT_CONTROLLER_MESSAGE_ROUTE, SEND_AGENT_CONTROLLER_NOTIFICATION_ROUTE, SET_AGENT_CONTROLLER_CATEGORY_PERMISSION_ROUTE, SET_AGENT_CONTROLLER_GOAL_ROUTE, SET_AGENT_CONTROLLER_RESOURCE_ID_ROUTE, SET_AGENT_CONTROLLER_SESSION_STATE_ROUTE, SET_AGENT_CONTROLLER_TOOL_PERMISSION_ROUTE, STEER_AGENT_CONTROLLER_SESSION_ROUTE, STREAM_AGENT_CONTROLLER_SESSION_ROUTE, SWITCH_AGENT_CONTROLLER_MODEL_ROUTE, SWITCH_AGENT_CONTROLLER_MODE_ROUTE, SWITCH_AGENT_CONTROLLER_THREAD_ROUTE, TRANSFER_AGENT_CONTROLLER_THREAD_OWNERSHIP_ROUTE, UPDATE_AGENT_CONTROLLER_GOAL_ROUTE };
1625
1727
 
1626
1728
  //# sourceMappingURL=agent-controller.js.map