@mastra/server 1.82.0-alpha.1 → 1.82.0-alpha.3

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 (382) hide show
  1. package/dist/_types/{@internal_voice/dist/_types/@internal_core → @internal_voice@0.0.43/dist/_types/@internal_core@0.1.4}/dist/routes/index.d.ts +1 -1
  2. package/dist/_types/{@internal_voice → @internal_voice@0.0.43}/dist/routes/index.d.ts +15 -15
  3. package/dist/_types/{@mastra_schema-compat/dist/_types/@internal_ai-sdk-v4 → @mastra_schema-compat@1.3.17/dist/_types/@internal_ai-sdk-v4@0.0.94}/dist/index.d.ts +1 -1
  4. package/dist/_types/{@mastra_schema-compat/dist/_types/@internal_ai-sdk-v5 → @mastra_schema-compat@1.3.17/dist/_types/@internal_ai-sdk-v5@0.0.94}/dist/index.d.ts +2 -2
  5. package/dist/_types/{@mastra_schema-compat/dist/_types/@internal_ai-v6 → @mastra_schema-compat@1.3.17/dist/_types/@internal_ai-v6@0.0.94}/dist/index.d.ts +4 -4
  6. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/anthropic.d.ts +2 -2
  7. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/deepseek.d.ts +2 -2
  8. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/google.d.ts +1 -1
  9. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/meta.d.ts +2 -2
  10. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/openai.d.ts +1 -1
  11. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/schema.types.d.ts +4 -4
  12. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/standard-schema/standard-schema.d.ts +2 -2
  13. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/standard-schema/standard-schema.types.d.ts +1 -1
  14. package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/zod-to-json.d.ts +1 -1
  15. package/dist/{a2a-DULF2hBd.js → a2a-CoiG3TAj.js} +3 -3
  16. package/dist/{a2a-DULF2hBd.js.map → a2a-CoiG3TAj.js.map} +1 -1
  17. package/dist/{a2a-CIq9dtbC.cjs → a2a-DvqRdny6.cjs} +3 -3
  18. package/dist/{a2a-CIq9dtbC.cjs.map → a2a-DvqRdny6.cjs.map} +1 -1
  19. package/dist/{agent-builder-Cq-jo2FP.js → agent-builder-C_L1i2eE.js} +44 -41
  20. package/dist/agent-builder-C_L1i2eE.js.map +1 -0
  21. package/dist/{agent-builder-C1SGph1p.cjs → agent-builder-D0Up9Fw1.cjs} +44 -41
  22. package/dist/agent-builder-D0Up9Fw1.cjs.map +1 -0
  23. package/dist/{agent-versions-DX2rd6j_.cjs → agent-versions-BccL4mEW.cjs} +2 -2
  24. package/dist/{agent-versions-DX2rd6j_.cjs.map → agent-versions-BccL4mEW.cjs.map} +1 -1
  25. package/dist/{agent-versions-TUl6ky5W.js → agent-versions-DFJyxWY1.js} +2 -2
  26. package/dist/{agent-versions-TUl6ky5W.js.map → agent-versions-DFJyxWY1.js.map} +1 -1
  27. package/dist/{agents-B5kq2QEV.js → agents-BXqMKoOz.js} +3 -2
  28. package/dist/agents-BXqMKoOz.js.map +1 -0
  29. package/dist/{agents-NRBk4JAs.js → agents-CgcW6lHt.js} +112 -19
  30. package/dist/agents-CgcW6lHt.js.map +1 -0
  31. package/dist/{agents-SvkxJW48.cjs → agents-DOHGWXDa.cjs} +111 -18
  32. package/dist/agents-DOHGWXDa.cjs.map +1 -0
  33. package/dist/{agents-Cel1sffU.cjs → agents-DbnPZXIN.cjs} +3 -2
  34. package/dist/agents-DbnPZXIN.cjs.map +1 -0
  35. package/dist/{api-schema-manifest-C8E9EB-q.js → api-schema-manifest-Ci2qUYHc.js} +2 -2
  36. package/dist/{api-schema-manifest-C8E9EB-q.js.map → api-schema-manifest-Ci2qUYHc.js.map} +1 -1
  37. package/dist/{api-schema-manifest-CNjDZrQ8.cjs → api-schema-manifest-DCHOlOuJ.cjs} +2 -2
  38. package/dist/{api-schema-manifest-CNjDZrQ8.cjs.map → api-schema-manifest-DCHOlOuJ.cjs.map} +1 -1
  39. package/dist/{background-tasks-DhQ6upHK.js → background-tasks-BHhn4YZA.js} +42 -3
  40. package/dist/background-tasks-BHhn4YZA.js.map +1 -0
  41. package/dist/{background-tasks-Kcx2YtW0.cjs → background-tasks-Ci2tlxJC.cjs} +47 -2
  42. package/dist/background-tasks-Ci2tlxJC.cjs.map +1 -0
  43. package/dist/{builder-registry-CkPRx_vx.cjs → builder-registry-D1_hGKCJ.cjs} +2 -2
  44. package/dist/{builder-registry-CkPRx_vx.cjs.map → builder-registry-D1_hGKCJ.cjs.map} +1 -1
  45. package/dist/{builder-registry-6TFaV4oT.js → builder-registry-m_gHCe12.js} +2 -2
  46. package/dist/{builder-registry-6TFaV4oT.js.map → builder-registry-m_gHCe12.js.map} +1 -1
  47. package/dist/{conversations-Ds6aiCMU.cjs → conversations-Ch_VuVwY.cjs} +2 -2
  48. package/dist/{conversations-Ds6aiCMU.cjs.map → conversations-Ch_VuVwY.cjs.map} +1 -1
  49. package/dist/{conversations-CVvZOu1K.js → conversations-xS7yHuG1.js} +2 -2
  50. package/dist/{conversations-CVvZOu1K.js.map → conversations-xS7yHuG1.js.map} +1 -1
  51. package/dist/{dist-CPj7ZQaO.cjs → dist-BKNKucT9.cjs} +427 -290
  52. package/dist/dist-BKNKucT9.cjs.map +1 -0
  53. package/dist/{dist-DC2mND12.js → dist-CIYZuix4.js} +427 -290
  54. package/dist/dist-CIYZuix4.js.map +1 -0
  55. package/dist/{dist-Ch5YGldj.cjs → dist-DgKeISkr.cjs} +1 -1
  56. package/dist/dist-mNQb9_wX.js +1 -0
  57. package/dist/docs/SKILL.md +1 -1
  58. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  59. package/dist/docs/references/reference-observability-tracing-advanced-queries.md +31 -11
  60. package/dist/{editor-builder-B8Mf4kJo.cjs → editor-builder-BaI8pttR.cjs} +2 -2
  61. package/dist/{editor-builder-B8Mf4kJo.cjs.map → editor-builder-BaI8pttR.cjs.map} +1 -1
  62. package/dist/{editor-builder-PKGDfYNc.js → editor-builder-Bln4Pg1U.js} +2 -2
  63. package/dist/{editor-builder-PKGDfYNc.js.map → editor-builder-Bln4Pg1U.js.map} +1 -1
  64. package/dist/{editor-builder-CcSeAW18.cjs → editor-builder-CKfy5eZY.cjs} +3 -3
  65. package/dist/{editor-builder-CcSeAW18.cjs.map → editor-builder-CKfy5eZY.cjs.map} +1 -1
  66. package/dist/{editor-builder-BG38irXi.js → editor-builder-Ceen28s8.js} +3 -3
  67. package/dist/{editor-builder-BG38irXi.js.map → editor-builder-Ceen28s8.js.map} +1 -1
  68. package/dist/{knowledge-DykIi0wH.js → knowledge-Ba74qr0v.js} +89 -2
  69. package/dist/knowledge-Ba74qr0v.js.map +1 -0
  70. package/dist/{knowledge-qu0om3W7.cjs → knowledge-urR7FFG8.cjs} +100 -1
  71. package/dist/knowledge-urR7FFG8.cjs.map +1 -0
  72. package/dist/{observability-dUv60Mzz.cjs → observability-BtdW6mjq.cjs} +2 -2
  73. package/dist/{observability-dUv60Mzz.cjs.map → observability-BtdW6mjq.cjs.map} +1 -1
  74. package/dist/{observability-BS5rmyEH.js → observability-DBtyAJnb.js} +2 -2
  75. package/dist/{observability-BS5rmyEH.js.map → observability-DBtyAJnb.js.map} +1 -1
  76. package/dist/{observability-new-endpoints-BORkWc9f.js → observability-new-endpoints-Di7m_-xc.js} +9 -9
  77. package/dist/observability-new-endpoints-Di7m_-xc.js.map +1 -0
  78. package/dist/{observability-new-endpoints-KJCQZLZr.cjs → observability-new-endpoints-jjCgXuTF.cjs} +8 -8
  79. package/dist/observability-new-endpoints-jjCgXuTF.cjs.map +1 -0
  80. package/dist/{plans-Cq23qQ48.cjs → plans-Djcp3C0d.cjs} +3 -3
  81. package/dist/{plans-Cq23qQ48.cjs.map → plans-Djcp3C0d.cjs.map} +1 -1
  82. package/dist/{plans-BRf1-Sch.js → plans-nHOnlGzr.js} +3 -3
  83. package/dist/{plans-BRf1-Sch.js.map → plans-nHOnlGzr.js.map} +1 -1
  84. package/dist/{probe-image-size-CSrQj2gm.cjs → probe-image-size-BAwk1h6w.cjs} +2 -2
  85. package/dist/{probe-image-size-CSrQj2gm.cjs.map → probe-image-size-BAwk1h6w.cjs.map} +1 -1
  86. package/dist/{probe-image-size-ssYltjkF.js → probe-image-size-DGTRKrgq.js} +2 -2
  87. package/dist/{probe-image-size-ssYltjkF.js.map → probe-image-size-DGTRKrgq.js.map} +1 -1
  88. package/dist/{responses-CPTdr5VE.cjs → responses-BdOStKtX.cjs} +2 -2
  89. package/dist/{responses-CPTdr5VE.cjs.map → responses-BdOStKtX.cjs.map} +1 -1
  90. package/dist/{responses-CGy87E_N.js → responses-CEet9y8G.js} +2 -2
  91. package/dist/{responses-CGy87E_N.js.map → responses-CEet9y8G.js.map} +1 -1
  92. package/dist/{routes-X0Gh3f3T.js → routes-5FpkkzND.js} +21 -18
  93. package/dist/routes-5FpkkzND.js.map +1 -0
  94. package/dist/{routes-DSBYmGyo.cjs → routes-DU_FlwJP.cjs} +21 -18
  95. package/dist/routes-DU_FlwJP.cjs.map +1 -0
  96. package/dist/{scorer-versions-DIcWTIgC.js → scorer-versions-BZ58s09W.js} +2 -2
  97. package/dist/{scorer-versions-DIcWTIgC.js.map → scorer-versions-BZ58s09W.js.map} +1 -1
  98. package/dist/{scorer-versions-BOjrlIcM.cjs → scorer-versions-vQVWyYWA.cjs} +2 -2
  99. package/dist/{scorer-versions-BOjrlIcM.cjs.map → scorer-versions-vQVWyYWA.cjs.map} +1 -1
  100. package/dist/{scores-DqSDYRs0.js → scores-BaDFGpmr.js} +2 -2
  101. package/dist/{scores-DqSDYRs0.js.map → scores-BaDFGpmr.js.map} +1 -1
  102. package/dist/{scores-BZ0Iz_0O.cjs → scores-Bw6Tuga5.cjs} +2 -2
  103. package/dist/{scores-BZ0Iz_0O.cjs.map → scores-Bw6Tuga5.cjs.map} +1 -1
  104. package/dist/server/handlers/a2a.cjs +1 -1
  105. package/dist/server/handlers/a2a.js +1 -1
  106. package/dist/server/handlers/agent-builder.cjs +1 -1
  107. package/dist/server/handlers/agent-builder.d.ts.map +1 -1
  108. package/dist/server/handlers/agent-builder.js +1 -1
  109. package/dist/server/handlers/agent-versions.cjs +2 -2
  110. package/dist/server/handlers/agent-versions.js +2 -2
  111. package/dist/server/handlers/agents.cjs +1 -1
  112. package/dist/server/handlers/agents.d.ts +18 -0
  113. package/dist/server/handlers/agents.d.ts.map +1 -1
  114. package/dist/server/handlers/agents.js +1 -1
  115. package/dist/server/handlers/background-tasks.cjs +2 -1
  116. package/dist/server/handlers/background-tasks.d.ts +89 -0
  117. package/dist/server/handlers/background-tasks.d.ts.map +1 -1
  118. package/dist/server/handlers/background-tasks.js +1 -1
  119. package/dist/server/handlers/builder-registry.cjs +1 -1
  120. package/dist/server/handlers/builder-registry.js +1 -1
  121. package/dist/server/handlers/conversations.cjs +1 -1
  122. package/dist/server/handlers/conversations.js +1 -1
  123. package/dist/server/handlers/editor-builder.cjs +1 -1
  124. package/dist/server/handlers/editor-builder.js +1 -1
  125. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  126. package/dist/server/handlers/favorites-enrichment.js +1 -1
  127. package/dist/server/handlers/knowledge.cjs +3 -1
  128. package/dist/server/handlers/knowledge.d.ts +95 -0
  129. package/dist/server/handlers/knowledge.d.ts.map +1 -1
  130. package/dist/server/handlers/knowledge.js +1 -1
  131. package/dist/server/handlers/mcp-client-versions.cjs +1 -1
  132. package/dist/server/handlers/mcp-client-versions.js +1 -1
  133. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  134. package/dist/server/handlers/observability-new-endpoints.d.ts +248 -244
  135. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  136. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  137. package/dist/server/handlers/observability-shared.cjs +19 -16
  138. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  139. package/dist/server/handlers/observability-shared.d.ts +3 -3
  140. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  141. package/dist/server/handlers/observability-shared.js +18 -14
  142. package/dist/server/handlers/observability-shared.js.map +1 -1
  143. package/dist/server/handlers/observability.cjs +2 -2
  144. package/dist/server/handlers/observability.js +2 -2
  145. package/dist/server/handlers/plans.cjs +1 -1
  146. package/dist/server/handlers/plans.js +1 -1
  147. package/dist/server/handlers/prompt-block-versions.cjs +1 -1
  148. package/dist/server/handlers/prompt-block-versions.js +1 -1
  149. package/dist/server/handlers/responses.cjs +1 -1
  150. package/dist/server/handlers/responses.js +1 -1
  151. package/dist/server/handlers/scorer-versions.cjs +2 -2
  152. package/dist/server/handlers/scorer-versions.js +2 -2
  153. package/dist/server/handlers/scores.cjs +1 -1
  154. package/dist/server/handlers/scores.js +1 -1
  155. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  156. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  157. package/dist/server/handlers/stored-agents.cjs +30 -11
  158. package/dist/server/handlers/stored-agents.cjs.map +1 -1
  159. package/dist/server/handlers/stored-agents.d.ts +56 -0
  160. package/dist/server/handlers/stored-agents.d.ts.map +1 -1
  161. package/dist/server/handlers/stored-agents.js +30 -11
  162. package/dist/server/handlers/stored-agents.js.map +1 -1
  163. package/dist/server/handlers/stored-mcp-clients.cjs +1 -1
  164. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  165. package/dist/server/handlers/stored-prompt-blocks.cjs +1 -1
  166. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  167. package/dist/server/handlers/stored-scorers.cjs +2 -2
  168. package/dist/server/handlers/stored-scorers.js +2 -2
  169. package/dist/server/handlers/stored-skill-favorites.cjs +2 -2
  170. package/dist/server/handlers/stored-skill-favorites.js +2 -2
  171. package/dist/server/handlers/stored-skills.cjs +2 -2
  172. package/dist/server/handlers/stored-skills.js +2 -2
  173. package/dist/server/handlers/stored-workspaces.cjs +1 -1
  174. package/dist/server/handlers/stored-workspaces.js +1 -1
  175. package/dist/server/handlers/system.cjs +2 -2
  176. package/dist/server/handlers/system.d.ts +2 -0
  177. package/dist/server/handlers/system.d.ts.map +1 -1
  178. package/dist/server/handlers/system.js +2 -2
  179. package/dist/server/handlers/tools.cjs +1 -1
  180. package/dist/server/handlers/tools.js +1 -1
  181. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  182. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  183. package/dist/server/handlers/workflow-builder.cjs +1 -1
  184. package/dist/server/handlers/workflow-builder.js +1 -1
  185. package/dist/server/handlers/workflows.cjs +1 -1
  186. package/dist/server/handlers/workflows.js +1 -1
  187. package/dist/server/handlers.cjs +10 -10
  188. package/dist/server/handlers.js +10 -10
  189. package/dist/server/schemas/agents.d.ts +4 -1
  190. package/dist/server/schemas/agents.d.ts.map +1 -1
  191. package/dist/server/schemas/background-tasks.d.ts +6 -0
  192. package/dist/server/schemas/background-tasks.d.ts.map +1 -1
  193. package/dist/server/schemas/feedback.d.ts +3 -3
  194. package/dist/server/schemas/index.cjs +7 -7
  195. package/dist/server/schemas/index.js +7 -7
  196. package/dist/server/schemas/knowledge.d.ts +29 -0
  197. package/dist/server/schemas/knowledge.d.ts.map +1 -1
  198. package/dist/server/schemas/stored-agents.d.ts +70 -0
  199. package/dist/server/schemas/stored-agents.d.ts.map +1 -1
  200. package/dist/server/schemas/system.d.ts +2 -0
  201. package/dist/server/schemas/system.d.ts.map +1 -1
  202. package/dist/server/server-adapter/api-schema-manifest.d.ts +1 -1
  203. package/dist/server/server-adapter/index.cjs +51 -3
  204. package/dist/server/server-adapter/index.cjs.map +1 -1
  205. package/dist/server/server-adapter/index.js +51 -3
  206. package/dist/server/server-adapter/index.js.map +1 -1
  207. package/dist/server/server-adapter/openapi-utils.d.ts +1 -1
  208. package/dist/server/server-adapter/routes/background-tasks.d.ts.map +1 -1
  209. package/dist/server/server-adapter/routes/knowledge.d.ts +93 -0
  210. package/dist/server/server-adapter/routes/knowledge.d.ts.map +1 -1
  211. package/dist/server/server-adapter/routes/observability.d.ts +124 -122
  212. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  213. package/dist/server/server-adapter/routes/system.d.ts +2 -0
  214. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  215. package/dist/server/utils.d.ts +13 -7
  216. package/dist/server/utils.d.ts.map +1 -1
  217. package/dist/{stored-agents-C9zCintA.js → stored-agents-DA8Zx6o9.js} +10 -1
  218. package/dist/stored-agents-DA8Zx6o9.js.map +1 -0
  219. package/dist/{stored-agents-LCHZldYH.cjs → stored-agents-TQ2lIFbx.cjs} +10 -1
  220. package/dist/stored-agents-TQ2lIFbx.cjs.map +1 -0
  221. package/dist/{stored-scorers-Dz9vAQcr.js → stored-scorers-DhOq8ZQC.js} +2 -2
  222. package/dist/{stored-scorers-Dz9vAQcr.js.map → stored-scorers-DhOq8ZQC.js.map} +1 -1
  223. package/dist/{stored-scorers-DxQds4_y.cjs → stored-scorers-FJOs5774.cjs} +2 -2
  224. package/dist/{stored-scorers-DxQds4_y.cjs.map → stored-scorers-FJOs5774.cjs.map} +1 -1
  225. package/dist/{system-B0_hRqFE.js → system-DT0pqJSk.js} +2 -1
  226. package/dist/system-DT0pqJSk.js.map +1 -0
  227. package/dist/{system-iruN6xnj.cjs → system-eeBLPCu1.cjs} +2 -1
  228. package/dist/system-eeBLPCu1.cjs.map +1 -0
  229. package/dist/{tools-CtELrYsA.js → tools-BAmCNGM5.js} +4 -4
  230. package/dist/{tools-CtELrYsA.js.map → tools-BAmCNGM5.js.map} +1 -1
  231. package/dist/{tools-DtRHH9Hr.cjs → tools-CI5oeJWT.cjs} +4 -4
  232. package/dist/{tools-DtRHH9Hr.cjs.map → tools-CI5oeJWT.cjs.map} +1 -1
  233. package/dist/{utils-bQ6Jhog6.cjs → utils-BhBJHsqX.cjs} +45 -24
  234. package/dist/{utils-bQ6Jhog6.cjs.map → utils-BhBJHsqX.cjs.map} +1 -1
  235. package/dist/{utils-qaBKOShQ.js → utils-Dy_dQTlK.js} +45 -24
  236. package/dist/{utils-qaBKOShQ.js.map → utils-Dy_dQTlK.js.map} +1 -1
  237. package/dist/{workflow-builder-6I2HiKcF.js → workflow-builder-CaSfD6oL.js} +3 -3
  238. package/dist/{workflow-builder-6I2HiKcF.js.map → workflow-builder-CaSfD6oL.js.map} +1 -1
  239. package/dist/{workflow-builder-CQzvZvwC.cjs → workflow-builder-tr_D_ZDN.cjs} +3 -3
  240. package/dist/{workflow-builder-CQzvZvwC.cjs.map → workflow-builder-tr_D_ZDN.cjs.map} +1 -1
  241. package/dist/{workflows-ClfVyB1p.js → workflows-BxXS5AfE.js} +4 -4
  242. package/dist/workflows-BxXS5AfE.js.map +1 -0
  243. package/dist/{workflows-DgSo-eBG.cjs → workflows-Cdi6w8JW.cjs} +4 -4
  244. package/dist/workflows-Cdi6w8JW.cjs.map +1 -0
  245. package/package.json +9 -9
  246. package/dist/agent-builder-C1SGph1p.cjs.map +0 -1
  247. package/dist/agent-builder-Cq-jo2FP.js.map +0 -1
  248. package/dist/agents-B5kq2QEV.js.map +0 -1
  249. package/dist/agents-Cel1sffU.cjs.map +0 -1
  250. package/dist/agents-NRBk4JAs.js.map +0 -1
  251. package/dist/agents-SvkxJW48.cjs.map +0 -1
  252. package/dist/background-tasks-DhQ6upHK.js.map +0 -1
  253. package/dist/background-tasks-Kcx2YtW0.cjs.map +0 -1
  254. package/dist/dist-CPj7ZQaO.cjs.map +0 -1
  255. package/dist/dist-DC2mND12.js.map +0 -1
  256. package/dist/dist-DDpKEjMk.js +0 -1
  257. package/dist/knowledge-DykIi0wH.js.map +0 -1
  258. package/dist/knowledge-qu0om3W7.cjs.map +0 -1
  259. package/dist/observability-new-endpoints-BORkWc9f.js.map +0 -1
  260. package/dist/observability-new-endpoints-KJCQZLZr.cjs.map +0 -1
  261. package/dist/routes-DSBYmGyo.cjs.map +0 -1
  262. package/dist/routes-X0Gh3f3T.js.map +0 -1
  263. package/dist/stored-agents-C9zCintA.js.map +0 -1
  264. package/dist/stored-agents-LCHZldYH.cjs.map +0 -1
  265. package/dist/system-B0_hRqFE.js.map +0 -1
  266. package/dist/system-iruN6xnj.cjs.map +0 -1
  267. package/dist/workflows-ClfVyB1p.js.map +0 -1
  268. package/dist/workflows-DgSo-eBG.cjs.map +0 -1
  269. /package/dist/_types/{@internal_core → @internal_core@0.1.4}/dist/storage/index.d.ts +0 -0
  270. /package/dist/_types/{@internal_core → @internal_core@0.1.4}/package.json +0 -0
  271. /package/dist/_types/{@internal_voice/dist/_types/@internal_core → @internal_voice@0.0.43/dist/_types/@internal_core@0.1.4}/dist/request-context/index.d.ts +0 -0
  272. /package/dist/_types/{@internal_voice/dist/_types/@internal_core → @internal_voice@0.0.43/dist/_types/@internal_core@0.1.4}/dist/types/index.d.ts +0 -0
  273. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/checks.d.ts +0 -0
  274. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/coerce.d.ts +0 -0
  275. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/compat.d.ts +0 -0
  276. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/deep-partial.d.ts +0 -0
  277. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/errors.d.ts +0 -0
  278. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/external.d.ts +0 -0
  279. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/from-json-schema.d.ts +0 -0
  280. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/in-out.d.ts +0 -0
  281. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/index.d.ts +0 -0
  282. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/iso.d.ts +0 -0
  283. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/parse.d.ts +0 -0
  284. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/classic/schemas.d.ts +0 -0
  285. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/api.d.ts +0 -0
  286. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/checks.d.ts +0 -0
  287. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/compile.d.ts +0 -0
  288. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/core.d.ts +0 -0
  289. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/doc.d.ts +0 -0
  290. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/errors.d.ts +0 -0
  291. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/index.d.ts +0 -0
  292. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/json-schema-generator.d.ts +0 -0
  293. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/json-schema-processors.d.ts +0 -0
  294. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/json-schema.d.ts +0 -0
  295. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/memoizer.d.ts +0 -0
  296. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/parse.d.ts +0 -0
  297. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/regexes.d.ts +0 -0
  298. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/registries.d.ts +0 -0
  299. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/schemas.d.ts +0 -0
  300. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/standard-schema.d.ts +0 -0
  301. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/to-json-schema.d.ts +0 -0
  302. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/util.d.ts +0 -0
  303. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/core/versions.d.ts +0 -0
  304. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/index.d.cts +0 -0
  305. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ar.d.ts +0 -0
  306. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/az.d.ts +0 -0
  307. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/be.d.ts +0 -0
  308. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/bg.d.ts +0 -0
  309. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/bn.d.ts +0 -0
  310. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ca.d.ts +0 -0
  311. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ckb.d.ts +0 -0
  312. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/cs.d.ts +0 -0
  313. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/da.d.ts +0 -0
  314. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/de.d.ts +0 -0
  315. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/el.d.ts +0 -0
  316. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/en.d.ts +0 -0
  317. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/eo.d.ts +0 -0
  318. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/es.d.ts +0 -0
  319. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/fa.d.ts +0 -0
  320. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/fi.d.ts +0 -0
  321. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/fr-CA.d.ts +0 -0
  322. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/fr.d.ts +0 -0
  323. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/gu.d.ts +0 -0
  324. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/he.d.ts +0 -0
  325. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/hi.d.ts +0 -0
  326. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/hr.d.ts +0 -0
  327. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/hu.d.ts +0 -0
  328. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/hy.d.ts +0 -0
  329. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/id.d.ts +0 -0
  330. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/index.d.ts +0 -0
  331. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/is.d.ts +0 -0
  332. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/it.d.ts +0 -0
  333. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ja.d.ts +0 -0
  334. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ka.d.ts +0 -0
  335. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/kh.d.ts +0 -0
  336. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/km.d.ts +0 -0
  337. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/kn.d.ts +0 -0
  338. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ko.d.ts +0 -0
  339. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/lt.d.ts +0 -0
  340. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/mk.d.ts +0 -0
  341. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ms.d.ts +0 -0
  342. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ne.d.ts +0 -0
  343. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/nl.d.ts +0 -0
  344. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/nn.d.ts +0 -0
  345. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/no.d.ts +0 -0
  346. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ota.d.ts +0 -0
  347. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/pl.d.ts +0 -0
  348. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ps.d.ts +0 -0
  349. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/pt-BR.d.ts +0 -0
  350. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/pt.d.ts +0 -0
  351. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ro.d.ts +0 -0
  352. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ru.d.ts +0 -0
  353. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/sk.d.ts +0 -0
  354. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/sl.d.ts +0 -0
  355. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/sv.d.ts +0 -0
  356. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ta.d.ts +0 -0
  357. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/tg.d.ts +0 -0
  358. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/th.d.ts +0 -0
  359. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/tk.d.ts +0 -0
  360. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/tr.d.ts +0 -0
  361. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ua.d.ts +0 -0
  362. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/uk.d.ts +0 -0
  363. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/ur.d.ts +0 -0
  364. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/uz.d.ts +0 -0
  365. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/vi.d.ts +0 -0
  366. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/yo.d.ts +0 -0
  367. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/zh-CN.d.ts +0 -0
  368. /package/dist/_types/{@internal_voice/dist/_types/zod → @internal_voice@0.0.43/dist/_types/zod@4.6.7}/v4/locales/zh-TW.d.ts +0 -0
  369. /package/dist/_types/{@internal_voice → @internal_voice@0.0.43}/package.json +0 -0
  370. /package/dist/_types/{@mastra_schema-compat/dist/_types/@standard-schema_spec → @mastra_schema-compat@1.3.17/dist/_types/@standard-schema_spec@1.1.0}/dist/index.d.ts +0 -0
  371. /package/dist/_types/{@mastra_schema-compat/dist/_types/@types_json-schema → @mastra_schema-compat@1.3.17/dist/_types/@types_json-schema@7.0.15}/index.d.ts +0 -0
  372. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/index.d.ts +0 -0
  373. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/null-to-undefined.d.ts +0 -0
  374. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/provider-compats/openai-reasoning.d.ts +0 -0
  375. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/schema-compatibility-v3.d.ts +0 -0
  376. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/schema-compatibility-v4.d.ts +0 -0
  377. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/schema-compatibility.d.ts +0 -0
  378. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/schema.d.ts +0 -0
  379. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/standard-schema-compat.d.ts +0 -0
  380. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/types.d.ts +0 -0
  381. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/dist/utils.d.ts +0 -0
  382. /package/dist/_types/{@mastra_schema-compat → @mastra_schema-compat@1.3.17}/package.json +0 -0
@@ -29,6 +29,13 @@ const knowledgeSearchQuerySchema = z.object({
29
29
  scopeId: scopeIds.optional().describe("Only pages within these scopes"),
30
30
  limit
31
31
  });
32
+ const pageIds = z.union([z.string(), z.array(z.string())]).transform((value) => Array.isArray(value) ? value : [value]).pipe(z.array(pageId).min(1).max(200));
33
+ const knowledgeLinkCountsQuerySchema = z.object({ pageId: pageIds.describe("Pages to count links for; repeat the param for each, at most 200") });
34
+ const knowledgePageLinksQuerySchema = z.object({ direction: z.enum([
35
+ "in",
36
+ "out",
37
+ "both"
38
+ ]).optional().describe("Links into the page, out of it, or both (default)") });
32
39
  const knowledgeActivityQuerySchema = z.object({
33
40
  scopeId: pageId.optional(),
34
41
  pageId: pageId.optional(),
@@ -44,6 +51,20 @@ const knowledgeTreeResponseSchema = payload;
44
51
  const knowledgePageResponseSchema = payload;
45
52
  const knowledgeGraphResponseSchema = payload;
46
53
  const knowledgeSearchResponseSchema = z.object({ results: z.array(payload) });
54
+ const knowledgeLinkCountsResponseSchema = z.object({ counts: z.record(z.string(), z.object({
55
+ in: z.number(),
56
+ out: z.number()
57
+ })) });
58
+ const knowledgePageLinksResponseSchema = z.object({
59
+ edges: z.array(z.object({
60
+ fromPageId: z.string(),
61
+ toPageId: z.string(),
62
+ kind: z.enum(["body", "note"]),
63
+ count: z.number()
64
+ })),
65
+ pages: z.array(payload),
66
+ truncated: z.boolean()
67
+ });
47
68
  const knowledgeActivityResponseSchema = payload;
48
69
  const knowledgeEventsResponseSchema = z.object({
49
70
  kind: z.enum([
@@ -254,6 +275,72 @@ const GET_KNOWLEDGE_PAGE_ROUTE = createRoute({
254
275
  }
255
276
  }
256
277
  });
278
+ /**
279
+ * The link readers are newer than the page readers, so a core without them answers these routes with 501
280
+ * and the explorer falls back to counting the pages it has loaded.
281
+ */
282
+ function requireLinkReaders() {
283
+ const { readKnowledgePageLinkCounts, readKnowledgePageLinks } = coreKnowledge;
284
+ if (!readKnowledgePageLinkCounts || !readKnowledgePageLinks) throw new HTTPException(501, { message: "Knowledge link counts need a newer @mastra/core." });
285
+ return {
286
+ readKnowledgePageLinkCounts,
287
+ readKnowledgePageLinks
288
+ };
289
+ }
290
+ const GET_KNOWLEDGE_LINK_COUNTS_ROUTE = createRoute({
291
+ method: "GET",
292
+ path: "/knowledge/:knowledgeKey/link-counts",
293
+ responseType: "json",
294
+ pathParamSchema: knowledgePathParams,
295
+ queryParamSchema: knowledgeLinkCountsQuerySchema,
296
+ responseSchema: knowledgeLinkCountsResponseSchema,
297
+ summary: "Count the links into and out of pages",
298
+ description: "Returns, for each page id, how many distinct other pages link to it and it links to, by body [[ref]] or note mention, counted over the whole store and not only pages the caller has loaded. A page the caller cannot read counts as no links, the same as one that does not exist. 501 when the store has no link index.",
299
+ tags: ["Knowledge"],
300
+ requiresAuth: true,
301
+ handler: async ({ mastra, requestContext, knowledgeKey, pageId }) => {
302
+ try {
303
+ const { store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
304
+ const counts = await requireLinkReaders().readKnowledgePageLinkCounts(store, {
305
+ pageIds: pageId,
306
+ read
307
+ });
308
+ if (!counts) throw new HTTPException(501, { message: "This Knowledge store has no link index." });
309
+ return { counts };
310
+ } catch (error) {
311
+ return handleError(error, "Error counting Knowledge page links");
312
+ }
313
+ }
314
+ });
315
+ const GET_KNOWLEDGE_PAGE_LINKS_ROUTE = createRoute({
316
+ method: "GET",
317
+ path: "/knowledge/:knowledgeKey/pages/:pageId/links",
318
+ responseType: "json",
319
+ pathParamSchema: knowledgePagePathParams,
320
+ queryParamSchema: knowledgePageLinksQuerySchema,
321
+ responseSchema: knowledgePageLinksResponseSchema,
322
+ summary: "List a Knowledge page's links",
323
+ description: "Returns the links into and out of one page, bounded, with the readable pages at their other ends. A page the caller cannot read has none. 501 when the store has no link index.",
324
+ tags: ["Knowledge"],
325
+ requiresAuth: true,
326
+ handler: async ({ mastra, requestContext, knowledgeKey, pageId, direction }) => {
327
+ try {
328
+ const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
329
+ const links = await requireLinkReaders().readKnowledgePageLinks(store, {
330
+ pageId,
331
+ read,
332
+ direction
333
+ });
334
+ if (!links) throw new HTTPException(501, { message: "This Knowledge store has no link index." });
335
+ return {
336
+ ...links,
337
+ pages: links.pages.map((page) => ({ ...withDisplayLabel(instance, page) }))
338
+ };
339
+ } catch (error) {
340
+ return handleError(error, "Error reading Knowledge page links");
341
+ }
342
+ }
343
+ });
257
344
  const GET_KNOWLEDGE_GRAPH_ROUTE = createRoute({
258
345
  method: "GET",
259
346
  path: "/knowledge/:knowledgeKey/graph",
@@ -426,6 +513,6 @@ const STREAM_KNOWLEDGE_EVENTS_ROUTE = createRoute({
426
513
  }
427
514
  }
428
515
  });
429
- export { LIST_KNOWLEDGE_ROUTE as a, GET_KNOWLEDGE_TREE_ROUTE as i, GET_KNOWLEDGE_GRAPH_ROUTE as n, SEARCH_KNOWLEDGE_ROUTE as o, GET_KNOWLEDGE_PAGE_ROUTE as r, STREAM_KNOWLEDGE_EVENTS_ROUTE as s, GET_KNOWLEDGE_ACTIVITY_ROUTE as t };
516
+ export { GET_KNOWLEDGE_PAGE_ROUTE as a, SEARCH_KNOWLEDGE_ROUTE as c, GET_KNOWLEDGE_PAGE_LINKS_ROUTE as i, STREAM_KNOWLEDGE_EVENTS_ROUTE as l, GET_KNOWLEDGE_GRAPH_ROUTE as n, GET_KNOWLEDGE_TREE_ROUTE as o, GET_KNOWLEDGE_LINK_COUNTS_ROUTE as r, LIST_KNOWLEDGE_ROUTE as s, GET_KNOWLEDGE_ACTIVITY_ROUTE as t };
430
517
 
431
- //# sourceMappingURL=knowledge-DykIi0wH.js.map
518
+ //# sourceMappingURL=knowledge-Ba74qr0v.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-Ba74qr0v.js","names":[],"sources":["../src/server/schemas/knowledge.ts","../src/server/handlers/knowledge.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const knowledgePathParams = z.object({\n knowledgeKey: z.string().describe('Application key the Knowledge instance is registered under'),\n});\n\nexport const knowledgePagePathParams = knowledgePathParams.extend({\n pageId: z.string().min(1).max(512).describe('Knowledge page id'),\n});\n\nconst pageId = z.string().min(1).max(512);\nconst limit = z.coerce.number().int().min(1).max(100).optional();\n\nexport const knowledgeTreeQuerySchema = z.object({\n parentId: pageId.optional().describe('Page whose children to list; omit for the root scopes'),\n cursor: z.string().optional(),\n limit,\n});\n\nexport const knowledgePageQuerySchema = z.object({\n noteCursor: z.string().optional(),\n noteLimit: limit,\n});\n\nexport const knowledgeGraphQuerySchema = z.object({\n rootId: pageId.optional().describe('Page to walk from; omit to walk every root scope'),\n maxPages: z.coerce.number().int().min(1).max(500).optional(),\n});\n\n// A repeated param (`?scopeId=a&scopeId=b`) arrives as an array, a lone one as a string.\nconst scopeIds = z\n .union([z.string(), z.array(z.string())])\n .transform(value => (Array.isArray(value) ? value : [value]))\n .pipe(z.array(pageId).max(20));\n\nexport const knowledgeSearchQuerySchema = z.object({\n q: z.string().min(1).max(200).describe('Text to match in page names, synopses, bodies and notes'),\n scopeId: scopeIds.optional().describe('Only pages within these scopes'),\n limit,\n});\n\nconst pageIds = z\n .union([z.string(), z.array(z.string())])\n .transform(value => (Array.isArray(value) ? value : [value]))\n .pipe(z.array(pageId).min(1).max(200));\n\nexport const knowledgeLinkCountsQuerySchema = z.object({\n pageId: pageIds.describe('Pages to count links for; repeat the param for each, at most 200'),\n});\n\nexport const knowledgePageLinksQuerySchema = z.object({\n direction: z.enum(['in', 'out', 'both']).optional().describe('Links into the page, out of it, or both (default)'),\n});\n\nexport const knowledgeActivityQuerySchema = z.object({\n scopeId: pageId.optional(),\n pageId: pageId.optional(),\n cursor: z.string().optional(),\n limit,\n});\n\n// Payloads come from the @mastra/core/knowledge page readers; the UI package owns their TypeScript shapes.\nconst payload = z.record(z.string(), z.unknown());\n\nexport const listKnowledgeResponseSchema = z.object({\n instances: z.array(z.object({ key: z.string(), id: z.string() })),\n});\nexport const knowledgeTreeResponseSchema = payload;\nexport const knowledgePageResponseSchema = payload;\nexport const knowledgeGraphResponseSchema = payload;\nexport const knowledgeSearchResponseSchema = z.object({ results: z.array(payload) });\nexport const knowledgeLinkCountsResponseSchema = z.object({\n counts: z.record(z.string(), z.object({ in: z.number(), out: z.number() })),\n});\nexport const knowledgePageLinksResponseSchema = z.object({\n edges: z.array(\n z.object({ fromPageId: z.string(), toPageId: z.string(), kind: z.enum(['body', 'note']), count: z.number() }),\n ),\n pages: z.array(payload),\n truncated: z.boolean(),\n});\nexport const knowledgeActivityResponseSchema = payload;\nexport const knowledgeEventsResponseSchema = z.object({\n kind: z.enum(['scope', 'page', 'note', 'pin']),\n op: z.string(),\n pageId: z.string().optional(),\n scopeId: z.string().optional(),\n at: z.string(),\n});\n","import * as coreKnowledge from '@mastra/core/knowledge';\nimport type { Knowledge, KnowledgeChangeEvent } from '@mastra/core/knowledge';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { KnowledgeReadScope, KnowledgeStorage } from '@mastra/core/storage';\nimport { MASTRA_KNOWLEDGE_PRINCIPALS_KEY } from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n knowledgeActivityQuerySchema,\n knowledgeActivityResponseSchema,\n knowledgeEventsResponseSchema,\n knowledgeGraphQuerySchema,\n knowledgeGraphResponseSchema,\n knowledgePagePathParams,\n knowledgePageQuerySchema,\n knowledgePageResponseSchema,\n knowledgePathParams,\n knowledgeSearchQuerySchema,\n knowledgeSearchResponseSchema,\n knowledgeLinkCountsQuerySchema,\n knowledgeLinkCountsResponseSchema,\n knowledgePageLinksQuerySchema,\n knowledgePageLinksResponseSchema,\n knowledgeTreeQuerySchema,\n knowledgeTreeResponseSchema,\n listKnowledgeResponseSchema,\n} from '../schemas/knowledge';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\nimport { getHandlerFGAProvider } from './utils';\n\n/**\n * Read-only browsing of Knowledge instances registered on Mastra, for Studio. Nothing here writes.\n *\n * What a caller reads depends on whether the app has auth configured (`server.auth` or `studio.auth`):\n * - No auth: probably a local or test project, so the routes read as the instance owner (`'all'`).\n * - Auth: reads are narrowed to what the signed-in caller can read. The app maps the user to Knowledge\n * principals by setting MASTRA_KNOWLEDGE_PRINCIPALS_KEY in `auth.authorize` (a `string[]`, or `'all'`\n * for an admin); the instance turns them into a read scope with `readScopeFor`. A caller with no\n * mapping is refused with 403.\n *\n * On top of that the path derives `knowledge:read` (`GET /knowledge/...`), and with FGA configured each\n * instance is filtered and gated by `knowledge:read` on that instance. The routes are opt-in\n * (KNOWLEDGE_ROUTES); hosts with their own scoping (Factory) do not mount them.\n */\n\nfunction hasAuth(mastra: Mastra): boolean {\n return Boolean(mastra.getServer?.()?.auth || (mastra as any).getStudio?.()?.auth);\n}\n\nasync function callerReadScope(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n instance: Knowledge,\n): Promise<KnowledgeReadScope> {\n if (!hasAuth(mastra)) return 'all';\n\n const principals = requestContext?.get(MASTRA_KNOWLEDGE_PRINCIPALS_KEY);\n if (principals === undefined || principals === null) {\n throw new HTTPException(403, {\n message: `Knowledge access is not mapped for this caller. Set request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" in auth.authorize.`,\n });\n }\n if (principals === 'all') return 'all';\n // The value comes from the app's own authorize code, so a bad one is a host misconfiguration, not a denial.\n if (!Array.isArray(principals) || principals.some(principal => typeof principal !== 'string')) {\n throw new HTTPException(500, {\n message: `Request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" must be a string array or 'all'.`,\n });\n }\n try {\n return await instance.readScopeFor(principals);\n } catch (error) {\n // A principal that matches no declared scope type: the app's mapping disagrees with its declarations.\n if (error instanceof Error && error.name === 'KnowledgeDeclarationError') {\n throw new HTTPException(500, { message: error.message, cause: error });\n }\n throw error;\n }\n}\n\nasync function accessibleInstances(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n entries: Array<{ id: string; key: string }>,\n): Promise<Set<string>> {\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (!fgaProvider || !user || typeof user !== 'object' || entries.length === 0) {\n return new Set(entries.map(entry => entry.key));\n }\n // FGA names a Knowledge instance by its registered key, as the route metadata does (`:knowledgeKey`).\n const accessible: Array<{ id: string; key: string }> = await fgaProvider.filterAccessible(\n user,\n entries.map(entry => ({ ...entry, id: entry.key })),\n 'knowledge',\n MastraFGAPermissions.KNOWLEDGE_READ,\n );\n return new Set(accessible.map(entry => entry.key));\n}\n\ntype KnowledgePageReaders = Pick<\n typeof coreKnowledge,\n | 'listKnowledgeTreeChildren'\n | 'readKnowledgePage'\n | 'readKnowledgePageActivity'\n | 'readKnowledgePageGraph'\n | 'searchKnowledgeExplorerPages'\n>;\n\n// The page readers first ship in @mastra/core 1.81.0, above this package's peer floor. A named import\n// of an export an older core lacks fails at ESM link time and takes the whole server down, so they are\n// read off the namespace (as in schedules-workflows-shim.ts) and the routes answer 501 without them.\nconst pageReaders: Partial<KnowledgePageReaders> = coreKnowledge;\n\nfunction requirePageReaders(): KnowledgePageReaders {\n const {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n } = pageReaders;\n if (\n !listKnowledgeTreeChildren ||\n !readKnowledgePage ||\n !readKnowledgePageActivity ||\n !readKnowledgePageGraph ||\n !searchKnowledgeExplorerPages\n ) {\n throw new HTTPException(501, { message: 'Knowledge browsing needs @mastra/core 1.81.0 or later.' });\n }\n return {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n };\n}\n\n/**\n * The declared grants between the graph's scopes, each with its principal's display label. Grants are\n * newer than the page readers, so a core without them sends none and the graph still loads.\n */\nasync function graphGrants(\n instance: Knowledge,\n store: KnowledgeStorage,\n pages: readonly coreKnowledge.KnowledgePage[],\n read: KnowledgeReadScope,\n): Promise<Array<coreKnowledge.KnowledgeGraphScopeGrant & { principalLabel?: string }> | undefined> {\n const readGrants = (coreKnowledge as Partial<typeof coreKnowledge>).readKnowledgeScopeGrants;\n const scopeGrants = (instance as Partial<Knowledge>).scopeGrants?.bind(instance);\n if (!readGrants || !scopeGrants) return undefined;\n const grants = await readGrants(store, { pages, read, grantsFor: scopeGrants });\n return grants.map(grant => {\n const principalLabel = instance.scopeLabel?.(grant.principal);\n return principalLabel ? { ...grant, principalLabel } : grant;\n });\n}\n\nasync function resolveStore(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n knowledgeKey: string | undefined,\n): Promise<{ instance: Knowledge; store: KnowledgeStorage; read: KnowledgeReadScope; readers: KnowledgePageReaders }> {\n const instances = mastra.listKnowledge();\n // Own keys only: `constructor` or `__proto__` must not resolve to an Object.prototype member.\n const instance = knowledgeKey && Object.hasOwn(instances, knowledgeKey) ? instances[knowledgeKey] : undefined;\n if (!knowledgeKey || !instance)\n throw new HTTPException(404, { message: `Knowledge ${knowledgeKey ?? ''} not found` });\n\n // An instance the caller may not read looks the same as one that does not exist.\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (fgaProvider && user && typeof user === 'object') {\n const allowed = await fgaProvider.check(user, {\n resource: { type: 'knowledge', id: knowledgeKey },\n permission: MastraFGAPermissions.KNOWLEDGE_READ,\n });\n if (!allowed) throw new HTTPException(404, { message: `Knowledge ${knowledgeKey} not found` });\n }\n const readers = requirePageReaders();\n const read = await callerReadScope(mastra, requestContext, instance);\n return { instance, store: await instance.getStorage(), read, readers };\n}\n\n/**\n * Adds each scope page's declared `displayLabel` with its address's `$params` filled in (`'$orgId policy'`\n * → `'acme policy'`), so the explorer can caption scopes. Scope declarations live in config, not\n * storage, so the readers can't supply it. Older cores without `scopeLabel` send no label.\n */\nfunction withDisplayLabel<T extends { isScope: boolean; address?: string }>(\n instance: Knowledge,\n page: T,\n): T & { displayLabel?: string } {\n if (!page.isScope || !page.address) return page;\n const displayLabel = instance.scopeLabel?.(page.address);\n return displayLabel ? { ...page, displayLabel } : page;\n}\n\nexport const LIST_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge',\n responseType: 'json',\n responseSchema: listKnowledgeResponseSchema,\n summary: 'List Knowledge instances',\n description:\n \"Returns the Knowledge instances registered on this Mastra instance, by application key. Without app auth the other Knowledge routes read the whole instance; with auth they read only what the caller's Knowledge principals (MASTRA_KNOWLEDGE_PRINCIPALS_KEY, set in auth.authorize) can read, and refuse an unmapped caller with 403.\",\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext }) => {\n try {\n const all = Object.entries(mastra.listKnowledge()).map(([key, instance]) => ({ key, id: instance.id }));\n const allowed = await accessibleInstances(mastra, requestContext, all);\n return { instances: all.filter(entry => allowed.has(entry.key)) };\n } catch (error) {\n return handleError(error, 'Error listing Knowledge instances');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_TREE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/tree',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeTreeQuerySchema,\n responseSchema: knowledgeTreeResponseSchema,\n summary: 'List one level of the Knowledge page tree',\n description:\n 'Without parentId, returns the root scopes. With parentId, returns its child scopes (first page only) then its child pages in order, paged with cursor.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, parentId, cursor, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const level = await readers.listKnowledgeTreeChildren(store, {\n parentId: parentId ?? null,\n read,\n // An empty `?cursor=` means no cursor, so root scopes are still listed.\n cursor: cursor || undefined,\n limit,\n });\n return { ...level, pages: level.pages.map(page => withDisplayLabel(instance, page)) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge tree');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_PAGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/pages/:pageId',\n responseType: 'json',\n pathParamSchema: knowledgePagePathParams,\n queryParamSchema: knowledgePageQuerySchema,\n responseSchema: knowledgePageResponseSchema,\n summary: 'Get a Knowledge page',\n description:\n 'Returns one page with its ancestors, a page of its notes, its pin, the pages its notes reference and notes elsewhere that mention it; 404 when it does not exist',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId, noteCursor, noteLimit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const view = await readers.readKnowledgePage(store, { pageId, read, noteCursor, noteLimit });\n if (!view) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const label = <T extends { isScope: boolean; declaration?: string }>(page: T) => withDisplayLabel(instance, page);\n return {\n ...view,\n page: label(view.page),\n ancestors: view.ancestors.map(label),\n related: view.related.map(label),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge page');\n }\n },\n});\n\n/**\n * The link readers are newer than the page readers, so a core without them answers these routes with 501\n * and the explorer falls back to counting the pages it has loaded.\n */\nfunction requireLinkReaders() {\n const { readKnowledgePageLinkCounts, readKnowledgePageLinks } = coreKnowledge as Partial<typeof coreKnowledge>;\n if (!readKnowledgePageLinkCounts || !readKnowledgePageLinks) {\n throw new HTTPException(501, { message: 'Knowledge link counts need a newer @mastra/core.' });\n }\n return { readKnowledgePageLinkCounts, readKnowledgePageLinks };\n}\n\nexport const GET_KNOWLEDGE_LINK_COUNTS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/link-counts',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeLinkCountsQuerySchema,\n responseSchema: knowledgeLinkCountsResponseSchema,\n summary: 'Count the links into and out of pages',\n description:\n 'Returns, for each page id, how many distinct other pages link to it and it links to, by body [[ref]] or note mention, counted over the whole store and not only pages the caller has loaded. A page the caller cannot read counts as no links, the same as one that does not exist. 501 when the store has no link index.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId }) => {\n try {\n const { store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n const counts = await requireLinkReaders().readKnowledgePageLinkCounts(store, { pageIds: pageId, read });\n if (!counts) throw new HTTPException(501, { message: 'This Knowledge store has no link index.' });\n return { counts };\n } catch (error) {\n return handleError(error, 'Error counting Knowledge page links');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_PAGE_LINKS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/pages/:pageId/links',\n responseType: 'json',\n pathParamSchema: knowledgePagePathParams,\n queryParamSchema: knowledgePageLinksQuerySchema,\n responseSchema: knowledgePageLinksResponseSchema,\n summary: \"List a Knowledge page's links\",\n description:\n 'Returns the links into and out of one page, bounded, with the readable pages at their other ends. A page the caller cannot read has none. 501 when the store has no link index.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId, direction }) => {\n try {\n const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n const links = await requireLinkReaders().readKnowledgePageLinks(store, { pageId, read, direction });\n if (!links) throw new HTTPException(501, { message: 'This Knowledge store has no link index.' });\n return { ...links, pages: links.pages.map(page => ({ ...withDisplayLabel(instance, page) })) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge page links');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_GRAPH_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/graph',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeGraphQuerySchema,\n responseSchema: knowledgeGraphResponseSchema,\n summary: 'Get a bounded Knowledge page graph',\n description:\n 'Returns pages under rootId (or every root scope) breadth-first with parent and mention edges, bounded; truncated is true when a limit stopped it. grants lists the declared access grants onto the scopes shown, from principal scopes the caller can read. 404 when rootId does not exist.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, rootId, maxPages }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const graph = await readers.readKnowledgePageGraph(store, {\n read,\n rootId: rootId ?? null,\n ...(maxPages ? { limits: { maxPages } } : {}),\n });\n if (!graph) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const grants = await graphGrants(instance, store, graph.pages, read);\n return {\n ...graph,\n pages: graph.pages.map(page => withDisplayLabel(instance, page)),\n ...(grants ? { grants } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge graph');\n }\n },\n});\n\nexport const SEARCH_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/search',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeSearchQuerySchema,\n responseSchema: knowledgeSearchResponseSchema,\n summary: 'Search Knowledge pages and notes',\n description: 'Returns pages whose name, synopsis or body, and notes whose text, match the query',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, q, scopeId, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const results = await readers.searchKnowledgeExplorerPages(store, {\n query: q,\n read,\n ...(scopeId?.length ? { scopeIds: scopeId } : {}),\n limit,\n });\n return { results: results.map(hit => ({ ...hit, page: withDisplayLabel(instance, hit.page) })) };\n } catch (error) {\n return handleError(error, 'Error searching Knowledge');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_ACTIVITY_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/activity',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeActivityQuerySchema,\n responseSchema: knowledgeActivityResponseSchema,\n summary: 'List recent Knowledge activity',\n description: 'Returns a newest-first page of activity, optionally for one scope or one page',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, scopeId, pageId, cursor, limit }) => {\n try {\n const { store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n return { ...(await readers.readKnowledgePageActivity(store, { read, scopeId, pageId, cursor, limit })) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge activity');\n }\n },\n});\n\nconst KEEPALIVE_MS = 25_000;\n/**\n * The read scope is resolved when the stream opens. Ending it after this long makes the client reconnect,\n * which resolves the caller's read scope again, so a revoked grant stops receiving changes.\n */\nconst STREAM_MAX_AGE_MS = 5 * 60_000;\n\n/**\n * What a viewer may learn about one change: the ids in it they can read, or nothing when they can read\n * none. A page they can read now, or the scope it is (or was, before a move or merge) in, counts; a\n * deleted page is matched by its scope.\n */\nasync function visibleChange(store: KnowledgeStorage, read: KnowledgeReadScope, event: KnowledgeChangeEvent) {\n const readable = async (id: string | undefined) =>\n id !== undefined && (read === 'all' || (await store.getPage({ id, read })) !== null);\n const scopeId = 'scopeId' in event ? event.scopeId : undefined;\n const fromScopeId = 'fromScopeId' in event ? event.fromScopeId : undefined;\n const [page, scope, fromScope] = await Promise.all([\n readable(event.pageId),\n readable(scopeId),\n readable(fromScopeId),\n ]);\n if (!page && !scope && !fromScope) return null;\n return {\n kind: event.kind,\n op: event.op,\n ...(page ? { pageId: event.pageId } : {}),\n ...(scope ? { scopeId } : {}),\n at: event.at.toISOString(),\n };\n}\n\nexport const STREAM_KNOWLEDGE_EVENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/events',\n responseType: 'stream',\n streamFormat: 'sse',\n sseFlushOnConnect: true,\n pathParamSchema: knowledgePathParams,\n responseSchema: knowledgeEventsResponseSchema,\n summary: 'Stream Knowledge changes',\n description:\n 'Server-Sent Events, one per committed write the caller can read: { kind, op, pageId?, scopeId?, at }. Ids the caller cannot read are left out, and changes they cannot read at all are not sent. Re-read what changed with the other Knowledge routes.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, abortSignal }) => {\n try {\n const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n if (typeof instance.onChange !== 'function') {\n throw new HTTPException(501, { message: 'Knowledge change events need @mastra/core 1.81.0 or later.' });\n }\n const logger = mastra.getLogger();\n let stop = () => {};\n return new ReadableStream({\n start(controller) {\n let open = true;\n // Writes are filtered in order so a viewer never sees a later change before an earlier one.\n let queue = Promise.resolve();\n const unsubscribe = instance.onChange(event => {\n queue = queue.then(async () => {\n const change = await visibleChange(store, read, event).catch(error => {\n logger?.error('Error filtering a Knowledge change', { error });\n return null;\n });\n if (open && change) controller.enqueue(change);\n });\n });\n const keepalive = setInterval(() => open && controller.enqueue(': keepalive\\n\\n'), KEEPALIVE_MS);\n const expire = setTimeout(() => stop(), STREAM_MAX_AGE_MS);\n stop = () => {\n if (!open) return;\n open = false;\n clearInterval(keepalive);\n clearTimeout(expire);\n unsubscribe();\n try {\n controller.close();\n } catch {\n // Already closed\n }\n };\n if (abortSignal?.aborted) stop();\n else abortSignal?.addEventListener('abort', stop, { once: true });\n },\n cancel() {\n stop();\n },\n });\n } catch (error) {\n return handleError(error, 'Error streaming Knowledge changes');\n }\n },\n});\n"],"mappings":"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"}
@@ -31,6 +31,13 @@ const knowledgeSearchQuerySchema = zod_v4.z.object({
31
31
  scopeId: scopeIds.optional().describe("Only pages within these scopes"),
32
32
  limit
33
33
  });
34
+ const pageIds = zod_v4.z.union([zod_v4.z.string(), zod_v4.z.array(zod_v4.z.string())]).transform((value) => Array.isArray(value) ? value : [value]).pipe(zod_v4.z.array(pageId).min(1).max(200));
35
+ const knowledgeLinkCountsQuerySchema = zod_v4.z.object({ pageId: pageIds.describe("Pages to count links for; repeat the param for each, at most 200") });
36
+ const knowledgePageLinksQuerySchema = zod_v4.z.object({ direction: zod_v4.z.enum([
37
+ "in",
38
+ "out",
39
+ "both"
40
+ ]).optional().describe("Links into the page, out of it, or both (default)") });
34
41
  const knowledgeActivityQuerySchema = zod_v4.z.object({
35
42
  scopeId: pageId.optional(),
36
43
  pageId: pageId.optional(),
@@ -46,6 +53,20 @@ const knowledgeTreeResponseSchema = payload;
46
53
  const knowledgePageResponseSchema = payload;
47
54
  const knowledgeGraphResponseSchema = payload;
48
55
  const knowledgeSearchResponseSchema = zod_v4.z.object({ results: zod_v4.z.array(payload) });
56
+ const knowledgeLinkCountsResponseSchema = zod_v4.z.object({ counts: zod_v4.z.record(zod_v4.z.string(), zod_v4.z.object({
57
+ in: zod_v4.z.number(),
58
+ out: zod_v4.z.number()
59
+ })) });
60
+ const knowledgePageLinksResponseSchema = zod_v4.z.object({
61
+ edges: zod_v4.z.array(zod_v4.z.object({
62
+ fromPageId: zod_v4.z.string(),
63
+ toPageId: zod_v4.z.string(),
64
+ kind: zod_v4.z.enum(["body", "note"]),
65
+ count: zod_v4.z.number()
66
+ })),
67
+ pages: zod_v4.z.array(payload),
68
+ truncated: zod_v4.z.boolean()
69
+ });
49
70
  const knowledgeActivityResponseSchema = payload;
50
71
  const knowledgeEventsResponseSchema = zod_v4.z.object({
51
72
  kind: zod_v4.z.enum([
@@ -256,6 +277,72 @@ const GET_KNOWLEDGE_PAGE_ROUTE = require_route_builder.createRoute({
256
277
  }
257
278
  }
258
279
  });
280
+ /**
281
+ * The link readers are newer than the page readers, so a core without them answers these routes with 501
282
+ * and the explorer falls back to counting the pages it has loaded.
283
+ */
284
+ function requireLinkReaders() {
285
+ const { readKnowledgePageLinkCounts, readKnowledgePageLinks } = _mastra_core_knowledge;
286
+ if (!readKnowledgePageLinkCounts || !readKnowledgePageLinks) throw new require_http_exception.HTTPException(501, { message: "Knowledge link counts need a newer @mastra/core." });
287
+ return {
288
+ readKnowledgePageLinkCounts,
289
+ readKnowledgePageLinks
290
+ };
291
+ }
292
+ const GET_KNOWLEDGE_LINK_COUNTS_ROUTE = require_route_builder.createRoute({
293
+ method: "GET",
294
+ path: "/knowledge/:knowledgeKey/link-counts",
295
+ responseType: "json",
296
+ pathParamSchema: knowledgePathParams,
297
+ queryParamSchema: knowledgeLinkCountsQuerySchema,
298
+ responseSchema: knowledgeLinkCountsResponseSchema,
299
+ summary: "Count the links into and out of pages",
300
+ description: "Returns, for each page id, how many distinct other pages link to it and it links to, by body [[ref]] or note mention, counted over the whole store and not only pages the caller has loaded. A page the caller cannot read counts as no links, the same as one that does not exist. 501 when the store has no link index.",
301
+ tags: ["Knowledge"],
302
+ requiresAuth: true,
303
+ handler: async ({ mastra, requestContext, knowledgeKey, pageId }) => {
304
+ try {
305
+ const { store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
306
+ const counts = await requireLinkReaders().readKnowledgePageLinkCounts(store, {
307
+ pageIds: pageId,
308
+ read
309
+ });
310
+ if (!counts) throw new require_http_exception.HTTPException(501, { message: "This Knowledge store has no link index." });
311
+ return { counts };
312
+ } catch (error) {
313
+ return require_server_handlers_error.handleError(error, "Error counting Knowledge page links");
314
+ }
315
+ }
316
+ });
317
+ const GET_KNOWLEDGE_PAGE_LINKS_ROUTE = require_route_builder.createRoute({
318
+ method: "GET",
319
+ path: "/knowledge/:knowledgeKey/pages/:pageId/links",
320
+ responseType: "json",
321
+ pathParamSchema: knowledgePagePathParams,
322
+ queryParamSchema: knowledgePageLinksQuerySchema,
323
+ responseSchema: knowledgePageLinksResponseSchema,
324
+ summary: "List a Knowledge page's links",
325
+ description: "Returns the links into and out of one page, bounded, with the readable pages at their other ends. A page the caller cannot read has none. 501 when the store has no link index.",
326
+ tags: ["Knowledge"],
327
+ requiresAuth: true,
328
+ handler: async ({ mastra, requestContext, knowledgeKey, pageId, direction }) => {
329
+ try {
330
+ const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
331
+ const links = await requireLinkReaders().readKnowledgePageLinks(store, {
332
+ pageId,
333
+ read,
334
+ direction
335
+ });
336
+ if (!links) throw new require_http_exception.HTTPException(501, { message: "This Knowledge store has no link index." });
337
+ return {
338
+ ...links,
339
+ pages: links.pages.map((page) => ({ ...withDisplayLabel(instance, page) }))
340
+ };
341
+ } catch (error) {
342
+ return require_server_handlers_error.handleError(error, "Error reading Knowledge page links");
343
+ }
344
+ }
345
+ });
259
346
  const GET_KNOWLEDGE_GRAPH_ROUTE = require_route_builder.createRoute({
260
347
  method: "GET",
261
348
  path: "/knowledge/:knowledgeKey/graph",
@@ -440,6 +527,18 @@ Object.defineProperty(exports, "GET_KNOWLEDGE_GRAPH_ROUTE", {
440
527
  return GET_KNOWLEDGE_GRAPH_ROUTE;
441
528
  }
442
529
  });
530
+ Object.defineProperty(exports, "GET_KNOWLEDGE_LINK_COUNTS_ROUTE", {
531
+ enumerable: true,
532
+ get: function() {
533
+ return GET_KNOWLEDGE_LINK_COUNTS_ROUTE;
534
+ }
535
+ });
536
+ Object.defineProperty(exports, "GET_KNOWLEDGE_PAGE_LINKS_ROUTE", {
537
+ enumerable: true,
538
+ get: function() {
539
+ return GET_KNOWLEDGE_PAGE_LINKS_ROUTE;
540
+ }
541
+ });
443
542
  Object.defineProperty(exports, "GET_KNOWLEDGE_PAGE_ROUTE", {
444
543
  enumerable: true,
445
544
  get: function() {
@@ -471,4 +570,4 @@ Object.defineProperty(exports, "STREAM_KNOWLEDGE_EVENTS_ROUTE", {
471
570
  }
472
571
  });
473
572
 
474
- //# sourceMappingURL=knowledge-qu0om3W7.cjs.map
573
+ //# sourceMappingURL=knowledge-urR7FFG8.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-urR7FFG8.cjs","names":["z","MASTRA_KNOWLEDGE_PRINCIPALS_KEY","HTTPException","getHandlerFGAProvider","MastraFGAPermissions","coreKnowledge","createRoute","handleError"],"sources":["../src/server/schemas/knowledge.ts","../src/server/handlers/knowledge.ts"],"sourcesContent":["import { z } from 'zod/v4';\n\nexport const knowledgePathParams = z.object({\n knowledgeKey: z.string().describe('Application key the Knowledge instance is registered under'),\n});\n\nexport const knowledgePagePathParams = knowledgePathParams.extend({\n pageId: z.string().min(1).max(512).describe('Knowledge page id'),\n});\n\nconst pageId = z.string().min(1).max(512);\nconst limit = z.coerce.number().int().min(1).max(100).optional();\n\nexport const knowledgeTreeQuerySchema = z.object({\n parentId: pageId.optional().describe('Page whose children to list; omit for the root scopes'),\n cursor: z.string().optional(),\n limit,\n});\n\nexport const knowledgePageQuerySchema = z.object({\n noteCursor: z.string().optional(),\n noteLimit: limit,\n});\n\nexport const knowledgeGraphQuerySchema = z.object({\n rootId: pageId.optional().describe('Page to walk from; omit to walk every root scope'),\n maxPages: z.coerce.number().int().min(1).max(500).optional(),\n});\n\n// A repeated param (`?scopeId=a&scopeId=b`) arrives as an array, a lone one as a string.\nconst scopeIds = z\n .union([z.string(), z.array(z.string())])\n .transform(value => (Array.isArray(value) ? value : [value]))\n .pipe(z.array(pageId).max(20));\n\nexport const knowledgeSearchQuerySchema = z.object({\n q: z.string().min(1).max(200).describe('Text to match in page names, synopses, bodies and notes'),\n scopeId: scopeIds.optional().describe('Only pages within these scopes'),\n limit,\n});\n\nconst pageIds = z\n .union([z.string(), z.array(z.string())])\n .transform(value => (Array.isArray(value) ? value : [value]))\n .pipe(z.array(pageId).min(1).max(200));\n\nexport const knowledgeLinkCountsQuerySchema = z.object({\n pageId: pageIds.describe('Pages to count links for; repeat the param for each, at most 200'),\n});\n\nexport const knowledgePageLinksQuerySchema = z.object({\n direction: z.enum(['in', 'out', 'both']).optional().describe('Links into the page, out of it, or both (default)'),\n});\n\nexport const knowledgeActivityQuerySchema = z.object({\n scopeId: pageId.optional(),\n pageId: pageId.optional(),\n cursor: z.string().optional(),\n limit,\n});\n\n// Payloads come from the @mastra/core/knowledge page readers; the UI package owns their TypeScript shapes.\nconst payload = z.record(z.string(), z.unknown());\n\nexport const listKnowledgeResponseSchema = z.object({\n instances: z.array(z.object({ key: z.string(), id: z.string() })),\n});\nexport const knowledgeTreeResponseSchema = payload;\nexport const knowledgePageResponseSchema = payload;\nexport const knowledgeGraphResponseSchema = payload;\nexport const knowledgeSearchResponseSchema = z.object({ results: z.array(payload) });\nexport const knowledgeLinkCountsResponseSchema = z.object({\n counts: z.record(z.string(), z.object({ in: z.number(), out: z.number() })),\n});\nexport const knowledgePageLinksResponseSchema = z.object({\n edges: z.array(\n z.object({ fromPageId: z.string(), toPageId: z.string(), kind: z.enum(['body', 'note']), count: z.number() }),\n ),\n pages: z.array(payload),\n truncated: z.boolean(),\n});\nexport const knowledgeActivityResponseSchema = payload;\nexport const knowledgeEventsResponseSchema = z.object({\n kind: z.enum(['scope', 'page', 'note', 'pin']),\n op: z.string(),\n pageId: z.string().optional(),\n scopeId: z.string().optional(),\n at: z.string(),\n});\n","import * as coreKnowledge from '@mastra/core/knowledge';\nimport type { Knowledge, KnowledgeChangeEvent } from '@mastra/core/knowledge';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { KnowledgeReadScope, KnowledgeStorage } from '@mastra/core/storage';\nimport { MASTRA_KNOWLEDGE_PRINCIPALS_KEY } from '../constants';\nimport { MastraFGAPermissions } from '../fga-permissions';\nimport { HTTPException } from '../http-exception';\nimport {\n knowledgeActivityQuerySchema,\n knowledgeActivityResponseSchema,\n knowledgeEventsResponseSchema,\n knowledgeGraphQuerySchema,\n knowledgeGraphResponseSchema,\n knowledgePagePathParams,\n knowledgePageQuerySchema,\n knowledgePageResponseSchema,\n knowledgePathParams,\n knowledgeSearchQuerySchema,\n knowledgeSearchResponseSchema,\n knowledgeLinkCountsQuerySchema,\n knowledgeLinkCountsResponseSchema,\n knowledgePageLinksQuerySchema,\n knowledgePageLinksResponseSchema,\n knowledgeTreeQuerySchema,\n knowledgeTreeResponseSchema,\n listKnowledgeResponseSchema,\n} from '../schemas/knowledge';\nimport { createRoute } from '../server-adapter/routes/route-builder';\n\nimport { handleError } from './error';\nimport { getHandlerFGAProvider } from './utils';\n\n/**\n * Read-only browsing of Knowledge instances registered on Mastra, for Studio. Nothing here writes.\n *\n * What a caller reads depends on whether the app has auth configured (`server.auth` or `studio.auth`):\n * - No auth: probably a local or test project, so the routes read as the instance owner (`'all'`).\n * - Auth: reads are narrowed to what the signed-in caller can read. The app maps the user to Knowledge\n * principals by setting MASTRA_KNOWLEDGE_PRINCIPALS_KEY in `auth.authorize` (a `string[]`, or `'all'`\n * for an admin); the instance turns them into a read scope with `readScopeFor`. A caller with no\n * mapping is refused with 403.\n *\n * On top of that the path derives `knowledge:read` (`GET /knowledge/...`), and with FGA configured each\n * instance is filtered and gated by `knowledge:read` on that instance. The routes are opt-in\n * (KNOWLEDGE_ROUTES); hosts with their own scoping (Factory) do not mount them.\n */\n\nfunction hasAuth(mastra: Mastra): boolean {\n return Boolean(mastra.getServer?.()?.auth || (mastra as any).getStudio?.()?.auth);\n}\n\nasync function callerReadScope(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n instance: Knowledge,\n): Promise<KnowledgeReadScope> {\n if (!hasAuth(mastra)) return 'all';\n\n const principals = requestContext?.get(MASTRA_KNOWLEDGE_PRINCIPALS_KEY);\n if (principals === undefined || principals === null) {\n throw new HTTPException(403, {\n message: `Knowledge access is not mapped for this caller. Set request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" in auth.authorize.`,\n });\n }\n if (principals === 'all') return 'all';\n // The value comes from the app's own authorize code, so a bad one is a host misconfiguration, not a denial.\n if (!Array.isArray(principals) || principals.some(principal => typeof principal !== 'string')) {\n throw new HTTPException(500, {\n message: `Request context key \"${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}\" must be a string array or 'all'.`,\n });\n }\n try {\n return await instance.readScopeFor(principals);\n } catch (error) {\n // A principal that matches no declared scope type: the app's mapping disagrees with its declarations.\n if (error instanceof Error && error.name === 'KnowledgeDeclarationError') {\n throw new HTTPException(500, { message: error.message, cause: error });\n }\n throw error;\n }\n}\n\nasync function accessibleInstances(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n entries: Array<{ id: string; key: string }>,\n): Promise<Set<string>> {\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (!fgaProvider || !user || typeof user !== 'object' || entries.length === 0) {\n return new Set(entries.map(entry => entry.key));\n }\n // FGA names a Knowledge instance by its registered key, as the route metadata does (`:knowledgeKey`).\n const accessible: Array<{ id: string; key: string }> = await fgaProvider.filterAccessible(\n user,\n entries.map(entry => ({ ...entry, id: entry.key })),\n 'knowledge',\n MastraFGAPermissions.KNOWLEDGE_READ,\n );\n return new Set(accessible.map(entry => entry.key));\n}\n\ntype KnowledgePageReaders = Pick<\n typeof coreKnowledge,\n | 'listKnowledgeTreeChildren'\n | 'readKnowledgePage'\n | 'readKnowledgePageActivity'\n | 'readKnowledgePageGraph'\n | 'searchKnowledgeExplorerPages'\n>;\n\n// The page readers first ship in @mastra/core 1.81.0, above this package's peer floor. A named import\n// of an export an older core lacks fails at ESM link time and takes the whole server down, so they are\n// read off the namespace (as in schedules-workflows-shim.ts) and the routes answer 501 without them.\nconst pageReaders: Partial<KnowledgePageReaders> = coreKnowledge;\n\nfunction requirePageReaders(): KnowledgePageReaders {\n const {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n } = pageReaders;\n if (\n !listKnowledgeTreeChildren ||\n !readKnowledgePage ||\n !readKnowledgePageActivity ||\n !readKnowledgePageGraph ||\n !searchKnowledgeExplorerPages\n ) {\n throw new HTTPException(501, { message: 'Knowledge browsing needs @mastra/core 1.81.0 or later.' });\n }\n return {\n listKnowledgeTreeChildren,\n readKnowledgePage,\n readKnowledgePageActivity,\n readKnowledgePageGraph,\n searchKnowledgeExplorerPages,\n };\n}\n\n/**\n * The declared grants between the graph's scopes, each with its principal's display label. Grants are\n * newer than the page readers, so a core without them sends none and the graph still loads.\n */\nasync function graphGrants(\n instance: Knowledge,\n store: KnowledgeStorage,\n pages: readonly coreKnowledge.KnowledgePage[],\n read: KnowledgeReadScope,\n): Promise<Array<coreKnowledge.KnowledgeGraphScopeGrant & { principalLabel?: string }> | undefined> {\n const readGrants = (coreKnowledge as Partial<typeof coreKnowledge>).readKnowledgeScopeGrants;\n const scopeGrants = (instance as Partial<Knowledge>).scopeGrants?.bind(instance);\n if (!readGrants || !scopeGrants) return undefined;\n const grants = await readGrants(store, { pages, read, grantsFor: scopeGrants });\n return grants.map(grant => {\n const principalLabel = instance.scopeLabel?.(grant.principal);\n return principalLabel ? { ...grant, principalLabel } : grant;\n });\n}\n\nasync function resolveStore(\n mastra: Mastra,\n requestContext: RequestContext | undefined,\n knowledgeKey: string | undefined,\n): Promise<{ instance: Knowledge; store: KnowledgeStorage; read: KnowledgeReadScope; readers: KnowledgePageReaders }> {\n const instances = mastra.listKnowledge();\n // Own keys only: `constructor` or `__proto__` must not resolve to an Object.prototype member.\n const instance = knowledgeKey && Object.hasOwn(instances, knowledgeKey) ? instances[knowledgeKey] : undefined;\n if (!knowledgeKey || !instance)\n throw new HTTPException(404, { message: `Knowledge ${knowledgeKey ?? ''} not found` });\n\n // An instance the caller may not read looks the same as one that does not exist.\n const fgaProvider = getHandlerFGAProvider(mastra, requestContext);\n const user = requestContext?.get('user');\n if (fgaProvider && user && typeof user === 'object') {\n const allowed = await fgaProvider.check(user, {\n resource: { type: 'knowledge', id: knowledgeKey },\n permission: MastraFGAPermissions.KNOWLEDGE_READ,\n });\n if (!allowed) throw new HTTPException(404, { message: `Knowledge ${knowledgeKey} not found` });\n }\n const readers = requirePageReaders();\n const read = await callerReadScope(mastra, requestContext, instance);\n return { instance, store: await instance.getStorage(), read, readers };\n}\n\n/**\n * Adds each scope page's declared `displayLabel` with its address's `$params` filled in (`'$orgId policy'`\n * → `'acme policy'`), so the explorer can caption scopes. Scope declarations live in config, not\n * storage, so the readers can't supply it. Older cores without `scopeLabel` send no label.\n */\nfunction withDisplayLabel<T extends { isScope: boolean; address?: string }>(\n instance: Knowledge,\n page: T,\n): T & { displayLabel?: string } {\n if (!page.isScope || !page.address) return page;\n const displayLabel = instance.scopeLabel?.(page.address);\n return displayLabel ? { ...page, displayLabel } : page;\n}\n\nexport const LIST_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge',\n responseType: 'json',\n responseSchema: listKnowledgeResponseSchema,\n summary: 'List Knowledge instances',\n description:\n \"Returns the Knowledge instances registered on this Mastra instance, by application key. Without app auth the other Knowledge routes read the whole instance; with auth they read only what the caller's Knowledge principals (MASTRA_KNOWLEDGE_PRINCIPALS_KEY, set in auth.authorize) can read, and refuse an unmapped caller with 403.\",\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext }) => {\n try {\n const all = Object.entries(mastra.listKnowledge()).map(([key, instance]) => ({ key, id: instance.id }));\n const allowed = await accessibleInstances(mastra, requestContext, all);\n return { instances: all.filter(entry => allowed.has(entry.key)) };\n } catch (error) {\n return handleError(error, 'Error listing Knowledge instances');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_TREE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/tree',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeTreeQuerySchema,\n responseSchema: knowledgeTreeResponseSchema,\n summary: 'List one level of the Knowledge page tree',\n description:\n 'Without parentId, returns the root scopes. With parentId, returns its child scopes (first page only) then its child pages in order, paged with cursor.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, parentId, cursor, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const level = await readers.listKnowledgeTreeChildren(store, {\n parentId: parentId ?? null,\n read,\n // An empty `?cursor=` means no cursor, so root scopes are still listed.\n cursor: cursor || undefined,\n limit,\n });\n return { ...level, pages: level.pages.map(page => withDisplayLabel(instance, page)) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge tree');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_PAGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/pages/:pageId',\n responseType: 'json',\n pathParamSchema: knowledgePagePathParams,\n queryParamSchema: knowledgePageQuerySchema,\n responseSchema: knowledgePageResponseSchema,\n summary: 'Get a Knowledge page',\n description:\n 'Returns one page with its ancestors, a page of its notes, its pin, the pages its notes reference and notes elsewhere that mention it; 404 when it does not exist',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId, noteCursor, noteLimit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const view = await readers.readKnowledgePage(store, { pageId, read, noteCursor, noteLimit });\n if (!view) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const label = <T extends { isScope: boolean; declaration?: string }>(page: T) => withDisplayLabel(instance, page);\n return {\n ...view,\n page: label(view.page),\n ancestors: view.ancestors.map(label),\n related: view.related.map(label),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge page');\n }\n },\n});\n\n/**\n * The link readers are newer than the page readers, so a core without them answers these routes with 501\n * and the explorer falls back to counting the pages it has loaded.\n */\nfunction requireLinkReaders() {\n const { readKnowledgePageLinkCounts, readKnowledgePageLinks } = coreKnowledge as Partial<typeof coreKnowledge>;\n if (!readKnowledgePageLinkCounts || !readKnowledgePageLinks) {\n throw new HTTPException(501, { message: 'Knowledge link counts need a newer @mastra/core.' });\n }\n return { readKnowledgePageLinkCounts, readKnowledgePageLinks };\n}\n\nexport const GET_KNOWLEDGE_LINK_COUNTS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/link-counts',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeLinkCountsQuerySchema,\n responseSchema: knowledgeLinkCountsResponseSchema,\n summary: 'Count the links into and out of pages',\n description:\n 'Returns, for each page id, how many distinct other pages link to it and it links to, by body [[ref]] or note mention, counted over the whole store and not only pages the caller has loaded. A page the caller cannot read counts as no links, the same as one that does not exist. 501 when the store has no link index.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId }) => {\n try {\n const { store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n const counts = await requireLinkReaders().readKnowledgePageLinkCounts(store, { pageIds: pageId, read });\n if (!counts) throw new HTTPException(501, { message: 'This Knowledge store has no link index.' });\n return { counts };\n } catch (error) {\n return handleError(error, 'Error counting Knowledge page links');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_PAGE_LINKS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/pages/:pageId/links',\n responseType: 'json',\n pathParamSchema: knowledgePagePathParams,\n queryParamSchema: knowledgePageLinksQuerySchema,\n responseSchema: knowledgePageLinksResponseSchema,\n summary: \"List a Knowledge page's links\",\n description:\n 'Returns the links into and out of one page, bounded, with the readable pages at their other ends. A page the caller cannot read has none. 501 when the store has no link index.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, pageId, direction }) => {\n try {\n const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n const links = await requireLinkReaders().readKnowledgePageLinks(store, { pageId, read, direction });\n if (!links) throw new HTTPException(501, { message: 'This Knowledge store has no link index.' });\n return { ...links, pages: links.pages.map(page => ({ ...withDisplayLabel(instance, page) })) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge page links');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_GRAPH_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/graph',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeGraphQuerySchema,\n responseSchema: knowledgeGraphResponseSchema,\n summary: 'Get a bounded Knowledge page graph',\n description:\n 'Returns pages under rootId (or every root scope) breadth-first with parent and mention edges, bounded; truncated is true when a limit stopped it. grants lists the declared access grants onto the scopes shown, from principal scopes the caller can read. 404 when rootId does not exist.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, rootId, maxPages }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const graph = await readers.readKnowledgePageGraph(store, {\n read,\n rootId: rootId ?? null,\n ...(maxPages ? { limits: { maxPages } } : {}),\n });\n if (!graph) throw new HTTPException(404, { message: 'Knowledge page not found' });\n const grants = await graphGrants(instance, store, graph.pages, read);\n return {\n ...graph,\n pages: graph.pages.map(page => withDisplayLabel(instance, page)),\n ...(grants ? { grants } : {}),\n };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge graph');\n }\n },\n});\n\nexport const SEARCH_KNOWLEDGE_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/search',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeSearchQuerySchema,\n responseSchema: knowledgeSearchResponseSchema,\n summary: 'Search Knowledge pages and notes',\n description: 'Returns pages whose name, synopsis or body, and notes whose text, match the query',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, q, scopeId, limit }) => {\n try {\n const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n const results = await readers.searchKnowledgeExplorerPages(store, {\n query: q,\n read,\n ...(scopeId?.length ? { scopeIds: scopeId } : {}),\n limit,\n });\n return { results: results.map(hit => ({ ...hit, page: withDisplayLabel(instance, hit.page) })) };\n } catch (error) {\n return handleError(error, 'Error searching Knowledge');\n }\n },\n});\n\nexport const GET_KNOWLEDGE_ACTIVITY_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/activity',\n responseType: 'json',\n pathParamSchema: knowledgePathParams,\n queryParamSchema: knowledgeActivityQuerySchema,\n responseSchema: knowledgeActivityResponseSchema,\n summary: 'List recent Knowledge activity',\n description: 'Returns a newest-first page of activity, optionally for one scope or one page',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, scopeId, pageId, cursor, limit }) => {\n try {\n const { store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);\n return { ...(await readers.readKnowledgePageActivity(store, { read, scopeId, pageId, cursor, limit })) };\n } catch (error) {\n return handleError(error, 'Error reading Knowledge activity');\n }\n },\n});\n\nconst KEEPALIVE_MS = 25_000;\n/**\n * The read scope is resolved when the stream opens. Ending it after this long makes the client reconnect,\n * which resolves the caller's read scope again, so a revoked grant stops receiving changes.\n */\nconst STREAM_MAX_AGE_MS = 5 * 60_000;\n\n/**\n * What a viewer may learn about one change: the ids in it they can read, or nothing when they can read\n * none. A page they can read now, or the scope it is (or was, before a move or merge) in, counts; a\n * deleted page is matched by its scope.\n */\nasync function visibleChange(store: KnowledgeStorage, read: KnowledgeReadScope, event: KnowledgeChangeEvent) {\n const readable = async (id: string | undefined) =>\n id !== undefined && (read === 'all' || (await store.getPage({ id, read })) !== null);\n const scopeId = 'scopeId' in event ? event.scopeId : undefined;\n const fromScopeId = 'fromScopeId' in event ? event.fromScopeId : undefined;\n const [page, scope, fromScope] = await Promise.all([\n readable(event.pageId),\n readable(scopeId),\n readable(fromScopeId),\n ]);\n if (!page && !scope && !fromScope) return null;\n return {\n kind: event.kind,\n op: event.op,\n ...(page ? { pageId: event.pageId } : {}),\n ...(scope ? { scopeId } : {}),\n at: event.at.toISOString(),\n };\n}\n\nexport const STREAM_KNOWLEDGE_EVENTS_ROUTE = createRoute({\n method: 'GET',\n path: '/knowledge/:knowledgeKey/events',\n responseType: 'stream',\n streamFormat: 'sse',\n sseFlushOnConnect: true,\n pathParamSchema: knowledgePathParams,\n responseSchema: knowledgeEventsResponseSchema,\n summary: 'Stream Knowledge changes',\n description:\n 'Server-Sent Events, one per committed write the caller can read: { kind, op, pageId?, scopeId?, at }. Ids the caller cannot read are left out, and changes they cannot read at all are not sent. Re-read what changed with the other Knowledge routes.',\n tags: ['Knowledge'],\n requiresAuth: true,\n handler: async ({ mastra, requestContext, knowledgeKey, abortSignal }) => {\n try {\n const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);\n if (typeof instance.onChange !== 'function') {\n throw new HTTPException(501, { message: 'Knowledge change events need @mastra/core 1.81.0 or later.' });\n }\n const logger = mastra.getLogger();\n let stop = () => {};\n return new ReadableStream({\n start(controller) {\n let open = true;\n // Writes are filtered in order so a viewer never sees a later change before an earlier one.\n let queue = Promise.resolve();\n const unsubscribe = instance.onChange(event => {\n queue = queue.then(async () => {\n const change = await visibleChange(store, read, event).catch(error => {\n logger?.error('Error filtering a Knowledge change', { error });\n return null;\n });\n if (open && change) controller.enqueue(change);\n });\n });\n const keepalive = setInterval(() => open && controller.enqueue(': keepalive\\n\\n'), KEEPALIVE_MS);\n const expire = setTimeout(() => stop(), STREAM_MAX_AGE_MS);\n stop = () => {\n if (!open) return;\n open = false;\n clearInterval(keepalive);\n clearTimeout(expire);\n unsubscribe();\n try {\n controller.close();\n } catch {\n // Already closed\n }\n };\n if (abortSignal?.aborted) stop();\n else abortSignal?.addEventListener('abort', stop, { once: true });\n },\n cancel() {\n stop();\n },\n });\n } catch (error) {\n return handleError(error, 'Error streaming Knowledge changes');\n }\n },\n});\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ const require_server_handlers_error = require("./server/handlers/error.cjs");
5
5
  const require_server_handlers_observability_list_query_schemas = require("./server/handlers/observability-list-query-schemas.cjs");
6
6
  const require_server_handlers_observability_shared = require("./server/handlers/observability-shared.cjs");
7
7
  const require_server_handlers_observability_storage_schemas = require("./server/handlers/observability-storage-schemas.cjs");
8
- const require_observability_new_endpoints = require("./observability-new-endpoints-KJCQZLZr.cjs");
8
+ const require_observability_new_endpoints = require("./observability-new-endpoints-jjCgXuTF.cjs");
9
9
  let zod_v4 = require("zod/v4");
10
10
  let _mastra_core_evals = require("@mastra/core/evals");
11
11
  let _mastra_core_evals_scoreTraces = require("@mastra/core/evals/scoreTraces");
@@ -499,4 +499,4 @@ Object.defineProperty(exports, "observability_exports", {
499
499
  }
500
500
  });
501
501
 
502
- //# sourceMappingURL=observability-dUv60Mzz.cjs.map
502
+ //# sourceMappingURL=observability-BtdW6mjq.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"observability-dUv60Mzz.cjs","names":["z","dateRangeSchema","tracesFilterSchema","createObservabilityListQuerySchema","tracesOrderBySchema","createRoute","listTracesResponseSchema","pickParams","getObservabilityStore","OBSERVABILITY_LIST_ENDPOINTS","paginationArgsSchema","handleError","listTracesLightResponseSchema","store","branchesFilterSchema","branchesOrderBySchema","listBranchesResponseSchema","getBranchArgsSchema","wrapSchemaForQueryParams","getBranchResponseSchema","HTTPException","getTraceArgsSchema","getTraceResponseSchema","traceSpanSchema","toTraceSpans","getTraceLightResponseSchema","getSpanArgsSchema","getSpanResponseSchema","extractTrajectoryFromTrace","batchDeleteTracesArgsSchema","batchDeleteTracesResponseSchema","scoreTracesRequestSchema","scoreTracesResponseSchema","spanIdsSchema","listScoresResponseSchema","getScoresStore"],"sources":["../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"observability-BtdW6mjq.cjs","names":["z","dateRangeSchema","tracesFilterSchema","createObservabilityListQuerySchema","tracesOrderBySchema","createRoute","listTracesResponseSchema","pickParams","getObservabilityStore","OBSERVABILITY_LIST_ENDPOINTS","paginationArgsSchema","handleError","listTracesLightResponseSchema","store","branchesFilterSchema","branchesOrderBySchema","listBranchesResponseSchema","getBranchArgsSchema","wrapSchemaForQueryParams","getBranchResponseSchema","HTTPException","getTraceArgsSchema","getTraceResponseSchema","traceSpanSchema","toTraceSpans","getTraceLightResponseSchema","getSpanArgsSchema","getSpanResponseSchema","extractTrajectoryFromTrace","batchDeleteTracesArgsSchema","batchDeleteTracesResponseSchema","scoreTracesRequestSchema","scoreTracesResponseSchema","spanIdsSchema","listScoresResponseSchema","getScoresStore"],"sources":["../src/server/handlers/observability.ts"],"sourcesContent":["import { extractTrajectoryFromTrace, listScoresResponseSchema } from '@mastra/core/evals';\nimport { scoreTraces } from '@mastra/core/evals/scoreTraces';\nimport {\n tracesFilterSchema,\n tracesOrderBySchema,\n spanIdsSchema,\n listTracesResponseSchema,\n scoreTracesRequestSchema,\n scoreTracesResponseSchema,\n getTraceArgsSchema,\n getTraceResponseSchema,\n getTraceLightResponseSchema,\n getSpanArgsSchema,\n getSpanResponseSchema,\n dateRangeSchema,\n toTraceSpans,\n traceSpanSchema,\n} from '@mastra/core/storage';\n// `branches*`, `listBranches*`, and `getBranch*` schemas are new in\n// @mastra/core@1.32.0; route them through a shim that tolerates older cores\n// (see ./observability-storage-schemas.ts for full rationale).\nimport { z } from 'zod/v4';\nimport { HTTPException } from '../http-exception';\nimport type { ServerRoute } from '../server-adapter/routes';\nimport { createRoute, pickParams, wrapSchemaForQueryParams } from '../server-adapter/routes/route-builder';\nimport { handleError } from './error';\nimport { paginationArgsSchema } from './observability-list-query-schemas';\nimport {\n assertObservabilityDeltaSupported,\n createObservabilityListQuerySchema,\n getObservabilityStore,\n getScoresStore,\n getStorage,\n OBSERVABILITY_LIST_ENDPOINTS,\n} from './observability-shared';\nimport {\n branchesFilterSchema,\n branchesOrderBySchema,\n listBranchesResponseSchema,\n getBranchArgsSchema,\n getBranchResponseSchema,\n listTracesLightResponseSchema,\n batchDeleteTracesArgsSchema,\n batchDeleteTracesResponseSchema,\n} from './observability-storage-schemas';\n\nexport * from './observability-new-endpoints';\n\n// ============================================================================\n// Legacy Parameter Support (backward compatibility with main branch API)\n// ============================================================================\n\n/**\n * Legacy query parameters from the old API (main branch).\n * These are accepted for backward compatibility and transformed to new format.\n */\nconst legacyQueryParamsSchema = z.object({\n // Old: dateRange was in pagination, now it's startedAt in filters\n dateRange: dateRangeSchema.optional(),\n // Old: name matched span names like \"agent run: 'myAgent'\"\n name: z.string().optional(),\n // entityType needs preprocessing to handle legacy 'workflow' value\n entityType: z.preprocess(val => (val === 'workflow' ? 'workflow_run' : val), z.string().optional()),\n});\n\n/**\n * Transforms legacy query parameters to the new format.\n * - dateRange -> startedAt (if startedAt not already set)\n * - name=\"agent run: 'x'\" -> entityId='x', entityType='agent'\n * - name=\"workflow run: 'x'\" -> entityId='x', entityType='workflow_run'\n * - entityType='workflow' -> entityType='workflow_run' (enum value fix)\n */\nfunction transformLegacyParams(params: Record<string, unknown>): Record<string, unknown> {\n const result = { ...params };\n\n // Transform old entityType='workflow' -> 'workflow_run' to support direct handler usage in tests\n if (result.entityType === 'workflow') {\n result.entityType = 'workflow_run';\n }\n\n // Transform old dateRange -> new startedAt\n if (params.dateRange && !params.startedAt) {\n result.startedAt = params.dateRange;\n delete result.dateRange;\n }\n\n // Transform old name -> entityId + entityType\n // Old format: name matched span names like \"agent run: 'myAgent'\" or \"workflow run: 'myWorkflow'\"\n if (typeof params.name === 'string' && !params.entityId) {\n const agentMatch = params.name.match(/^agent run: '([^']+)'$/);\n const workflowMatch = params.name.match(/^workflow run: '([^']+)'$/);\n\n if (agentMatch) {\n result.entityId = agentMatch[1];\n result.entityType = 'agent';\n } else if (workflowMatch) {\n result.entityId = workflowMatch[1];\n result.entityType = 'workflow_run';\n }\n delete result.name;\n }\n\n return result;\n}\n\n// ============================================================================\n// Route Definitions (new pattern - handlers defined inline with createRoute)\n// ============================================================================\n\n/** Filter shape shared by the full and lightweight trace list routes. */\nconst tracesListFilterSchema = tracesFilterSchema.extend({\n ...legacyQueryParamsSchema.shape, // Accept legacy params for backward compatibility\n entityType: z.preprocess(\n value => (value === 'workflow' ? 'workflow_run' : value),\n tracesFilterSchema.shape.entityType,\n ),\n});\n\nconst listTracesQueryParamSchema = createObservabilityListQuerySchema(tracesListFilterSchema, tracesOrderBySchema);\n\n/** Route: GET /observability/traces - paginated trace listing with filtering and sorting. */\nexport const LIST_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesResponseSchema,\n summary: 'List traces',\n description:\n 'Returns a paginated list of traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n // Transform legacy params to new format before processing\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n return await observabilityStore.listTraces({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing traces');\n }\n },\n});\n\n/** Route: GET /observability/traces/light - paginated lightweight trace listing with filtering and sorting. */\nexport const LIST_TRACES_LIGHT_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/light',\n responseType: 'json',\n queryParamSchema: listTracesQueryParamSchema,\n responseSchema: listTracesLightResponseSchema,\n summary: 'List lightweight traces',\n description:\n 'Returns a paginated list of lightweight traces with optional filtering and sorting. In delta mode, returns only newly listed traces matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const transformedParams = transformLegacyParams(params);\n\n const filters = pickParams(tracesFilterSchema, transformedParams);\n const observabilityStore = await getObservabilityStore(mastra);\n\n // Every current store answers `listTracesLight` — stores without a dedicated\n // implementation inherit the base class's projection fallback. This guard is\n // only for an older `@mastra/core` whose base class predates the method, where\n // calling it would throw `TypeError: ... is not a function`; there we fall back\n // to `listTraces` so consumers still get a response.\n const store = observabilityStore as { listTracesLight?: unknown };\n const supportsLight = typeof store.listTracesLight === 'function';\n\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.traces);\n const deltaArgs = {\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n } as const;\n return supportsLight\n ? await observabilityStore.listTracesLight(deltaArgs)\n : await observabilityStore.listTraces(deltaArgs);\n }\n\n const pagination = pickParams(paginationArgsSchema, transformedParams);\n const orderBy = pickParams(tracesOrderBySchema, transformedParams);\n\n if (!supportsLight) {\n return await observabilityStore.listTraces({ filters, pagination, orderBy });\n }\n return await observabilityStore.listTracesLight({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing lightweight traces');\n }\n },\n});\n\n/** Route: GET /observability/branches - paginated branch-anchor span listing across all traces. */\nexport const LIST_BRANCHES_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/branches',\n responseType: 'json',\n queryParamSchema: createObservabilityListQuerySchema(branchesFilterSchema, branchesOrderBySchema),\n responseSchema: listBranchesResponseSchema,\n summary: 'List trace branches',\n description:\n 'Returns a paginated list of branch-anchor spans (e.g., AGENT_RUN, WORKFLOW_RUN, TOOL_CALL) across all traces. Unlike listTraces (one row per root-rooted trace), each row here is a single anchor span -- including ones nested under a different root entity. In delta mode, returns only newly listed branch rows matching the filters.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, mode, after, limit, ...params }) => {\n try {\n const filters = pickParams(branchesFilterSchema, params);\n const observabilityStore = await getObservabilityStore(mastra);\n if (mode === 'delta') {\n assertObservabilityDeltaSupported(observabilityStore, OBSERVABILITY_LIST_ENDPOINTS.branches);\n return await observabilityStore.listBranches({\n mode,\n filters,\n after: typeof after === 'string' ? after : undefined,\n limit,\n });\n }\n\n const pagination = pickParams(paginationArgsSchema, params);\n const orderBy = pickParams(branchesOrderBySchema, params);\n return await observabilityStore.listBranches({ filters, pagination, orderBy });\n } catch (error) {\n return handleError(error, 'Error listing branches');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/branches/:spanId - retrieve the subtree rooted at a span. */\nexport const GET_BRANCH_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/branches/:spanId',\n responseType: 'json',\n pathParamSchema: getBranchArgsSchema.pick({ traceId: true, spanId: true }),\n queryParamSchema: wrapSchemaForQueryParams(getBranchArgsSchema.pick({ depth: true })),\n responseSchema: getBranchResponseSchema,\n summary: 'Get trace branch by span ID',\n description:\n 'Returns the subtree of spans rooted at the given span. The optional `depth` query param bounds descendant levels below the anchor (0 = anchor only; omitted = full subtree).',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId, depth }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const branch = await observabilityStore.getBranch({ traceId, spanId, depth });\n\n if (!branch) {\n throw new HTTPException(404, { message: `Branch not found for span '${spanId}' in trace '${traceId}'` });\n }\n\n return branch;\n } catch (error) {\n return handleError(error, 'Error getting branch');\n }\n },\n});\n/** Route: GET /observability/traces/:traceId - retrieve a single trace with all spans. */\nexport const GET_TRACE_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceResponseSchema.extend({ spans: z.array(traceSpanSchema) }),\n summary: 'Get AI trace by ID',\n description: 'Returns a complete AI trace with all spans by trace ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n // Stored SpanRecords carry no status field; derive it from error/endedAt so\n // trace-detail spans match the status shown in trace list rows.\n return { ...trace, spans: toTraceSpans(trace.spans) };\n } catch (error) {\n return handleError(error, 'Error getting trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/light - lightweight trace for timeline rendering. */\nexport const GET_TRACE_LIGHT_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/light',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: getTraceLightResponseSchema,\n summary: 'Get lightweight AI trace by ID',\n description:\n 'Returns a trace with lightweight span data (timeline fields only, excludes input/output/attributes/metadata/tags/links)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTraceLight({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n return trace;\n } catch (error) {\n return handleError(error, 'Error getting lightweight trace');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/spans/:spanId - get a single span with full details. */\nexport const GET_SPAN_ROUTE: ServerRoute = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/spans/:spanId',\n responseType: 'json',\n pathParamSchema: getSpanArgsSchema,\n responseSchema: getSpanResponseSchema,\n summary: 'Get a single span by ID',\n description: 'Returns a complete span record with all details by trace ID and span ID',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId, spanId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const span = await observabilityStore.getSpan({ traceId, spanId });\n\n if (!span) {\n throw new HTTPException(404, { message: `Span not found` });\n }\n\n return span;\n } catch (error) {\n return handleError(error, 'Error getting span');\n }\n },\n});\n\n/** Route: GET /observability/traces/:traceId/trajectory - extract trajectory from a trace. */\nexport const GET_TRACE_TRAJECTORY_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/trajectory',\n responseType: 'json',\n pathParamSchema: getTraceArgsSchema,\n responseSchema: z.object({\n steps: z.array(z.unknown()),\n totalDurationMs: z.number().optional(),\n rawOutput: z.unknown().optional(),\n rawWorkflowResult: z.unknown().optional(),\n }),\n summary: 'Extract trajectory from trace',\n description: 'Extracts a structured trajectory (ordered steps) from a trace by analyzing its spans',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceId }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n const trace = await observabilityStore.getTrace({ traceId });\n\n if (!trace) {\n throw new HTTPException(404, { message: `Trace with ID '${traceId}' not found` });\n }\n\n const trajectory = extractTrajectoryFromTrace(trace.spans);\n return trajectory;\n } catch (error) {\n return handleError(error, 'Error extracting trajectory from trace');\n }\n },\n});\n\n/** Route: POST /observability/traces/delete - batch delete traces with cross-signal cascade. */\nexport const DELETE_TRACES_ROUTE: ServerRoute = createRoute({\n method: 'POST',\n path: '/observability/traces/delete',\n responseType: 'json',\n bodySchema: batchDeleteTracesArgsSchema.pick({ traceIds: true }),\n responseSchema: batchDeleteTracesResponseSchema,\n maxBodySize: 256 * 1024,\n summary: 'Delete traces',\n description:\n 'Deletes traces by ID, cascading to all associated data: spans, trace roots/branches, and signal events (scores, feedback, metrics, logs) that reference the deleted traces. Signals without a trace ID are untouched. Experiment traces are deleted like any other trace. On ClickHouse-backed stores, deletes are lightweight and reads may briefly return deleted rows until the delete is fully applied.',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, traceIds }) => {\n try {\n const observabilityStore = await getObservabilityStore(mastra);\n await observabilityStore.batchDeleteTraces({ traceIds });\n return { success: true as const };\n } catch (error) {\n return handleError(error, 'Error deleting traces');\n }\n },\n});\n\n/** Route: POST /observability/traces/score - score traces using a specified scorer (fire-and-forget). */\nexport const SCORE_TRACES_ROUTE = createRoute({\n method: 'POST',\n path: '/observability/traces/score',\n responseType: 'json',\n bodySchema: scoreTracesRequestSchema,\n responseSchema: scoreTracesResponseSchema,\n summary: 'Score traces',\n description: 'Scores one or more traces using a specified scorer (fire-and-forget)',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n // Validate storage exists before starting background task\n getStorage(mastra);\n\n const { scorerName, targets } = params;\n\n const scorer = mastra.getScorerById(scorerName);\n if (!scorer) {\n throw new HTTPException(404, { message: `Scorer '${scorerName}' not found` });\n }\n\n scoreTraces({\n scorerId: scorer.config.id || scorer.config.name,\n targets,\n mastra,\n }).catch(error => {\n const logger = mastra.getLogger();\n logger?.error(`Background trace scoring failed: ${error.message}`, error);\n });\n\n return {\n status: 'success',\n message: `Scoring started for ${targets.length} ${targets.length === 1 ? 'trace' : 'traces'}`,\n traceCount: targets.length,\n };\n } catch (error) {\n return handleError(error, 'Error processing trace scoring');\n }\n },\n});\n\nexport const LIST_SCORES_BY_SPAN_ROUTE = createRoute({\n method: 'GET',\n path: '/observability/traces/:traceId/:spanId/scores',\n responseType: 'json',\n pathParamSchema: spanIdsSchema,\n // List endpoints accept optional query params; use partial() to allow empty queries.\n queryParamSchema: wrapSchemaForQueryParams(paginationArgsSchema.partial()),\n responseSchema: listScoresResponseSchema,\n summary: 'List scores by span',\n description: 'Returns all scores for a specific span within a trace',\n tags: ['Observability'],\n requiresAuth: true,\n handler: async ({ mastra, ...params }) => {\n try {\n const pagination = pickParams(paginationArgsSchema, params);\n const spanIds = pickParams(spanIdsSchema, params);\n\n const scoresStore = await getScoresStore(mastra);\n\n return await scoresStore.listScoresBySpan({\n ...spanIds,\n pagination,\n });\n } catch (error) {\n return handleError(error, 'Error getting scores by span');\n }\n },\n});\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ import { handleError } from "./server/handlers/error.js";
5
5
  import { paginationArgsSchema } from "./server/handlers/observability-list-query-schemas.js";
6
6
  import { OBSERVABILITY_LIST_ENDPOINTS, assertObservabilityDeltaSupported, createObservabilityListQuerySchema, getObservabilityStore, getScoresStore, getStorage } from "./server/handlers/observability-shared.js";
7
7
  import { batchDeleteTracesArgsSchema, batchDeleteTracesResponseSchema, branchesFilterSchema, branchesOrderBySchema, getBranchArgsSchema, getBranchResponseSchema, listBranchesResponseSchema, listTracesLightResponseSchema } from "./server/handlers/observability-storage-schemas.js";
8
- import { A as GET_TRACE_QUERY_VALUES, C as GET_SCORE_AGGREGATE, D as GET_SERVICE_NAMES, E as GET_SCORE_TIME_SERIES, F as NEW_ROUTES, I as QUERY_SPANS, L as QUERY_THREADS, M as LIST_LOGS, N as LIST_METRICS, O as GET_TAGS, P as LIST_SCORES, R as QUERY_TRACES, S as GET_SCORE, T as GET_SCORE_PERCENTILES, _ as GET_METRIC_LABEL_KEYS, a as DELETE_FEEDBACK, b as GET_METRIC_PERCENTILES, c as GET_ENTITY_NAMES, d as GET_FEEDBACK_AGGREGATE, f as GET_FEEDBACK_BREAKDOWN, g as GET_METRIC_BREAKDOWN, h as GET_METRIC_AGGREGATE, i as CREATE_SCORE, j as LIST_FEEDBACK, k as GET_TRACE_QUERY_FIELDS, l as GET_ENTITY_TYPES, m as GET_FEEDBACK_TIME_SERIES, n as AGGREGATE_TRACES, o as DELETE_SCORES, p as GET_FEEDBACK_PERCENTILES, r as CREATE_FEEDBACK, s as GET_CAPABILITIES, t as AGGREGATE_SPANS, u as GET_ENVIRONMENTS, v as GET_METRIC_LABEL_VALUES, w as GET_SCORE_BREAKDOWN, x as GET_METRIC_TIME_SERIES, y as GET_METRIC_NAMES, z as UPDATE_FEEDBACK_REVIEW_STATUS } from "./observability-new-endpoints-BORkWc9f.js";
8
+ import { A as GET_TRACE_QUERY_VALUES, C as GET_SCORE_AGGREGATE, D as GET_SERVICE_NAMES, E as GET_SCORE_TIME_SERIES, F as NEW_ROUTES, I as QUERY_SPANS, L as QUERY_THREADS, M as LIST_LOGS, N as LIST_METRICS, O as GET_TAGS, P as LIST_SCORES, R as QUERY_TRACES, S as GET_SCORE, T as GET_SCORE_PERCENTILES, _ as GET_METRIC_LABEL_KEYS, a as DELETE_FEEDBACK, b as GET_METRIC_PERCENTILES, c as GET_ENTITY_NAMES, d as GET_FEEDBACK_AGGREGATE, f as GET_FEEDBACK_BREAKDOWN, g as GET_METRIC_BREAKDOWN, h as GET_METRIC_AGGREGATE, i as CREATE_SCORE, j as LIST_FEEDBACK, k as GET_TRACE_QUERY_FIELDS, l as GET_ENTITY_TYPES, m as GET_FEEDBACK_TIME_SERIES, n as AGGREGATE_TRACES, o as DELETE_SCORES, p as GET_FEEDBACK_PERCENTILES, r as CREATE_FEEDBACK, s as GET_CAPABILITIES, t as AGGREGATE_SPANS, u as GET_ENVIRONMENTS, v as GET_METRIC_LABEL_VALUES, w as GET_SCORE_BREAKDOWN, x as GET_METRIC_TIME_SERIES, y as GET_METRIC_NAMES, z as UPDATE_FEEDBACK_REVIEW_STATUS } from "./observability-new-endpoints-Di7m_-xc.js";
9
9
  import { z } from "zod/v4";
10
10
  import { extractTrajectoryFromTrace, listScoresResponseSchema } from "@mastra/core/evals";
11
11
  import { scoreTraces } from "@mastra/core/evals/scoreTraces";
@@ -428,4 +428,4 @@ const LIST_SCORES_BY_SPAN_ROUTE = createRoute({
428
428
  });
429
429
  export { GET_TRACE_ROUTE as a, LIST_SCORES_BY_SPAN_ROUTE as c, SCORE_TRACES_ROUTE as d, observability_exports as f, GET_TRACE_LIGHT_ROUTE as i, LIST_TRACES_LIGHT_ROUTE as l, GET_BRANCH_ROUTE as n, GET_TRACE_TRAJECTORY_ROUTE as o, GET_SPAN_ROUTE as r, LIST_BRANCHES_ROUTE as s, DELETE_TRACES_ROUTE as t, LIST_TRACES_ROUTE as u };
430
430
 
431
- //# sourceMappingURL=observability-BS5rmyEH.js.map
431
+ //# sourceMappingURL=observability-DBtyAJnb.js.map