@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
@@ -283,7 +283,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
283
283
  by: ["threadId"];
284
284
  } | undefined;
285
285
  orderBy?: {
286
- field: "endedAt" | "startedAt";
286
+ field: "endedAt" | "startedAt" | "timeToFirstChunkMs";
287
287
  direction: "asc" | "desc";
288
288
  }[] | undefined;
289
289
  page?: {
@@ -317,6 +317,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
317
317
  entityType: string | null;
318
318
  environment: string | null;
319
319
  status: "error" | "success";
320
+ timeToFirstChunkMs?: number | null | undefined;
320
321
  }[];
321
322
  page: {
322
323
  next: string | null;
@@ -341,6 +342,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
341
342
  entityType: string | null;
342
343
  environment: string | null;
343
344
  status: "error" | "success";
345
+ timeToFirstChunkMs?: number | null | undefined;
344
346
  }[];
345
347
  pagination: {
346
348
  total: number;
@@ -369,6 +371,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
369
371
  entityType: string | null;
370
372
  environment: string | null;
371
373
  status: "error" | "success";
374
+ timeToFirstChunkMs?: number | null | undefined;
372
375
  }[];
373
376
  delta: {
374
377
  limit: number;
@@ -406,6 +409,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
406
409
  field: import("zod").ZodEnum<{
407
410
  endedAt: "endedAt";
408
411
  startedAt: "startedAt";
412
+ timeToFirstChunkMs: "timeToFirstChunkMs";
409
413
  }>;
410
414
  direction: import("zod").ZodEnum<{
411
415
  asc: "asc";
@@ -446,6 +450,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
446
450
  error: "error";
447
451
  success: "success";
448
452
  }>;
453
+ timeToFirstChunkMs: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
449
454
  }, import("zod/v4/core").$strict>>;
450
455
  page: import("zod").ZodObject<{
451
456
  next: import("zod").ZodNullable<import("zod").ZodString>;
@@ -473,6 +478,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
473
478
  error: "error";
474
479
  success: "success";
475
480
  }>;
481
+ timeToFirstChunkMs: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
476
482
  }, import("zod/v4/core").$strict>>;
477
483
  pagination: import("zod").ZodObject<{
478
484
  total: import("zod").ZodNumber;
@@ -504,6 +510,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
504
510
  error: "error";
505
511
  success: "success";
506
512
  }>;
513
+ timeToFirstChunkMs: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
507
514
  }, import("zod/v4/core").$strict>>;
508
515
  delta: import("zod").ZodObject<{
509
516
  limit: import("zod").ZodNumber;
@@ -653,22 +660,86 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
653
660
  responseType: "json";
654
661
  streamFormat?: 'sse' | 'stream';
655
662
  sseFlushOnConnect?: boolean;
656
- handler(params: {
657
- traces: {
658
- timeRange: {
659
- from: string;
660
- to: string;
661
- };
662
- where?: import("@mastra/core/storage").TraceQueryPredicate | undefined;
663
- };
664
- where?: import("@mastra/core/storage").ThreadPredicate | undefined;
663
+ handler(params: import(".").InferParams<undefined, undefined, import("zod").ZodUnion<readonly [import("zod").ZodPreprocess<import("zod").ZodObject<{
664
+ timeRange: import("zod").ZodUnion<readonly [import("zod").ZodObject<{
665
+ traces: import("zod").ZodObject<{
666
+ from: import("zod").ZodString;
667
+ to: import("zod").ZodString;
668
+ }, import("zod/v4/core").$strict>;
669
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
670
+ threads: import("zod").ZodObject<{
671
+ from: import("zod").ZodString;
672
+ to: import("zod").ZodString;
673
+ field: import("zod").ZodEnum<{
674
+ endedAt: "endedAt";
675
+ startedAt: "startedAt";
676
+ }>;
677
+ }, import("zod/v4/core").$strict>;
678
+ }, import("zod/v4/core").$strict>]>;
679
+ where: import("zod").ZodOptional<import("zod").ZodType<import("@mastra/core/storage").TraceQueryScalarPredicate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@mastra/core/storage").TraceQueryScalarPredicate, unknown>>>;
680
+ orderBy: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
681
+ field: import("zod").ZodEnum<{
682
+ endedAt: "endedAt";
683
+ startedAt: "startedAt";
684
+ }>;
685
+ direction: import("zod").ZodEnum<{
686
+ asc: "asc";
687
+ desc: "desc";
688
+ }>;
689
+ }, import("zod/v4/core").$strict>>>;
690
+ page: import("zod").ZodDefault<import("zod").ZodObject<{
691
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
692
+ after: import("zod").ZodOptional<import("zod").ZodString>;
693
+ }, import("zod/v4/core").$strict>>;
694
+ }, import("zod/v4/core").$strict>, unknown>, import("zod").ZodPreprocess<import("zod").ZodObject<{
695
+ traces: import("zod").ZodObject<{
696
+ timeRange: import("zod").ZodObject<{
697
+ from: import("zod").ZodString;
698
+ to: import("zod").ZodString;
699
+ }, import("zod/v4/core").$strict>;
700
+ where: import("zod").ZodOptional<import("zod").ZodType<import("@mastra/core/storage").TraceQueryPredicate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@mastra/core/storage").TraceQueryPredicate, unknown>>>;
701
+ }, import("zod/v4/core").$strict>;
702
+ where: import("zod").ZodOptional<import("zod").ZodType<import("@mastra/core/storage").ThreadPredicate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@mastra/core/storage").ThreadPredicate, unknown>>>;
703
+ page: import("zod").ZodDefault<import("zod").ZodObject<{
704
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
705
+ after: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
706
+ }, import("zod/v4/core").$strict>>;
707
+ }, import("zod/v4/core").$strict>, unknown>]>> & import(".").ServerContext): Promise<{
708
+ threads: {
709
+ threadId: string;
710
+ }[];
665
711
  page: {
666
- limit: number;
667
- after?: string | null | undefined;
712
+ next: string | null;
668
713
  };
669
- } & import(".").ServerContext): Promise<{
714
+ } | {
670
715
  threads: {
716
+ organizationId: string | null;
671
717
  threadId: string;
718
+ firstTraceId: string;
719
+ lastTraceId: string;
720
+ resourceId: string | null;
721
+ userId: string | null;
722
+ entityType: string | null;
723
+ entityId: string | null;
724
+ entityName: string | null;
725
+ entityVersionId: string | null;
726
+ runId: string | null;
727
+ sessionId: string | null;
728
+ requestId: string | null;
729
+ serviceName: string | null;
730
+ experimentId: string | null;
731
+ environment: string | null;
732
+ executionSource: string | null;
733
+ status: "error" | "success";
734
+ startedAt: string;
735
+ endedAt: string;
736
+ timeToFirstChunkMs: number | null;
737
+ inputPreview: string | null;
738
+ outputPreview: string | null;
739
+ errorPreview: string | null;
740
+ traceCount: number;
741
+ model: string | null;
742
+ provider: string | null;
672
743
  }[];
673
744
  page: {
674
745
  next: string | null;
@@ -684,7 +755,38 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
684
755
  requiresPermission?: import("@mastra/core/auth").MastraFGAPermissionInput | import("@mastra/core/auth").MastraFGAPermissionInput[];
685
756
  fga?: import("@mastra/core/auth").FGARouteConfig;
686
757
  onValidationError?: import("@mastra/core/server").ValidationErrorHook;
687
- readonly __schemas?: import(".").RouteSchemas<undefined, undefined, import("zod").ZodPreprocess<import("zod").ZodObject<{
758
+ readonly __schemas?: import(".").RouteSchemas<undefined, undefined, import("zod").ZodUnion<readonly [import("zod").ZodPreprocess<import("zod").ZodObject<{
759
+ timeRange: import("zod").ZodUnion<readonly [import("zod").ZodObject<{
760
+ traces: import("zod").ZodObject<{
761
+ from: import("zod").ZodString;
762
+ to: import("zod").ZodString;
763
+ }, import("zod/v4/core").$strict>;
764
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
765
+ threads: import("zod").ZodObject<{
766
+ from: import("zod").ZodString;
767
+ to: import("zod").ZodString;
768
+ field: import("zod").ZodEnum<{
769
+ endedAt: "endedAt";
770
+ startedAt: "startedAt";
771
+ }>;
772
+ }, import("zod/v4/core").$strict>;
773
+ }, import("zod/v4/core").$strict>]>;
774
+ where: import("zod").ZodOptional<import("zod").ZodType<import("@mastra/core/storage").TraceQueryScalarPredicate, unknown, import("zod/v4/core").$ZodTypeInternals<import("@mastra/core/storage").TraceQueryScalarPredicate, unknown>>>;
775
+ orderBy: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodObject<{
776
+ field: import("zod").ZodEnum<{
777
+ endedAt: "endedAt";
778
+ startedAt: "startedAt";
779
+ }>;
780
+ direction: import("zod").ZodEnum<{
781
+ asc: "asc";
782
+ desc: "desc";
783
+ }>;
784
+ }, import("zod/v4/core").$strict>>>;
785
+ page: import("zod").ZodDefault<import("zod").ZodObject<{
786
+ limit: import("zod").ZodDefault<import("zod").ZodNumber>;
787
+ after: import("zod").ZodOptional<import("zod").ZodString>;
788
+ }, import("zod/v4/core").$strict>>;
789
+ }, import("zod/v4/core").$strict>, unknown>, import("zod").ZodPreprocess<import("zod").ZodObject<{
688
790
  traces: import("zod").ZodObject<{
689
791
  timeRange: import("zod").ZodObject<{
690
792
  from: import("zod").ZodString;
@@ -697,14 +799,57 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
697
799
  limit: import("zod").ZodDefault<import("zod").ZodNumber>;
698
800
  after: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodString>>;
699
801
  }, import("zod/v4/core").$strict>>;
700
- }, import("zod/v4/core").$strict>, unknown>, import("zod").ZodObject<{
802
+ }, import("zod/v4/core").$strict>, unknown>]>, import("zod").ZodObject<{
701
803
  threads: import("zod").ZodArray<import("zod").ZodObject<{
702
804
  threadId: import("zod").ZodString;
703
805
  }, import("zod/v4/core").$strict>>;
704
806
  page: import("zod").ZodObject<{
705
807
  next: import("zod").ZodNullable<import("zod").ZodString>;
706
808
  }, import("zod/v4/core").$strict>;
707
- }, import("zod/v4/core").$strict>> | undefined;
809
+ }, import("zod/v4/core").$strict> | import("zod").ZodUnion<readonly [import("zod").ZodObject<{
810
+ threads: import("zod").ZodArray<import("zod").ZodObject<{
811
+ organizationId: import("zod").ZodNullable<import("zod").ZodString>;
812
+ threadId: import("zod").ZodString;
813
+ firstTraceId: import("zod").ZodString;
814
+ lastTraceId: import("zod").ZodString;
815
+ resourceId: import("zod").ZodNullable<import("zod").ZodString>;
816
+ userId: import("zod").ZodNullable<import("zod").ZodString>;
817
+ entityType: import("zod").ZodNullable<import("zod").ZodString>;
818
+ entityId: import("zod").ZodNullable<import("zod").ZodString>;
819
+ entityName: import("zod").ZodNullable<import("zod").ZodString>;
820
+ entityVersionId: import("zod").ZodNullable<import("zod").ZodString>;
821
+ runId: import("zod").ZodNullable<import("zod").ZodString>;
822
+ sessionId: import("zod").ZodNullable<import("zod").ZodString>;
823
+ requestId: import("zod").ZodNullable<import("zod").ZodString>;
824
+ serviceName: import("zod").ZodNullable<import("zod").ZodString>;
825
+ experimentId: import("zod").ZodNullable<import("zod").ZodString>;
826
+ environment: import("zod").ZodNullable<import("zod").ZodString>;
827
+ executionSource: import("zod").ZodNullable<import("zod").ZodString>;
828
+ status: import("zod").ZodEnum<{
829
+ error: "error";
830
+ success: "success";
831
+ }>;
832
+ startedAt: import("zod").ZodString;
833
+ endedAt: import("zod").ZodString;
834
+ timeToFirstChunkMs: import("zod").ZodNullable<import("zod").ZodNumber>;
835
+ inputPreview: import("zod").ZodNullable<import("zod").ZodString>;
836
+ outputPreview: import("zod").ZodNullable<import("zod").ZodString>;
837
+ errorPreview: import("zod").ZodNullable<import("zod").ZodString>;
838
+ traceCount: import("zod").ZodNumber;
839
+ model: import("zod").ZodNullable<import("zod").ZodString>;
840
+ provider: import("zod").ZodNullable<import("zod").ZodString>;
841
+ }, import("zod/v4/core").$strict>>;
842
+ page: import("zod").ZodObject<{
843
+ next: import("zod").ZodNullable<import("zod").ZodString>;
844
+ }, import("zod/v4/core").$strict>;
845
+ }, import("zod/v4/core").$strict>, import("zod").ZodObject<{
846
+ threads: import("zod").ZodArray<import("zod").ZodObject<{
847
+ threadId: import("zod").ZodString;
848
+ }, import("zod/v4/core").$strict>>;
849
+ page: import("zod").ZodObject<{
850
+ next: import("zod").ZodNullable<import("zod").ZodString>;
851
+ }, import("zod/v4/core").$strict>;
852
+ }, import("zod/v4/core").$strict>]>> | undefined;
708
853
  } & {
709
854
  readonly _mastraSchemaRoute: true;
710
855
  }, Omit<import("@mastra/core/server").ApiRoute, "createHandler" | "handler" | "method" | "openapi" | "path"> & {
@@ -720,7 +865,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
720
865
  };
721
866
  where?: import("@mastra/core/storage").TraceQueryScalarPredicate | undefined;
722
867
  orderBy: {
723
- field: "endedAt" | "startedAt";
868
+ field: "endedAt" | "startedAt" | "timeToFirstChunkMs";
724
869
  direction: "asc" | "desc";
725
870
  }[];
726
871
  page: {
@@ -766,6 +911,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
766
911
  inputPreview: string | null;
767
912
  outputPreview: string | null;
768
913
  errorPreview: string | null;
914
+ timeToFirstChunkMs?: number | null | undefined;
769
915
  }[];
770
916
  page: {
771
917
  next: string | null;
@@ -791,6 +937,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
791
937
  field: import("zod").ZodEnum<{
792
938
  endedAt: "endedAt";
793
939
  startedAt: "startedAt";
940
+ timeToFirstChunkMs: "timeToFirstChunkMs";
794
941
  }>;
795
942
  direction: import("zod").ZodEnum<{
796
943
  asc: "asc";
@@ -843,6 +990,7 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
843
990
  inputPreview: import("zod").ZodNullable<import("zod").ZodString>;
844
991
  outputPreview: import("zod").ZodNullable<import("zod").ZodString>;
845
992
  errorPreview: import("zod").ZodNullable<import("zod").ZodString>;
993
+ timeToFirstChunkMs: import("zod").ZodOptional<import("zod").ZodNullable<import("zod").ZodNumber>>;
846
994
  }, import("zod/v4/core").$strict>>;
847
995
  page: import("zod").ZodObject<{
848
996
  next: import("zod").ZodNullable<import("zod").ZodString>;
@@ -3901,11 +4049,17 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
3901
4049
  traceQuery: boolean;
3902
4050
  traceQueryRootDuration: boolean;
3903
4051
  traceQueryContextIds: boolean;
4052
+ traceQueryTimeToFirstChunk: boolean;
4053
+ traceQueryRootSpanFields: boolean;
4054
+ traceQueryRootEntityId: boolean;
4055
+ traceQueryTimeToFirstChunkSort: boolean;
3904
4056
  traceQueryDiscovery: boolean;
3905
4057
  traceQueryTenantScope: boolean;
3906
4058
  traceAggregate: boolean;
3907
4059
  threadQuery: boolean;
4060
+ threadQueryRows: boolean;
3908
4061
  spanQuery: boolean;
4062
+ spanQueryContextFields: boolean;
3909
4063
  traceRetentionDays?: number | undefined;
3910
4064
  feedback: boolean;
3911
4065
  };
@@ -3937,11 +4091,17 @@ export declare const OBSERVABILITY_ROUTES: readonly [import(".").ServerRoute, Om
3937
4091
  traceQuery: import("zod").ZodBoolean;
3938
4092
  traceQueryRootDuration: import("zod").ZodBoolean;
3939
4093
  traceQueryContextIds: import("zod").ZodBoolean;
4094
+ traceQueryTimeToFirstChunk: import("zod").ZodBoolean;
4095
+ traceQueryRootSpanFields: import("zod").ZodBoolean;
4096
+ traceQueryRootEntityId: import("zod").ZodBoolean;
4097
+ traceQueryTimeToFirstChunkSort: import("zod").ZodBoolean;
3940
4098
  traceQueryDiscovery: import("zod").ZodBoolean;
3941
4099
  traceQueryTenantScope: import("zod").ZodBoolean;
3942
4100
  traceAggregate: import("zod").ZodBoolean;
3943
4101
  threadQuery: import("zod").ZodBoolean;
4102
+ threadQueryRows: import("zod").ZodDefault<import("zod").ZodBoolean>;
3944
4103
  spanQuery: import("zod").ZodBoolean;
4104
+ spanQueryContextFields: import("zod").ZodDefault<import("zod").ZodBoolean>;
3945
4105
  traceRetentionDays: import("zod").ZodOptional<import("zod").ZodNumber>;
3946
4106
  feedback: import("zod").ZodBoolean;
3947
4107
  }, import("zod/v4/core").$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/observability.ts"],"names":[],"mappings":"AAqDA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDvB,CAAC"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/observability.ts"],"names":[],"mappings":"AAqDA,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDvB,CAAC"}
@@ -48,11 +48,17 @@ export declare const SYSTEM_ROUTES: readonly [Omit<import("@mastra/core/server")
48
48
  traceQuery: boolean;
49
49
  traceQueryRootDuration: boolean;
50
50
  traceQueryContextIds: boolean;
51
+ traceQueryTimeToFirstChunk: boolean;
52
+ traceQueryRootSpanFields: boolean;
53
+ traceQueryRootEntityId: boolean;
54
+ traceQueryTimeToFirstChunkSort: boolean;
51
55
  traceQueryDiscovery: boolean;
52
56
  traceQueryTenantScope: boolean;
53
57
  traceAggregate: boolean;
54
58
  threadQuery: boolean;
59
+ threadQueryRows: boolean;
55
60
  spanQuery: boolean;
61
+ spanQueryContextFields: boolean;
56
62
  traceRetentionDays?: number | undefined;
57
63
  feedback: boolean;
58
64
  } | undefined;
@@ -118,11 +124,17 @@ export declare const SYSTEM_ROUTES: readonly [Omit<import("@mastra/core/server")
118
124
  traceQuery: import("zod").ZodBoolean;
119
125
  traceQueryRootDuration: import("zod").ZodBoolean;
120
126
  traceQueryContextIds: import("zod").ZodBoolean;
127
+ traceQueryTimeToFirstChunk: import("zod").ZodBoolean;
128
+ traceQueryRootSpanFields: import("zod").ZodBoolean;
129
+ traceQueryRootEntityId: import("zod").ZodBoolean;
130
+ traceQueryTimeToFirstChunkSort: import("zod").ZodBoolean;
121
131
  traceQueryDiscovery: import("zod").ZodBoolean;
122
132
  traceQueryTenantScope: import("zod").ZodBoolean;
123
133
  traceAggregate: import("zod").ZodBoolean;
124
134
  threadQuery: import("zod").ZodBoolean;
135
+ threadQueryRows: import("zod").ZodDefault<import("zod").ZodBoolean>;
125
136
  spanQuery: import("zod").ZodBoolean;
137
+ spanQueryContextFields: import("zod").ZodDefault<import("zod").ZodBoolean>;
126
138
  traceRetentionDays: import("zod").ZodOptional<import("zod").ZodNumber>;
127
139
  feedback: import("zod").ZodBoolean;
128
140
  }, import("zod/v4/core").$strip>>;
@@ -1 +1 @@
1
- {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/system.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6D,CAAC"}
1
+ {"version":3,"file":"system.d.ts","sourceRoot":"","sources":["../../../../src/server/server-adapter/routes/system.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6D,CAAC"}
@@ -30,11 +30,17 @@ const observabilityStorageCapabilitiesSchema = zod_v4.z.object({
30
30
  traceQuery: zod_v4.z.boolean().describe("Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead."),
31
31
  traceQueryRootDuration: zod_v4.z.boolean().describe("`durationMs` predicates in trace and thread queries"),
32
32
  traceQueryContextIds: zod_v4.z.boolean().describe("`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries"),
33
+ traceQueryTimeToFirstChunk: zod_v4.z.boolean().describe("`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries"),
34
+ traceQueryRootSpanFields: zod_v4.z.boolean().describe("Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`"),
35
+ traceQueryRootEntityId: zod_v4.z.boolean().describe("Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`"),
36
+ traceQueryTimeToFirstChunkSort: zod_v4.z.boolean().describe("Sorting trace and span queries by `timeToFirstChunkMs`"),
33
37
  traceQueryDiscovery: zod_v4.z.boolean().describe("Trace query field discovery (POST /observability/traces/query/fields and /values)"),
34
38
  traceQueryTenantScope: zod_v4.z.boolean().describe("Trusted tenant scoping of trace and thread queries"),
35
39
  traceAggregate: zod_v4.z.boolean().describe("Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable."),
36
40
  threadQuery: zod_v4.z.boolean().describe("Advanced thread queries (POST /observability/threads/query)"),
41
+ threadQueryRows: zod_v4.z.boolean().default(false).describe("Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable."),
37
42
  spanQuery: zod_v4.z.boolean().describe("Span queries (POST /observability/spans/query)"),
43
+ spanQueryContextFields: zod_v4.z.boolean().default(false).describe("Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable."),
38
44
  traceRetentionDays: zod_v4.z.number().int().positive().optional().describe("Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit."),
39
45
  feedback: zod_v4.z.boolean().describe("Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.")
40
46
  });
@@ -164,4 +170,4 @@ Object.defineProperty(exports, "systemPackagesResponseSchema", {
164
170
  }
165
171
  });
166
172
 
167
- //# sourceMappingURL=system-DY6UweSl.cjs.map
173
+ //# sourceMappingURL=system-BvpFMIJB.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-BvpFMIJB.cjs","names":["z"],"sources":["../src/server/schemas/system.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const mastraPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport const observabilityRuntimeStrategySchema = z.enum([\n 'realtime',\n 'batch-with-updates',\n 'insert-only',\n 'event-sourced',\n]);\n\nexport const observabilityDiscoveryCapabilitiesSchema = z.object({\n entityTypes: z.boolean().describe('GET /observability/discovery/entity-types'),\n entityNames: z.boolean().describe('GET /observability/discovery/entity-names'),\n serviceNames: z.boolean().describe('GET /observability/discovery/service-names'),\n environments: z.boolean().describe('GET /observability/discovery/environments'),\n tags: z.boolean().describe('GET /observability/discovery/tags'),\n metrics: z.boolean().describe('GET /observability/discovery/metric-names, metric-label-keys and metric-label-values'),\n});\n\n/**\n * Optional observability APIs the configured observability store can serve.\n * Omitted when no observability store is configured.\n */\nexport const observabilityStorageCapabilitiesSchema = z.object({\n metrics: z.boolean().describe('Metrics endpoints (/observability/metrics and /observability/metrics/*)'),\n logs: z.boolean().describe('Logs endpoint (GET /observability/logs)'),\n discovery: observabilityDiscoveryCapabilitiesSchema.describe(\n 'Filter discovery endpoints. Unsupported discovery routes return empty results.',\n ),\n deltaPolling: z.boolean().describe(\"Cursor-based `mode: 'delta'` polling on observability list endpoints\"),\n traceQuery: z\n .boolean()\n .describe(\n 'Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead.',\n ),\n traceQueryRootDuration: z.boolean().describe('`durationMs` predicates in trace and thread queries'),\n traceQueryContextIds: z\n .boolean()\n .describe('`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries'),\n traceQueryTimeToFirstChunk: z\n .boolean()\n .describe(\n '`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries',\n ),\n traceQueryRootSpanFields: z\n .boolean()\n .describe('Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryRootEntityId: z\n .boolean()\n .describe('Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryTimeToFirstChunkSort: z.boolean().describe('Sorting trace and span queries by `timeToFirstChunkMs`'),\n traceQueryDiscovery: z\n .boolean()\n .describe('Trace query field discovery (POST /observability/traces/query/fields and /values)'),\n traceQueryTenantScope: z.boolean().describe('Trusted tenant scoping of trace and thread queries'),\n traceAggregate: z\n .boolean()\n .describe(\n 'Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable.',\n ),\n threadQuery: z.boolean().describe('Advanced thread queries (POST /observability/threads/query)'),\n threadQueryRows: z\n .boolean()\n .default(false)\n .describe(\n 'Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable.',\n ),\n spanQuery: z.boolean().describe('Span queries (POST /observability/spans/query)'),\n spanQueryContextFields: z\n .boolean()\n .default(false)\n .describe(\n 'Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable.',\n ),\n traceRetentionDays: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit.',\n ),\n feedback: z\n .boolean()\n .describe(\n 'Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.',\n ),\n});\n\nexport const editorSourceSchema = z.enum(['code', 'db']);\n\nexport const editorSourceCapabilitiesSchema = z.object({\n source: editorSourceSchema,\n storage: z.enum(['database', 'filesystem', 'source-provider', 'unavailable']),\n provider: z\n .object({\n id: z.string(),\n displayName: z.string(),\n })\n .optional(),\n canSave: z.boolean(),\n canOpenChangeRequest: z.boolean(),\n unavailableReason: z.string().optional(),\n});\n\nexport const systemPackagesResponseSchema = z.object({\n packages: z.array(mastraPackageSchema),\n isDev: z.boolean(),\n cmsEnabled: z.boolean(),\n /** Whether the default LiveKit connection-details route is registered — not whether credentials or a worker exist. */\n liveKitConnectionRouteEnabled: z.boolean(),\n /** True when the default LiveKit trace recording review route is registered. */\n liveKitRecordingRouteEnabled: z.boolean().optional(),\n /**\n * The editor's configured source, when set. `'code'` swaps Studio's\n * Save/Publish UI for Download JSON + Open PR. `'db'` keeps the standard\n * Save/Publish flow. Omitted when the editor has no explicit source.\n */\n editorSource: editorSourceSchema.optional(),\n editorSourceCapabilities: editorSourceCapabilitiesSchema.optional(),\n observabilityEnabled: z.boolean(),\n storageType: z.string().optional(),\n observabilityStorageType: z.string().optional(),\n observabilityStorageCapabilities: observabilityStorageCapabilitiesSchema.optional(),\n observabilityRuntimeStrategy: observabilityRuntimeStrategySchema.optional(),\n});\n\nconst jsonSchemaRecordSchema = z.record(z.string(), z.unknown());\n\nexport const apiSchemaResponseShapeSchema = z.object({\n kind: z.enum(['array', 'record', 'object-property', 'single', 'unknown']),\n listProperty: z.string().optional(),\n paginationProperty: z.string().optional(),\n});\n\nexport const apiSchemaManifestRouteSchema = z.object({\n method: z.string(),\n path: z.string(),\n responseType: z.string(),\n pathParamSchema: jsonSchemaRecordSchema.optional(),\n queryParamSchema: jsonSchemaRecordSchema.optional(),\n bodySchema: jsonSchemaRecordSchema.optional(),\n responseSchema: jsonSchemaRecordSchema.optional(),\n responseShape: apiSchemaResponseShapeSchema,\n});\n\nexport const apiSchemaManifestResponseSchema = z.object({\n version: z.literal(1),\n routes: z.array(apiSchemaManifestRouteSchema),\n});\n\nexport type MastraPackage = z.infer<typeof mastraPackageSchema>;\nexport type SystemPackagesResponse = z.infer<typeof systemPackagesResponseSchema>;\n"],"mappings":"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"}
@@ -30,11 +30,17 @@ const observabilityStorageCapabilitiesSchema = z.object({
30
30
  traceQuery: z.boolean().describe("Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead."),
31
31
  traceQueryRootDuration: z.boolean().describe("`durationMs` predicates in trace and thread queries"),
32
32
  traceQueryContextIds: z.boolean().describe("`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries"),
33
+ traceQueryTimeToFirstChunk: z.boolean().describe("`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries"),
34
+ traceQueryRootSpanFields: z.boolean().describe("Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`"),
35
+ traceQueryRootEntityId: z.boolean().describe("Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`"),
36
+ traceQueryTimeToFirstChunkSort: z.boolean().describe("Sorting trace and span queries by `timeToFirstChunkMs`"),
33
37
  traceQueryDiscovery: z.boolean().describe("Trace query field discovery (POST /observability/traces/query/fields and /values)"),
34
38
  traceQueryTenantScope: z.boolean().describe("Trusted tenant scoping of trace and thread queries"),
35
39
  traceAggregate: z.boolean().describe("Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable."),
36
40
  threadQuery: z.boolean().describe("Advanced thread queries (POST /observability/threads/query)"),
41
+ threadQueryRows: z.boolean().default(false).describe("Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable."),
37
42
  spanQuery: z.boolean().describe("Span queries (POST /observability/spans/query)"),
43
+ spanQueryContextFields: z.boolean().default(false).describe("Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable."),
38
44
  traceRetentionDays: z.number().int().positive().optional().describe("Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit."),
39
45
  feedback: z.boolean().describe("Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.")
40
46
  });
@@ -105,4 +111,4 @@ const apiSchemaManifestResponseSchema = z.object({
105
111
  //#endregion
106
112
  export { editorSourceSchema as a, observabilityRuntimeStrategySchema as c, editorSourceCapabilitiesSchema as i, observabilityStorageCapabilitiesSchema as l, apiSchemaManifestRouteSchema as n, mastraPackageSchema as o, apiSchemaResponseShapeSchema as r, observabilityDiscoveryCapabilitiesSchema as s, apiSchemaManifestResponseSchema as t, systemPackagesResponseSchema as u };
107
113
 
108
- //# sourceMappingURL=system-MGpkVA20.js.map
114
+ //# sourceMappingURL=system-CpzPxRRq.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"system-CpzPxRRq.js","names":[],"sources":["../src/server/schemas/system.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const mastraPackageSchema = z.object({\n name: z.string(),\n version: z.string(),\n});\n\nexport const observabilityRuntimeStrategySchema = z.enum([\n 'realtime',\n 'batch-with-updates',\n 'insert-only',\n 'event-sourced',\n]);\n\nexport const observabilityDiscoveryCapabilitiesSchema = z.object({\n entityTypes: z.boolean().describe('GET /observability/discovery/entity-types'),\n entityNames: z.boolean().describe('GET /observability/discovery/entity-names'),\n serviceNames: z.boolean().describe('GET /observability/discovery/service-names'),\n environments: z.boolean().describe('GET /observability/discovery/environments'),\n tags: z.boolean().describe('GET /observability/discovery/tags'),\n metrics: z.boolean().describe('GET /observability/discovery/metric-names, metric-label-keys and metric-label-values'),\n});\n\n/**\n * Optional observability APIs the configured observability store can serve.\n * Omitted when no observability store is configured.\n */\nexport const observabilityStorageCapabilitiesSchema = z.object({\n metrics: z.boolean().describe('Metrics endpoints (/observability/metrics and /observability/metrics/*)'),\n logs: z.boolean().describe('Logs endpoint (GET /observability/logs)'),\n discovery: observabilityDiscoveryCapabilitiesSchema.describe(\n 'Filter discovery endpoints. Unsupported discovery routes return empty results.',\n ),\n deltaPolling: z.boolean().describe(\"Cursor-based `mode: 'delta'` polling on observability list endpoints\"),\n traceQuery: z\n .boolean()\n .describe(\n 'Advanced trace queries (POST /observability/traces/query). When false, list traces with GET /observability/traces/light instead.',\n ),\n traceQueryRootDuration: z.boolean().describe('`durationMs` predicates in trace and thread queries'),\n traceQueryContextIds: z\n .boolean()\n .describe('`runId`, `sessionId`, `userId` and `organizationId` predicates in trace and thread queries'),\n traceQueryTimeToFirstChunk: z\n .boolean()\n .describe(\n '`timeToFirstChunkMs` in trace and span query results, and predicates on it in trace, thread and span queries',\n ),\n traceQueryRootSpanFields: z\n .boolean()\n .describe('Root span `name` and `spanType` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryRootEntityId: z\n .boolean()\n .describe('Root span `entityId` in trace-scope predicates, aggregate `groupBy` and `countDistinct`'),\n traceQueryTimeToFirstChunkSort: z.boolean().describe('Sorting trace and span queries by `timeToFirstChunkMs`'),\n traceQueryDiscovery: z\n .boolean()\n .describe('Trace query field discovery (POST /observability/traces/query/fields and /values)'),\n traceQueryTenantScope: z.boolean().describe('Trusted tenant scoping of trace and thread queries'),\n traceAggregate: z\n .boolean()\n .describe(\n 'Trace aggregation (POST /observability/traces/aggregate). Unlike `traceQuery`, clients should treat a missing value as unavailable.',\n ),\n threadQuery: z.boolean().describe('Advanced thread queries (POST /observability/threads/query)'),\n threadQueryRows: z\n .boolean()\n .default(false)\n .describe(\n 'Full-history thread rows with activity windows, filters and sorting. Treat a missing value as unavailable.',\n ),\n spanQuery: z.boolean().describe('Span queries (POST /observability/spans/query)'),\n spanQueryContextFields: z\n .boolean()\n .default(false)\n .describe(\n 'Additional identity, context and parent/root entity predicates in span queries. Treat a missing value as unavailable.',\n ),\n traceRetentionDays: z\n .number()\n .int()\n .positive()\n .optional()\n .describe(\n 'Days of traces the store keeps. Older traces are gone, so clients can stop users from picking dates before them. Omitted when the store does not report a limit.',\n ),\n feedback: z\n .boolean()\n .describe(\n 'Feedback endpoints (/observability/feedback and /observability/feedback/*). Unsupported feedback routes return 501.',\n ),\n});\n\nexport const editorSourceSchema = z.enum(['code', 'db']);\n\nexport const editorSourceCapabilitiesSchema = z.object({\n source: editorSourceSchema,\n storage: z.enum(['database', 'filesystem', 'source-provider', 'unavailable']),\n provider: z\n .object({\n id: z.string(),\n displayName: z.string(),\n })\n .optional(),\n canSave: z.boolean(),\n canOpenChangeRequest: z.boolean(),\n unavailableReason: z.string().optional(),\n});\n\nexport const systemPackagesResponseSchema = z.object({\n packages: z.array(mastraPackageSchema),\n isDev: z.boolean(),\n cmsEnabled: z.boolean(),\n /** Whether the default LiveKit connection-details route is registered — not whether credentials or a worker exist. */\n liveKitConnectionRouteEnabled: z.boolean(),\n /** True when the default LiveKit trace recording review route is registered. */\n liveKitRecordingRouteEnabled: z.boolean().optional(),\n /**\n * The editor's configured source, when set. `'code'` swaps Studio's\n * Save/Publish UI for Download JSON + Open PR. `'db'` keeps the standard\n * Save/Publish flow. Omitted when the editor has no explicit source.\n */\n editorSource: editorSourceSchema.optional(),\n editorSourceCapabilities: editorSourceCapabilitiesSchema.optional(),\n observabilityEnabled: z.boolean(),\n storageType: z.string().optional(),\n observabilityStorageType: z.string().optional(),\n observabilityStorageCapabilities: observabilityStorageCapabilitiesSchema.optional(),\n observabilityRuntimeStrategy: observabilityRuntimeStrategySchema.optional(),\n});\n\nconst jsonSchemaRecordSchema = z.record(z.string(), z.unknown());\n\nexport const apiSchemaResponseShapeSchema = z.object({\n kind: z.enum(['array', 'record', 'object-property', 'single', 'unknown']),\n listProperty: z.string().optional(),\n paginationProperty: z.string().optional(),\n});\n\nexport const apiSchemaManifestRouteSchema = z.object({\n method: z.string(),\n path: z.string(),\n responseType: z.string(),\n pathParamSchema: jsonSchemaRecordSchema.optional(),\n queryParamSchema: jsonSchemaRecordSchema.optional(),\n bodySchema: jsonSchemaRecordSchema.optional(),\n responseSchema: jsonSchemaRecordSchema.optional(),\n responseShape: apiSchemaResponseShapeSchema,\n});\n\nexport const apiSchemaManifestResponseSchema = z.object({\n version: z.literal(1),\n routes: z.array(apiSchemaManifestRouteSchema),\n});\n\nexport type MastraPackage = z.infer<typeof mastraPackageSchema>;\nexport type SystemPackagesResponse = z.infer<typeof systemPackagesResponseSchema>;\n"],"mappings":"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"}
@@ -162,6 +162,23 @@ function getEffectiveThreadId(requestContext, clientThreadId) {
162
162
  return requestContext?.get("mastra__threadId") || clientThreadId;
163
163
  }
164
164
  /**
165
+ * Applies the effective threadId to a client memory thread option. Object
166
+ * threads keep their other fields (metadata, title, ...) so they reach thread
167
+ * creation; a client-supplied resourceId is dropped because the server decides
168
+ * the resource.
169
+ */
170
+ function applyEffectiveThreadId(thread, effectiveThreadId) {
171
+ if (!effectiveThreadId) return thread;
172
+ if (thread && typeof thread === "object") {
173
+ const { resourceId: _resourceId, ...fields } = thread;
174
+ return {
175
+ ...fields,
176
+ id: effectiveThreadId
177
+ };
178
+ }
179
+ return effectiveThreadId;
180
+ }
181
+ /**
165
182
  * Validates that a thread belongs to the specified resourceId.
166
183
  * Throws 403 if the thread exists but belongs to a different resource.
167
184
  * Threads with no resourceId are accessible to all (shared threads).
@@ -211,6 +228,6 @@ async function validateRunOwnership(run, effectiveResourceId, mastra) {
211
228
  if (!server?.fga) throw new HTTPException(403, { message: "Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access." });
212
229
  }
213
230
  //#endregion
214
- export { getPublicWorkflowById as a, parsePerPage as c, stripClientCredentialHeaders as d, validateBody as f, MastraFGAPermissions as h, getEffectiveThreadId as i, requireEffectiveResourceId as l, validateThreadOwnership as m, getContextResourceId as n, mergeBodyRequestContext as o, validateRunOwnership as p, getEffectiveResourceId as r, parseFilters as s, enforceThreadAccess as t, sanitizeBody as u };
231
+ export { getEffectiveThreadId as a, parseFilters as c, sanitizeBody as d, stripClientCredentialHeaders as f, MastraFGAPermissions as g, validateThreadOwnership as h, getEffectiveResourceId as i, parsePerPage as l, validateRunOwnership as m, enforceThreadAccess as n, getPublicWorkflowById as o, validateBody as p, getContextResourceId as r, mergeBodyRequestContext as s, applyEffectiveThreadId as t, requireEffectiveResourceId as u };
215
232
 
216
- //# sourceMappingURL=utils-D5DHrO3K.js.map
233
+ //# sourceMappingURL=utils-BBJlS81s.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-D5DHrO3K.js","names":[],"sources":["../src/server/fga-permissions.ts","../src/server/handlers/utils.ts"],"sourcesContent":["/**\n * Safe re-export of `MastraFGAPermissions` from `@mastra/core/auth/ee`.\n *\n * Why this shim exists:\n * `MastraFGAPermissions` was introduced in `@mastra/core@1.32.0`. Earlier\n * versions of `@mastra/core` ship `@mastra/core/auth/ee` but do not export\n * this constant. A direct named import (`import { MastraFGAPermissions }\n * from '@mastra/core/auth/ee'`) fails at ESM link time when this version\n * of `@mastra/server` is paired with `@mastra/core < 1.32.0`, taking the\n * entire user bundle down before any code runs.\n *\n * A namespace import tolerates missing names — `ns.MissingExport` is just\n * `undefined`, no link-time error. We then expose the permission map.\n *\n * Fallback values:\n * If the consuming `@mastra/core` does not export `MastraFGAPermissions`,\n * we substitute a hardcoded map of the canonical permission strings used\n * by routes in `@mastra/server`. This preserves the explicit RBAC\n * permission overrides those routes already had as string literals in\n * `@mastra/server@1.31.0` (e.g. `requiresPermission: \"agents:execute\"`\n * on `/v1/responses`). Without this fallback, `requiresPermission` would\n * be `undefined` on old core and the auth layer would derive the wrong\n * permission from the route path (e.g. `v1:write` instead of\n * `agents:execute`), breaking RBAC users who upgrade `@mastra/server`\n * but stay on `@mastra/core@1.31.0`.\n *\n * Once the consuming `@mastra/core` is on `1.32.0+` the values are real\n * and behaviour is identical to a direct named import.\n */\n\nimport * as authEE from '@mastra/core/auth/ee';\n\n// Canonical strings for the FGA permission keys actually referenced by\n// `@mastra/server` source. Mirrors `MastraFGAPermissions` in\n// `@mastra/core@1.32.0+` for these specific keys, and matches the string\n// literals previously hardcoded on the same routes in `@mastra/server@1.31.0`.\nconst FALLBACK_PERMISSIONS = {\n AGENTS_CREATE: 'agents:create',\n AGENTS_DELETE: 'agents:delete',\n AGENTS_EXECUTE: 'agents:execute',\n AGENTS_READ: 'agents:read',\n MEMORY_DELETE: 'memory:delete',\n MEMORY_READ: 'memory:read',\n MEMORY_WRITE: 'memory:write',\n TOOLS_EXECUTE: 'tools:execute',\n TOOLS_READ: 'tools:read',\n STORED_WORKFLOWS_READ: 'stored-workflows:read',\n STORED_WORKFLOWS_WRITE: 'stored-workflows:write',\n WORKFLOWS_EXECUTE: 'workflows:execute',\n WORKFLOWS_READ: 'workflows:read',\n} as const;\n\nconst realPermissions = (authEE as any).MastraFGAPermissions;\n\n// Typed as `any` on purpose: consumers of `@mastra/server` may run their\n// typecheck against a `@mastra/core` that doesn't export `MastraFGAPermissions`\n// (anything < 1.32.0). Pinning to the real type would push that name into the\n// emitted `.d.ts` and break downstream typecheck. `any` lets the property\n// accesses (`MastraFGAPermissions.AGENTS_READ`) flow through cleanly on every\n// supported core.\nexport const MastraFGAPermissions: any =\n realPermissions && Object.keys(realPermissions).length > 0 ? realPermissions : FALLBACK_PERMISSIONS;\n","import type { Mastra } from '@mastra/core';\nimport type { MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\nimport { MastraMemory } from '@mastra/core/memory';\nimport type { Workflow } from '@mastra/core/workflows';\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, isReservedRequestContextKey } from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Resolves a workflow by id or registration key from the set Mastra exposes\n * publicly. Unlike `mastra.getWorkflowById`, this excludes hidden internal\n * workflows (e.g. a durable agent's backing loop), which must never be\n * runnable through HTTP routes.\n */\nexport function getPublicWorkflowById(mastra: Mastra, workflowId: string): Workflow | undefined {\n const workflows = mastra.listWorkflows();\n return (\n Object.values(workflows).find(workflow => workflow.id === workflowId) ??\n (Object.hasOwn(workflows, workflowId) ? workflows[workflowId] : undefined)\n );\n}\n\n// Validation helper\nexport function validateBody(body: Record<string, unknown>) {\n const errorResponse = Object.entries(body).reduce<Record<string, string>>((acc, [key, value]) => {\n if (!value) {\n acc[key] = `Argument \"${key}\" is required`;\n }\n return acc;\n }, {});\n\n if (Object.keys(errorResponse).length > 0) {\n throw new HTTPException(400, { message: Object.values(errorResponse)[0] });\n }\n}\n\n/**\n * sanitizes the body by removing disallowed keys.\n * @param body body to sanitize\n * @param disallowedKeys keys to remove from the body\n */\nexport function sanitizeBody(body: Record<string, unknown>, disallowedKeys: string[]) {\n for (const key of disallowedKeys) {\n if (key in body) {\n delete body[key];\n }\n }\n}\n\nconst CREDENTIAL_HEADER_NAMES = new Set([\n 'authorization',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'x-goog-api-key',\n 'cookie',\n]);\n\n/**\n * Removes credential-bearing headers from client-supplied `modelSettings.headers`\n * so a caller's own auth (e.g. the app's bearer token) can never override the\n * provider credential configured on the server. Non-credential headers are kept.\n */\nexport function stripClientCredentialHeaders(body: Record<string, unknown>) {\n const modelSettings = body.modelSettings;\n if (!modelSettings || typeof modelSettings !== 'object') return;\n const headers = (modelSettings as { headers?: unknown }).headers;\n if (!headers || typeof headers !== 'object') return;\n\n const kept = Object.fromEntries(\n Object.entries(headers).filter(([name]) => !CREDENTIAL_HEADER_NAMES.has(name.toLowerCase())),\n );\n body.modelSettings = { ...modelSettings, headers: kept };\n}\n\nexport function parsePerPage(\n value: string | undefined,\n defaultValue: number = 100,\n max: number = 1000,\n): number | false {\n const normalized = (value || '').trim().toLowerCase();\n // Handle explicit false to bypass pagination\n if (normalized === 'false') {\n return false;\n }\n const parsed = parseInt(value || String(defaultValue), 10);\n if (isNaN(parsed)) return defaultValue;\n return Math.min(max, Math.max(1, parsed));\n}\n\n/**\n * Parses filter query parameters into a key-value object.\n */\nexport function parseFilters(filters: string | string[] | undefined): Record<string, string> | undefined {\n if (!filters) return undefined;\n\n return Object.fromEntries(\n (Array.isArray(filters) ? filters : [filters]).map((attr: string) => {\n const [key, ...valueParts] = attr.split(':');\n const value = valueParts.join(':'); // ✅ Handles colons in values\n return [key, value];\n }),\n );\n}\n\n/**\n * Merges a body-supplied requestContext into the trusted server RequestContext.\n * The server context is authoritative: reserved keys are skipped and body values\n * only fill keys the server context has not already set.\n */\nexport function mergeBodyRequestContext(serverRequestContext: RequestContext, bodyRequestContext: unknown): void {\n if (!bodyRequestContext || typeof bodyRequestContext !== 'object') {\n return;\n }\n\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n}\n\n// ============================================================================\n// Authorization Utilities\n// ============================================================================\n\n/**\n * Gets the effective resourceId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveResourceId(\n requestContext: RequestContext | undefined,\n clientResourceId: string | undefined,\n): string | undefined {\n const contextResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n return contextResourceId || clientResourceId;\n}\n\n/**\n * Returns the resource id resolved from the request context alone (set via\n * `mapUserToResourceId` or the `x-resource-id` header), ignoring any\n * client-provided value. Its presence indicates a resource-scoped caller;\n * its absence indicates a privileged/service context.\n */\nexport function getContextResourceId(requestContext: RequestContext | undefined): string | undefined {\n return requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n}\n\n/**\n * Ensures a memory request has a resolvable resource ID. The body's\n * `memory.resource` is optional so authenticated setups can rely on the\n * server-derived resource ID (MASTRA_RESOURCE_ID_KEY set via mapUserToResourceId).\n * When neither the body nor the request context provides one, reject with a\n * clear 400 instead of failing deep inside agent execution.\n */\nexport function requireEffectiveResourceId(\n effectiveResourceId: string | undefined,\n): asserts effectiveResourceId is string {\n if (!effectiveResourceId) {\n throw new HTTPException(400, {\n message:\n 'A resource ID is required when using memory. Provide memory.resource in the request body, or configure server auth with mapUserToResourceId to derive it from the authenticated user.',\n });\n }\n}\n\n/**\n * Gets the effective threadId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveThreadId(\n requestContext: RequestContext | undefined,\n clientThreadId: string | undefined,\n): string | undefined {\n const contextThreadId = requestContext?.get(MASTRA_THREAD_ID_KEY) as string | undefined;\n return contextThreadId || clientThreadId;\n}\n\n/**\n * Validates that a thread belongs to the specified resourceId.\n * Throws 403 if the thread exists but belongs to a different resource.\n * Threads with no resourceId are accessible to all (shared threads).\n */\nexport async function validateThreadOwnership(\n thread: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n): Promise<void> {\n if (thread && effectiveResourceId && thread.resourceId && thread.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: thread belongs to a different resource' });\n }\n}\n\n/**\n * Validates both coarse resource ownership and fine-grained thread access.\n * FGA enforcement is a no-op when no FGA provider is configured.\n */\nexport async function enforceThreadAccess({\n mastra,\n requestContext,\n threadId,\n thread,\n effectiveResourceId,\n permission = MastraFGAPermissions.MEMORY_READ,\n}: {\n mastra: any;\n requestContext?: RequestContext;\n threadId: string;\n thread?: { resourceId?: string | null } | null;\n effectiveResourceId?: string;\n permission?: MastraFGAPermissionInput;\n}): Promise<void> {\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const fgaProvider = mastra?.getServer?.()?.fga;\n if (!fgaProvider) {\n return;\n }\n\n const user = requestContext?.get('user');\n if (!user || typeof user !== 'object') {\n throw new HTTPException(403, { message: 'FGA authorization denied: authenticated user is required' });\n }\n\n await MastraMemory.checkThreadFGA({\n mastra,\n user: user as { id: string; [key: string]: unknown },\n threadId,\n resourceId: thread?.resourceId ?? effectiveResourceId,\n requestContext,\n permission,\n });\n}\n\n/**\n * Validates that a caller may act on a workflow run.\n *\n * Without `server.auth.mapUserToResourceId` there is no tenancy model, and only a mismatch\n * between two present resource ids is denied. With a mapper, a resource-scoped caller may only\n * act on runs it owns (an owner-less run is not its run). An unscoped caller is a\n * privileged/service context (see getContextResourceId), but that privilege is only granted when\n * an FGA provider authorizes the route; otherwise it is refused rather than granted implicitly,\n * as on the thread-transfer route.\n */\nexport async function validateRunOwnership(\n run: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n mastra?: { getServer?: () => { auth?: unknown; fga?: unknown } | undefined },\n): Promise<void> {\n if (!run) return;\n const server = mastra?.getServer?.();\n const tenancy =\n typeof (server?.auth as { mapUserToResourceId?: unknown } | undefined)?.mapUserToResourceId === 'function';\n if (!tenancy) {\n if (effectiveResourceId && run.resourceId && run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (effectiveResourceId) {\n if (run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (!server?.fga) {\n throw new HTTPException(403, {\n message:\n 'Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access.',\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils-BBJlS81s.js","names":[],"sources":["../src/server/fga-permissions.ts","../src/server/handlers/utils.ts"],"sourcesContent":["/**\n * Safe re-export of `MastraFGAPermissions` from `@mastra/core/auth/ee`.\n *\n * Why this shim exists:\n * `MastraFGAPermissions` was introduced in `@mastra/core@1.32.0`. Earlier\n * versions of `@mastra/core` ship `@mastra/core/auth/ee` but do not export\n * this constant. A direct named import (`import { MastraFGAPermissions }\n * from '@mastra/core/auth/ee'`) fails at ESM link time when this version\n * of `@mastra/server` is paired with `@mastra/core < 1.32.0`, taking the\n * entire user bundle down before any code runs.\n *\n * A namespace import tolerates missing names — `ns.MissingExport` is just\n * `undefined`, no link-time error. We then expose the permission map.\n *\n * Fallback values:\n * If the consuming `@mastra/core` does not export `MastraFGAPermissions`,\n * we substitute a hardcoded map of the canonical permission strings used\n * by routes in `@mastra/server`. This preserves the explicit RBAC\n * permission overrides those routes already had as string literals in\n * `@mastra/server@1.31.0` (e.g. `requiresPermission: \"agents:execute\"`\n * on `/v1/responses`). Without this fallback, `requiresPermission` would\n * be `undefined` on old core and the auth layer would derive the wrong\n * permission from the route path (e.g. `v1:write` instead of\n * `agents:execute`), breaking RBAC users who upgrade `@mastra/server`\n * but stay on `@mastra/core@1.31.0`.\n *\n * Once the consuming `@mastra/core` is on `1.32.0+` the values are real\n * and behaviour is identical to a direct named import.\n */\n\nimport * as authEE from '@mastra/core/auth/ee';\n\n// Canonical strings for the FGA permission keys actually referenced by\n// `@mastra/server` source. Mirrors `MastraFGAPermissions` in\n// `@mastra/core@1.32.0+` for these specific keys, and matches the string\n// literals previously hardcoded on the same routes in `@mastra/server@1.31.0`.\nconst FALLBACK_PERMISSIONS = {\n AGENTS_CREATE: 'agents:create',\n AGENTS_DELETE: 'agents:delete',\n AGENTS_EXECUTE: 'agents:execute',\n AGENTS_READ: 'agents:read',\n MEMORY_DELETE: 'memory:delete',\n MEMORY_READ: 'memory:read',\n MEMORY_WRITE: 'memory:write',\n TOOLS_EXECUTE: 'tools:execute',\n TOOLS_READ: 'tools:read',\n STORED_WORKFLOWS_READ: 'stored-workflows:read',\n STORED_WORKFLOWS_WRITE: 'stored-workflows:write',\n WORKFLOWS_EXECUTE: 'workflows:execute',\n WORKFLOWS_READ: 'workflows:read',\n} as const;\n\nconst realPermissions = (authEE as any).MastraFGAPermissions;\n\n// Typed as `any` on purpose: consumers of `@mastra/server` may run their\n// typecheck against a `@mastra/core` that doesn't export `MastraFGAPermissions`\n// (anything < 1.32.0). Pinning to the real type would push that name into the\n// emitted `.d.ts` and break downstream typecheck. `any` lets the property\n// accesses (`MastraFGAPermissions.AGENTS_READ`) flow through cleanly on every\n// supported core.\nexport const MastraFGAPermissions: any =\n realPermissions && Object.keys(realPermissions).length > 0 ? realPermissions : FALLBACK_PERMISSIONS;\n","import type { Mastra } from '@mastra/core';\nimport type { MastraFGAPermissionInput } from '@mastra/core/auth/ee';\nimport type { RequestContext } from '@mastra/core/di';\nimport { MastraMemory } from '@mastra/core/memory';\nimport type { Workflow } from '@mastra/core/workflows';\nimport { MASTRA_RESOURCE_ID_KEY, MASTRA_THREAD_ID_KEY, isReservedRequestContextKey } from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\n\n/**\n * Resolves a workflow by id or registration key from the set Mastra exposes\n * publicly. Unlike `mastra.getWorkflowById`, this excludes hidden internal\n * workflows (e.g. a durable agent's backing loop), which must never be\n * runnable through HTTP routes.\n */\nexport function getPublicWorkflowById(mastra: Mastra, workflowId: string): Workflow | undefined {\n const workflows = mastra.listWorkflows();\n return (\n Object.values(workflows).find(workflow => workflow.id === workflowId) ??\n (Object.hasOwn(workflows, workflowId) ? workflows[workflowId] : undefined)\n );\n}\n\n// Validation helper\nexport function validateBody(body: Record<string, unknown>) {\n const errorResponse = Object.entries(body).reduce<Record<string, string>>((acc, [key, value]) => {\n if (!value) {\n acc[key] = `Argument \"${key}\" is required`;\n }\n return acc;\n }, {});\n\n if (Object.keys(errorResponse).length > 0) {\n throw new HTTPException(400, { message: Object.values(errorResponse)[0] });\n }\n}\n\n/**\n * sanitizes the body by removing disallowed keys.\n * @param body body to sanitize\n * @param disallowedKeys keys to remove from the body\n */\nexport function sanitizeBody(body: Record<string, unknown>, disallowedKeys: string[]) {\n for (const key of disallowedKeys) {\n if (key in body) {\n delete body[key];\n }\n }\n}\n\nconst CREDENTIAL_HEADER_NAMES = new Set([\n 'authorization',\n 'proxy-authorization',\n 'x-api-key',\n 'api-key',\n 'x-goog-api-key',\n 'cookie',\n]);\n\n/**\n * Removes credential-bearing headers from client-supplied `modelSettings.headers`\n * so a caller's own auth (e.g. the app's bearer token) can never override the\n * provider credential configured on the server. Non-credential headers are kept.\n */\nexport function stripClientCredentialHeaders(body: Record<string, unknown>) {\n const modelSettings = body.modelSettings;\n if (!modelSettings || typeof modelSettings !== 'object') return;\n const headers = (modelSettings as { headers?: unknown }).headers;\n if (!headers || typeof headers !== 'object') return;\n\n const kept = Object.fromEntries(\n Object.entries(headers).filter(([name]) => !CREDENTIAL_HEADER_NAMES.has(name.toLowerCase())),\n );\n body.modelSettings = { ...modelSettings, headers: kept };\n}\n\nexport function parsePerPage(\n value: string | undefined,\n defaultValue: number = 100,\n max: number = 1000,\n): number | false {\n const normalized = (value || '').trim().toLowerCase();\n // Handle explicit false to bypass pagination\n if (normalized === 'false') {\n return false;\n }\n const parsed = parseInt(value || String(defaultValue), 10);\n if (isNaN(parsed)) return defaultValue;\n return Math.min(max, Math.max(1, parsed));\n}\n\n/**\n * Parses filter query parameters into a key-value object.\n */\nexport function parseFilters(filters: string | string[] | undefined): Record<string, string> | undefined {\n if (!filters) return undefined;\n\n return Object.fromEntries(\n (Array.isArray(filters) ? filters : [filters]).map((attr: string) => {\n const [key, ...valueParts] = attr.split(':');\n const value = valueParts.join(':'); // ✅ Handles colons in values\n return [key, value];\n }),\n );\n}\n\n/**\n * Merges a body-supplied requestContext into the trusted server RequestContext.\n * The server context is authoritative: reserved keys are skipped and body values\n * only fill keys the server context has not already set.\n */\nexport function mergeBodyRequestContext(serverRequestContext: RequestContext, bodyRequestContext: unknown): void {\n if (!bodyRequestContext || typeof bodyRequestContext !== 'object') {\n return;\n }\n\n for (const [key, value] of Object.entries(bodyRequestContext)) {\n if (isReservedRequestContextKey(key)) continue;\n if (serverRequestContext.get(key) === undefined) {\n serverRequestContext.set(key, value);\n }\n }\n}\n\n// ============================================================================\n// Authorization Utilities\n// ============================================================================\n\n/**\n * Gets the effective resourceId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveResourceId(\n requestContext: RequestContext | undefined,\n clientResourceId: string | undefined,\n): string | undefined {\n const contextResourceId = requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n return contextResourceId || clientResourceId;\n}\n\n/**\n * Returns the resource id resolved from the request context alone (set via\n * `mapUserToResourceId` or the `x-resource-id` header), ignoring any\n * client-provided value. Its presence indicates a resource-scoped caller;\n * its absence indicates a privileged/service context.\n */\nexport function getContextResourceId(requestContext: RequestContext | undefined): string | undefined {\n return requestContext?.get(MASTRA_RESOURCE_ID_KEY) as string | undefined;\n}\n\n/**\n * Ensures a memory request has a resolvable resource ID. The body's\n * `memory.resource` is optional so authenticated setups can rely on the\n * server-derived resource ID (MASTRA_RESOURCE_ID_KEY set via mapUserToResourceId).\n * When neither the body nor the request context provides one, reject with a\n * clear 400 instead of failing deep inside agent execution.\n */\nexport function requireEffectiveResourceId(\n effectiveResourceId: string | undefined,\n): asserts effectiveResourceId is string {\n if (!effectiveResourceId) {\n throw new HTTPException(400, {\n message:\n 'A resource ID is required when using memory. Provide memory.resource in the request body, or configure server auth with mapUserToResourceId to derive it from the authenticated user.',\n });\n }\n}\n\n/**\n * Gets the effective threadId, preferring the reserved key from requestContext\n * over client-provided values for security.\n */\nexport function getEffectiveThreadId(\n requestContext: RequestContext | undefined,\n clientThreadId: string | undefined,\n): string | undefined {\n const contextThreadId = requestContext?.get(MASTRA_THREAD_ID_KEY) as string | undefined;\n return contextThreadId || clientThreadId;\n}\n\n/**\n * Applies the effective threadId to a client memory thread option. Object\n * threads keep their other fields (metadata, title, ...) so they reach thread\n * creation; a client-supplied resourceId is dropped because the server decides\n * the resource.\n */\nexport function applyEffectiveThreadId<T extends string | { id: string } | undefined>(\n thread: T,\n effectiveThreadId: string | undefined,\n): T | string {\n if (!effectiveThreadId) return thread;\n if (thread && typeof thread === 'object') {\n const { resourceId: _resourceId, ...fields } = thread as { id: string; resourceId?: unknown };\n return { ...fields, id: effectiveThreadId } as T;\n }\n return effectiveThreadId;\n}\n\n/**\n * Validates that a thread belongs to the specified resourceId.\n * Throws 403 if the thread exists but belongs to a different resource.\n * Threads with no resourceId are accessible to all (shared threads).\n */\nexport async function validateThreadOwnership(\n thread: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n): Promise<void> {\n if (thread && effectiveResourceId && thread.resourceId && thread.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: thread belongs to a different resource' });\n }\n}\n\n/**\n * Validates both coarse resource ownership and fine-grained thread access.\n * FGA enforcement is a no-op when no FGA provider is configured.\n */\nexport async function enforceThreadAccess({\n mastra,\n requestContext,\n threadId,\n thread,\n effectiveResourceId,\n permission = MastraFGAPermissions.MEMORY_READ,\n}: {\n mastra: any;\n requestContext?: RequestContext;\n threadId: string;\n thread?: { resourceId?: string | null } | null;\n effectiveResourceId?: string;\n permission?: MastraFGAPermissionInput;\n}): Promise<void> {\n await validateThreadOwnership(thread, effectiveResourceId);\n\n const fgaProvider = mastra?.getServer?.()?.fga;\n if (!fgaProvider) {\n return;\n }\n\n const user = requestContext?.get('user');\n if (!user || typeof user !== 'object') {\n throw new HTTPException(403, { message: 'FGA authorization denied: authenticated user is required' });\n }\n\n await MastraMemory.checkThreadFGA({\n mastra,\n user: user as { id: string; [key: string]: unknown },\n threadId,\n resourceId: thread?.resourceId ?? effectiveResourceId,\n requestContext,\n permission,\n });\n}\n\n/**\n * Validates that a caller may act on a workflow run.\n *\n * Without `server.auth.mapUserToResourceId` there is no tenancy model, and only a mismatch\n * between two present resource ids is denied. With a mapper, a resource-scoped caller may only\n * act on runs it owns (an owner-less run is not its run). An unscoped caller is a\n * privileged/service context (see getContextResourceId), but that privilege is only granted when\n * an FGA provider authorizes the route; otherwise it is refused rather than granted implicitly,\n * as on the thread-transfer route.\n */\nexport async function validateRunOwnership(\n run: { resourceId?: string | null } | null | undefined,\n effectiveResourceId: string | undefined,\n mastra?: { getServer?: () => { auth?: unknown; fga?: unknown } | undefined },\n): Promise<void> {\n if (!run) return;\n const server = mastra?.getServer?.();\n const tenancy =\n typeof (server?.auth as { mapUserToResourceId?: unknown } | undefined)?.mapUserToResourceId === 'function';\n if (!tenancy) {\n if (effectiveResourceId && run.resourceId && run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (effectiveResourceId) {\n if (run.resourceId !== effectiveResourceId) {\n throw new HTTPException(403, { message: 'Access denied: workflow run belongs to a different resource' });\n }\n return;\n }\n if (!server?.fga) {\n throw new HTTPException(403, {\n message:\n 'Access denied: unscoped workflow run access requires explicit authorization. Configure an FGA provider to authorize privileged run access.',\n });\n }\n}\n"],"mappings":"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"}