@mastra/server 1.81.0 → 1.82.0-alpha.1

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 (270) hide show
  1. package/dist/{a2a-eUB3oDRN.cjs → a2a-CIq9dtbC.cjs} +3 -3
  2. package/dist/{a2a-eUB3oDRN.cjs.map → a2a-CIq9dtbC.cjs.map} +1 -1
  3. package/dist/{a2a-UYs7rzN2.js → a2a-DULF2hBd.js} +3 -3
  4. package/dist/{a2a-UYs7rzN2.js.map → a2a-DULF2hBd.js.map} +1 -1
  5. package/dist/{agent-builder-GXBcYWdC.cjs → agent-builder-C1SGph1p.cjs} +4 -4
  6. package/dist/{agent-builder-GXBcYWdC.cjs.map → agent-builder-C1SGph1p.cjs.map} +1 -1
  7. package/dist/{agent-builder-TJmawAJj.js → agent-builder-Cq-jo2FP.js} +4 -4
  8. package/dist/{agent-builder-TJmawAJj.js.map → agent-builder-Cq-jo2FP.js.map} +1 -1
  9. package/dist/{agents-BuI0JjjX.js → agents-NRBk4JAs.js} +4 -4
  10. package/dist/{agents-BuI0JjjX.js.map → agents-NRBk4JAs.js.map} +1 -1
  11. package/dist/{agents-BjdRPzyV.cjs → agents-SvkxJW48.cjs} +4 -4
  12. package/dist/{agents-BjdRPzyV.cjs.map → agents-SvkxJW48.cjs.map} +1 -1
  13. package/dist/{api-schema-manifest-Br2vHUvR.js → api-schema-manifest-C8E9EB-q.js} +2 -2
  14. package/dist/{api-schema-manifest-Br2vHUvR.js.map → api-schema-manifest-C8E9EB-q.js.map} +1 -1
  15. package/dist/{api-schema-manifest-Bop13oUv.cjs → api-schema-manifest-CNjDZrQ8.cjs} +2 -2
  16. package/dist/{api-schema-manifest-Bop13oUv.cjs.map → api-schema-manifest-CNjDZrQ8.cjs.map} +1 -1
  17. package/dist/{background-tasks-BkYNmUcf.js → background-tasks-DhQ6upHK.js} +2 -2
  18. package/dist/{background-tasks-BkYNmUcf.js.map → background-tasks-DhQ6upHK.js.map} +1 -1
  19. package/dist/{background-tasks-Civclnuq.cjs → background-tasks-Kcx2YtW0.cjs} +2 -2
  20. package/dist/{background-tasks-Civclnuq.cjs.map → background-tasks-Kcx2YtW0.cjs.map} +1 -1
  21. package/dist/{builder-registry-DHVK50Ba.js → builder-registry-6TFaV4oT.js} +2 -2
  22. package/dist/{builder-registry-DHVK50Ba.js.map → builder-registry-6TFaV4oT.js.map} +1 -1
  23. package/dist/{builder-registry-CamBJItc.cjs → builder-registry-CkPRx_vx.cjs} +2 -2
  24. package/dist/{builder-registry-CamBJItc.cjs.map → builder-registry-CkPRx_vx.cjs.map} +1 -1
  25. package/dist/{channels-EqvuQQbv.cjs → channels-Bfkp5vYI.cjs} +2 -2
  26. package/dist/{channels-EqvuQQbv.cjs.map → channels-Bfkp5vYI.cjs.map} +1 -1
  27. package/dist/{channels-LNR2QIkc.js → channels-hhQ3vD30.js} +2 -2
  28. package/dist/{channels-LNR2QIkc.js.map → channels-hhQ3vD30.js.map} +1 -1
  29. package/dist/{constants-ohUUT3Vg.js → constants-CXAvBYcz.js} +9 -2
  30. package/dist/constants-CXAvBYcz.js.map +1 -0
  31. package/dist/{constants-Co1XjPjd.cjs → constants-DMg8hUOR.cjs} +14 -1
  32. package/dist/constants-DMg8hUOR.cjs.map +1 -0
  33. package/dist/{conversations-fdXV9K0J.js → conversations-CVvZOu1K.js} +3 -3
  34. package/dist/{conversations-fdXV9K0J.js.map → conversations-CVvZOu1K.js.map} +1 -1
  35. package/dist/{conversations-ORTpTqBg.cjs → conversations-Ds6aiCMU.cjs} +3 -3
  36. package/dist/{conversations-ORTpTqBg.cjs.map → conversations-Ds6aiCMU.cjs.map} +1 -1
  37. package/dist/{dist-D-z2svUf.cjs → dist-CPj7ZQaO.cjs} +534 -3525
  38. package/dist/dist-CPj7ZQaO.cjs.map +1 -0
  39. package/dist/{dist-BWRCbA7Z.cjs → dist-Ch5YGldj.cjs} +1 -1
  40. package/dist/{dist-BOXHlYtd.js → dist-DC2mND12.js} +536 -3527
  41. package/dist/dist-DC2mND12.js.map +1 -0
  42. package/dist/dist-DDpKEjMk.js +1 -0
  43. package/dist/docs/SKILL.md +2 -1
  44. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  45. package/dist/docs/references/docs-studio-knowledge.md +81 -0
  46. package/dist/docs/references/reference-observability-tracing-advanced-queries.md +58 -14
  47. package/dist/{editor-builder-DxGZ7IN5.js → editor-builder-BG38irXi.js} +2 -2
  48. package/dist/{editor-builder-DxGZ7IN5.js.map → editor-builder-BG38irXi.js.map} +1 -1
  49. package/dist/{editor-builder-6l27BFzD.cjs → editor-builder-CcSeAW18.cjs} +2 -2
  50. package/dist/{editor-builder-6l27BFzD.cjs.map → editor-builder-CcSeAW18.cjs.map} +1 -1
  51. package/dist/{helpers-CE1fJdLM.cjs → helpers-BKtUXhz2.cjs} +26 -3
  52. package/dist/helpers-BKtUXhz2.cjs.map +1 -0
  53. package/dist/{helpers-CMCXsowL.js → helpers-DNq3LtLq.js} +26 -3
  54. package/dist/helpers-DNq3LtLq.js.map +1 -0
  55. package/dist/knowledge-DykIi0wH.js +431 -0
  56. package/dist/knowledge-DykIi0wH.js.map +1 -0
  57. package/dist/knowledge-qu0om3W7.cjs +474 -0
  58. package/dist/knowledge-qu0om3W7.cjs.map +1 -0
  59. package/dist/{logs-BbaBP2LD.js → logs-B57_NKDn.js} +2 -2
  60. package/dist/{logs-BbaBP2LD.js.map → logs-B57_NKDn.js.map} +1 -1
  61. package/dist/{logs-DI-h9uHR.cjs → logs-BJN3M88A.cjs} +2 -2
  62. package/dist/{logs-DI-h9uHR.cjs.map → logs-BJN3M88A.cjs.map} +1 -1
  63. package/dist/{mcp-CMw0sq0y.cjs → mcp-B9BILfJP.cjs} +2 -2
  64. package/dist/{mcp-CMw0sq0y.cjs.map → mcp-B9BILfJP.cjs.map} +1 -1
  65. package/dist/{mcp-DN9mT9q4.js → mcp-BkmWZD6M.js} +2 -2
  66. package/dist/{mcp-DN9mT9q4.js.map → mcp-BkmWZD6M.js.map} +1 -1
  67. package/dist/{memory-Buhi6kZ-.cjs → memory-Dqod_AK9.cjs} +2 -2
  68. package/dist/{memory-Buhi6kZ-.cjs.map → memory-Dqod_AK9.cjs.map} +1 -1
  69. package/dist/{memory-BTR95ujT.js → memory-ipOCmg0C.js} +2 -2
  70. package/dist/{memory-BTR95ujT.js.map → memory-ipOCmg0C.js.map} +1 -1
  71. package/dist/{observability-pX3wmG8T.js → observability-BS5rmyEH.js} +2 -2
  72. package/dist/{observability-pX3wmG8T.js.map → observability-BS5rmyEH.js.map} +1 -1
  73. package/dist/{observability-DRbDeN1X.cjs → observability-dUv60Mzz.cjs} +2 -2
  74. package/dist/{observability-DRbDeN1X.cjs.map → observability-dUv60Mzz.cjs.map} +1 -1
  75. package/dist/{observability-new-endpoints-CQNVjYYq.js → observability-new-endpoints-BORkWc9f.js} +7 -5
  76. package/dist/observability-new-endpoints-BORkWc9f.js.map +1 -0
  77. package/dist/{observability-new-endpoints-BrB2CKix.cjs → observability-new-endpoints-KJCQZLZr.cjs} +6 -4
  78. package/dist/observability-new-endpoints-KJCQZLZr.cjs.map +1 -0
  79. package/dist/{plans-D9BGMVkL.js → plans-BRf1-Sch.js} +3 -3
  80. package/dist/{plans-D9BGMVkL.js.map → plans-BRf1-Sch.js.map} +1 -1
  81. package/dist/{plans-BHQFsFRU.cjs → plans-Cq23qQ48.cjs} +3 -3
  82. package/dist/{plans-BHQFsFRU.cjs.map → plans-Cq23qQ48.cjs.map} +1 -1
  83. package/dist/{probe-image-size-BFW5qaoE.cjs → probe-image-size-CSrQj2gm.cjs} +2 -2
  84. package/dist/{probe-image-size-BFW5qaoE.cjs.map → probe-image-size-CSrQj2gm.cjs.map} +1 -1
  85. package/dist/{probe-image-size-BrhIVT5B.js → probe-image-size-ssYltjkF.js} +2 -2
  86. package/dist/{probe-image-size-BrhIVT5B.js.map → probe-image-size-ssYltjkF.js.map} +1 -1
  87. package/dist/{responses-Cb-9JV9A.js → responses-CGy87E_N.js} +3 -3
  88. package/dist/{responses-Cb-9JV9A.js.map → responses-CGy87E_N.js.map} +1 -1
  89. package/dist/{responses-4_RCBNJB.cjs → responses-CPTdr5VE.cjs} +3 -3
  90. package/dist/{responses-4_RCBNJB.cjs.map → responses-CPTdr5VE.cjs.map} +1 -1
  91. package/dist/{routes-B1plJpJS.cjs → routes-DSBYmGyo.cjs} +79 -22
  92. package/dist/routes-DSBYmGyo.cjs.map +1 -0
  93. package/dist/{routes-BZ1CkJV4.js → routes-X0Gh3f3T.js} +62 -23
  94. package/dist/routes-X0Gh3f3T.js.map +1 -0
  95. package/dist/{schedules-CQPodXrR.js → schedules-CGViSLZC.js} +2 -2
  96. package/dist/{schedules-CQPodXrR.js.map → schedules-CGViSLZC.js.map} +1 -1
  97. package/dist/{schedules-CL4IU7kS.cjs → schedules-D8ShgpY3.cjs} +2 -2
  98. package/dist/{schedules-CL4IU7kS.cjs.map → schedules-D8ShgpY3.cjs.map} +1 -1
  99. package/dist/{scores-DnEcBe2i.cjs → scores-BZ0Iz_0O.cjs} +2 -2
  100. package/dist/{scores-DnEcBe2i.cjs.map → scores-BZ0Iz_0O.cjs.map} +1 -1
  101. package/dist/{scores-DqImg-o-.js → scores-DqSDYRs0.js} +2 -2
  102. package/dist/{scores-DqImg-o-.js.map → scores-DqSDYRs0.js.map} +1 -1
  103. package/dist/server/auth/helpers.d.ts.map +1 -1
  104. package/dist/server/auth/index.cjs +2 -2
  105. package/dist/server/auth/index.js +2 -2
  106. package/dist/server/constants.d.ts +7 -1
  107. package/dist/server/constants.d.ts.map +1 -1
  108. package/dist/server/fga-permissions.d.ts.map +1 -1
  109. package/dist/server/handlers/a2a.cjs +1 -1
  110. package/dist/server/handlers/a2a.js +1 -1
  111. package/dist/server/handlers/agent-builder.cjs +1 -1
  112. package/dist/server/handlers/agent-builder.js +1 -1
  113. package/dist/server/handlers/agent-controller.cjs +2 -2
  114. package/dist/server/handlers/agent-controller.js +2 -2
  115. package/dist/server/handlers/agent-versions.cjs +1 -1
  116. package/dist/server/handlers/agent-versions.js +1 -1
  117. package/dist/server/handlers/agents.cjs +1 -1
  118. package/dist/server/handlers/agents.js +1 -1
  119. package/dist/server/handlers/auth.cjs +2 -2
  120. package/dist/server/handlers/auth.js +2 -2
  121. package/dist/server/handlers/authorship.cjs +1 -1
  122. package/dist/server/handlers/authorship.js +1 -1
  123. package/dist/server/handlers/background-tasks.cjs +1 -1
  124. package/dist/server/handlers/background-tasks.js +1 -1
  125. package/dist/server/handlers/builder-registry.cjs +1 -1
  126. package/dist/server/handlers/builder-registry.js +1 -1
  127. package/dist/server/handlers/channels.cjs +1 -1
  128. package/dist/server/handlers/channels.js +1 -1
  129. package/dist/server/handlers/conversations.cjs +1 -1
  130. package/dist/server/handlers/conversations.js +1 -1
  131. package/dist/server/handlers/datasets.cjs +1 -1
  132. package/dist/server/handlers/datasets.js +1 -1
  133. package/dist/server/handlers/editor-builder.cjs +1 -1
  134. package/dist/server/handlers/editor-builder.js +1 -1
  135. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  136. package/dist/server/handlers/favorites-enrichment.js +1 -1
  137. package/dist/server/handlers/knowledge.cjs +10 -0
  138. package/dist/server/handlers/knowledge.d.ts +237 -0
  139. package/dist/server/handlers/knowledge.d.ts.map +1 -0
  140. package/dist/server/handlers/knowledge.js +1 -0
  141. package/dist/server/handlers/logs.cjs +1 -1
  142. package/dist/server/handlers/logs.js +1 -1
  143. package/dist/server/handlers/mcp-client-versions.cjs +1 -1
  144. package/dist/server/handlers/mcp-client-versions.js +1 -1
  145. package/dist/server/handlers/mcp.cjs +1 -1
  146. package/dist/server/handlers/mcp.js +1 -1
  147. package/dist/server/handlers/memory.cjs +1 -1
  148. package/dist/server/handlers/memory.js +1 -1
  149. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  150. package/dist/server/handlers/observability-new-endpoints.d.ts +77 -6
  151. package/dist/server/handlers/observability-new-endpoints.d.ts.map +1 -1
  152. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  153. package/dist/server/handlers/observability-shared.cjs +22 -0
  154. package/dist/server/handlers/observability-shared.cjs.map +1 -1
  155. package/dist/server/handlers/observability-shared.d.ts +13 -0
  156. package/dist/server/handlers/observability-shared.d.ts.map +1 -1
  157. package/dist/server/handlers/observability-shared.js +20 -1
  158. package/dist/server/handlers/observability-shared.js.map +1 -1
  159. package/dist/server/handlers/observability.cjs +2 -2
  160. package/dist/server/handlers/observability.js +2 -2
  161. package/dist/server/handlers/plans.cjs +1 -1
  162. package/dist/server/handlers/plans.js +1 -1
  163. package/dist/server/handlers/prompt-block-versions.cjs +1 -1
  164. package/dist/server/handlers/prompt-block-versions.js +1 -1
  165. package/dist/server/handlers/responses.cjs +1 -1
  166. package/dist/server/handlers/responses.js +1 -1
  167. package/dist/server/handlers/responses.storage.cjs +1 -1
  168. package/dist/server/handlers/responses.storage.js +1 -1
  169. package/dist/server/handlers/schedules.cjs +1 -1
  170. package/dist/server/handlers/schedules.js +1 -1
  171. package/dist/server/handlers/scorer-versions.cjs +1 -1
  172. package/dist/server/handlers/scorer-versions.js +1 -1
  173. package/dist/server/handlers/scores.cjs +1 -1
  174. package/dist/server/handlers/scores.js +1 -1
  175. package/dist/server/handlers/stored-agent-favorites.cjs +2 -2
  176. package/dist/server/handlers/stored-agent-favorites.js +2 -2
  177. package/dist/server/handlers/stored-agents.cjs +2 -2
  178. package/dist/server/handlers/stored-agents.js +2 -2
  179. package/dist/server/handlers/stored-mcp-clients.cjs +1 -1
  180. package/dist/server/handlers/stored-mcp-clients.js +1 -1
  181. package/dist/server/handlers/stored-prompt-blocks.cjs +1 -1
  182. package/dist/server/handlers/stored-prompt-blocks.js +1 -1
  183. package/dist/server/handlers/stored-scorers.cjs +1 -1
  184. package/dist/server/handlers/stored-scorers.js +1 -1
  185. package/dist/server/handlers/stored-skill-favorites.cjs +2 -2
  186. package/dist/server/handlers/stored-skill-favorites.js +2 -2
  187. package/dist/server/handlers/stored-skills.cjs +2 -2
  188. package/dist/server/handlers/stored-skills.js +2 -2
  189. package/dist/server/handlers/stored-workspaces.cjs +1 -1
  190. package/dist/server/handlers/stored-workspaces.js +1 -1
  191. package/dist/server/handlers/system.cjs +2 -2
  192. package/dist/server/handlers/system.d.ts +2 -0
  193. package/dist/server/handlers/system.d.ts.map +1 -1
  194. package/dist/server/handlers/system.js +2 -2
  195. package/dist/server/handlers/tool-providers.cjs +1 -1
  196. package/dist/server/handlers/tool-providers.js +1 -1
  197. package/dist/server/handlers/tools.cjs +1 -1
  198. package/dist/server/handlers/tools.js +1 -1
  199. package/dist/server/handlers/utils.cjs +1 -1
  200. package/dist/server/handlers/utils.js +1 -1
  201. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  202. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  203. package/dist/server/handlers/workflow-builder.cjs +1 -1
  204. package/dist/server/handlers/workflow-builder.js +1 -1
  205. package/dist/server/handlers/workflows.cjs +1 -1
  206. package/dist/server/handlers/workflows.js +1 -1
  207. package/dist/server/handlers/workspace.d.ts +23 -23
  208. package/dist/server/handlers.cjs +13 -13
  209. package/dist/server/handlers.js +13 -13
  210. package/dist/server/schemas/index.cjs +1 -1
  211. package/dist/server/schemas/index.js +1 -1
  212. package/dist/server/schemas/knowledge.d.ts +58 -0
  213. package/dist/server/schemas/knowledge.d.ts.map +1 -0
  214. package/dist/server/schemas/system.d.ts +2 -0
  215. package/dist/server/schemas/system.d.ts.map +1 -1
  216. package/dist/server/server-adapter/index.cjs +21 -6
  217. package/dist/server/server-adapter/index.cjs.map +1 -1
  218. package/dist/server/server-adapter/index.d.ts +1 -1
  219. package/dist/server/server-adapter/index.d.ts.map +1 -1
  220. package/dist/server/server-adapter/index.js +18 -7
  221. package/dist/server/server-adapter/index.js.map +1 -1
  222. package/dist/server/server-adapter/routes/fga-manifest.d.ts.map +1 -1
  223. package/dist/server/server-adapter/routes/index.d.ts +29 -0
  224. package/dist/server/server-adapter/routes/index.d.ts.map +1 -1
  225. package/dist/server/server-adapter/routes/knowledge.d.ts +231 -0
  226. package/dist/server/server-adapter/routes/knowledge.d.ts.map +1 -0
  227. package/dist/server/server-adapter/routes/observability.d.ts +75 -6
  228. package/dist/server/server-adapter/routes/observability.d.ts.map +1 -1
  229. package/dist/server/server-adapter/routes/system.d.ts +2 -0
  230. package/dist/server/server-adapter/routes/system.d.ts.map +1 -1
  231. package/dist/{system-DOwo7OGf.js → system-B0_hRqFE.js} +2 -1
  232. package/dist/system-B0_hRqFE.js.map +1 -0
  233. package/dist/{system-CHCn8IQ3.cjs → system-iruN6xnj.cjs} +2 -1
  234. package/dist/system-iruN6xnj.cjs.map +1 -0
  235. package/dist/{tools-BFpuzQsz.js → tools-CtELrYsA.js} +4 -4
  236. package/dist/{tools-BFpuzQsz.js.map → tools-CtELrYsA.js.map} +1 -1
  237. package/dist/{tools-Dy_j6URC.cjs → tools-DtRHH9Hr.cjs} +4 -4
  238. package/dist/{tools-Dy_j6URC.cjs.map → tools-DtRHH9Hr.cjs.map} +1 -1
  239. package/dist/{utils-BbYUI6Yn.cjs → utils-9PRHHTGC.cjs} +7 -3
  240. package/dist/utils-9PRHHTGC.cjs.map +1 -0
  241. package/dist/{utils-DHxjw4Tn.js → utils-B15w-1hm.js} +7 -3
  242. package/dist/utils-B15w-1hm.js.map +1 -0
  243. package/dist/{utils-BnH77wPf.cjs → utils-bQ6Jhog6.cjs} +2 -2
  244. package/dist/{utils-BnH77wPf.cjs.map → utils-bQ6Jhog6.cjs.map} +1 -1
  245. package/dist/{utils-YEuwVEc2.js → utils-qaBKOShQ.js} +2 -2
  246. package/dist/{utils-YEuwVEc2.js.map → utils-qaBKOShQ.js.map} +1 -1
  247. package/dist/{workflow-builder--W9PMW13.js → workflow-builder-6I2HiKcF.js} +2 -2
  248. package/dist/{workflow-builder--W9PMW13.js.map → workflow-builder-6I2HiKcF.js.map} +1 -1
  249. package/dist/{workflow-builder-CT7JOoW6.cjs → workflow-builder-CQzvZvwC.cjs} +2 -2
  250. package/dist/{workflow-builder-CT7JOoW6.cjs.map → workflow-builder-CQzvZvwC.cjs.map} +1 -1
  251. package/dist/{workflows-DPIRVRN9.js → workflows-ClfVyB1p.js} +3 -3
  252. package/dist/{workflows-DPIRVRN9.js.map → workflows-ClfVyB1p.js.map} +1 -1
  253. package/dist/{workflows-BAOfWBkr.cjs → workflows-DgSo-eBG.cjs} +3 -3
  254. package/dist/{workflows-BAOfWBkr.cjs.map → workflows-DgSo-eBG.cjs.map} +1 -1
  255. package/package.json +4 -4
  256. package/dist/constants-Co1XjPjd.cjs.map +0 -1
  257. package/dist/constants-ohUUT3Vg.js.map +0 -1
  258. package/dist/dist-BOXHlYtd.js.map +0 -1
  259. package/dist/dist-D-z2svUf.cjs.map +0 -1
  260. package/dist/dist-Z-lfSvwy.js +0 -1
  261. package/dist/helpers-CE1fJdLM.cjs.map +0 -1
  262. package/dist/helpers-CMCXsowL.js.map +0 -1
  263. package/dist/observability-new-endpoints-BrB2CKix.cjs.map +0 -1
  264. package/dist/observability-new-endpoints-CQNVjYYq.js.map +0 -1
  265. package/dist/routes-B1plJpJS.cjs.map +0 -1
  266. package/dist/routes-BZ1CkJV4.js.map +0 -1
  267. package/dist/system-CHCn8IQ3.cjs.map +0 -1
  268. package/dist/system-DOwo7OGf.js.map +0 -1
  269. package/dist/utils-BbYUI6Yn.cjs.map +0 -1
  270. package/dist/utils-DHxjw4Tn.js.map +0 -1
@@ -0,0 +1,431 @@
1
+ import { t as HTTPException } from "./http-exception-CzaWkxMl.js";
2
+ import { n as createRoute } from "./route-builder-BxPrwNog.js";
3
+ import { a as MASTRA_KNOWLEDGE_PRINCIPALS_KEY } from "./constants-CXAvBYcz.js";
4
+ import { handleError } from "./server/handlers/error.js";
5
+ import { _ as MastraFGAPermissions, o as getHandlerFGAProvider } from "./utils-B15w-1hm.js";
6
+ import { z } from "zod/v4";
7
+ import * as coreKnowledge from "@mastra/core/knowledge";
8
+ // src/server/schemas/knowledge.ts
9
+ const knowledgePathParams = z.object({ knowledgeKey: z.string().describe("Application key the Knowledge instance is registered under") });
10
+ const knowledgePagePathParams = knowledgePathParams.extend({ pageId: z.string().min(1).max(512).describe("Knowledge page id") });
11
+ const pageId = z.string().min(1).max(512);
12
+ const limit = z.coerce.number().int().min(1).max(100).optional();
13
+ const knowledgeTreeQuerySchema = z.object({
14
+ parentId: pageId.optional().describe("Page whose children to list; omit for the root scopes"),
15
+ cursor: z.string().optional(),
16
+ limit
17
+ });
18
+ const knowledgePageQuerySchema = z.object({
19
+ noteCursor: z.string().optional(),
20
+ noteLimit: limit
21
+ });
22
+ const knowledgeGraphQuerySchema = z.object({
23
+ rootId: pageId.optional().describe("Page to walk from; omit to walk every root scope"),
24
+ maxPages: z.coerce.number().int().min(1).max(500).optional()
25
+ });
26
+ const scopeIds = z.union([z.string(), z.array(z.string())]).transform((value) => Array.isArray(value) ? value : [value]).pipe(z.array(pageId).max(20));
27
+ const knowledgeSearchQuerySchema = z.object({
28
+ q: z.string().min(1).max(200).describe("Text to match in page names, synopses, bodies and notes"),
29
+ scopeId: scopeIds.optional().describe("Only pages within these scopes"),
30
+ limit
31
+ });
32
+ const knowledgeActivityQuerySchema = z.object({
33
+ scopeId: pageId.optional(),
34
+ pageId: pageId.optional(),
35
+ cursor: z.string().optional(),
36
+ limit
37
+ });
38
+ const payload = z.record(z.string(), z.unknown());
39
+ const listKnowledgeResponseSchema = z.object({ instances: z.array(z.object({
40
+ key: z.string(),
41
+ id: z.string()
42
+ })) });
43
+ const knowledgeTreeResponseSchema = payload;
44
+ const knowledgePageResponseSchema = payload;
45
+ const knowledgeGraphResponseSchema = payload;
46
+ const knowledgeSearchResponseSchema = z.object({ results: z.array(payload) });
47
+ const knowledgeActivityResponseSchema = payload;
48
+ const knowledgeEventsResponseSchema = z.object({
49
+ kind: z.enum([
50
+ "scope",
51
+ "page",
52
+ "note",
53
+ "pin"
54
+ ]),
55
+ op: z.string(),
56
+ pageId: z.string().optional(),
57
+ scopeId: z.string().optional(),
58
+ at: z.string()
59
+ });
60
+ // src/server/handlers/knowledge.ts
61
+ /**
62
+ * Read-only browsing of Knowledge instances registered on Mastra, for Studio. Nothing here writes.
63
+ *
64
+ * What a caller reads depends on whether the app has auth configured (`server.auth` or `studio.auth`):
65
+ * - No auth: probably a local or test project, so the routes read as the instance owner (`'all'`).
66
+ * - Auth: reads are narrowed to what the signed-in caller can read. The app maps the user to Knowledge
67
+ * principals by setting MASTRA_KNOWLEDGE_PRINCIPALS_KEY in `auth.authorize` (a `string[]`, or `'all'`
68
+ * for an admin); the instance turns them into a read scope with `readScopeFor`. A caller with no
69
+ * mapping is refused with 403.
70
+ *
71
+ * On top of that the path derives `knowledge:read` (`GET /knowledge/...`), and with FGA configured each
72
+ * instance is filtered and gated by `knowledge:read` on that instance. The routes are opt-in
73
+ * (KNOWLEDGE_ROUTES); hosts with their own scoping (Factory) do not mount them.
74
+ */
75
+ function hasAuth(mastra) {
76
+ return Boolean(mastra.getServer?.()?.auth || mastra.getStudio?.()?.auth);
77
+ }
78
+ async function callerReadScope(mastra, requestContext, instance) {
79
+ if (!hasAuth(mastra)) return "all";
80
+ const principals = requestContext?.get(MASTRA_KNOWLEDGE_PRINCIPALS_KEY);
81
+ if (principals === void 0 || principals === null) throw new HTTPException(403, { message: `Knowledge access is not mapped for this caller. Set request context key "${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}" in auth.authorize.` });
82
+ if (principals === "all") return "all";
83
+ if (!Array.isArray(principals) || principals.some((principal) => typeof principal !== "string")) throw new HTTPException(500, { message: `Request context key "${MASTRA_KNOWLEDGE_PRINCIPALS_KEY}" must be a string array or 'all'.` });
84
+ try {
85
+ return await instance.readScopeFor(principals);
86
+ } catch (error) {
87
+ if (error instanceof Error && error.name === "KnowledgeDeclarationError") throw new HTTPException(500, {
88
+ message: error.message,
89
+ cause: error
90
+ });
91
+ throw error;
92
+ }
93
+ }
94
+ async function accessibleInstances(mastra, requestContext, entries) {
95
+ const fgaProvider = getHandlerFGAProvider(mastra, requestContext);
96
+ const user = requestContext?.get("user");
97
+ if (!fgaProvider || !user || typeof user !== "object" || entries.length === 0) return new Set(entries.map((entry) => entry.key));
98
+ const accessible = await fgaProvider.filterAccessible(user, entries.map((entry) => ({
99
+ ...entry,
100
+ id: entry.key
101
+ })), "knowledge", MastraFGAPermissions.KNOWLEDGE_READ);
102
+ return new Set(accessible.map((entry) => entry.key));
103
+ }
104
+ const pageReaders = coreKnowledge;
105
+ function requirePageReaders() {
106
+ const { listKnowledgeTreeChildren, readKnowledgePage, readKnowledgePageActivity, readKnowledgePageGraph, searchKnowledgeExplorerPages } = pageReaders;
107
+ if (!listKnowledgeTreeChildren || !readKnowledgePage || !readKnowledgePageActivity || !readKnowledgePageGraph || !searchKnowledgeExplorerPages) throw new HTTPException(501, { message: "Knowledge browsing needs @mastra/core 1.81.0 or later." });
108
+ return {
109
+ listKnowledgeTreeChildren,
110
+ readKnowledgePage,
111
+ readKnowledgePageActivity,
112
+ readKnowledgePageGraph,
113
+ searchKnowledgeExplorerPages
114
+ };
115
+ }
116
+ /**
117
+ * The declared grants between the graph's scopes, each with its principal's display label. Grants are
118
+ * newer than the page readers, so a core without them sends none and the graph still loads.
119
+ */
120
+ async function graphGrants(instance, store, pages, read) {
121
+ const readGrants = coreKnowledge.readKnowledgeScopeGrants;
122
+ const scopeGrants = instance.scopeGrants?.bind(instance);
123
+ if (!readGrants || !scopeGrants) return void 0;
124
+ return (await readGrants(store, {
125
+ pages,
126
+ read,
127
+ grantsFor: scopeGrants
128
+ })).map((grant) => {
129
+ const principalLabel = instance.scopeLabel?.(grant.principal);
130
+ return principalLabel ? {
131
+ ...grant,
132
+ principalLabel
133
+ } : grant;
134
+ });
135
+ }
136
+ async function resolveStore(mastra, requestContext, knowledgeKey) {
137
+ const instances = mastra.listKnowledge();
138
+ const instance = knowledgeKey && Object.hasOwn(instances, knowledgeKey) ? instances[knowledgeKey] : void 0;
139
+ if (!knowledgeKey || !instance) throw new HTTPException(404, { message: `Knowledge ${knowledgeKey ?? ""} not found` });
140
+ const fgaProvider = getHandlerFGAProvider(mastra, requestContext);
141
+ const user = requestContext?.get("user");
142
+ if (fgaProvider && user && typeof user === "object") {
143
+ if (!await fgaProvider.check(user, {
144
+ resource: {
145
+ type: "knowledge",
146
+ id: knowledgeKey
147
+ },
148
+ permission: MastraFGAPermissions.KNOWLEDGE_READ
149
+ })) throw new HTTPException(404, { message: `Knowledge ${knowledgeKey} not found` });
150
+ }
151
+ const readers = requirePageReaders();
152
+ const read = await callerReadScope(mastra, requestContext, instance);
153
+ return {
154
+ instance,
155
+ store: await instance.getStorage(),
156
+ read,
157
+ readers
158
+ };
159
+ }
160
+ /**
161
+ * Adds each scope page's declared `displayLabel` with its address's `$params` filled in (`'$orgId policy'`
162
+ * → `'acme policy'`), so the explorer can caption scopes. Scope declarations live in config, not
163
+ * storage, so the readers can't supply it. Older cores without `scopeLabel` send no label.
164
+ */
165
+ function withDisplayLabel(instance, page) {
166
+ if (!page.isScope || !page.address) return page;
167
+ const displayLabel = instance.scopeLabel?.(page.address);
168
+ return displayLabel ? {
169
+ ...page,
170
+ displayLabel
171
+ } : page;
172
+ }
173
+ const LIST_KNOWLEDGE_ROUTE = createRoute({
174
+ method: "GET",
175
+ path: "/knowledge",
176
+ responseType: "json",
177
+ responseSchema: listKnowledgeResponseSchema,
178
+ summary: "List Knowledge instances",
179
+ description: "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.",
180
+ tags: ["Knowledge"],
181
+ requiresAuth: true,
182
+ handler: async ({ mastra, requestContext }) => {
183
+ try {
184
+ const all = Object.entries(mastra.listKnowledge()).map(([key, instance]) => ({
185
+ key,
186
+ id: instance.id
187
+ }));
188
+ const allowed = await accessibleInstances(mastra, requestContext, all);
189
+ return { instances: all.filter((entry) => allowed.has(entry.key)) };
190
+ } catch (error) {
191
+ return handleError(error, "Error listing Knowledge instances");
192
+ }
193
+ }
194
+ });
195
+ const GET_KNOWLEDGE_TREE_ROUTE = createRoute({
196
+ method: "GET",
197
+ path: "/knowledge/:knowledgeKey/tree",
198
+ responseType: "json",
199
+ pathParamSchema: knowledgePathParams,
200
+ queryParamSchema: knowledgeTreeQuerySchema,
201
+ responseSchema: knowledgeTreeResponseSchema,
202
+ summary: "List one level of the Knowledge page tree",
203
+ description: "Without parentId, returns the root scopes. With parentId, returns its child scopes (first page only) then its child pages in order, paged with cursor.",
204
+ tags: ["Knowledge"],
205
+ requiresAuth: true,
206
+ handler: async ({ mastra, requestContext, knowledgeKey, parentId, cursor, limit }) => {
207
+ try {
208
+ const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
209
+ const level = await readers.listKnowledgeTreeChildren(store, {
210
+ parentId: parentId ?? null,
211
+ read,
212
+ cursor: cursor || void 0,
213
+ limit
214
+ });
215
+ return {
216
+ ...level,
217
+ pages: level.pages.map((page) => withDisplayLabel(instance, page))
218
+ };
219
+ } catch (error) {
220
+ return handleError(error, "Error reading Knowledge tree");
221
+ }
222
+ }
223
+ });
224
+ const GET_KNOWLEDGE_PAGE_ROUTE = createRoute({
225
+ method: "GET",
226
+ path: "/knowledge/:knowledgeKey/pages/:pageId",
227
+ responseType: "json",
228
+ pathParamSchema: knowledgePagePathParams,
229
+ queryParamSchema: knowledgePageQuerySchema,
230
+ responseSchema: knowledgePageResponseSchema,
231
+ summary: "Get a Knowledge page",
232
+ description: "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",
233
+ tags: ["Knowledge"],
234
+ requiresAuth: true,
235
+ handler: async ({ mastra, requestContext, knowledgeKey, pageId, noteCursor, noteLimit }) => {
236
+ try {
237
+ const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
238
+ const view = await readers.readKnowledgePage(store, {
239
+ pageId,
240
+ read,
241
+ noteCursor,
242
+ noteLimit
243
+ });
244
+ if (!view) throw new HTTPException(404, { message: "Knowledge page not found" });
245
+ const label = (page) => withDisplayLabel(instance, page);
246
+ return {
247
+ ...view,
248
+ page: label(view.page),
249
+ ancestors: view.ancestors.map(label),
250
+ related: view.related.map(label)
251
+ };
252
+ } catch (error) {
253
+ return handleError(error, "Error reading Knowledge page");
254
+ }
255
+ }
256
+ });
257
+ const GET_KNOWLEDGE_GRAPH_ROUTE = createRoute({
258
+ method: "GET",
259
+ path: "/knowledge/:knowledgeKey/graph",
260
+ responseType: "json",
261
+ pathParamSchema: knowledgePathParams,
262
+ queryParamSchema: knowledgeGraphQuerySchema,
263
+ responseSchema: knowledgeGraphResponseSchema,
264
+ summary: "Get a bounded Knowledge page graph",
265
+ description: "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.",
266
+ tags: ["Knowledge"],
267
+ requiresAuth: true,
268
+ handler: async ({ mastra, requestContext, knowledgeKey, rootId, maxPages }) => {
269
+ try {
270
+ const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
271
+ const graph = await readers.readKnowledgePageGraph(store, {
272
+ read,
273
+ rootId: rootId ?? null,
274
+ ...maxPages ? { limits: { maxPages } } : {}
275
+ });
276
+ if (!graph) throw new HTTPException(404, { message: "Knowledge page not found" });
277
+ const grants = await graphGrants(instance, store, graph.pages, read);
278
+ return {
279
+ ...graph,
280
+ pages: graph.pages.map((page) => withDisplayLabel(instance, page)),
281
+ ...grants ? { grants } : {}
282
+ };
283
+ } catch (error) {
284
+ return handleError(error, "Error reading Knowledge graph");
285
+ }
286
+ }
287
+ });
288
+ const SEARCH_KNOWLEDGE_ROUTE = createRoute({
289
+ method: "GET",
290
+ path: "/knowledge/:knowledgeKey/search",
291
+ responseType: "json",
292
+ pathParamSchema: knowledgePathParams,
293
+ queryParamSchema: knowledgeSearchQuerySchema,
294
+ responseSchema: knowledgeSearchResponseSchema,
295
+ summary: "Search Knowledge pages and notes",
296
+ description: "Returns pages whose name, synopsis or body, and notes whose text, match the query",
297
+ tags: ["Knowledge"],
298
+ requiresAuth: true,
299
+ handler: async ({ mastra, requestContext, knowledgeKey, q, scopeId, limit }) => {
300
+ try {
301
+ const { instance, store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
302
+ return { results: (await readers.searchKnowledgeExplorerPages(store, {
303
+ query: q,
304
+ read,
305
+ ...scopeId?.length ? { scopeIds: scopeId } : {},
306
+ limit
307
+ })).map((hit) => ({
308
+ ...hit,
309
+ page: withDisplayLabel(instance, hit.page)
310
+ })) };
311
+ } catch (error) {
312
+ return handleError(error, "Error searching Knowledge");
313
+ }
314
+ }
315
+ });
316
+ const GET_KNOWLEDGE_ACTIVITY_ROUTE = createRoute({
317
+ method: "GET",
318
+ path: "/knowledge/:knowledgeKey/activity",
319
+ responseType: "json",
320
+ pathParamSchema: knowledgePathParams,
321
+ queryParamSchema: knowledgeActivityQuerySchema,
322
+ responseSchema: knowledgeActivityResponseSchema,
323
+ summary: "List recent Knowledge activity",
324
+ description: "Returns a newest-first page of activity, optionally for one scope or one page",
325
+ tags: ["Knowledge"],
326
+ requiresAuth: true,
327
+ handler: async ({ mastra, requestContext, knowledgeKey, scopeId, pageId, cursor, limit }) => {
328
+ try {
329
+ const { store, read, readers } = await resolveStore(mastra, requestContext, knowledgeKey);
330
+ return { ...await readers.readKnowledgePageActivity(store, {
331
+ read,
332
+ scopeId,
333
+ pageId,
334
+ cursor,
335
+ limit
336
+ }) };
337
+ } catch (error) {
338
+ return handleError(error, "Error reading Knowledge activity");
339
+ }
340
+ }
341
+ });
342
+ const KEEPALIVE_MS = 25e3;
343
+ /**
344
+ * The read scope is resolved when the stream opens. Ending it after this long makes the client reconnect,
345
+ * which resolves the caller's read scope again, so a revoked grant stops receiving changes.
346
+ */
347
+ const STREAM_MAX_AGE_MS = 3e5;
348
+ /**
349
+ * What a viewer may learn about one change: the ids in it they can read, or nothing when they can read
350
+ * none. A page they can read now, or the scope it is (or was, before a move or merge) in, counts; a
351
+ * deleted page is matched by its scope.
352
+ */
353
+ async function visibleChange(store, read, event) {
354
+ const readable = async (id) => id !== void 0 && (read === "all" || await store.getPage({
355
+ id,
356
+ read
357
+ }) !== null);
358
+ const scopeId = "scopeId" in event ? event.scopeId : void 0;
359
+ const fromScopeId = "fromScopeId" in event ? event.fromScopeId : void 0;
360
+ const [page, scope, fromScope] = await Promise.all([
361
+ readable(event.pageId),
362
+ readable(scopeId),
363
+ readable(fromScopeId)
364
+ ]);
365
+ if (!page && !scope && !fromScope) return null;
366
+ return {
367
+ kind: event.kind,
368
+ op: event.op,
369
+ ...page ? { pageId: event.pageId } : {},
370
+ ...scope ? { scopeId } : {},
371
+ at: event.at.toISOString()
372
+ };
373
+ }
374
+ const STREAM_KNOWLEDGE_EVENTS_ROUTE = createRoute({
375
+ method: "GET",
376
+ path: "/knowledge/:knowledgeKey/events",
377
+ responseType: "stream",
378
+ streamFormat: "sse",
379
+ sseFlushOnConnect: true,
380
+ pathParamSchema: knowledgePathParams,
381
+ responseSchema: knowledgeEventsResponseSchema,
382
+ summary: "Stream Knowledge changes",
383
+ description: "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.",
384
+ tags: ["Knowledge"],
385
+ requiresAuth: true,
386
+ handler: async ({ mastra, requestContext, knowledgeKey, abortSignal }) => {
387
+ try {
388
+ const { instance, store, read } = await resolveStore(mastra, requestContext, knowledgeKey);
389
+ if (typeof instance.onChange !== "function") throw new HTTPException(501, { message: "Knowledge change events need @mastra/core 1.81.0 or later." });
390
+ const logger = mastra.getLogger();
391
+ let stop = () => {};
392
+ return new ReadableStream({
393
+ start(controller) {
394
+ let open = true;
395
+ let queue = Promise.resolve();
396
+ const unsubscribe = instance.onChange((event) => {
397
+ queue = queue.then(async () => {
398
+ const change = await visibleChange(store, read, event).catch((error) => {
399
+ logger?.error("Error filtering a Knowledge change", { error });
400
+ return null;
401
+ });
402
+ if (open && change) controller.enqueue(change);
403
+ });
404
+ });
405
+ const keepalive = setInterval(() => open && controller.enqueue(": keepalive\n\n"), KEEPALIVE_MS);
406
+ const expire = setTimeout(() => stop(), STREAM_MAX_AGE_MS);
407
+ stop = () => {
408
+ if (!open) return;
409
+ open = false;
410
+ clearInterval(keepalive);
411
+ clearTimeout(expire);
412
+ unsubscribe();
413
+ try {
414
+ controller.close();
415
+ } catch {}
416
+ };
417
+ if (abortSignal?.aborted) stop();
418
+ else abortSignal?.addEventListener("abort", stop, { once: true });
419
+ },
420
+ cancel() {
421
+ stop();
422
+ }
423
+ });
424
+ } catch (error) {
425
+ return handleError(error, "Error streaming Knowledge changes");
426
+ }
427
+ }
428
+ });
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 };
430
+
431
+ //# sourceMappingURL=knowledge-DykIi0wH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-DykIi0wH.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\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 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 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\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":";;;;;;;;AAEA,MAAa,sBAAsB,EAAE,OAAO,EAC1C,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS,4DAA4D,EAChG,CAAC;AAED,MAAa,0BAA0B,oBAAoB,OAAO,EAChE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,mBAAmB,EACjE,CAAC;AAED,MAAM,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG;AACxC,MAAM,QAAQ,EAAE,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;AAE/D,MAAa,2BAA2B,EAAE,OAAO;CAC/C,UAAU,OAAO,SAAS,CAAC,CAAC,SAAS,uDAAuD;CAC5F,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC5B;AACF,CAAC;AAED,MAAa,2BAA2B,EAAE,OAAO;CAC/C,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS;CAChC,WAAW;AACb,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CAChD,QAAQ,OAAO,SAAS,CAAC,CAAC,SAAS,kDAAkD;CACrF,UAAU,EAAE,OAAO,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS;AAC7D,CAAC;AAGD,MAAM,WAAW,EACd,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CACxC,WAAU,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,CAAE,CAAC,CAC5D,KAAK,EAAE,MAAM,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAE/B,MAAa,6BAA6B,EAAE,OAAO;CACjD,GAAG,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,yDAAyD;CAChG,SAAS,SAAS,SAAS,CAAC,CAAC,SAAS,gCAAgC;CACtE;AACF,CAAC;AAED,MAAa,+BAA+B,EAAE,OAAO;CACnD,SAAS,OAAO,SAAS;CACzB,QAAQ,OAAO,SAAS;CACxB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC5B;AACF,CAAC;AAGD,MAAM,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC;AAEhD,MAAa,8BAA8B,EAAE,OAAO,EAClD,WAAW,EAAE,MAAM,EAAE,OAAO;CAAE,KAAK,EAAE,OAAO;CAAG,IAAI,EAAE,OAAO;AAAE,CAAC,CAAC,EAClE,CAAC;AACD,MAAa,8BAA8B;AAC3C,MAAa,8BAA8B;AAC3C,MAAa,+BAA+B;AAC5C,MAAa,gCAAgC,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,EAAE,CAAC;AACnF,MAAa,kCAAkC;AAC/C,MAAa,gCAAgC,EAAE,OAAO;CACpD,MAAM,EAAE,KAAK;EAAC;EAAS;EAAQ;EAAQ;CAAK,CAAC;CAC7C,IAAI,EAAE,OAAO;CACb,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC5B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,IAAI,EAAE,OAAO;AACf,CAAC;;;;;;;;;;;;;;;;ACrBD,SAAS,QAAQ,QAAyB;CACxC,OAAO,QAAQ,OAAO,YAAY,CAAC,EAAE,QAAS,OAAe,YAAY,CAAC,EAAE,IAAI;AAClF;AAEA,eAAe,gBACb,QACA,gBACA,UAC6B;CAC7B,IAAI,CAAC,QAAQ,MAAM,GAAG,OAAO;CAE7B,MAAM,aAAa,gBAAgB,IAAI,+BAA+B;CACtE,IAAI,eAAe,KAAA,KAAa,eAAe,MAC7C,MAAM,IAAI,cAAc,KAAK,EAC3B,SAAS,4EAA4E,gCAAgC,sBACvH,CAAC;CAEH,IAAI,eAAe,OAAO,OAAO;CAEjC,IAAI,CAAC,MAAM,QAAQ,UAAU,KAAK,WAAW,MAAK,cAAa,OAAO,cAAc,QAAQ,GAC1F,MAAM,IAAI,cAAc,KAAK,EAC3B,SAAS,wBAAwB,gCAAgC,oCACnE,CAAC;CAEH,IAAI;EACF,OAAO,MAAM,SAAS,aAAa,UAAU;CAC/C,SAAS,OAAO;EAEd,IAAI,iBAAiB,SAAS,MAAM,SAAS,6BAC3C,MAAM,IAAI,cAAc,KAAK;GAAE,SAAS,MAAM;GAAS,OAAO;EAAM,CAAC;EAEvE,MAAM;CACR;AACF;AAEA,eAAe,oBACb,QACA,gBACA,SACsB;CACtB,MAAM,cAAc,sBAAsB,QAAQ,cAAc;CAChE,MAAM,OAAO,gBAAgB,IAAI,MAAM;CACvC,IAAI,CAAC,eAAe,CAAC,QAAQ,OAAO,SAAS,YAAY,QAAQ,WAAW,GAC1E,OAAO,IAAI,IAAI,QAAQ,KAAI,UAAS,MAAM,GAAG,CAAC;CAGhD,MAAM,aAAiD,MAAM,YAAY,iBACvE,MACA,QAAQ,KAAI,WAAU;EAAE,GAAG;EAAO,IAAI,MAAM;CAAI,EAAE,GAClD,aACA,qBAAqB,cACvB;CACA,OAAO,IAAI,IAAI,WAAW,KAAI,UAAS,MAAM,GAAG,CAAC;AACnD;AAcA,MAAM,cAA6C;AAEnD,SAAS,qBAA2C;CAClD,MAAM,EACJ,2BACA,mBACA,2BACA,wBACA,iCACE;CACJ,IACE,CAAC,6BACD,CAAC,qBACD,CAAC,6BACD,CAAC,0BACD,CAAC,8BAED,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,yDAAyD,CAAC;CAEpG,OAAO;EACL;EACA;EACA;EACA;EACA;CACF;AACF;;;;;AAMA,eAAe,YACb,UACA,OACA,OACA,MACkG;CAClG,MAAM,aAAc,cAAgD;CACpE,MAAM,cAAe,SAAgC,aAAa,KAAK,QAAQ;CAC/E,IAAI,CAAC,cAAc,CAAC,aAAa,OAAO,KAAA;CAExC,QAAO,MADc,WAAW,OAAO;EAAE;EAAO;EAAM,WAAW;CAAY,CAAC,EAAA,CAChE,KAAI,UAAS;EACzB,MAAM,iBAAiB,SAAS,aAAa,MAAM,SAAS;EAC5D,OAAO,iBAAiB;GAAE,GAAG;GAAO;EAAe,IAAI;CACzD,CAAC;AACH;AAEA,eAAe,aACb,QACA,gBACA,cACoH;CACpH,MAAM,YAAY,OAAO,cAAc;CAEvC,MAAM,WAAW,gBAAgB,OAAO,OAAO,WAAW,YAAY,IAAI,UAAU,gBAAgB,KAAA;CACpG,IAAI,CAAC,gBAAgB,CAAC,UACpB,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,aAAa,gBAAgB,GAAG,YAAY,CAAC;CAGvF,MAAM,cAAc,sBAAsB,QAAQ,cAAc;CAChE,MAAM,OAAO,gBAAgB,IAAI,MAAM;CACvC,IAAI,eAAe,QAAQ,OAAO,SAAS,UAKrC;MAAA,CAAC,MAJiB,YAAY,MAAM,MAAM;GAC5C,UAAU;IAAE,MAAM;IAAa,IAAI;GAAa;GAChD,YAAY,qBAAqB;EACnC,CAAC,GACa,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,aAAa,aAAa,YAAY,CAAC;CAAA;CAE/F,MAAM,UAAU,mBAAmB;CACnC,MAAM,OAAO,MAAM,gBAAgB,QAAQ,gBAAgB,QAAQ;CACnE,OAAO;EAAE;EAAU,OAAO,MAAM,SAAS,WAAW;EAAG;EAAM;CAAQ;AACvE;;;;;;AAOA,SAAS,iBACP,UACA,MAC+B;CAC/B,IAAI,CAAC,KAAK,WAAW,CAAC,KAAK,SAAS,OAAO;CAC3C,MAAM,eAAe,SAAS,aAAa,KAAK,OAAO;CACvD,OAAO,eAAe;EAAE,GAAG;EAAM;CAAa,IAAI;AACpD;AAEA,MAAa,uBAAuB,YAAY;CAC9C,QAAQ;CACR,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,qBAAqB;EAC7C,IAAI;GACF,MAAM,MAAM,OAAO,QAAQ,OAAO,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,eAAe;IAAE;IAAK,IAAI,SAAS;GAAG,EAAE;GACtG,MAAM,UAAU,MAAM,oBAAoB,QAAQ,gBAAgB,GAAG;GACrE,OAAO,EAAE,WAAW,IAAI,QAAO,UAAS,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;EAClE,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,mCAAmC;EAC/D;CACF;AACF,CAAC;AAED,MAAa,2BAA2B,YAAY;CAClD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,UAAU,QAAQ,YAAY;EACpF,IAAI;GACF,MAAM,EAAE,UAAU,OAAO,MAAM,YAAY,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GAClG,MAAM,QAAQ,MAAM,QAAQ,0BAA0B,OAAO;IAC3D,UAAU,YAAY;IACtB;IAEA,QAAQ,UAAU,KAAA;IAClB;GACF,CAAC;GACD,OAAO;IAAE,GAAG;IAAO,OAAO,MAAM,MAAM,KAAI,SAAQ,iBAAiB,UAAU,IAAI,CAAC;GAAE;EACtF,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC;AAED,MAAa,2BAA2B,YAAY;CAClD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,QAAQ,YAAY,gBAAgB;EAC1F,IAAI;GACF,MAAM,EAAE,UAAU,OAAO,MAAM,YAAY,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GAClG,MAAM,OAAO,MAAM,QAAQ,kBAAkB,OAAO;IAAE;IAAQ;IAAM;IAAY;GAAU,CAAC;GAC3F,IAAI,CAAC,MAAM,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,2BAA2B,CAAC;GAC/E,MAAM,SAA+D,SAAY,iBAAiB,UAAU,IAAI;GAChH,OAAO;IACL,GAAG;IACH,MAAM,MAAM,KAAK,IAAI;IACrB,WAAW,KAAK,UAAU,IAAI,KAAK;IACnC,SAAS,KAAK,QAAQ,IAAI,KAAK;GACjC;EACF,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,8BAA8B;EAC1D;CACF;AACF,CAAC;AAED,MAAa,4BAA4B,YAAY;CACnD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,QAAQ,eAAe;EAC7E,IAAI;GACF,MAAM,EAAE,UAAU,OAAO,MAAM,YAAY,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GAClG,MAAM,QAAQ,MAAM,QAAQ,uBAAuB,OAAO;IACxD;IACA,QAAQ,UAAU;IAClB,GAAI,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;GAC7C,CAAC;GACD,IAAI,CAAC,OAAO,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,2BAA2B,CAAC;GAChF,MAAM,SAAS,MAAM,YAAY,UAAU,OAAO,MAAM,OAAO,IAAI;GACnE,OAAO;IACL,GAAG;IACH,OAAO,MAAM,MAAM,KAAI,SAAQ,iBAAiB,UAAU,IAAI,CAAC;IAC/D,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;GAC7B;EACF,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,+BAA+B;EAC3D;CACF;AACF,CAAC;AAED,MAAa,yBAAyB,YAAY;CAChD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,GAAG,SAAS,YAAY;EAC9E,IAAI;GACF,MAAM,EAAE,UAAU,OAAO,MAAM,YAAY,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GAOlG,OAAO,EAAE,UAAS,MANI,QAAQ,6BAA6B,OAAO;IAChE,OAAO;IACP;IACA,GAAI,SAAS,SAAS,EAAE,UAAU,QAAQ,IAAI,CAAC;IAC/C;GACF,CAAC,EAAA,CACyB,KAAI,SAAQ;IAAE,GAAG;IAAK,MAAM,iBAAiB,UAAU,IAAI,IAAI;GAAE,EAAE,EAAE;EACjG,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,2BAA2B;EACvD;CACF;AACF,CAAC;AAED,MAAa,+BAA+B,YAAY;CACtD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,SAAS;CACT,aAAa;CACb,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,SAAS,QAAQ,QAAQ,YAAY;EAC3F,IAAI;GACF,MAAM,EAAE,OAAO,MAAM,YAAY,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GACxF,OAAO,EAAE,GAAI,MAAM,QAAQ,0BAA0B,OAAO;IAAE;IAAM;IAAS;IAAQ;IAAQ;GAAM,CAAC,EAAG;EACzG,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,kCAAkC;EAC9D;CACF;AACF,CAAC;AAED,MAAM,eAAe;;;;;AAKrB,MAAM,oBAAoB;;;;;;AAO1B,eAAe,cAAc,OAAyB,MAA0B,OAA6B;CAC3G,MAAM,WAAW,OAAO,OACtB,OAAO,KAAA,MAAc,SAAS,SAAU,MAAM,MAAM,QAAQ;EAAE;EAAI;CAAK,CAAC,MAAO;CACjF,MAAM,UAAU,aAAa,QAAQ,MAAM,UAAU,KAAA;CACrD,MAAM,cAAc,iBAAiB,QAAQ,MAAM,cAAc,KAAA;CACjE,MAAM,CAAC,MAAM,OAAO,aAAa,MAAM,QAAQ,IAAI;EACjD,SAAS,MAAM,MAAM;EACrB,SAAS,OAAO;EAChB,SAAS,WAAW;CACtB,CAAC;CACD,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,OAAO;CAC1C,OAAO;EACL,MAAM,MAAM;EACZ,IAAI,MAAM;EACV,GAAI,OAAO,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;EACvC,GAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC;EAC3B,IAAI,MAAM,GAAG,YAAY;CAC3B;AACF;AAEA,MAAa,gCAAgC,YAAY;CACvD,QAAQ;CACR,MAAM;CACN,cAAc;CACd,cAAc;CACd,mBAAmB;CACnB,iBAAiB;CACjB,gBAAgB;CAChB,SAAS;CACT,aACE;CACF,MAAM,CAAC,WAAW;CAClB,cAAc;CACd,SAAS,OAAO,EAAE,QAAQ,gBAAgB,cAAc,kBAAkB;EACxE,IAAI;GACF,MAAM,EAAE,UAAU,OAAO,SAAS,MAAM,aAAa,QAAQ,gBAAgB,YAAY;GACzF,IAAI,OAAO,SAAS,aAAa,YAC/B,MAAM,IAAI,cAAc,KAAK,EAAE,SAAS,6DAA6D,CAAC;GAExG,MAAM,SAAS,OAAO,UAAU;GAChC,IAAI,aAAa,CAAC;GAClB,OAAO,IAAI,eAAe;IACxB,MAAM,YAAY;KAChB,IAAI,OAAO;KAEX,IAAI,QAAQ,QAAQ,QAAQ;KAC5B,MAAM,cAAc,SAAS,UAAS,UAAS;MAC7C,QAAQ,MAAM,KAAK,YAAY;OAC7B,MAAM,SAAS,MAAM,cAAc,OAAO,MAAM,KAAK,CAAC,CAAC,OAAM,UAAS;QACpE,QAAQ,MAAM,sCAAsC,EAAE,MAAM,CAAC;QAC7D,OAAO;OACT,CAAC;OACD,IAAI,QAAQ,QAAQ,WAAW,QAAQ,MAAM;MAC/C,CAAC;KACH,CAAC;KACD,MAAM,YAAY,kBAAkB,QAAQ,WAAW,QAAQ,iBAAiB,GAAG,YAAY;KAC/F,MAAM,SAAS,iBAAiB,KAAK,GAAG,iBAAiB;KACzD,aAAa;MACX,IAAI,CAAC,MAAM;MACX,OAAO;MACP,cAAc,SAAS;MACvB,aAAa,MAAM;MACnB,YAAY;MACZ,IAAI;OACF,WAAW,MAAM;MACnB,QAAQ,CAER;KACF;KACA,IAAI,aAAa,SAAS,KAAK;UAC1B,aAAa,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC;IAClE;IACA,SAAS;KACP,KAAK;IACP;GACF,CAAC;EACH,SAAS,OAAO;GACd,OAAO,YAAY,OAAO,mCAAmC;EAC/D;CACF;AACF,CAAC"}