@mastra/core 1.23.1-alpha.0 → 1.24.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 (204) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/dist/agent/index.cjs +13 -13
  3. package/dist/agent/index.js +2 -2
  4. package/dist/agent/message-list/adapters/AIV5Adapter.d.ts.map +1 -1
  5. package/dist/agent/message-list/conversion/input-converter.d.ts.map +1 -1
  6. package/dist/agent/message-list/index.cjs +19 -19
  7. package/dist/agent/message-list/index.js +1 -1
  8. package/dist/agent/message-list/message-list.d.ts.map +1 -1
  9. package/dist/agent/message-list/state/types.d.ts +7 -4
  10. package/dist/agent/message-list/state/types.d.ts.map +1 -1
  11. package/dist/agent/message-list/utils/stamp-part.d.ts +4 -0
  12. package/dist/agent/message-list/utils/stamp-part.d.ts.map +1 -0
  13. package/dist/browser/index.cjs +2 -2
  14. package/dist/browser/index.js +1 -1
  15. package/dist/channels/index.cjs +4 -4
  16. package/dist/channels/index.js +1 -1
  17. package/dist/{chunk-LB3GO6MV.js → chunk-234T424F.js} +5 -5
  18. package/dist/{chunk-LB3GO6MV.js.map → chunk-234T424F.js.map} +1 -1
  19. package/dist/{chunk-WCQOOGVM.cjs → chunk-365PDOQ4.cjs} +9 -9
  20. package/dist/{chunk-WCQOOGVM.cjs.map → chunk-365PDOQ4.cjs.map} +1 -1
  21. package/dist/{chunk-N7W2KRUH.js → chunk-3RI7ILBW.js} +3 -3
  22. package/dist/{chunk-N7W2KRUH.js.map → chunk-3RI7ILBW.js.map} +1 -1
  23. package/dist/{chunk-B4OOPFD3.cjs → chunk-4FFOOHE5.cjs} +27 -2
  24. package/dist/chunk-4FFOOHE5.cjs.map +1 -0
  25. package/dist/{chunk-S2546L42.js → chunk-7BBERBXP.js} +6 -6
  26. package/dist/{chunk-S2546L42.js.map → chunk-7BBERBXP.js.map} +1 -1
  27. package/dist/{chunk-BG3IPQZ7.cjs → chunk-B2FQ6L2I.cjs} +21 -21
  28. package/dist/{chunk-BG3IPQZ7.cjs.map → chunk-B2FQ6L2I.cjs.map} +1 -1
  29. package/dist/{chunk-UNQCLA7I.cjs → chunk-BFOZOAU2.cjs} +54 -26
  30. package/dist/chunk-BFOZOAU2.cjs.map +1 -0
  31. package/dist/{chunk-JC2RW3N5.js → chunk-CN6AFOVV.js} +4 -4
  32. package/dist/{chunk-JC2RW3N5.js.map → chunk-CN6AFOVV.js.map} +1 -1
  33. package/dist/{chunk-IAUQYADS.cjs → chunk-CY4AMNDV.cjs} +7 -7
  34. package/dist/{chunk-IAUQYADS.cjs.map → chunk-CY4AMNDV.cjs.map} +1 -1
  35. package/dist/{chunk-MW6HBUMV.cjs → chunk-D64ZY3NT.cjs} +29 -27
  36. package/dist/chunk-D64ZY3NT.cjs.map +1 -0
  37. package/dist/{chunk-JVXQTSRU.js → chunk-E7PBOS66.js} +3 -3
  38. package/dist/{chunk-JVXQTSRU.js.map → chunk-E7PBOS66.js.map} +1 -1
  39. package/dist/{chunk-GBUKRAUU.cjs → chunk-EAQQP6OK.cjs} +75 -75
  40. package/dist/{chunk-GBUKRAUU.cjs.map → chunk-EAQQP6OK.cjs.map} +1 -1
  41. package/dist/chunk-EGIEQEHP.js +35 -0
  42. package/dist/chunk-EGIEQEHP.js.map +1 -0
  43. package/dist/{chunk-C3RGHCOG.js → chunk-EJ62D3QH.js} +7 -7
  44. package/dist/{chunk-C3RGHCOG.js.map → chunk-EJ62D3QH.js.map} +1 -1
  45. package/dist/{chunk-J5JND5CL.cjs → chunk-FCW225T4.cjs} +84 -84
  46. package/dist/{chunk-J5JND5CL.cjs.map → chunk-FCW225T4.cjs.map} +1 -1
  47. package/dist/{chunk-OVQVLGT2.cjs → chunk-FLMCO42Y.cjs} +4 -4
  48. package/dist/{chunk-OVQVLGT2.cjs.map → chunk-FLMCO42Y.cjs.map} +1 -1
  49. package/dist/{chunk-RNKRA4W6.js → chunk-GAW7WFCY.js} +6 -6
  50. package/dist/{chunk-RNKRA4W6.js.map → chunk-GAW7WFCY.js.map} +1 -1
  51. package/dist/{chunk-7CWIKWHN.js → chunk-I7DUPZFN.js} +90 -43
  52. package/dist/chunk-I7DUPZFN.js.map +1 -0
  53. package/dist/{chunk-HMVCVSAM.js → chunk-IKUMKFM4.js} +5 -5
  54. package/dist/{chunk-HMVCVSAM.js.map → chunk-IKUMKFM4.js.map} +1 -1
  55. package/dist/{chunk-YTLU3Q7Q.js → chunk-JBFAGOAG.js} +13 -11
  56. package/dist/chunk-JBFAGOAG.js.map +1 -0
  57. package/dist/{chunk-6WRVZNQL.cjs → chunk-L56725IW.cjs} +7 -2
  58. package/dist/chunk-L56725IW.cjs.map +1 -0
  59. package/dist/{chunk-FDSY7ZGW.cjs → chunk-L73KZFX6.cjs} +10 -10
  60. package/dist/{chunk-FDSY7ZGW.cjs.map → chunk-L73KZFX6.cjs.map} +1 -1
  61. package/dist/{chunk-QX5YBALM.js → chunk-LUEXY2QV.js} +3 -3
  62. package/dist/{chunk-QX5YBALM.js.map → chunk-LUEXY2QV.js.map} +1 -1
  63. package/dist/{chunk-235IILEY.js → chunk-MD3VGE3F.js} +7 -2
  64. package/dist/chunk-MD3VGE3F.js.map +1 -0
  65. package/dist/{chunk-Q2RTFBSF.js → chunk-MK5IF24D.js} +8 -8
  66. package/dist/{chunk-Q2RTFBSF.js.map → chunk-MK5IF24D.js.map} +1 -1
  67. package/dist/{chunk-PJ5YCHXB.js → chunk-MZJQ7OKW.js} +3 -3
  68. package/dist/{chunk-PJ5YCHXB.js.map → chunk-MZJQ7OKW.js.map} +1 -1
  69. package/dist/{chunk-3UBTJXPW.cjs → chunk-P5C4HEAB.cjs} +32 -32
  70. package/dist/{chunk-3UBTJXPW.cjs.map → chunk-P5C4HEAB.cjs.map} +1 -1
  71. package/dist/{chunk-AMQICJHD.js → chunk-PCHML5XO.js} +11 -11
  72. package/dist/{chunk-AMQICJHD.js.map → chunk-PCHML5XO.js.map} +1 -1
  73. package/dist/{chunk-4LJ4M2DI.js → chunk-PQKSETS5.js} +3 -3
  74. package/dist/{chunk-4LJ4M2DI.js.map → chunk-PQKSETS5.js.map} +1 -1
  75. package/dist/{chunk-PHSDY5MP.cjs → chunk-QFGYBEP3.cjs} +10 -10
  76. package/dist/{chunk-PHSDY5MP.cjs.map → chunk-QFGYBEP3.cjs.map} +1 -1
  77. package/dist/{chunk-2M6QAFRM.cjs → chunk-RJAOQKHJ.cjs} +90 -43
  78. package/dist/chunk-RJAOQKHJ.cjs.map +1 -0
  79. package/dist/{chunk-WXCT24DY.cjs → chunk-SRQR5UN6.cjs} +27 -27
  80. package/dist/{chunk-WXCT24DY.cjs.map → chunk-SRQR5UN6.cjs.map} +1 -1
  81. package/dist/{chunk-7OU57YXD.cjs → chunk-SUEVJYTA.cjs} +185 -185
  82. package/dist/{chunk-7OU57YXD.cjs.map → chunk-SUEVJYTA.cjs.map} +1 -1
  83. package/dist/{chunk-LYCAEN2H.cjs → chunk-SYH64AGV.cjs} +219 -219
  84. package/dist/{chunk-LYCAEN2H.cjs.map → chunk-SYH64AGV.cjs.map} +1 -1
  85. package/dist/{chunk-ZHMULBPD.js → chunk-V2HSN7VZ.js} +26 -3
  86. package/dist/chunk-V2HSN7VZ.js.map +1 -0
  87. package/dist/{chunk-KPNURYWF.js → chunk-V657RNGK.js} +42 -14
  88. package/dist/chunk-V657RNGK.js.map +1 -0
  89. package/dist/{chunk-JGPMCTG4.cjs → chunk-XEDVYHBK.cjs} +3 -3
  90. package/dist/{chunk-JGPMCTG4.cjs.map → chunk-XEDVYHBK.cjs.map} +1 -1
  91. package/dist/{chunk-CLNGCSHU.cjs → chunk-XEM4OYJI.cjs} +15 -15
  92. package/dist/{chunk-CLNGCSHU.cjs.map → chunk-XEM4OYJI.cjs.map} +1 -1
  93. package/dist/{chunk-QG5JWMFX.cjs → chunk-XS3FHQ34.cjs} +11 -11
  94. package/dist/{chunk-QG5JWMFX.cjs.map → chunk-XS3FHQ34.cjs.map} +1 -1
  95. package/dist/{chunk-STZTHX32.js → chunk-XS75QEED.js} +5 -5
  96. package/dist/{chunk-STZTHX32.js.map → chunk-XS75QEED.js.map} +1 -1
  97. package/dist/{chunk-5OXVECLF.js → chunk-Y4SL4WJQ.js} +3 -3
  98. package/dist/{chunk-5OXVECLF.js.map → chunk-Y4SL4WJQ.js.map} +1 -1
  99. package/dist/chunk-ZPHI6QAA.cjs +40 -0
  100. package/dist/chunk-ZPHI6QAA.cjs.map +1 -0
  101. package/dist/datasets/index.cjs +17 -17
  102. package/dist/datasets/index.js +2 -2
  103. package/dist/docs/SKILL.md +2 -1
  104. package/dist/docs/assets/SOURCE_MAP.json +450 -450
  105. package/dist/docs/references/reference-observability-tracing-configuration.md +8 -1
  106. package/dist/docs/references/reference-observability-tracing-span-filtering.md +95 -0
  107. package/dist/docs/references/reference.md +1 -0
  108. package/dist/evals/index.cjs +23 -23
  109. package/dist/evals/index.js +3 -3
  110. package/dist/evals/scoreTraces/index.cjs +7 -7
  111. package/dist/evals/scoreTraces/index.js +3 -3
  112. package/dist/harness/index.cjs +9 -9
  113. package/dist/harness/index.js +6 -6
  114. package/dist/index.cjs +2 -2
  115. package/dist/index.js +1 -1
  116. package/dist/llm/index.cjs +20 -20
  117. package/dist/llm/index.js +5 -5
  118. package/dist/llm/model/provider-types.generated.d.ts +11 -1
  119. package/dist/logger/index.cjs +6 -6
  120. package/dist/logger/index.js +1 -1
  121. package/dist/loop/index.cjs +14 -14
  122. package/dist/loop/index.js +1 -1
  123. package/dist/mastra/index.cjs +2 -2
  124. package/dist/mastra/index.d.ts.map +1 -1
  125. package/dist/mastra/index.js +1 -1
  126. package/dist/mastra-5YHFXAJO.js +3 -0
  127. package/dist/{mastra-JWFZL5TC.js.map → mastra-5YHFXAJO.js.map} +1 -1
  128. package/dist/mastra-7CFH7DGM.cjs +12 -0
  129. package/dist/{mastra-ZQK3PKEU.cjs.map → mastra-7CFH7DGM.cjs.map} +1 -1
  130. package/dist/memory/index.cjs +19 -19
  131. package/dist/memory/index.js +1 -1
  132. package/dist/models-dev-X2MWNPAU.cjs +12 -0
  133. package/dist/{models-dev-6DVNVKP4.cjs.map → models-dev-X2MWNPAU.cjs.map} +1 -1
  134. package/dist/models-dev-ZXC3IYLG.js +3 -0
  135. package/dist/{models-dev-FOTHHSEK.js.map → models-dev-ZXC3IYLG.js.map} +1 -1
  136. package/dist/netlify-GOILLTQO.cjs +12 -0
  137. package/dist/{netlify-S2IW3O2X.cjs.map → netlify-GOILLTQO.cjs.map} +1 -1
  138. package/dist/netlify-HJL7EXHY.js +3 -0
  139. package/dist/{netlify-NMTX7SVL.js.map → netlify-HJL7EXHY.js.map} +1 -1
  140. package/dist/observability/context-storage.cjs +18 -28
  141. package/dist/observability/context-storage.cjs.map +1 -1
  142. package/dist/observability/context-storage.d.ts +9 -0
  143. package/dist/observability/context-storage.d.ts.map +1 -1
  144. package/dist/observability/context-storage.js +1 -28
  145. package/dist/observability/context-storage.js.map +1 -1
  146. package/dist/observability/index.cjs +33 -25
  147. package/dist/observability/index.d.ts +2 -0
  148. package/dist/observability/index.d.ts.map +1 -1
  149. package/dist/observability/index.js +3 -3
  150. package/dist/observability/rag-ingestion.d.ts +108 -0
  151. package/dist/observability/rag-ingestion.d.ts.map +1 -0
  152. package/dist/observability/types/core.d.ts +31 -1
  153. package/dist/observability/types/core.d.ts.map +1 -1
  154. package/dist/observability/types/tracing.d.ts +133 -1
  155. package/dist/observability/types/tracing.d.ts.map +1 -1
  156. package/dist/processor-provider/index.cjs +10 -10
  157. package/dist/processor-provider/index.js +1 -1
  158. package/dist/processors/index.cjs +44 -44
  159. package/dist/processors/index.js +1 -1
  160. package/dist/provider-registry-25ELOB67.cjs +44 -0
  161. package/dist/{provider-registry-7WS3N5BF.cjs.map → provider-registry-25ELOB67.cjs.map} +1 -1
  162. package/dist/provider-registry-UWTCPEFF.js +3 -0
  163. package/dist/{provider-registry-YADLRYW6.js.map → provider-registry-UWTCPEFF.js.map} +1 -1
  164. package/dist/provider-registry.json +34 -6
  165. package/dist/relevance/index.cjs +3 -3
  166. package/dist/relevance/index.js +1 -1
  167. package/dist/storage/constants.cjs +56 -56
  168. package/dist/storage/constants.js +1 -1
  169. package/dist/storage/index.cjs +286 -286
  170. package/dist/storage/index.js +3 -3
  171. package/dist/stream/index.cjs +11 -11
  172. package/dist/stream/index.js +2 -2
  173. package/dist/test-utils/llm-mock.cjs +4 -4
  174. package/dist/test-utils/llm-mock.js +1 -1
  175. package/dist/tool-loop-agent/index.cjs +4 -4
  176. package/dist/tool-loop-agent/index.js +1 -1
  177. package/dist/utils.cjs +25 -25
  178. package/dist/utils.js +1 -1
  179. package/dist/vector/index.cjs +7 -7
  180. package/dist/vector/index.js +1 -1
  181. package/dist/workflows/evented/index.cjs +10 -10
  182. package/dist/workflows/evented/index.js +1 -1
  183. package/dist/workflows/index.cjs +24 -24
  184. package/dist/workflows/index.js +1 -1
  185. package/package.json +5 -5
  186. package/src/llm/model/provider-types.generated.d.ts +11 -1
  187. package/dist/chunk-235IILEY.js.map +0 -1
  188. package/dist/chunk-2M6QAFRM.cjs.map +0 -1
  189. package/dist/chunk-6WRVZNQL.cjs.map +0 -1
  190. package/dist/chunk-7CWIKWHN.js.map +0 -1
  191. package/dist/chunk-B4OOPFD3.cjs.map +0 -1
  192. package/dist/chunk-KPNURYWF.js.map +0 -1
  193. package/dist/chunk-MW6HBUMV.cjs.map +0 -1
  194. package/dist/chunk-UNQCLA7I.cjs.map +0 -1
  195. package/dist/chunk-YTLU3Q7Q.js.map +0 -1
  196. package/dist/chunk-ZHMULBPD.js.map +0 -1
  197. package/dist/mastra-JWFZL5TC.js +0 -3
  198. package/dist/mastra-ZQK3PKEU.cjs +0 -12
  199. package/dist/models-dev-6DVNVKP4.cjs +0 -12
  200. package/dist/models-dev-FOTHHSEK.js +0 -3
  201. package/dist/netlify-NMTX7SVL.js +0 -3
  202. package/dist/netlify-S2IW3O2X.cjs +0 -12
  203. package/dist/provider-registry-7WS3N5BF.cjs +0 -44
  204. package/dist/provider-registry-YADLRYW6.js +0 -3
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/mastra/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAoDA,SAAS,6BAAA,CACP,IAAA,EAWA,KAAA,EACA,GAAA,EACa;AACb,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,YAAA,GAAe,YAAA,GAAe,IAAA;AACzD,EAAA,MAAM,OAAA,GAAU,cAAc,IAAA,CAAK,WAAA,GAAc,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAC,CAAA,UAAA,CAAA;AAClE,EAAA,OAAO,IAAI,WAAA,CAAY;AAAA,IACrB,EAAA,EAAI,OAAA;AAAA,IACJ,MAAA,EAAA,QAAA;AAAA,IACA,QAAA,EAAA,MAAA;AAAA,IACA,IAAA,EAAM,cAAc,SAAS,CAAA,EAAA,EAAK,SAAS,CAAA,IAAA,EAAO,KAAA,KAAU,IAAA,GAAO,MAAA,GAAS,WAAW,CAAA,uHAAA,CAAA;AAAA,IACvF,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,EAAK,GAAI,GAAA,IAAO,EAAE,KAAI;AAAG,GAC7C,CAAA;AACH;AAkOO,IAAM,SAAN,MAcL;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,oBAGK,EAAC;AAAA,EAEN,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,wBAAA,uBACM,GAAA,EAAI;AAAA,EACV,OAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAmD,EAAC;AAAA,EACpD,OAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEA,UAEI,EAAC;AAAA,EACL,2BAAqD,EAAC;AAAA;AAAA,EAEtD,YAAA;AAAA;AAAA,EAEA,kBAAA,uBAA6C,GAAA,EAAI;AAAA;AAAA,EAEjD,mBAAA,uBAAyE,GAAA,EAAI;AAAA;AAAA,EAE7E,gBAAgE,EAAC;AAAA;AAAA,EAEjE,OAAA;AAAA,EACA,SAAA;AAAA,EAEA,IAAI,MAAA,GAAS;AACX,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA,EAEA,IAAI,QAAA,GAA4B;AAC9B,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACnB,MAAA,IAAA,CAAK,SAAA,GAAY,IAAI,eAAA,CAAgB,IAAI,CAAA;AAAA,IAC3C;AACA,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBO,cAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcO,SAAA,GAAY;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,mBAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,kBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,oBAAA,GAAuB;AAC5B,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA4BO,WAAW,OAAA,EAAsC;AACtD,IAAA,IAAI,KAAK,YAAA,EAAc;AACrB,MAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AACpC,MAAA,IAAI,CAAC,EAAA,EAAI;AACP,QAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,UAC5B,EAAA,EAAI,2CAAA;AAAA,UACJ,MAAA,EAAA,QAAA;AAAA,UACA,QAAA,EAAA,MAAA;AAAA,UACA,IAAA,EAAM;AAAA,SACP,CAAA;AACD,QAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,UAAA,EAAW;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,eAAe,WAAA,EAAgC;AACpD,IAAA,IAAA,CAAK,YAAA,GAAe,WAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYO,UAAU,MAAA,EAA4B;AAC3C,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcO,gBAAA,CACL,QAAA,EACA,QAAA,EACA,UAAA,EACM;AACN,IAAA,IAAI,IAAA,CAAK,0BAA0B,iBAAA,EAAmB;AACpD,MAAA,IAAA,CAAK,cAAA,GAAiB,UAAA;AACtB,MAAA,IAAA,CAAK,eAAe,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA;AACtD,MAAA,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,MAAM,CAAA;AACrD,MAAA,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,SAAA,EAAW,QAAA,EAAU,IAAI,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,cAAA,CAAe,kBAAA,EAAmB;AAC/D,IAAA,IAAI,iBAAiB,gBAAA,EAAkB;AACrC,MAAA,eAAA,CAAgB,iBAAiB,QAAQ,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BA,YACE,MAAA,EACA;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,mBAAA,EAAoB;AAG5C,IAAA,IAAA,CAAK,UAAU,MAAA,EAAQ,MAAA;AACvB,IAAA,IAAI,KAAK,OAAA,IAAW,OAAO,IAAA,CAAK,OAAA,CAAQ,uBAAuB,UAAA,EAAY;AACzE,MAAA,IAAA,CAAK,OAAA,CAAQ,mBAAmB,IAAI,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,GAAU,IAAI,kBAAA,EAAmB;AAAA,IACxC;AAEA,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,KAAA,MAAW,KAAA,IAAS,MAAA,EAAQ,MAAA,IAAU,EAAC,EAAG;AACxC,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,MAAA,GAAS,KAAK,CAAC,CAAA,EAAG;AAC3C,QAAA,IAAA,CAAK,QAAQ,KAAK,CAAA,GAAI,CAAC,MAAA,EAAQ,MAAA,GAAS,KAAK,CAAQ,CAAA;AAAA,MACvD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,QAAQ,KAAK,CAAA,GAAI,QAAQ,MAAA,GAAS,KAAK,KAAK,EAAC;AAAA,MACpD;AAAA,IACF;AAEA,IAAA,MAAM,yBAAyB,IAAI,sBAAA,CAAuB,EAAE,MAAA,EAAQ,MAAM,CAAA;AAC1E,IAAA,MAAM,eAAA,GAAkB,OAAO,KAAA,EAAc,EAAA,KAA4C;AACvF,MAAA,IAAI;AACF,QAAA,MAAM,sBAAA,CAAuB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAAA,MAChD,SAAS,CAAA,EAAG;AACV,QAAA,IAAA,CAAK,SAAA,EAAU,EAAG,KAAA,CAAM,wBAAA,EAA0B,CAAC,CAAA;AAAA,MACrD;AAAA,IACF,CAAA;AACA,IAAA,IAAI,IAAA,CAAK,QAAQ,SAAA,EAAW;AAC1B,MAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,eAAe,CAAA;AAAA,IAC7C,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,CAAQ,SAAA,GAAY,CAAC,eAAe,CAAA;AAAA,IAC3C;AAEA,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI,MAAA,EAAQ,WAAW,KAAA,EAAO;AAC5B,MAAA,MAAA,GAAS,UAAA;AAAA,IACX,CAAA,MAAO;AACL,MAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,QAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,MAAM,UAAA,GACJ,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,IAAgB,OAAA,CAAQ,GAAA,CAAI,UAAA,KAAe,MAAA,GAAS,QAAA,CAAS,IAAA,GAAO,QAAA,CAAS,IAAA;AACxG,QAAA,MAAA,GAAS,IAAI,aAAA,CAAc,EAAE,MAAM,QAAA,EAAU,KAAA,EAAO,YAAY,CAAA;AAAA,MAClE;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAEf,IAAA,IAAA,CAAK,eAAe,MAAA,EAAQ,WAAA;AAE5B,IAAA,IAAI,UAAU,MAAA,EAAQ,OAAA;AAEtB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,GAAU,gBAAgB,OAAO,CAAA;AAAA,IACnC;AAGA,IAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,MAAA,IAAI,OAAO,MAAA,CAAO,aAAA,CAAc,kBAAA,KAAuB,UAAA,EAAY;AACjE,QAAA,IAAA,CAAK,iBAAiB,MAAA,CAAO,aAAA;AAE7B,QAAA,IAAA,CAAK,eAAe,SAAA,CAAU,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAS,CAAA;AAAA,MACxD,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAA,EAAS,IAAA;AAAA,UACZ;AAAA,SAIF;AACA,QAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,iBAAA,EAAkB;AAAA,MAC9C;AAAA,IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,iBAAA,EAAkB;AAAA,IAC9C;AAOA,IAAA,MAAM,aAAa,IAAI,UAAA,CAAW,KAAK,OAAA,EAAS,MAAM,KAAK,WAAW,CAAA;AACtE,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AAEf,IAAA,IAAA,CAAK,QAAA,GAAW,OAAA;AAGhB,IAAA,IAAA,CAAK,WAAW,EAAC;AACjB,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,OAAO,EAAC;AACb,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,WAAW,EAAC;AACjB,IAAA,IAAA,CAAK,SAAS,EAAC;AACf,IAAA,IAAA,CAAK,cAAc,EAAC;AACpB,IAAA,IAAA,CAAK,UAAU,EAAC;AAChB,IAAA,IAAA,CAAK,aAAa,EAAC;AACnB,IAAA,IAAA,CAAK,YAAY,EAAC;AAMlB,IAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,KAAK,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,IAAI,CAAA,KAAM;AACpD,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,GAAG,CAAA;AAAA,QACxB;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,SAAS,CAAA,KAAM;AAC9D,QAAA,IAAI,aAAa,IAAA,EAAM;AACrB,UAAA,IAAA,CAAK,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,QAClC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AACvD,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,GAAG,CAAA;AAAA,QAC5B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AACxD,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,IAAA,CAAK,SAAA,CAAU,QAAQ,GAAG,CAAA;AAAA,QAC5B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA;AAEzB,MAAA,IAAA,CAAK,aAAa,MAAA,CAAO,SAAA,EAAW,QAAW,EAAE,MAAA,EAAQ,UAAU,CAAA;AAAA,IACrE;AAEA,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,OAAO,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AACxD,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,IAAA,CAAK,UAAU,MAAA,EAAQ,GAAA,EAAK,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAAA,QAChD;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,SAAS,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,QAAQ,CAAA,KAAM;AAC5D,QAAA,IAAI,YAAY,IAAA,EAAM;AACpB,UAAA,IAAA,CAAK,WAAA,CAAY,UAAU,GAAG,CAAA;AAAA,QAChC;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,QAAQ,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,OAAO,CAAA,KAAM;AAC1D,QAAA,IAAI,WAAW,IAAA,EAAM;AACnB,UAAA,IAAA,CAAK,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAMA,IAAA,KAAA,MAAW,WAAW,eAAA,EAAiB;AACrC,MAAA,MAAM,GAAA,GAAM,QAAQ,KAAA,EAAM;AAC1B,MAAA,IAAI,CAAE,IAAA,CAAK,SAAA,CAAiD,GAAG,CAAA,EAAG;AAChE,QAAC,IAAA,CAAK,SAAA,CAAiD,GAAG,CAAA,GAAI,OAAA;AAAA,MAChE;AAAA,IACF;AAGA,IAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,UAAU,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,MAAM,CAAA,KAAM;AAC3D,QAAA,IAAI,UAAU,IAAA,EAAM;AAClB,UAAA,IAAA,CAAK,YAAA,CAAa,QAAQ,GAAG,CAAA;AAAA,QAC/B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,GAAA,EAAK;AACf,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,GAAG,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,GAAG,CAAA,KAAM;AACjD,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAC,IAAA,CAAK,IAAA,CAAmC,GAAG,CAAA,GAAI,GAAA;AAAA,QAClD;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,IAAA,CAAK,UAAU,MAAA,CAAO,MAAA;AAAA,IACxB;AAIA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,OAAA,CAAQ,OAAO,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AACtD,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,IAAA,CAAK,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA,QAC1B;AAAA,MACF,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,YAAA,CAAA,aAAA,sBAA2C,kBAAA,CAAmB,IAAI,CAAC,CAAA;AAKnE,IAAA,IAAA,CAAK,cAAA,CAAe,gBAAA,CAAiB,EAAE,MAAA,EAAQ,MAAM,CAAA;AAErD,IAAA,IAAA,CAAK,SAAA,CAAU,EAAE,MAAA,EAAQ,CAAA;AAAA,EAC3B;AAAA,EA6BO,QAAA,CACL,MACA,OAAA,EACoD;AACpD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,OAAA,GAAU,IAAI,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,oCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QACrC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,SAAA,EAAW,OAAO,IAAI,CAAA;AAAA,UACtB,MAAA,EAAQ,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACnD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAAO,OAAO,CAAA;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,WAAA,GAA6C;AAClD,IAAA,MAAM,SAAwC,EAAC;AAC/C,IAAA,KAAA,MAAW,CAAC,QAAA,EAAU,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA,EAAG;AAClE,MAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,EAAY;AACxC,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,aAAA;AAAA,MACrB;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAiCO,YAAA,CACL,IACA,OAAA,EACoD;AACpD,IAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,OAAO,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA;AAE7D,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAI;AACF,QAAA,KAAA,GAAQ,IAAA,CAAK,SAAS,EAAmB,CAAA;AAAA,MAC3C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,wCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,cAAA,EAAiB,MAAA,CAAO,EAAE,CAAC,CAAA,UAAA,CAAA;AAAA,QACjC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,OAAA,EAAS,OAAO,EAAE,CAAA;AAAA,UAClB,MAAA,EAAQ,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACnD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,KAAA,EAA8B,OAAO,CAAA;AAAA,EACzE;AAAA,EAEA,MAAc,qBAAA,CACZ,KAAA,EACA,OAAA,EACiB;AACjB,IAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAE9B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,mDAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,qEAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,SAAS,KAAA,CAAM,EAAA;AAAA,UACf,GAAI,WAAW,WAAA,IAAe,OAAA,GAAU,EAAE,SAAA,EAAW,OAAA,CAAQ,SAAA,EAAU,GAAI,EAAC;AAAA,UAC5E,GAAI,OAAA,IAAW,QAAA,IAAY,OAAA,IAAW,OAAA,CAAQ,MAAA,GAAS,EAAE,aAAA,EAAe,OAAA,CAAQ,MAAA,EAAO,GAAI;AAAC;AAC9F,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,OAAO,KAAA,CAAM,oBAAA;AAAA,MAClB,KAAA;AAAA,MACA,eAAe,OAAA,GAAU,OAAA,GAAU,EAAE,MAAA,EAAQ,OAAA,CAAQ,UAAU,WAAA;AAAY,KAC7E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,UAAA,GAAa;AAClB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,QAAA,CACL,KAAA,EACA,GAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,6BAAA,CAA8B,OAAA,EAAS,KAAA,EAAO,GAAG,CAAA;AAAA,IACzD;AACA,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAE9B,MAAA,WAAA,GAAc,0BAAA,CAA2B,KAAA,EAAO,EAAE,YAAA,EAAc,KAAK,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAA,WAAA,GAAc,KAAA;AAAA,IAChB;AACA,IAAA,MAAM,QAAA,GAAW,OAAO,WAAA,CAAY,EAAA;AACpC,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AACpB,IAAA,IAAI,MAAA,CAAO,QAAQ,CAAA,EAAG;AACpB,MAAA;AAAA,IACF;AAGA,IAAA,WAAA,CAAY,WAAA,CAAY,KAAK,OAAO,CAAA;AACpC,IAAA,WAAA,CAAY,iBAAiB,IAAI,CAAA;AACjC,IAAA,WAAA,CAAY,oBAAA,CAAqB;AAAA,MAC/B,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,MACvB,OAAA,EAAS,KAAK,UAAA,EAAW;AAAA,MACzB,MAAA;AAAA,MACA,KAAK,IAAA,CAAK,IAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KACf,CAAA;AAGD,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,WAAA,CAAY,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC/B;AAEA,IAAA,MAAA,CAAO,QAAQ,CAAA,GAAI,WAAA;AAKnB,IAAA,WAAA,CACG,+BAAA,EAAgC,CAChC,IAAA,CAAK,CAAA,kBAAA,KAAsB;AAC1B,MAAA,KAAA,MAAW,YAAY,kBAAA,EAAoB;AACzC,QAAA,IAAA,CAAK,WAAA,CAAY,QAAA,EAAU,QAAA,CAAS,EAAE,CAAA;AAAA,MACxC;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,MAAA,IAAA,CAAK,OAAA,EAAS,KAAA,CAAM,CAAA,iDAAA,EAAoD,QAAQ,KAAK,GAAG,CAAA;AAAA,IAC1F,CAAC,CAAA;AAKH,IAAA,IAAI,WAAA,CAAY,mBAAkB,EAAG;AACnC,MAAA,OAAA,CAAQ,QAAQ,WAAA,CAAY,YAAA,IAAgB,CAAA,CACzC,KAAK,CAAA,SAAA,KAAa;AACjB,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,IAAA,CAAK,YAAA,CAAa,WAAW,MAAA,EAAW;AAAA,YACtC,MAAA,EAAQ,OAAA;AAAA,YACR,OAAA,EAAS,YAAY,EAAA,IAAM,QAAA;AAAA,YAC3B,WAAW,WAAA,CAAY;AAAA,WACxB,CAAA;AAAA,QACH;AAAA,MACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,QAAA,IAAA,CAAK,OAAA,EAAS,KAAA,CAAM,CAAA,uCAAA,EAA0C,QAAQ,KAAK,GAAG,CAAA;AAAA,MAChF,CAAC,CAAA;AAAA,IACL;AAIA,IAAA,WAAA,CACG,WAAA,EAAY,CACZ,IAAA,CAAK,CAAA,OAAA,KAAW;AACf,MAAA,KAAA,MAAW,GAAG,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,OAAA,IAAW,EAAE,CAAA,EAAG;AACrD,QAAA,IAAA,CAAK,UAAU,KAAA,CAAM,MAAA,EAAQ,QAAW,EAAE,MAAA,EAAQ,QAAQ,CAAA;AAAA,MAC5D;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,MAAA,IAAA,CAAK,OAAA,EAAS,KAAA,CAAM,CAAA,sCAAA,EAAyC,QAAQ,KAAK,GAAG,CAAA;AAAA,IAC/E,CAAC,CAAA;AAGH,IAAA,MAAM,aAAA,GAAgB,YAAY,WAAA,EAAY;AAC9C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,aAAA,CAAc,WAAA,CAAY,KAAK,OAAO,CAAA;AACtC,MAAA,MAAM,aAAA,GAAgB,cAAc,gBAAA,EAAiB;AACrD,MAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,QAAA,IAAA,CAAK,OAAA,GAAU;AAAA,UACb,GAAG,IAAA,CAAK,OAAA;AAAA,UACR,SAAA,EAAW,CAAC,GAAI,IAAA,CAAK,SAAS,SAAA,IAAa,EAAC,EAAI,GAAG,aAAa;AAAA,SAClE;AAAA,MACF;AACA,MAAA,KAAK,aAAA,CAAc,WAAW,IAAI,CAAA;AAAA,IACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,YAAY,OAAA,EAA0B;AAC3C,IAAA,MAAM,SAAS,IAAA,CAAK,OAAA;AAGpB,IAAA,IAAI,MAAA,CAAO,OAAO,CAAA,EAAG;AACnB,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAO,CAAA,EAAG,EAAA;AACjC,MAAA,OAAO,OAAO,OAAO,CAAA;AAErB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,kBAAA,CAAmB,OAAO,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,MAAA,CAAO,CAAC,CAAA,EAAG,EAAA,KAAO,OAAO,CAAA;AACnE,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,GAAG,CAAA,EAAG,EAAA;AAC7B,MAAA,OAAO,OAAO,GAAG,CAAA;AAEjB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,IAAA,CAAK,kBAAA,CAAmB,OAAO,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwCO,UAA8C,IAAA,EAA0C;AAC7F,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,GAAW,IAAI,CAAA;AACnC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,qCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QACtC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,UAAA,EAAY,OAAO,IAAI,CAAA;AAAA,UACvB,OAAA,EAAS,OAAO,IAAA,CAAK,IAAA,CAAK,YAAY,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACrD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,cAAkD,EAAA,EAAwD;AAC/G,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,QAAA,IAAa,EAAC;AAGtC,IAAA,KAAA,MAAW,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,EAAG;AAC9C,MAAA,IAAI,MAAA,CAAO,OAAO,EAAA,EAAI;AACpB,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,WAAW,EAAE,CAAA;AACjC,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,OAAO,WAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,mCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,wBAAwB,EAAE,CAAA,UAAA,CAAA;AAAA,MAChC,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,QAAA,EAAU,OAAO,EAAE,CAAA;AAAA,QACnB,SAAS,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,CAAE,KAAK,IAAI;AAAA;AAC5C,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBO,WAAA,GAAoC;AACzC,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,SAAA,CAAkC,QAAW,GAAA,EAAoB;AACtE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,6BAAA,CAA8B,QAAA,EAAU,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC3D;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,EAAA;AAChC,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,OAAA,IAAW,IAAA,CAAK,WAAW,CAAA;AACnD,IAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKO,UAAA,GAAmC;AACxC,IAAA,OAAA,CAAQ,KAAK,wDAAwD,CAAA;AACrE,IAAA,OAAO,KAAK,WAAA,EAAY;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,WAAA,GAAc;AACnB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,YAAA,GAAsC;AAC3C,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,iBAAiB,EAAA,EAAuB;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,EAAE,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,sCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,qBAAqB,EAAE,CAAA,UAAA,CAAA;AAAA,QAC7B,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,WAAA,EAAa,EAAA;AAAA,UACb,cAAc,MAAA,CAAO,IAAA,CAAK,KAAK,WAAW,CAAA,CAAE,KAAK,IAAI;AAAA;AACvD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,KAAA,CAAM,SAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaO,cAAA,GAAsD;AAC3D,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,WAAA,EAAY;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,YAAA,CACL,SAAA,EACA,GAAA,EACA,QAAA,EACM;AACN,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,6BAAA,CAA8B,WAAA,EAAa,SAAA,EAAW,GAAG,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,SAAS,QAAA,EAAU,MAAA,KAAW,UAAU,OAAA,IAAW,QAAA,EAAU,YAAY,OAAA,GAAU,QAAA,CAAA;AACzF,IAAA,IAAI,WAAW,OAAA,KAAY,CAAC,UAAU,OAAA,IAAW,CAAC,UAAU,SAAA,CAAA,EAAY;AACtE,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,6CAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,sDAAA;AAAA,QACN,SAAS,EAAE,MAAA,EAAQ,KAAK,WAAA,EAAa,GAAA,IAAO,UAAU,EAAA;AAAG,OAC1D,CAAA;AAAA,IACH;AACA,IAAA,MAAM,YAAA,GAAe,OAAO,SAAA,CAAU,EAAA;AACtC,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,EAAG;AAClC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,WAAA,CAAY,YAAY,CAAA,GAAI;AAAA,MAC/B,SAAA;AAAA,MACA,MAAA;AAAA,MACA,GAAI,UAAU,OAAA,GAAU,EAAE,SAAS,QAAA,CAAS,OAAA,KAAY,EAAC;AAAA,MACzD,GAAI,UAAU,SAAA,GAAY,EAAE,WAAW,QAAA,CAAS,SAAA,KAAc;AAAC,KACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6BO,YACL,EAAA,EACA,EAAE,UAAA,EAAW,GAA8B,EAAC,EACnB;AACzB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,UAAA,GAAa,EAAE,CAAA;AACrC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,qCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAC,CAAA,UAAA,CAAA;AAAA,QACpC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,UAAA,EAAY,OAAO,EAAE,CAAA;AAAA,UACrB,SAAA,EAAW,OAAO,IAAA,CAAK,IAAA,CAAK,cAAc,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACzD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,IAAA,EAAK;AAAA,IAC/B;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,2BAA2B,QAAA,EAAoB;AAC7C,IAAA,QAAA,CAAS,iBAAiB,IAAI,CAAA;AAC9B,IAAA,QAAA,CAAS,oBAAA,CAAqB;AAAA,MAC5B,MAAA,EAAQ,KAAK,SAAA;AAAU,KACxB,CAAA;AACD,IAAA,IAAA,CAAK,wBAAA,CAAyB,QAAA,CAAS,EAAE,CAAA,GAAI,QAAA;AAAA,EAC/C;AAAA,EAEA,sBAAsB,EAAA,EAAqB;AACzC,IAAA,OAAO,MAAA,CAAO,OAAO,IAAA,CAAK,wBAAwB,EAAE,IAAA,CAAK,CAAA,QAAA,KAAY,QAAA,CAAS,EAAA,KAAO,EAAE,CAAA;AAAA,EACzF;AAAA,EAEA,sBAAsB,EAAA,EAAsB;AAC1C,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,wBAAwB,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA;AACnF,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,8CAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,IAAA,EAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAC,CAAA,UAAA,CAAA;AAAA,QACpC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,UAAA,EAAY,OAAO,EAAE;AAAA;AACvB,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BO,gBACL,EAAA,EAC2B;AAC3B,IAAA,IAAI,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,UAAU,EAAE,IAAA,CAAK,CAAA,CAAA,KAAK,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA;AAEnE,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAI;AACF,QAAA,QAAA,GAAW,IAAA,CAAK,YAAY,EAAE,CAAA;AAAA,MAChC,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,qCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,iBAAA,EAAoB,MAAA,CAAO,EAAE,CAAC,CAAA,UAAA,CAAA;AAAA,QACpC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,UAAA,EAAY,OAAO,EAAE,CAAA;AAAA,UACrB,SAAA,EAAW,OAAO,IAAA,CAAK,IAAA,CAAK,cAAc,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACzD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAAA,EAEA,MAAa,sBAAA,GAAgD;AAC3D,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,oEAAoE,CAAA;AACvF,MAAA,OAAO,EAAE,IAAA,EAAM,EAAC,EAAG,OAAO,CAAA,EAAE;AAAA,IAC9B;AAGA,IAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,UAAU,EAAE,MAAA,CAAO,CAAA,QAAA,KAAY,QAAA,CAAS,UAAA,KAAe,SAAS,CAAA;AAGlH,IAAA,MAAM,UAAgC,EAAC;AACvC,IAAA,IAAI,QAAA,GAAW,CAAA;AAEf,IAAA,KAAA,MAAW,YAAY,sBAAA,EAAwB;AAC7C,MAAA,MAAM,cAAc,MAAM,QAAA,CAAS,iBAAiB,EAAE,MAAA,EAAQ,WAAW,CAAA;AACzE,MAAA,MAAM,cAAc,MAAM,QAAA,CAAS,iBAAiB,EAAE,MAAA,EAAQ,WAAW,CAAA;AAEzE,MAAA,OAAA,CAAQ,KAAK,GAAG,WAAA,CAAY,IAAA,EAAM,GAAG,YAAY,IAAI,CAAA;AACrD,MAAA,QAAA,IAAY,WAAA,CAAY,QAAQ,WAAA,CAAY,KAAA;AAAA,IAC9C;AAEA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAAA,EAEA,MAAa,4BAAA,GAA8C;AACzD,IAAA,MAAM,UAAA,GAAa,MAAM,IAAA,CAAK,sBAAA,EAAuB;AACrD,IAAA,IAAI,UAAA,CAAW,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AAC9B,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAA;AAAA,QACX,CAAA,WAAA,EAAc,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,oBAAA,EAAuB,WAAW,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA;AAAA,OAClG;AAAA,IACF;AACA,IAAA,KAAA,MAAW,WAAA,IAAe,WAAW,IAAA,EAAM;AACzC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,eAAA,CAAgB,WAAA,CAAY,YAAY,CAAA;AAC9D,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,SAAA,CAAU,EAAE,KAAA,EAAO,WAAA,CAAY,OAAO,CAAA;AACjE,QAAA,MAAM,IAAI,OAAA,EAAQ;AAClB,QAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,wBAAA,EAA0B,EAAE,QAAA,EAAU,YAAY,YAAA,EAAc,KAAA,EAAO,WAAA,CAAY,KAAA,EAAO,CAAA;AAAA,MAC/G,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,gCAAA,EAAkC;AAAA,UACnD,UAAU,WAAA,CAAY,YAAA;AAAA,UACtB,OAAO,WAAA,CAAY,KAAA;AAAA,UACnB;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BO,WAAA,GAAc;AACnB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,SAAA,CACL,MAAA,EACA,GAAA,EACA,OAAA,EACM;AACN,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,6BAAA,CAA8B,QAAA,EAAU,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC3D;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,EAAA;AAChC,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,iBAAiB,IAAI,CAAA;AAG5B,IAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,MAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC1B;AAEA,IAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmCO,UAA6C,GAAA,EAAuC;AACzF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,QAAA,GAAW,GAAG,CAAA;AAClC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,6BAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,YAAA,EAAe,MAAA,CAAO,GAAG,CAAC,CAAA,UAAA;AAAA,OACjC,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgCO,cAAkD,EAAA,EAAwD;AAC/G,IAAA,KAAA,MAAW,CAAC,IAAA,EAAM,KAAK,CAAA,IAAK,MAAA,CAAO,QAAQ,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA,EAAG;AAC/D,MAAA,IAAI,KAAA,CAAM,EAAA,KAAO,EAAA,IAAM,KAAA,EAAO,SAAS,EAAA,EAAI;AACzC,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,mCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,EAAE,CAAC,CAAA,UAAA;AAAA,KACnC,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,aAAa,OAAA,EAA0B;AAC5C,IAAA,MAAM,UAAU,IAAA,CAAK,QAAA;AACrB,IAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAGrB,IAAA,IAAI,OAAA,CAAQ,OAAO,CAAA,EAAG;AACpB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAO,CAAA,EAAG,EAAA;AACnC,MAAA,OAAO,QAAQ,OAAO,CAAA;AAEtB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,KAAK,CAAA,CAAA,KAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,OAAA,IAAW,OAAA,CAAQ,CAAC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrG,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAG,CAAA,EAAG,EAAA;AAC/B,MAAA,OAAO,QAAQ,GAAG,CAAA;AAElB,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,MAC1C;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASO,gBAAA,GAAmE;AACxE,IAAA,OAAO,IAAA,CAAK,aAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,cAAA,CAAe,aAA6C,GAAA,EAAoB;AACrF,IAAA,MAAM,QAAA,GAAW,OAAO,WAAA,CAAY,EAAA;AACpC,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA,EAAG;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,aAAA,CAAc,QAAQ,CAAA,GAAI,WAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,eAAe,GAAA,EAA6C;AACjE,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,CAAc,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,mCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,yBAAyB,GAAG,CAAA,UAAA;AAAA,OACnC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,mBAAmB,EAAA,EAA4C;AACpE,IAAA,KAAA,MAAW,GAAG,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAA,EAAG;AAC1D,MAAA,IAAI,KAAA,CAAM,OAAO,EAAA,EAAI;AACnB,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,WAAA,CAAY;AAAA,MACpB,EAAA,EAAI,yCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,wBAAwB,EAAE,CAAA,UAAA;AAAA,KACjC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,kBAAkB,OAAA,EAA0B;AACjD,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,OAAO,CAAA,EAAG;AAC/B,MAAA,OAAO,IAAA,CAAK,cAAc,OAAO,CAAA;AACjC,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,CAAE,IAAA,CAAK,CAAA,CAAA,KAAK,IAAA,CAAK,aAAA,CAAc,CAAC,CAAA,EAAG,OAAO,OAAO,CAAA;AAC3F,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,OAAO,IAAA,CAAK,cAAc,GAAG,CAAA;AAC7B,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,QAAwC,IAAA,EAAoC;AACjF,IAAA,IAAI,CAAC,IAAA,CAAK,MAAA,IAAU,CAAC,IAAA,CAAK,MAAA,CAAO,IAAI,CAAA,EAAG;AACtC,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,mCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,eAAA,EAAkB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QACpC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,QAAA,EAAU,OAAO,IAAI,CAAA;AAAA,UACrB,KAAA,EAAO,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACjD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,IAAA,CAAK,OAAO,IAAI,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,YAA4C,EAAA,EAAgD;AACjG,IAAA,MAAM,WAAW,IAAA,CAAK,MAAA;AAEtB,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,iCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,gBAAgB,EAAE,CAAA,UAAA;AAAA,OACzB,CAAA;AAAA,IACH;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC1C,MAAA,IAAI,IAAA,CAAK,OAAO,EAAA,EAAI;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,SAAA,GAAY,SAAS,EAAE,CAAA;AAC7B,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,iCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,gBAAgB,EAAE,CAAA,UAAA,CAAA;AAAA,MACxB,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,MAAA,EAAQ,OAAO,EAAE,CAAA;AAAA,QACjB,OAAO,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,KAAK,IAAI;AAAA;AACxC,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,SAAA,GAAgC;AACrC,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,OAAA,CAAkD,MAAS,GAAA,EAAoB;AACpF,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,MAAM,6BAAA,CAA8B,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IACvD;AACA,IAAA,MAAM,OAAA,GAAU,OAAO,IAAA,CAAK,EAAA;AAC5B,IAAA,MAAM,QAAQ,IAAA,CAAK,MAAA;AACnB,IAAA,IAAI,KAAA,CAAM,OAAO,CAAA,EAAG;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,CAAM,OAAO,CAAA,GAAI,IAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,aAAuD,IAAA,EAAmD;AAC/G,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,EAAG;AAChD,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,wCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,oBAAA,EAAuB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QACzC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,aAAA,EAAe,OAAO,IAAI,CAAA;AAAA,UAC1B,UAAA,EAAY,OAAO,IAAA,CAAK,IAAA,CAAK,eAAe,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AAC3D,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,iBACL,EAAA,EAC6B;AAC7B,IAAA,MAAM,gBAAgB,IAAA,CAAK,WAAA;AAE3B,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,sCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,qBAAqB,EAAE,CAAA,UAAA;AAAA,OAC9B,CAAA;AAAA,IACH;AAGA,IAAA,KAAA,MAAW,SAAA,IAAa,MAAA,CAAO,MAAA,CAAO,aAAa,CAAA,EAAG;AACpD,MAAA,IAAI,SAAA,CAAU,OAAO,EAAA,EAAI;AACvB,QAAA,OAAO,SAAA;AAAA,MACT;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,cAAc,EAAE,CAAA;AACvC,IAAA,IAAI,cAAA,EAAgB;AAClB,MAAA,OAAO,cAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,sCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,qBAAqB,EAAE,CAAA,UAAA,CAAA;AAAA,MAC7B,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,WAAA,EAAa,OAAO,EAAE,CAAA;AAAA,QACtB,YAAY,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,CAAE,KAAK,IAAI;AAAA;AAClD,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,cAAA,GAA0C;AAC/C,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,YAAA,CAAkC,WAAc,GAAA,EAAoB;AACzE,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,6BAAA,CAA8B,WAAA,EAAa,SAAA,EAAW,GAAG,CAAA;AAAA,IACjE;AACA,IAAA,MAAM,YAAA,GAAe,OAAO,SAAA,CAAU,EAAA;AACtC,IAAA,MAAM,aAAa,IAAA,CAAK,WAAA;AACxB,IAAA,IAAI,UAAA,CAAW,YAAY,CAAA,EAAG;AAC5B,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,OAAO,SAAA,CAAU,gBAAA,KAAqB,UAAA,EAAY;AACpD,MAAA,SAAA,CAAU,iBAAiB,IAAI,CAAA;AAAA,IACjC;AAEA,IAAA,UAAA,CAAW,YAAY,CAAA,GAAI,SAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,yBAAA,CAA0B,SAAA,EAAsB,OAAA,EAAiB,IAAA,EAAgC;AACtG,IAAA,MAAM,cAAc,SAAA,CAAU,EAAA;AAC9B,IAAA,IAAI,CAAC,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,WAAW,CAAA,EAAG;AACnD,MAAA,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,WAAA,EAAa,EAAE,CAAA;AAAA,IACnD;AACA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,WAAW,CAAA;AAG7D,IAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,OAAA,KAAY,OAAA,IAAW,CAAA,CAAE,IAAA,KAAS,IAAI,CAAA;AACzE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQO,2BACL,WAAA,EAC4E;AAC5E,IAAA,OAAO,IAAA,CAAK,wBAAA,CAAyB,GAAA,CAAI,WAAW,KAAK,EAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,2BAAA,GAGL;AACA,IAAA,OAAO,IAAA,CAAK,wBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,UAA6C,IAAA,EAAyC;AAC3F,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA,EAAG;AACxC,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,oCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,gBAAA,EAAmB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,QACrC,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,SAAA,EAAW,OAAO,IAAI,CAAA;AAAA,UACtB,MAAA,EAAQ,OAAO,IAAA,CAAK,IAAA,CAAK,WAAW,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACnD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,IAAA,CAAK,QAAQ,IAAI,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,cAAc,EAAA,EAA0B;AAC7C,IAAA,MAAM,YAAY,IAAA,CAAK,OAAA;AACvB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,KAAA,MAAW,GAAG,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA,EAAG;AAClD,QAAA,IAAI,MAAA,CAAO,OAAO,EAAA,EAAI;AACpB,UAAA,OAAO,MAAA;AAAA,QACT;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,mCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,kBAAkB,EAAE,CAAA,UAAA,CAAA;AAAA,MAC1B,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,QAAA,EAAU,EAAA;AAAA,QACV,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,SAAA,IAAa,EAAE,CAAA,CACxC,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,EAAE,CAAA,CACb,KAAK,IAAI;AAAA;AACd,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,UAAA,GAAkC;AACvC,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,SAAA,CAAkC,QAAW,GAAA,EAAoB;AACtE,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,6BAAA,CAA8B,QAAA,EAAU,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC3D;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,MAAA,CAAO,EAAA;AAChC,IAAA,MAAM,iBAAiB,IAAA,CAAK,OAAA;AAC5B,IAAA,IAAI,cAAA,CAAe,SAAS,CAAA,EAAG;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,cAAA,CAAe,SAAS,CAAA,GAAI,MAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBO,aAAA,CAAc,KAAA,GAAkC,EAAC,EAA6B;AACnF,IAAA,IAAI,MAAM,UAAA,EAAY;AACpB,MAAA,OAAO,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,UAAU,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM;AAC7D,QAAA,OAAO;AAAA,UACL,GAAG,GAAA;AAAA,UACH,CAAC,CAAC,GAAG,EAAE,IAAA,EAAM,EAAE,IAAA;AAAK,SACtB;AAAA,MACF,CAAA,EAAG,EAAE,CAAA;AAAA,IACP;AACA,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,WAAA,CAAY,UAAuB,GAAA,EAAoB;AAC5D,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,MAAM,6BAAA,CAA8B,UAAA,EAAY,QAAA,EAAU,GAAG,CAAA;AAAA,IAC/D;AACA,IAAA,MAAM,WAAA,GAAc,OAAO,QAAA,CAAS,EAAA;AACpC,IAAA,MAAM,YAAY,IAAA,CAAK,UAAA;AACvB,IAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,MAAA;AAAA,IACF;AAGA,IAAA,QAAA,CAAS,iBAAiB,IAAI,CAAA;AAC9B,IAAA,QAAA,CAAS,oBAAA,CAAqB;AAAA,MAC5B,MAAA,EAAQ,KAAK,SAAA,EAAU;AAAA,MACvB,OAAA,EAAS,KAAK,UAAA;AAAW,KAC1B,CAAA;AACD,IAAA,IAAI,CAAC,SAAS,SAAA,EAAW;AACvB,MAAA,QAAA,CAAS,MAAA,EAAO;AAAA,IAClB;AACA,IAAA,SAAA,CAAU,WAAW,CAAA,GAAI,QAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,WAAW,OAAA,EAA+B;AAC/C,IAAA,IAAA,CAAK,QAAA,GAAW,gBAAgB,OAAO,CAAA;AAAA,EACzC;AAAA,EAEO,SAAA,CAAU,EAAE,MAAA,EAAO,EAAwB;AAEhD,IAAA,MAAM,aAAa,IAAI,UAAA,CAAW,MAAA,EAAQ,MAAM,KAAK,WAAW,CAAA;AAChE,IAAA,IAAA,CAAK,OAAA,GAAU,UAAA;AAEf,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AACvC,QAAA,IAAA,CAAK,OAAA,GAAU,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,SAAA,CAAU,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,KAAK,IAAA,EAAM;AACb,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AACpC,QAAA,IAAA,CAAK,IAAA,GAAO,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,IAAA,CAAK,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AACxC,QAAA,IAAA,CAAK,QAAA,GAAW,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MAChD,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AAC3C,QAAA,IAAA,CAAK,WAAA,GAAc,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MACnD,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAU,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AAC1C,QAAA,IAAA,CAAK,UAAA,GAAa,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,cAAA,CAAe,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAAA,IAC9C;AAEA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,IAAA,CAAK,UAAA,CAAW,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA,CAAE,QAAQ,CAAA,GAAA,KAAO;AACvC,QAAA,IAAA,CAAK,OAAA,GAAU,GAAG,CAAA,EAAG,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACH;AAGA,IAAA,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,EAAE,MAAA,EAAQ,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBO,MAAA,GAAS;AACd,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,SAAA,GAAY;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,UAAA,GAAa;AAClB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,IAAI,aAAA,GAAyC;AAC3C,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAAA,GAA6B;AAC/B,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,kBAAA,EAAmB,EAAG,oBAAmB,IAAK,iBAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,OAAA,GAA0B;AAC5B,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,kBAAA,EAAmB,EAAG,qBAAoB,IAAK,kBAAA;AAAA,EAC5E;AAAA,EAEO,mBAAA,GAAsB;AAC3B,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA,EAEO,cAAA,GAAiB;AACtB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEO,oBAAoB,gBAAA,EAA6C;AACtE,IAAA,IAAI,OAAO,qBAAqB,UAAA,EAAY;AAC1C,MAAA,IAAA,CAAK,iBAAA,GAAoB;AAAA,QACvB;AAAA,UACE,OAAA,EAAS,gBAAA;AAAA,UACT,IAAA,EAAM;AAAA;AACR,OACF;AACA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,EAAG;AACpC,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,2CAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,CAAA,2DAAA,EAA8D,OAAO,gBAAgB,CAAA;AAAA,OAC5F,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAA,CAAK,iBAAA,GAAoB,gBAAA,CAAiB,GAAA,CAAI,CAAA,CAAA,KAAK;AACjD,MAAA,IAAI,OAAO,MAAM,UAAA,EAAY;AAC3B,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,CAAA;AAAA,UACT,IAAA,EAAM;AAAA,SACR;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,SAAS,CAAA,CAAE,OAAA;AAAA,QACX,IAAA,EAAM,EAAE,IAAA,IAAQ;AAAA,OAClB;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEO,SAAA,GAAY;AACjB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBO,gBAAgB,OAAA,EAAiC;AACtD,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,IAAA,CAAK,OAAA,EAAS,KAAA;AAAA,QACZ;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAA,CAAK,cAAA,GAAiB,OAAA;AAEtB,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,OAAA,CAAQ,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeO,eAAA,GAAgD;AACrD,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,YAAA,GAA2C;AAChD,IAAA,OAAO,IAAA,CAAK,gBAAgB,MAAA,EAAU;AAAA,EACxC;AAAA,EAEO,gBAAA,GAAmB;AACxB,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,MAAa,eAAA,CAAgB;AAAA,IAC3B,KAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA;AAAA,GACF,EASG;AACD,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,8CAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,0BAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAS,eAAA,EAAiB;AAClC,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,iDAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,IAAA,EAAM,wEAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA;AAAA;AACF,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,eAAA,CAAgB;AAAA,MACxC,KAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,QAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAa,QAAA,CACX,WAAA,EACA,MAAA,EAQA;AACA,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,mCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,0BAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP;AAAA;AACF,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AACjB,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,uCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,QAAA;AAAA,QACA,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP;AAAA;AACF,OACD,CAAA;AACD,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,OAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,CAAS,aAAa,MAAM,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBO,cAAA,GAA4D;AACjE,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBO,YAAA,CAAsC,QAAW,GAAA,EAAoB;AAC1E,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,6BAAA,CAA8B,YAAA,EAAc,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC/D;AAGA,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,IAClB;AAGA,IAAA,MAAM,aAAa,MAAA,CAAO,EAAA;AAC1B,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,kCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,yDAAA;AAAA,QACN,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA;AAAI,OACxB,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AAEA,IAAA,MAAM,YAAY,GAAA,IAAO,UAAA;AACzB,IAAA,MAAM,UAAU,IAAA,CAAK,WAAA;AACrB,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA;AAAA,IACF;AAGA,IAAA,MAAA,CAAO,iBAAiB,IAAI,CAAA;AAC5B,IAAA,MAAA,CAAO,WAAA,CAAY,IAAA,CAAK,SAAA,EAAW,CAAA;AACnC,IAAA,OAAA,CAAQ,SAAS,CAAA,GAAI,MAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBO,aACL,IAAA,EACyC;AACzC,IAAA,IAAI,CAAC,IAAA,CAAK,WAAA,IAAe,CAAC,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,EAAG;AAChD,MAAA,IAAA,CAAK,SAAS,KAAA,CAAM,CAAA,qBAAA,EAAwB,MAAA,CAAO,IAAI,CAAC,CAAA,UAAA,CAAY,CAAA;AACpE,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BO,gBAAA,CACL,UACA,OAAA,EACyC;AACzC,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,MAAM,uBAAuB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,WAAA,IAAe,EAAE,CAAA;AAEjE,IAAA,MAAM,2BAA2B,oBAAA,CAAqB,MAAA,CAAO,CAAA,MAAA,KAAU,MAAA,CAAO,OAAO,QAAQ,CAAA;AAE7F,IAAA,IAAI,wBAAA,CAAyB,WAAW,CAAA,EAAG;AACzC,MAAA,IAAA,CAAK,OAAA,EAAS,KAAA,CAAM,CAAA,sCAAA,EAAyC,QAAQ,CAAA,CAAE,CAAA;AACvE,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,wBAAwB,wBAAA,CAAyB,IAAA,CAAK,CAAA,MAAA,KAAU,MAAA,CAAO,YAAY,OAAO,CAAA;AAChG,MAAA,IAAI,CAAC,qBAAA,EAAuB;AAC1B,QAAA,IAAA,CAAK,SAAS,KAAA,CAAM,CAAA,4BAAA,EAA+B,QAAQ,CAAA,0BAAA,EAA6B,OAAO,CAAA,EAAA,CAAI,CAAA;AAAA,MACrG;AACA,MAAA,OAAO,qBAAA;AAAA,IACT,CAAA,MAAO;AAEL,MAAA,IAAI,wBAAA,CAAyB,WAAW,CAAA,EAAG;AACzC,QAAA,OAAO,yBAAyB,CAAC,CAAA;AAAA,MACnC;AAEA,MAAA,wBAAA,CAAyB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM;AAEtC,QAAA,MAAM,QAAA,GAAW,CAAA,CAAE,WAAA,IAAe,OAAO,CAAA,CAAE,WAAA,KAAgB,QAAA,GAAW,IAAI,IAAA,CAAK,CAAA,CAAE,WAAW,CAAA,CAAE,SAAQ,GAAI,GAAA;AAC1G,QAAA,MAAM,QAAA,GAAW,CAAA,CAAE,WAAA,IAAe,OAAO,CAAA,CAAE,WAAA,KAAgB,QAAA,GAAW,IAAI,IAAA,CAAK,CAAA,CAAE,WAAW,CAAA,CAAE,SAAQ,GAAI,GAAA;AAE1G,QAAA,IAAI,MAAM,QAAQ,CAAA,IAAK,KAAA,CAAM,QAAQ,GAAG,OAAO,CAAA;AAC/C,QAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,CAAA;AAC5B,QAAA,IAAI,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAO,EAAA;AAE5B,QAAA,OAAO,QAAA,GAAW,QAAA;AAAA,MACpB,CAAC,CAAA;AAGD,MAAA,IAAI,wBAAA,CAAyB,SAAS,CAAA,EAAG;AACvC,QAAA,MAAM,YAAA,GAAe,yBAAyB,CAAC,CAAA;AAC/C,QAAA,IACE,gBACA,YAAA,CAAa,WAAA,IACb,OAAO,YAAA,CAAa,gBAAgB,QAAA,IACpC,CAAC,KAAA,CAAM,IAAI,KAAK,YAAA,CAAa,WAAW,CAAA,CAAE,OAAA,EAAS,CAAA,EACnD;AACA,UAAA,OAAO,YAAA;AAAA,QACT;AAAA,MACF;AACA,MAAA,IAAA,CAAK,OAAA,EAAS,IAAA;AAAA,QACZ,yDAAyD,QAAQ,CAAA,8EAAA;AAAA,OACnE;AACA,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAa,gBAAA,CAAiB,KAAA,EAAe,QAAA,EAAyC;AACpF,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,QAAQ,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAa,mBAAA,CAAoB,KAAA,EAAe,QAAA,EAAyC;AACvF,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,EAChD;AAAA,EAEA,MAAa,gBAAA,GAAmB;AAC9B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,OAAA,EAAS;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AACjG,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAa,eAAA,GAAkB;AAC7B,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,OAAA,EAAS;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AACjG,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAA,CAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,MAChD;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,QAAQ,KAAA,EAAM;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,WAAW,GAAA,EAAiC;AACjD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,GAAY,GAAG,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,QAC5B,EAAA,EAAI,qCAAA;AAAA,QACJ,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAM,oBAAoB,GAAG,CAAA,UAAA,CAAA;AAAA,QAC7B,OAAA,EAAS;AAAA,UACP,MAAA,EAAQ,GAAA;AAAA,UACR,UAAA,EAAY,GAAA;AAAA,UACZ,QAAA,EAAU,OAAO,IAAA,CAAK,IAAA,CAAK,aAAa,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI;AAAA;AACvD,OACD,CAAA;AACD,MAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,MAAA,MAAM,KAAA;AAAA,IACR;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BO,eAAe,EAAA,EAAgC;AACpD,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,SAAA,IAAa,EAAC;AACpC,IAAA,KAAA,MAAW,OAAA,IAAW,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,EAAG;AAC7C,MAAA,IAAI,OAAA,CAAQ,KAAA,EAAM,KAAM,EAAA,EAAI;AAC1B,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,WAAA,CAAY;AAAA,MAC5B,EAAA,EAAI,oCAAA;AAAA,MACJ,MAAA,EAAA,QAAA;AAAA,MACA,QAAA,EAAA,MAAA;AAAA,MACA,IAAA,EAAM,mBAAmB,EAAE,CAAA,UAAA,CAAA;AAAA,MAC3B,OAAA,EAAS;AAAA,QACP,MAAA,EAAQ,GAAA;AAAA,QACR,SAAA,EAAW,EAAA;AAAA,QACX,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA,CACjC,GAAA,CAAI,CAAA,CAAA,KAAK,CAAA,CAAE,KAAA,EAAO,CAAA,CAClB,IAAA,CAAK,IAAI;AAAA;AACd,KACD,CAAA;AACD,IAAA,IAAA,CAAK,OAAA,EAAS,eAAe,KAAK,CAAA;AAClC,IAAA,MAAM,KAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBO,YAAA,GAA+D;AACpE,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyDO,UAAA,CAAW,SAA6B,GAAA,EAAoB;AACjE,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,6BAAA,CAA8B,SAAA,EAAW,OAAA,EAAS,GAAG,CAAA;AAAA,IAC7D;AACA,IAAA,MAAM,UAAA,GAAa,GAAA,IAAO,OAAA,CAAQ,KAAA,EAAM;AACxC,IAAA,MAAM,WAAW,IAAA,CAAK,SAAA;AACtB,IAAA,IAAI,QAAA,CAAS,UAAU,CAAA,EAAG;AACxB,MAAA;AAAA,IACF;AAEA,IAAA,QAAA,CAAS,UAAU,CAAA,GAAI,OAAA;AAGvB,IAAA,IAAA,CAAK,oBAAA,EAAqB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAA,GAA6B;AAC3B,IAAA,IAAI;AAEF,MAAA,IAAI,QAAQ,GAAA,CAAI,UAAA,KAAe,UAAU,OAAA,CAAQ,GAAA,CAAI,eAAe,GAAA,EAAK;AACvE,QAAA;AAAA,MACF;AAGA,MAAA,OAAO,iCAAmC,CAAA,CACvC,IAAA,CAAK,OAAO,EAAE,iBAAgB,KAAM;AACnC,QAAA,MAAM,QAAA,GAAW,gBAAgB,WAAA,EAAY;AAC7C,QAAA,MAAM,iBAAiB,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,SAAA,IAAa,EAAE,CAAA;AACzD,QAAA,QAAA,CAAS,uBAAuB,cAAc,CAAA;AAG9C,QAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,QAAA,MAAA,CAAO,KAAK,2CAAoC,CAAA;AAGhD,QAAA,MAAM,QAAA,CAAS,aAAa,IAAI,CAAA;AAEhC,QAAA,MAAA,CAAO,KAAK,yFAAoF,CAAA;AAAA,MAClG,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,QAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,QAAA,MAAA,CAAO,KAAA,CAAM,kCAAkC,GAAG,CAAA;AAAA,MACpD,CAAC,CAAA;AAAA,IACL,SAAS,GAAA,EAAK;AAEZ,MAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,MAAA,MAAA,CAAO,KAAA,CAAM,iCAAiC,GAAG,CAAA;AAAA,IACnD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,KAAK,eAAA,EAAgB;AAE3B,IAAA,MAAM,IAAA,CAAK,eAAe,QAAA,EAAS;AAEnC,IAAA,IAAA,CAAK,OAAA,EAAS,KAAK,2BAA2B,CAAA;AAAA,EAChD;AAAA;AAAA,EAGA,IAAW,WAAA,GAAc;AACvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AACF","file":"chunk-YTLU3Q7Q.js","sourcesContent":["import { randomUUID } from 'node:crypto';\nimport type { Agent } from '../agent';\nimport type { BundlerConfig } from '../bundler/types';\nimport { InMemoryServerCache } from '../cache';\nimport type { MastraServerCache } from '../cache';\nimport type { AgentChannels } from '../channels/agent-channels';\nimport { DatasetsManager } from '../datasets/manager.js';\nimport type { MastraDeployer } from '../deployer';\nimport type { IMastraEditor } from '../editor';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { MastraScorer } from '../evals';\nimport { EventEmitterPubSub } from '../events/event-emitter';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event } from '../events/types';\nimport { AvailableHooks, registerHook } from '../hooks';\nimport type { MastraModelGateway } from '../llm/model/gateways';\nimport { defaultGateways } from '../llm/model/router';\nimport { LogLevel, noopLogger, ConsoleLogger, DualLogger } from '../logger';\nimport type { IMastraLogger } from '../logger';\nimport type { MCPServerBase } from '../mcp';\nimport type { MastraMemory } from '../memory';\nimport type {\n DefinitionSource,\n ObservabilityEntrypoint,\n ObservabilityExporter,\n ObservabilityInstance,\n LoggerContext,\n MetricsContext,\n} from '../observability';\nimport { NoOpObservability, noOpLoggerContext, noOpMetricsContext } from '../observability';\nimport type { Processor } from '../processors';\nimport type { MastraServerBase } from '../server/base';\nimport type { Middleware, ServerConfig } from '../server/types';\nimport type { MastraCompositeStore, WorkflowRuns } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport type { StorageResolvedPromptBlockType } from '../storage/types';\nimport type { ToolLoopAgentLike } from '../tool-loop-agent';\nimport { isToolLoopAgentLike, toolLoopAgentToMastraAgent } from '../tool-loop-agent';\nimport type { ToolAction } from '../tools';\nimport type { MastraTTS } from '../tts';\nimport type { MastraIdGenerator, IdGeneratorContext } from '../types';\nimport type { MastraVector } from '../vector';\nimport type { AnyWorkflow, Workflow } from '../workflows';\nimport { WorkflowEventProcessor } from '../workflows/evented/workflow-event-processor';\nimport type { AnyWorkspace, RegisteredWorkspace, Workspace } from '../workspace';\nimport { createOnScorerHook } from './hooks';\n\n/**\n * Creates an error for when a null/undefined value is passed to an add* method.\n * This commonly occurs when config is spread ({ ...config }) and the original\n * object had getters or non-enumerable properties.\n */\nfunction createUndefinedPrimitiveError(\n type:\n | 'agent'\n | 'tool'\n | 'processor'\n | 'vector'\n | 'scorer'\n | 'workflow'\n | 'mcp-server'\n | 'gateway'\n | 'memory'\n | 'workspace',\n value: null | undefined,\n key?: string,\n): MastraError {\n const typeLabel = type === 'mcp-server' ? 'MCP server' : type;\n const errorId = `MASTRA_ADD_${type.toUpperCase().replace('-', '_')}_UNDEFINED` as Uppercase<string>;\n return new MastraError({\n id: errorId,\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Cannot add ${typeLabel}: ${typeLabel} is ${value === null ? 'null' : 'undefined'}. This may occur if config was spread ({ ...config }) and the original object had getters or non-enumerable properties.`,\n details: { status: 400, ...(key && { key }) },\n });\n}\n\n/**\n * Configuration interface for initializing a Mastra instance.\n *\n * The Config interface defines all the optional components that can be registered\n * with a Mastra instance, including agents, workflows, storage, logging, and more.\n *\n * @template TAgents - Record of agent instances keyed by their names\n * @template TWorkflows - Record of workflow instances\n * @template TVectors - Record of vector store instances\n * @template TTTS - Record of text-to-speech instances\n * @template TLogger - Logger implementation type\n * @template TVNextNetworks - Record of agent network instances\n * @template TMCPServers - Record of MCP server instances\n * @template TScorers - Record of scorer instances\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * weatherAgent: new Agent({\n * id: 'weather-agent',\n * name: 'Weather Agent',\n * instructions: 'You help with weather information',\n * model: 'openai/gpt-5'\n * })\n * },\n * storage: new LibSQLStore({ id: 'mastra-storage', url: ':memory:' }),\n * logger: new PinoLogger({ name: 'MyApp' })\n * });\n * ```\n */\nexport interface Config<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TWorkflows extends Record<string, AnyWorkflow> = Record<string, AnyWorkflow>,\n TVectors extends Record<string, MastraVector<any>> = Record<string, MastraVector<any>>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TMCPServers extends Record<string, MCPServerBase<any>> = Record<string, MCPServerBase<any>>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n TTools extends Record<string, ToolAction<any, any, any, any, any, any>> = Record<\n string,\n ToolAction<any, any, any, any, any, any>\n >,\n TProcessors extends Record<string, Processor<any>> = Record<string, Processor<any>>,\n TMemory extends Record<string, MastraMemory> = Record<string, MastraMemory>,\n> {\n /**\n * Agents are autonomous systems that can make decisions and take actions.\n * Accepts both Mastra Agent instances and AI SDK v6 ToolLoopAgent instances.\n * ToolLoopAgent instances are automatically converted to Mastra Agents.\n */\n agents?: { [K in keyof TAgents]: TAgents[K] | ToolLoopAgentLike };\n\n /**\n * Storage provider for persisting data, conversation history, and workflow state.\n * Required for agent memory and workflow persistence.\n */\n storage?: MastraCompositeStore;\n\n /**\n * Vector stores for semantic search and retrieval-augmented generation (RAG).\n * Used for storing and querying embeddings.\n */\n vectors?: TVectors;\n\n /**\n * Logger implementation for application logging and debugging.\n * Set to `false` to disable logging entirely.\n * @default `INFO` level in development, `WARN` in production.\n */\n logger?: TLogger | false;\n\n /**\n * Workflows provide type-safe, composable task execution with built-in error handling.\n */\n workflows?: TWorkflows;\n\n /**\n * Text-to-speech providers for voice synthesis capabilities.\n */\n tts?: TTTS;\n\n /**\n * Observability entrypoint for tracking model interactions and tracing.\n * Pass an instance of the Observability class from @mastra/observability.\n *\n * @example\n * ```typescript\n * import { Observability, DefaultExporter, CloudExporter, SensitiveDataFilter } from '@mastra/observability';\n *\n * new Mastra({\n * observability: new Observability({\n * configs: {\n * default: {\n * serviceName: 'mastra',\n * exporters: [new DefaultExporter(), new CloudExporter()],\n * spanOutputProcessors: [new SensitiveDataFilter()],\n * },\n * },\n * })\n * })\n * ```\n */\n observability?: ObservabilityEntrypoint;\n\n /**\n * Custom ID generator function for creating unique identifiers.\n * Receives optional context about what type of ID is being generated\n * and where it's being requested from.\n * @default `crypto.randomUUID()`\n */\n idGenerator?: MastraIdGenerator;\n\n /**\n * Deployment provider for publishing applications to cloud platforms.\n */\n deployer?: MastraDeployer;\n\n /**\n * Server configuration for HTTP endpoints and middleware.\n */\n server?: ServerConfig;\n\n /**\n * MCP servers provide tools and resources that agents can use.\n */\n mcpServers?: TMCPServers;\n\n /**\n * Bundler configuration for packaging and deployment.\n */\n bundler?: BundlerConfig;\n\n /**\n * Pub/sub system for event-driven communication between components.\n * @default EventEmitterPubSub\n */\n pubsub?: PubSub;\n\n /**\n * Scorers help assess the quality of agent responses and workflow outputs.\n */\n scorers?: TScorers;\n\n /**\n * Tools are reusable functions that agents can use to interact with external systems.\n */\n tools?: TTools;\n\n /**\n * Processors transform inputs and outputs for agents and workflows.\n */\n processors?: TProcessors;\n\n /**\n * Memory instances that can be referenced by stored agents.\n * Keys are used to look up memory instances when resolving stored agent configurations.\n */\n memory?: TMemory;\n\n /**\n * Global workspace for file storage, skills, and code execution.\n * Agents inherit this workspace unless they have their own configured.\n * Skills are accessed via workspace.skills when skills is configured.\n */\n workspace?: AnyWorkspace;\n\n /**\n * Custom model router gateways for accessing LLM providers.\n * Gateways handle provider-specific authentication, URL construction, and model resolution.\n */\n gateways?: Record<string, MastraModelGateway>;\n\n /**\n * Event handlers for custom application events.\n * Maps event topics to handler functions for event-driven architectures.\n */\n events?: {\n [topic: string]: (\n event: Event,\n cb?: () => Promise<void>,\n ) => Promise<void> | ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n };\n\n /**\n * Editor instance for handling agent instantiation and configuration.\n * The editor handles complex instantiation logic including memory resolution.\n */\n editor?: IMastraEditor;\n}\n\n/**\n * The central orchestrator for Mastra applications, managing agents, workflows, storage, logging, observability, and more.\n *\n * The `Mastra` class serves as the main entry point and registry for all components in a Mastra application.\n * It coordinates the interaction between agents, workflows, storage systems, and other services.\n\n * @template TAgents - Record of agent instances keyed by their names\n * @template TWorkflows - Record of modern workflow instances\n * @template TVectors - Record of vector store instances for semantic search and RAG\n * @template TTTS - Record of text-to-speech provider instances\n * @template TLogger - Logger implementation type for application logging\n * @template TVNextNetworks - Record of next-generation agent network instances\n * @template TMCPServers - Record of Model Context Protocol server instances\n * @template TScorers - Record of evaluation scorer instances for measuring AI performance\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * weatherAgent: new Agent({\n * id: 'weather-agent',\n * name: 'Weather Agent',\n * instructions: 'You provide weather information',\n * model: 'openai/gpt-5',\n * tools: [getWeatherTool]\n * })\n * },\n * workflows: { dataWorkflow },\n * storage: new LibSQLStore({ id: 'mastra-storage', url: ':memory:' }),\n * logger: new PinoLogger({ name: 'MyApp' })\n * });\n * ```\n */\nexport class Mastra<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TWorkflows extends Record<string, AnyWorkflow> = Record<string, AnyWorkflow>,\n TVectors extends Record<string, MastraVector<any>> = Record<string, MastraVector<any>>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TMCPServers extends Record<string, MCPServerBase<any>> = Record<string, MCPServerBase<any>>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n TTools extends Record<string, ToolAction<any, any, any, any, any, any>> = Record<\n string,\n ToolAction<any, any, any, any, any, any>\n >,\n TProcessors extends Record<string, Processor<any>> = Record<string, Processor<any>>,\n TMemory extends Record<string, MastraMemory> = Record<string, MastraMemory>,\n> {\n #vectors?: TVectors;\n #agents: TAgents;\n #logger: TLogger;\n #workflows: TWorkflows;\n #observability: ObservabilityEntrypoint;\n #tts?: TTTS;\n #deployer?: MastraDeployer;\n #serverMiddleware: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path: string;\n }> = [];\n\n #storage?: MastraCompositeStore;\n #scorers?: TScorers;\n #tools?: TTools;\n #processors?: TProcessors;\n #processorConfigurations: Map<string, Array<{ processor: Processor; agentId: string; type: 'input' | 'output' }>> =\n new Map();\n #memory?: TMemory;\n #workspace?: Workspace;\n #workspaces: Record<string, RegisteredWorkspace> = {};\n #server?: ServerConfig;\n #serverAdapter?: MastraServerBase;\n #mcpServers?: TMCPServers;\n #bundler?: BundlerConfig;\n #idGenerator?: MastraIdGenerator;\n #pubsub: PubSub;\n #gateways?: Record<string, MastraModelGateway>;\n\n #events: {\n [topic: string]: ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n } = {};\n #internalMastraWorkflows: Record<string, Workflow> = {};\n // This is only used internally for server handlers that require temporary persistence\n #serverCache: MastraServerCache;\n // Cache for stored agents to allow in-memory modifications (like model changes) to persist across requests\n #storedAgentsCache: Map<string, Agent> = new Map();\n // Cache for stored scorers to allow in-memory modifications to persist across requests\n #storedScorersCache: Map<string, MastraScorer<any, any, any, any>> = new Map();\n // Registry for prompt blocks (stored or code-defined)\n #promptBlocks: Record<string, StorageResolvedPromptBlockType> = {};\n // Editor instance for handling agent instantiation and configuration\n #editor?: IMastraEditor;\n #datasets?: DatasetsManager;\n\n get pubsub() {\n return this.#pubsub;\n }\n\n get datasets(): DatasetsManager {\n if (!this.#datasets) {\n this.#datasets = new DatasetsManager(this);\n }\n return this.#datasets;\n }\n\n /**\n * Gets the currently configured ID generator function.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * idGenerator: context =>\n * context?.idType === 'message' && context.threadId\n * ? `msg-${context.threadId}-${Date.now()}`\n * : `custom-${Date.now()}`\n * });\n * const generator = mastra.getIdGenerator();\n * console.log(generator?.({ idType: 'message', threadId: 'thread-123' })); // \\\"msg-thread-123-1234567890\\\"\n * ```\n */\n public getIdGenerator() {\n return this.#idGenerator;\n }\n\n /**\n * Gets the currently configured editor instance.\n * The editor is responsible for handling agent instantiation and configuration.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * editor: new MastraEditor({ logger })\n * });\n * const editor = mastra.getEditor();\n * ```\n */\n public getEditor() {\n return this.#editor;\n }\n\n /**\n * Gets the stored agents cache\n * @internal\n */\n public getStoredAgentCache() {\n return this.#storedAgentsCache;\n }\n\n /**\n * Gets the stored scorers cache\n * @internal\n */\n public getStoredScorerCache() {\n return this.#storedScorersCache;\n }\n\n /**\n * Generates a unique identifier using the configured generator or defaults to `crypto.randomUUID()`.\n *\n * This method is used internally by Mastra for creating unique IDs for various entities\n * like workflow runs, agent conversations, and other resources that need unique identification.\n *\n * @param context - Optional context information about what type of ID is being generated\n * and where it's being requested from. This allows custom ID generators\n * to create deterministic IDs based on context.\n *\n * @throws {MastraError} When the custom ID generator returns an empty string\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const id = mastra.generateId();\n * console.log(id); // \"550e8400-e29b-41d4-a716-446655440000\"\n *\n * // With context for deterministic IDs\n * const messageId = mastra.generateId({\n * idType: 'message',\n * source: 'agent',\n * threadId: 'thread-123'\n * });\n * ```\n */\n public generateId(context?: IdGeneratorContext): string {\n if (this.#idGenerator) {\n const id = this.#idGenerator(context);\n if (!id) {\n const error = new MastraError({\n id: 'MASTRA_ID_GENERATOR_RETURNED_EMPTY_STRING',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'ID generator returned an empty string, which is not allowed',\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return id;\n }\n return randomUUID();\n }\n\n /**\n * Sets a custom ID generator function for creating unique identifiers.\n *\n * The ID generator function will be used by `generateId()` instead of the default\n * `crypto.randomUUID()`. This is useful for creating application-specific ID formats\n * or integrating with existing ID generation systems. The function receives\n * optional context about what is requesting the ID.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * mastra.setIdGenerator(context =>\n * context?.idType === 'run' && context.entityId\n * ? `run-${context.entityId}-${Date.now()}`\n * : `custom-${Date.now()}`\n * );\n * const id = mastra.generateId({ idType: 'run', entityId: 'agent-123' });\n * console.log(id); // \"run-agent-123-1234567890\"\n * ```\n */\n public setIdGenerator(idGenerator: MastraIdGenerator) {\n this.#idGenerator = idGenerator;\n }\n\n /**\n * Sets the server configuration for this Mastra instance.\n *\n * @param server - The server configuration object\n *\n * @example\n * ```typescript\n * mastra.setServer({ ...mastra.getServer(), auth: new MastraAuthWorkos() });\n * ```\n */\n public setServer(server: ServerConfig): void {\n this.#server = server;\n }\n\n /**\n * Registers an exporter on the default observability instance.\n *\n * If the current observability is a no-op (user didn't configure any), it is\n * first replaced with the provided entrypoint and the instance is registered\n * as default. If a real observability entrypoint already exists, the exporter\n * is added directly to the existing default instance.\n *\n * @param exporter - The exporter to register (e.g. a CloudExporter)\n * @param instance - An ObservabilityInstance pre-configured with the exporter, used as default when bootstrapping\n * @param entrypoint - A real ObservabilityEntrypoint to bootstrap if the current one is a no-op\n */\n public registerExporter(\n exporter: ObservabilityExporter,\n instance: ObservabilityInstance,\n entrypoint: ObservabilityEntrypoint,\n ): void {\n if (this.#observability instanceof NoOpObservability) {\n this.#observability = entrypoint;\n this.#observability.setLogger({ logger: this.#logger });\n this.#observability.setMastraContext({ mastra: this });\n this.#observability.registerInstance('default', instance, true);\n }\n\n const defaultInstance = this.#observability.getDefaultInstance();\n if (defaultInstance?.registerExporter) {\n defaultInstance.registerExporter(exporter);\n }\n }\n\n /**\n * Creates a new Mastra instance with the provided configuration.\n *\n * The constructor initializes all the components specified in the config, sets up\n * internal systems like logging and observability, and registers components with each other.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * assistant: new Agent({\n * id: 'assistant',\n * name: 'Assistant',\n * instructions: 'You are a helpful assistant',\n * model: 'openai/gpt-5'\n * })\n * },\n * storage: new PostgresStore({\n * connectionString: process.env.DATABASE_URL\n * }),\n * logger: new PinoLogger({ name: 'MyApp' }),\n * observability: new Observability({\n * configs: { default: { serviceName: 'mastra', exporters: [new DefaultExporter()] } },\n * }),\n * });\n * ```\n */\n constructor(\n config?: Config<TAgents, TWorkflows, TVectors, TTTS, TLogger, TMCPServers, TScorers, TTools, TProcessors, TMemory>,\n ) {\n // This is only used internally for server handlers that require temporary persistence\n this.#serverCache = new InMemoryServerCache();\n\n // Set the editor if provided and register this Mastra instance with it\n this.#editor = config?.editor;\n if (this.#editor && typeof this.#editor.registerWithMastra === 'function') {\n this.#editor.registerWithMastra(this);\n }\n\n if (config?.pubsub) {\n this.#pubsub = config.pubsub;\n } else {\n this.#pubsub = new EventEmitterPubSub();\n }\n\n this.#events = {};\n for (const topic in config?.events ?? {}) {\n if (!Array.isArray(config?.events?.[topic])) {\n this.#events[topic] = [config?.events?.[topic] as any];\n } else {\n this.#events[topic] = config?.events?.[topic] ?? [];\n }\n }\n\n const workflowEventProcessor = new WorkflowEventProcessor({ mastra: this });\n const workflowEventCb = async (event: Event, cb?: () => Promise<void>): Promise<void> => {\n try {\n await workflowEventProcessor.process(event, cb);\n } catch (e) {\n this.getLogger()?.error('Error processing event', e);\n }\n };\n if (this.#events.workflows) {\n this.#events.workflows.push(workflowEventCb);\n } else {\n this.#events.workflows = [workflowEventCb];\n }\n\n let logger: TLogger;\n if (config?.logger === false) {\n logger = noopLogger as unknown as TLogger;\n } else {\n if (config?.logger) {\n logger = config.logger;\n } else {\n const levelOnEnv =\n process.env.NODE_ENV === 'production' && process.env.MASTRA_DEV !== 'true' ? LogLevel.WARN : LogLevel.INFO;\n logger = new ConsoleLogger({ name: 'Mastra', level: levelOnEnv }) as unknown as TLogger;\n }\n }\n this.#logger = logger;\n\n this.#idGenerator = config?.idGenerator;\n\n let storage = config?.storage;\n\n if (storage) {\n storage = augmentWithInit(storage);\n }\n\n // Validate and assign observability instance\n if (config?.observability) {\n if (typeof config.observability.getDefaultInstance === 'function') {\n this.#observability = config.observability;\n // Set logger early\n this.#observability.setLogger({ logger: this.#logger });\n } else {\n this.#logger?.warn(\n 'Observability configuration error: Expected an Observability instance, but received a config object. ' +\n 'Import and instantiate: import { Observability, DefaultExporter } from \"@mastra/observability\"; ' +\n 'then pass: observability: new Observability({ configs: { default: { serviceName: \"mastra\", exporters: [new DefaultExporter()] } } }). ' +\n 'Observability has been disabled.',\n );\n this.#observability = new NoOpObservability();\n }\n } else {\n this.#observability = new NoOpObservability();\n }\n\n // Wrap the logger in a DualLogger so all existing this.logger.info(...) calls\n // also forward to loggerVNext (observability structured logging).\n // This is transparent — no call sites need to change.\n // Uses a lazy getter so loggerVNext is always resolved at call time\n // (observability may not be fully initialized yet at this point).\n const dualLogger = new DualLogger(this.#logger, () => this.loggerVNext);\n this.#logger = dualLogger as unknown as TLogger;\n\n this.#storage = storage;\n\n // Initialize all primitive storage objects first, we need to do this before adding primitives to avoid circular dependencies\n this.#vectors = {} as TVectors;\n this.#mcpServers = {} as TMCPServers;\n this.#tts = {} as TTTS;\n this.#agents = {} as TAgents;\n this.#scorers = {} as TScorers;\n this.#tools = {} as TTools;\n this.#processors = {} as TProcessors;\n this.#memory = {} as TMemory;\n this.#workflows = {} as TWorkflows;\n this.#gateways = {} as Record<string, MastraModelGateway>;\n\n // Now add primitives - order matters for auto-registration\n // Tools and processors should be added before agents and MCP servers that might use them\n // Note: We validate each entry to handle cases where config was spread ({ ...config })\n // which can cause undefined values if the source object had getters or non-enumerable properties\n if (config?.tools) {\n Object.entries(config.tools).forEach(([key, tool]) => {\n if (tool != null) {\n this.addTool(tool, key);\n }\n });\n }\n\n if (config?.processors) {\n Object.entries(config.processors).forEach(([key, processor]) => {\n if (processor != null) {\n this.addProcessor(processor, key);\n }\n });\n }\n\n if (config?.memory) {\n Object.entries(config.memory).forEach(([key, memory]) => {\n if (memory != null) {\n this.addMemory(memory, key);\n }\n });\n }\n\n if (config?.vectors) {\n Object.entries(config.vectors).forEach(([key, vector]) => {\n if (vector != null) {\n this.addVector(vector, key);\n }\n });\n }\n\n if (config?.workspace) {\n this.#workspace = config.workspace;\n // Also register in the workspaces registry for direct lookup by ID\n this.addWorkspace(config.workspace, undefined, { source: 'mastra' });\n }\n\n if (config?.scorers) {\n Object.entries(config.scorers).forEach(([key, scorer]) => {\n if (scorer != null) {\n this.addScorer(scorer, key, { source: 'code' });\n }\n });\n }\n\n if (config?.workflows) {\n Object.entries(config.workflows).forEach(([key, workflow]) => {\n if (workflow != null) {\n this.addWorkflow(workflow, key);\n }\n });\n }\n\n if (config?.gateways) {\n Object.entries(config.gateways).forEach(([key, gateway]) => {\n if (gateway != null) {\n this.addGateway(gateway, key);\n }\n });\n }\n\n // Auto-register default gateways (MastraGateway, NetlifyGateway, ModelsDevGateway)\n // so they're available via listGateways() without explicit config.\n // Skip duplicates so user-provided gateways above take precedence.\n // Added directly to #gateways to avoid triggering #syncGatewayRegistry for built-ins.\n for (const gateway of defaultGateways) {\n const key = gateway.getId();\n if (!(this.#gateways as Record<string, MastraModelGateway>)[key]) {\n (this.#gateways as Record<string, MastraModelGateway>)[key] = gateway;\n }\n }\n\n // Add MCP servers and agents last since they might reference other primitives\n if (config?.mcpServers) {\n Object.entries(config.mcpServers).forEach(([key, server]) => {\n if (server != null) {\n this.addMCPServer(server, key);\n }\n });\n }\n\n if (config?.tts) {\n Object.entries(config.tts).forEach(([key, tts]) => {\n if (tts != null) {\n (this.#tts as Record<string, MastraTTS>)[key] = tts;\n }\n });\n }\n\n if (config?.server) {\n this.#server = config.server;\n }\n\n // Agents must be added after server config so that channel webhook routes\n // are appended to (not replaced by) the server config.\n if (config?.agents) {\n Object.entries(config.agents).forEach(([key, agent]) => {\n if (agent != null) {\n this.addAgent(agent, key);\n }\n });\n }\n\n registerHook(AvailableHooks.ON_SCORER_RUN, createOnScorerHook(this));\n\n /*\n Initialize observability with Mastra context (after storage configured)\n */\n this.#observability.setMastraContext({ mastra: this });\n\n this.setLogger({ logger });\n }\n\n /**\n * Retrieves a registered agent by its name.\n *\n * @template TAgentName - The specific agent name type from the registered agents\n * @throws {MastraError} When the agent with the specified name is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * weatherAgent: new Agent({\n * id: 'weather-agent',\n * name: 'weather-agent',\n * instructions: 'You provide weather information',\n * model: 'openai/gpt-5'\n * })\n * }\n * });\n * const agent = mastra.getAgent('weatherAgent');\n * const response = await agent.generate('What is the weather?');\n * ```\n */\n public getAgent<TAgentName extends keyof TAgents>(name: TAgentName): TAgents[TAgentName];\n public getAgent<TAgentName extends keyof TAgents>(\n name: TAgentName,\n version: { versionId: string } | { status?: 'draft' | 'published' },\n ): Promise<TAgents[TAgentName]>;\n public getAgent<TAgentName extends keyof TAgents>(\n name: TAgentName,\n version?: { versionId: string } | { status?: 'draft' | 'published' },\n ): TAgents[TAgentName] | Promise<TAgents[TAgentName]> {\n const agent = this.#agents?.[name];\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ${String(name)} not found`,\n details: {\n status: 404,\n agentName: String(name),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!version) {\n return this.#agents[name];\n }\n\n return this.resolveVersionedAgent(agent, version);\n }\n\n /**\n * Returns the `AgentChannels` instances for all registered agents.\n * Keys are agent IDs.\n */\n public getChannels(): Record<string, AgentChannels> {\n const result: Record<string, AgentChannels> = {};\n for (const [agentKey, agent] of Object.entries(this.#agents ?? {})) {\n const agentChannels = agent.getChannels();\n if (agentChannels) {\n result[agentKey] = agentChannels;\n }\n }\n return result;\n }\n\n /**\n * Retrieves a registered agent by its unique ID.\n *\n * This method searches for an agent using its internal ID property. If no agent\n * is found with the given ID, it also attempts to find an agent using the ID as\n * a name.\n *\n * @throws {MastraError} When no agent is found with the specified ID\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * assistant: new Agent({\n * id: 'assistant',\n * name: 'assistant',\n * instructions: 'You are a helpful assistant',\n * model: 'openai/gpt-5'\n * })\n * }\n * });\n *\n * const assistant = mastra.getAgent('assistant');\n * const sameAgent = mastra.getAgentById(assistant.id);\n * ```\n */\n public getAgentById<TAgentName extends keyof TAgents>(id: TAgents[TAgentName]['id']): TAgents[TAgentName];\n public getAgentById<TAgentName extends keyof TAgents>(\n id: TAgents[TAgentName]['id'],\n version: { versionId: string } | { status?: 'draft' | 'published' },\n ): Promise<TAgents[TAgentName]>;\n public getAgentById<TAgentName extends keyof TAgents>(\n id: TAgents[TAgentName]['id'],\n version?: { versionId: string } | { status?: 'draft' | 'published' },\n ): TAgents[TAgentName] | Promise<TAgents[TAgentName]> {\n let agent = Object.values(this.#agents).find(a => a.id === id);\n\n if (!agent) {\n try {\n agent = this.getAgent(id as keyof TAgents) as TAgents[TAgentName];\n } catch {\n // do nothing\n }\n }\n\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with id ${String(id)} not found`,\n details: {\n status: 404,\n agentId: String(id),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!version) {\n return agent as TAgents[TAgentName];\n }\n\n return this.resolveVersionedAgent(agent as TAgents[TAgentName], version);\n }\n\n private async resolveVersionedAgent<TAgent extends Agent>(\n agent: TAgent,\n version: { versionId: string } | { status?: 'draft' | 'published' },\n ): Promise<TAgent> {\n const editor = this.getEditor();\n\n if (!editor) {\n const error = new MastraError({\n id: 'MASTRA_EDITOR_REQUIRED_FOR_VERSIONED_AGENT_LOOKUP',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Versioned agent lookup requires the editor package to be configured',\n details: {\n status: 400,\n agentId: agent.id,\n ...(version && 'versionId' in version ? { versionId: version.versionId } : {}),\n ...(version && 'status' in version && version.status ? { versionStatus: version.status } : {}),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return editor.agent.applyStoredOverrides(\n agent,\n 'versionId' in version ? version : { status: version.status ?? 'published' },\n ) as Promise<TAgent>;\n }\n\n /**\n * Returns all registered agents as a record keyed by their names.\n *\n * This method provides access to the complete registry of agents, allowing you to\n * iterate over them, check what agents are available, or perform bulk operations.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: {\n * weatherAgent: new Agent({ id: 'weather-agent', name: 'weather', model: 'openai/gpt-4o' }),\n * supportAgent: new Agent({ id: 'support-agent', name: 'support', model: 'openai/gpt-4o' })\n * }\n * });\n *\n * const allAgents = mastra.listAgents();\n * console.log(Object.keys(allAgents)); // ['weatherAgent', 'supportAgent']\n * ```\n */\n public listAgents() {\n return this.#agents;\n }\n\n /**\n * Adds a new agent to the Mastra instance.\n *\n * This method allows dynamic registration of agents after the Mastra instance\n * has been created. The agent will be initialized with the current logger.\n *\n * @throws {MastraError} When an agent with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newAgent = new Agent({\n * id: 'chat-agent',\n * name: 'Chat Assistant',\n * model: 'openai/gpt-4o'\n * });\n * mastra.addAgent(newAgent); // Uses agent.id as key\n * // or\n * mastra.addAgent(newAgent, 'customKey'); // Uses custom key\n * ```\n */\n public addAgent<A extends Agent | ToolLoopAgentLike>(\n agent: A,\n key?: string,\n options?: { source?: DefinitionSource },\n ): void {\n if (!agent) {\n throw createUndefinedPrimitiveError('agent', agent, key);\n }\n let mastraAgent: Agent<any, any, any>;\n if (isToolLoopAgentLike(agent)) {\n // Pass the config key as the name if the ToolLoopAgent doesn't have an id\n mastraAgent = toolLoopAgentToMastraAgent(agent, { fallbackName: key });\n } else {\n mastraAgent = agent;\n }\n const agentKey = key || mastraAgent.id;\n const agents = this.#agents as Record<string, Agent<any>>;\n if (agents[agentKey]) {\n return;\n }\n\n // Initialize the agent\n mastraAgent.__setLogger(this.#logger);\n mastraAgent.__registerMastra(this);\n mastraAgent.__registerPrimitives({\n logger: this.getLogger(),\n storage: this.getStorage(),\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n\n // Set the source if provided\n if (options?.source) {\n mastraAgent.source = options.source;\n }\n\n agents[agentKey] = mastraAgent;\n\n // Register configured processor workflows from the agent\n // Use .then() to handle async resolution without blocking the constructor\n // This excludes memory-derived processors to avoid triggering memory factory functions\n mastraAgent\n .getConfiguredProcessorWorkflows()\n .then(processorWorkflows => {\n for (const workflow of processorWorkflows) {\n this.addWorkflow(workflow, workflow.id);\n }\n })\n .catch(err => {\n this.#logger?.debug(`Failed to register processor workflows for agent ${agentKey}:`, err);\n });\n\n // Register agent workspace in the workspaces registry for direct lookup.\n // Dynamic workspace functions may return undefined without request context — that's fine,\n // the if (workspace) guard below will skip registration and they'll register lazily later.\n if (mastraAgent.hasOwnWorkspace?.()) {\n Promise.resolve(mastraAgent.getWorkspace?.())\n .then(workspace => {\n if (workspace) {\n this.addWorkspace(workspace, undefined, {\n source: 'agent',\n agentId: mastraAgent.id ?? agentKey,\n agentName: mastraAgent.name,\n });\n }\n })\n .catch(err => {\n this.#logger?.debug(`Failed to register workspace for agent ${agentKey}:`, err);\n });\n }\n\n // Register scorers from the agent to the Mastra instance\n // This makes agent-level scorers discoverable via mastra.getScorer()/getScorerById()\n mastraAgent\n .listScorers()\n .then(scorers => {\n for (const [, entry] of Object.entries(scorers || {})) {\n this.addScorer(entry.scorer, undefined, { source: 'code' });\n }\n })\n .catch(err => {\n this.#logger?.debug(`Failed to register scorers from agent ${agentKey}:`, err);\n });\n\n // Register webhook routes and initialize channels\n const agentChannels = mastraAgent.getChannels();\n if (agentChannels) {\n agentChannels.__setLogger(this.#logger);\n const channelRoutes = agentChannels.getWebhookRoutes();\n if (channelRoutes.length > 0) {\n this.#server = {\n ...this.#server,\n apiRoutes: [...(this.#server?.apiRoutes ?? []), ...channelRoutes],\n };\n }\n void agentChannels.initialize(this);\n }\n }\n\n /**\n * Removes an agent from the Mastra instance by its key or ID.\n * Used when stored agents are updated/deleted to allow fresh data to be loaded.\n *\n * @param keyOrId - The agent key or ID to remove\n * @returns true if an agent was removed, false if no agent was found\n *\n * @example\n * ```typescript\n * // Remove by key\n * mastra.removeAgent('myAgent');\n *\n * // Remove by ID\n * mastra.removeAgent('agent-123');\n * ```\n */\n public removeAgent(keyOrId: string): boolean {\n const agents = this.#agents as Record<string, Agent<any>>;\n\n // Try direct key lookup first\n if (agents[keyOrId]) {\n const agentId = agents[keyOrId]?.id;\n delete agents[keyOrId];\n // Clear from stored agents cache to prevent stale data\n if (agentId) {\n this.#storedAgentsCache.delete(agentId);\n }\n return true;\n }\n\n // Try finding by ID\n const key = Object.keys(agents).find(k => agents[k]?.id === keyOrId);\n if (key) {\n const agentId = agents[key]?.id;\n delete agents[key];\n // Clear from stored agents cache to prevent stale data\n if (agentId) {\n this.#storedAgentsCache.delete(agentId);\n }\n return true;\n }\n\n return false;\n }\n\n /**\n * Retrieves a registered vector store by its name.\n *\n * @template TVectorName - The specific vector store name type from the registered vectors\n * @throws {MastraError} When the vector store with the specified name is not found\n *\n * @example Using a vector store for semantic search\n * ```typescript\n * import { PineconeVector } from '@mastra/pinecone';\n * import { OpenAIEmbedder } from '@mastra/embedders';\n *\n * const mastra = new Mastra({\n * vectors: {\n * knowledge: new PineconeVector({\n * apiKey: process.env.PINECONE_API_KEY,\n * indexName: 'knowledge-base',\n * embedder: new OpenAIEmbedder({\n * apiKey: process.env.OPENAI_API_KEY,\n * model: 'text-embedding-3-small'\n * })\n * }),\n * products: new PineconeVector({\n * apiKey: process.env.PINECONE_API_KEY,\n * indexName: 'product-catalog'\n * })\n * }\n * });\n *\n * // Get a vector store and perform semantic search\n * const knowledgeBase = mastra.getVector('knowledge');\n * const results = await knowledgeBase.query({\n * query: 'How to reset password?',\n * topK: 5\n * });\n *\n * console.log('Relevant documents:', results);\n * ```\n */\n public getVector<TVectorName extends keyof TVectors>(name: TVectorName): TVectors[TVectorName] {\n const vector = this.#vectors?.[name];\n if (!vector) {\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector with name ${String(name)} not found`,\n details: {\n status: 404,\n vectorName: String(name),\n vectors: Object.keys(this.#vectors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return vector;\n }\n\n /**\n * Retrieves a specific vector store instance by its ID.\n *\n * This method searches for a vector store by its internal ID property.\n * If not found by ID, it falls back to searching by registration key.\n *\n * @throws {MastraError} When the specified vector store is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * vectors: {\n * embeddings: chromaVector\n * }\n * });\n *\n * const vectorStore = mastra.getVectorById('chroma-123');\n * ```\n */\n public getVectorById<TVectorName extends keyof TVectors>(id: TVectors[TVectorName]['id']): TVectors[TVectorName] {\n const allVectors = this.#vectors ?? ({} as Record<string, MastraVector>);\n\n // First try to find by internal ID\n for (const vector of Object.values(allVectors)) {\n if (vector.id === id) {\n return vector as TVectors[TVectorName];\n }\n }\n\n // Fallback to searching by registration key\n const vectorByKey = allVectors[id];\n if (vectorByKey) {\n return vectorByKey as TVectors[TVectorName];\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector store with id ${id} not found`,\n details: {\n status: 404,\n vectorId: String(id),\n vectors: Object.keys(allVectors).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Returns all registered vector stores as a record keyed by their names.\n *\n * @example Listing all vector stores\n * ```typescript\n * const mastra = new Mastra({\n * vectors: {\n * documents: new PineconeVector({ indexName: 'docs' }),\n * images: new PineconeVector({ indexName: 'images' }),\n * products: new ChromaVector({ collectionName: 'products' })\n * }\n * });\n *\n * const allVectors = mastra.getVectors();\n * console.log(Object.keys(allVectors)); // ['documents', 'images', 'products']\n *\n * // Check vector store types and configurations\n * for (const [name, vectorStore] of Object.entries(allVectors)) {\n * console.log(`Vector store ${name}:`, vectorStore.constructor.name);\n * }\n * ```\n */\n public listVectors(): TVectors | undefined {\n return this.#vectors;\n }\n\n /**\n * Adds a new vector store to the Mastra instance.\n *\n * This method allows dynamic registration of vector stores after the Mastra instance\n * has been created. The vector store will be initialized with the current logger.\n *\n * @throws {MastraError} When a vector store with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newVector = new ChromaVector({ id: 'chroma-embeddings' });\n * mastra.addVector(newVector); // Uses vector.id as key\n * // or\n * mastra.addVector(newVector, 'customKey'); // Uses custom key\n * ```\n */\n public addVector<V extends MastraVector>(vector: V, key?: string): void {\n if (!vector) {\n throw createUndefinedPrimitiveError('vector', vector, key);\n }\n const vectorKey = key || vector.id;\n const vectors = this.#vectors as Record<string, MastraVector>;\n if (vectors[vectorKey]) {\n return;\n }\n\n // Initialize the vector with the logger\n vector.__setLogger(this.#logger || this.getLogger());\n vectors[vectorKey] = vector;\n }\n\n /**\n * @deprecated Use listVectors() instead\n */\n public getVectors(): TVectors | undefined {\n console.warn('getVectors() is deprecated. Use listVectors() instead.');\n return this.listVectors();\n }\n\n /**\n * Gets the currently configured deployment provider.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * deployer: new VercelDeployer({\n * token: process.env.VERCEL_TOKEN,\n * projectId: process.env.VERCEL_PROJECT_ID\n * })\n * });\n *\n * const deployer = mastra.getDeployer();\n * if (deployer) {\n * await deployer.deploy({\n * name: 'my-mastra-app',\n * environment: 'production'\n * });\n * }\n * ```\n */\n public getDeployer() {\n return this.#deployer;\n }\n\n /**\n * Gets the global workspace instance.\n * Workspace provides file storage, skills, and code execution capabilities.\n * Agents inherit this workspace unless they have their own configured.\n *\n * @example\n * ```typescript\n * const workspace = mastra.getWorkspace();\n * if (workspace?.skills) {\n * const skills = await workspace.skills.list();\n * }\n * ```\n */\n public getWorkspace(): Workspace | undefined {\n return this.#workspace;\n }\n\n /**\n * Retrieves a registered workspace by its ID.\n *\n * @throws {MastraError} When the workspace with the specified ID is not found\n *\n * @example\n * ```typescript\n * const workspace = mastra.getWorkspaceById('workspace-123');\n * const files = await workspace.filesystem.readdir('/');\n * ```\n */\n public getWorkspaceById(id: string): Workspace {\n const entry = this.#workspaces[id];\n if (!entry) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKSPACE_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workspace with id ${id} not found`,\n details: {\n status: 404,\n workspaceId: id,\n availableIds: Object.keys(this.#workspaces).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return entry.workspace;\n }\n\n /**\n * Returns all registered workspaces as a record keyed by their IDs.\n *\n * @example\n * ```typescript\n * const workspaces = mastra.listWorkspaces();\n * for (const [id, entry] of Object.entries(workspaces)) {\n * console.log(`Workspace ${id}: ${entry.workspace.name} (source: ${entry.source})`);\n * }\n * ```\n */\n public listWorkspaces(): Record<string, RegisteredWorkspace> {\n return { ...this.#workspaces };\n }\n\n /**\n * Adds a new workspace to the Mastra instance.\n *\n * This method allows dynamic registration of workspaces after the Mastra instance\n * has been created. Workspaces are keyed by their ID.\n *\n * @example\n * ```typescript\n * const workspace = new Workspace({\n * id: 'project-workspace',\n * name: 'Project Workspace',\n * filesystem: new LocalFilesystem({ rootPath: './workspace' })\n * });\n * mastra.addWorkspace(workspace);\n * ```\n */\n public addWorkspace(\n workspace: AnyWorkspace,\n key?: string,\n metadata?: { source?: 'mastra' | 'agent'; agentId?: string; agentName?: string },\n ): void {\n if (!workspace) {\n throw createUndefinedPrimitiveError('workspace', workspace, key);\n }\n const source = metadata?.source ?? (metadata?.agentId || metadata?.agentName ? 'agent' : 'mastra');\n if (source === 'agent' && (!metadata?.agentId || !metadata?.agentName)) {\n throw new MastraError({\n id: 'MASTRA_ADD_WORKSPACE_MISSING_AGENT_METADATA',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Agent workspaces must include agentId and agentName.',\n details: { status: 400, workspaceId: key || workspace.id },\n });\n }\n const workspaceKey = key || workspace.id;\n if (this.#workspaces[workspaceKey]) {\n return;\n }\n\n this.#workspaces[workspaceKey] = {\n workspace,\n source,\n ...(metadata?.agentId ? { agentId: metadata.agentId } : {}),\n ...(metadata?.agentName ? { agentName: metadata.agentName } : {}),\n };\n }\n\n /**\n * Retrieves a registered workflow by its ID.\n *\n * @template TWorkflowId - The specific workflow ID type from the registered workflows\n * @throws {MastraError} When the workflow with the specified ID is not found\n *\n * @example Getting and executing a workflow\n * ```typescript\n * import { createWorkflow, createStep } from '@mastra/core/workflows';\n * import { z } from 'zod/v4';\n *\n * const processDataWorkflow = createWorkflow({\n * name: 'process-data',\n * triggerSchema: z.object({ input: z.string() })\n * })\n * .then(validateStep)\n * .then(transformStep)\n * .then(saveStep)\n * .commit();\n *\n * const mastra = new Mastra({\n * workflows: {\n * dataProcessor: processDataWorkflow\n * }\n * });\n * ```\n */\n public getWorkflow<TWorkflowId extends keyof TWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TWorkflows[TWorkflowId] {\n const workflow = this.#workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n __registerInternalWorkflow(workflow: Workflow) {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n });\n this.#internalMastraWorkflows[workflow.id] = workflow;\n }\n\n __hasInternalWorkflow(id: string): boolean {\n return Object.values(this.#internalMastraWorkflows).some(workflow => workflow.id === id);\n }\n\n __getInternalWorkflow(id: string): Workflow {\n const workflow = Object.values(this.#internalMastraWorkflows).find(a => a.id === id);\n if (!workflow) {\n throw new MastraError({\n id: 'MASTRA_GET_INTERNAL_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n },\n });\n }\n\n return workflow;\n }\n\n /**\n * Retrieves a registered workflow by its unique ID.\n *\n * This method searches for a workflow using its internal ID property. If no workflow\n * is found with the given ID, it also attempts to find a workflow using the ID as\n * a name.\n *\n * @throws {MastraError} When no workflow is found with the specified ID\n *\n * @example Finding a workflow by ID\n * ```typescript\n * const mastra = new Mastra({\n * workflows: {\n * dataProcessor: createWorkflow({\n * name: 'process-data',\n * triggerSchema: z.object({ input: z.string() })\n * }).commit()\n * }\n * });\n *\n * // Get the workflow's ID\n * const workflow = mastra.getWorkflow('dataProcessor');\n * const workflowId = workflow.id;\n *\n * // Later, retrieve the workflow by ID\n * const sameWorkflow = mastra.getWorkflowById(workflowId);\n * console.log(sameWorkflow.name); // \"process-data\"\n * ```\n */\n public getWorkflowById<TWorkflowName extends keyof TWorkflows>(\n id: TWorkflows[TWorkflowName]['id'],\n ): TWorkflows[TWorkflowName] {\n let workflow = Object.values(this.#workflows).find(a => a.id === id);\n\n if (!workflow) {\n try {\n workflow = this.getWorkflow(id);\n } catch {\n // do nothing\n }\n }\n\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return workflow as TWorkflows[TWorkflowName];\n }\n\n public async listActiveWorkflowRuns(): Promise<WorkflowRuns> {\n const storage = this.#storage;\n if (!storage) {\n this.#logger.debug('Cannot get active workflow runs. Mastra storage is not initialized');\n return { runs: [], total: 0 };\n }\n\n // Get all workflows with default engine type\n const defaultEngineWorkflows = Object.values(this.#workflows).filter(workflow => workflow.engineType === 'default');\n\n // Collect all active runs for workflows with default engine type\n const allRuns: WorkflowRuns['runs'] = [];\n let allTotal = 0;\n\n for (const workflow of defaultEngineWorkflows) {\n const runningRuns = await workflow.listWorkflowRuns({ status: 'running' });\n const waitingRuns = await workflow.listWorkflowRuns({ status: 'waiting' });\n\n allRuns.push(...runningRuns.runs, ...waitingRuns.runs);\n allTotal += runningRuns.total + waitingRuns.total;\n }\n\n return {\n runs: allRuns,\n total: allTotal,\n };\n }\n\n public async restartAllActiveWorkflowRuns(): Promise<void> {\n const activeRuns = await this.listActiveWorkflowRuns();\n if (activeRuns.runs.length > 0) {\n this.#logger.debug(\n `Restarting ${activeRuns.runs.length} active workflow run${activeRuns.runs.length > 1 ? 's' : ''}`,\n );\n }\n for (const runSnapshot of activeRuns.runs) {\n const workflow = this.getWorkflowById(runSnapshot.workflowName);\n try {\n const run = await workflow.createRun({ runId: runSnapshot.runId });\n await run.restart();\n this.#logger.debug('Restarted workflow run', { workflow: runSnapshot.workflowName, runId: runSnapshot.runId });\n } catch (error) {\n this.#logger.error('Failed to restart workflow run', {\n workflow: runSnapshot.workflowName,\n runId: runSnapshot.runId,\n error,\n });\n }\n }\n }\n\n /**\n * Returns all registered scorers as a record keyed by their IDs.\n *\n * @example Listing all scorers\n * ```typescript\n * import { HelpfulnessScorer, AccuracyScorer, RelevanceScorer } from '@mastra/scorers';\n *\n * const mastra = new Mastra({\n * scorers: {\n * helpfulness: new HelpfulnessScorer(),\n * accuracy: new AccuracyScorer(),\n * relevance: new RelevanceScorer()\n * }\n * });\n *\n * const allScorers = mastra.listScorers();\n * console.log(Object.keys(allScorers)); // ['helpfulness', 'accuracy', 'relevance']\n *\n * // Check scorer configurations\n * for (const [id, scorer] of Object.entries(allScorers)) {\n * console.log(`Scorer ${id}:`, scorer.id, scorer.name, scorer.description);\n * }\n * ```\n */\n public listScorers() {\n return this.#scorers;\n }\n\n /**\n * Adds a new scorer to the Mastra instance.\n *\n * This method allows dynamic registration of scorers after the Mastra instance\n * has been created.\n *\n * @throws {MastraError} When a scorer with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newScorer = new MastraScorer({\n * id: 'quality-scorer',\n * name: 'Quality Scorer'\n * });\n * mastra.addScorer(newScorer); // Uses scorer.id as key\n * // or\n * mastra.addScorer(newScorer, 'customKey'); // Uses custom key\n * ```\n */\n public addScorer<S extends MastraScorer<any, any, any, any>>(\n scorer: S,\n key?: string,\n options?: { source?: DefinitionSource },\n ): void {\n if (!scorer) {\n throw createUndefinedPrimitiveError('scorer', scorer, key);\n }\n const scorerKey = key || scorer.id;\n const scorers = this.#scorers as Record<string, MastraScorer<any, any, any, any>>;\n if (scorers[scorerKey]) {\n return;\n }\n\n // Register Mastra instance with scorer to enable custom gateway access\n scorer.__registerMastra(this);\n\n // Set the source if provided\n if (options?.source) {\n scorer.source = options.source;\n }\n\n scorers[scorerKey] = scorer;\n }\n\n /**\n * Retrieves a registered scorer by its key.\n *\n * @template TScorerKey - The specific scorer key type from the registered scorers\n * @throws {MastraError} When the scorer with the specified key is not found\n *\n * @example Getting and using a scorer\n * ```typescript\n * import { HelpfulnessScorer, AccuracyScorer } from '@mastra/scorers';\n *\n * const mastra = new Mastra({\n * scorers: {\n * helpfulness: new HelpfulnessScorer({\n * model: 'openai/gpt-4o',\n * criteria: 'Rate how helpful this response is'\n * }),\n * accuracy: new AccuracyScorer({\n * model: 'openai/gpt-5'\n * })\n * }\n * });\n *\n * // Get a specific scorer\n * const helpfulnessScorer = mastra.getScorer('helpfulness');\n * const score = await helpfulnessScorer.score({\n * input: 'How do I reset my password?',\n * output: 'You can reset your password by clicking the forgot password link.',\n * expected: 'Detailed password reset instructions'\n * });\n *\n * console.log('Helpfulness score:', score);\n * ```\n */\n public getScorer<TScorerKey extends keyof TScorers>(key: TScorerKey): TScorers[TScorerKey] {\n const scorer = this.#scorers?.[key];\n if (!scorer) {\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ${String(key)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return scorer;\n }\n\n /**\n * Retrieves a registered scorer by its name.\n *\n * This method searches through all registered scorers to find one with the specified name.\n * Unlike `getScorer()` which uses the registration key, this method uses the scorer's\n * internal name property.\n *\n * @throws {MastraError} When no scorer is found with the specified name\n *\n * @example Finding a scorer by name\n * ```typescript\n * import { HelpfulnessScorer } from '@mastra/scorers';\n *\n * const mastra = new Mastra({\n * scorers: {\n * myHelpfulnessScorer: new HelpfulnessScorer({\n * name: 'helpfulness-evaluator',\n * model: 'openai/gpt-5'\n * })\n * }\n * });\n *\n * // Find scorer by its internal name, not the registration key\n * const scorer = mastra.getScorerById('helpfulness-evaluator');\n * const score = await scorer.score({\n * input: 'question',\n * output: 'answer'\n * });\n * ```\n */\n public getScorerById<TScorerName extends keyof TScorers>(id: TScorers[TScorerName]['id']): TScorers[TScorerName] {\n for (const [_key, value] of Object.entries(this.#scorers ?? {})) {\n if (value.id === id || value?.name === id) {\n return value as TScorers[TScorerName];\n }\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with id ${String(id)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Removes a scorer from the Mastra instance by its key or ID.\n *\n * @param keyOrId - The scorer key or ID to remove\n * @returns true if a scorer was removed, false if no scorer was found\n */\n public removeScorer(keyOrId: string): boolean {\n const scorers = this.#scorers as Record<string, MastraScorer<any, any, any, any>> | undefined;\n if (!scorers) return false;\n\n // Try direct key lookup first\n if (scorers[keyOrId]) {\n const scorerId = scorers[keyOrId]?.id;\n delete scorers[keyOrId];\n // Clear from stored scorers cache to prevent stale data\n if (scorerId) {\n this.#storedScorersCache.delete(scorerId);\n }\n return true;\n }\n\n // Try finding by ID or name\n const key = Object.keys(scorers).find(k => scorers[k]?.id === keyOrId || scorers[k]?.name === keyOrId);\n if (key) {\n const scorerId = scorers[key]?.id;\n delete scorers[key];\n // Clear from stored scorers cache to prevent stale data\n if (scorerId) {\n this.#storedScorersCache.delete(scorerId);\n }\n return true;\n }\n\n return false;\n }\n\n // =========================================================================\n // Prompt Blocks\n // =========================================================================\n\n /**\n * Returns all registered prompt blocks.\n */\n public listPromptBlocks(): Record<string, StorageResolvedPromptBlockType> {\n return this.#promptBlocks;\n }\n\n /**\n * Registers a prompt block in the Mastra instance's runtime registry.\n *\n * @param promptBlock - The resolved prompt block to register\n * @param key - Optional registration key (defaults to promptBlock.id)\n */\n public addPromptBlock(promptBlock: StorageResolvedPromptBlockType, key?: string): void {\n const blockKey = key || promptBlock.id;\n if (this.#promptBlocks[blockKey]) {\n return;\n }\n this.#promptBlocks[blockKey] = promptBlock;\n }\n\n /**\n * Retrieves a registered prompt block by its key.\n *\n * @throws {MastraError} When the prompt block with the specified key is not found\n */\n public getPromptBlock(key: string): StorageResolvedPromptBlockType {\n const block = this.#promptBlocks[key];\n if (!block) {\n throw new MastraError({\n id: 'MASTRA_GET_PROMPT_BLOCK_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Prompt block with key ${key} not found`,\n });\n }\n return block;\n }\n\n /**\n * Retrieves a registered prompt block by its ID.\n *\n * @throws {MastraError} When no prompt block is found with the specified ID\n */\n public getPromptBlockById(id: string): StorageResolvedPromptBlockType {\n for (const [, block] of Object.entries(this.#promptBlocks)) {\n if (block.id === id) {\n return block;\n }\n }\n\n throw new MastraError({\n id: 'MASTRA_GET_PROMPT_BLOCK_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Prompt block with id ${id} not found`,\n });\n }\n\n /**\n * Removes a prompt block from the Mastra instance by its key or ID.\n *\n * @param keyOrId - The prompt block key or ID to remove\n * @returns true if a prompt block was removed, false if not found\n */\n public removePromptBlock(keyOrId: string): boolean {\n if (this.#promptBlocks[keyOrId]) {\n delete this.#promptBlocks[keyOrId];\n return true;\n }\n\n const key = Object.keys(this.#promptBlocks).find(k => this.#promptBlocks[k]?.id === keyOrId);\n if (key) {\n delete this.#promptBlocks[key];\n return true;\n }\n\n return false;\n }\n\n /**\n * Retrieves a specific tool by registration key.\n *\n * @throws {MastraError} When the specified tool is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * tools: {\n * calculator: calculatorTool,\n * weather: weatherTool\n * }\n * });\n *\n * const tool = mastra.getTool('calculator');\n * ```\n */\n public getTool<TToolName extends keyof TTools>(name: TToolName): TTools[TToolName] {\n if (!this.#tools || !this.#tools[name]) {\n const error = new MastraError({\n id: 'MASTRA_GET_TOOL_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Tool with name ${String(name)} not found`,\n details: {\n status: 404,\n toolName: String(name),\n tools: Object.keys(this.#tools ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#tools[name];\n }\n\n /**\n * Retrieves a specific tool by its ID.\n *\n * @throws {MastraError} When the specified tool is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * tools: {\n * calculator: calculatorTool\n * }\n * });\n *\n * const tool = mastra.getToolById('calculator-tool-id');\n * ```\n */\n public getToolById<TToolName extends keyof TTools>(id: TTools[TToolName]['id']): TTools[TToolName] {\n const allTools = this.#tools;\n\n if (!allTools) {\n throw new MastraError({\n id: 'MASTRA_GET_TOOL_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Tool with id ${id} not found`,\n });\n }\n // First try to find by internal ID\n for (const tool of Object.values(allTools)) {\n if (tool.id === id) {\n return tool as TTools[TToolName];\n }\n }\n\n // Fallback to searching by registration key\n const toolByKey = allTools[id];\n if (toolByKey) {\n return toolByKey as TTools[TToolName];\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_TOOL_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Tool with id ${id} not found`,\n details: {\n status: 404,\n toolId: String(id),\n tools: Object.keys(allTools).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Lists all configured tools.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * tools: {\n * calculator: calculatorTool,\n * weather: weatherTool\n * }\n * });\n *\n * const tools = mastra.listTools();\n * Object.entries(tools || {}).forEach(([name, tool]) => {\n * console.log(`Tool \"${name}\":`, tool.id);\n * });\n * ```\n */\n public listTools(): TTools | undefined {\n return this.#tools;\n }\n\n /**\n * Adds a new tool to the Mastra instance.\n *\n * This method allows dynamic registration of tools after the Mastra instance\n * has been created.\n *\n * @throws {MastraError} When a tool with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newTool = createTool({\n * id: 'calculator-tool',\n * description: 'Performs calculations'\n * });\n * mastra.addTool(newTool); // Uses tool.id as key\n * // or\n * mastra.addTool(newTool, 'customKey'); // Uses custom key\n * ```\n */\n public addTool<T extends ToolAction<any, any, any, any>>(tool: T, key?: string): void {\n if (!tool) {\n throw createUndefinedPrimitiveError('tool', tool, key);\n }\n const toolKey = key || tool.id;\n const tools = this.#tools as Record<string, ToolAction<any, any, any, any>>;\n if (tools[toolKey]) {\n return;\n }\n\n tools[toolKey] = tool;\n }\n\n /**\n * Retrieves a specific processor by registration key.\n *\n * @throws {MastraError} When the specified processor is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * processors: {\n * validator: validatorProcessor,\n * transformer: transformerProcessor\n * }\n * });\n *\n * const processor = mastra.getProcessor('validator');\n * ```\n */\n public getProcessor<TProcessorName extends keyof TProcessors>(name: TProcessorName): TProcessors[TProcessorName] {\n if (!this.#processors || !this.#processors[name]) {\n const error = new MastraError({\n id: 'MASTRA_GET_PROCESSOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Processor with name ${String(name)} not found`,\n details: {\n status: 404,\n processorName: String(name),\n processors: Object.keys(this.#processors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#processors[name];\n }\n\n /**\n * Retrieves a specific processor by its ID.\n *\n * @throws {MastraError} When the specified processor is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * processors: {\n * validator: validatorProcessor\n * }\n * });\n *\n * const processor = mastra.getProcessorById('validator-processor-id');\n * ```\n */\n public getProcessorById<TProcessorName extends keyof TProcessors>(\n id: TProcessors[TProcessorName]['id'],\n ): TProcessors[TProcessorName] {\n const allProcessors = this.#processors;\n\n if (!allProcessors) {\n throw new MastraError({\n id: 'MASTRA_GET_PROCESSOR_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Processor with id ${id} not found`,\n });\n }\n\n // First try to find by internal ID\n for (const processor of Object.values(allProcessors)) {\n if (processor.id === id) {\n return processor as TProcessors[TProcessorName];\n }\n }\n\n // Fallback to searching by registration key\n const processorByKey = allProcessors[id];\n if (processorByKey) {\n return processorByKey as TProcessors[TProcessorName];\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_PROCESSOR_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Processor with id ${id} not found`,\n details: {\n status: 404,\n processorId: String(id),\n processors: Object.keys(allProcessors).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Lists all configured processors.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * processors: {\n * validator: validatorProcessor,\n * transformer: transformerProcessor\n * }\n * });\n *\n * const processors = mastra.listProcessors();\n * Object.entries(processors || {}).forEach(([name, processor]) => {\n * console.log(`Processor \"${name}\":`, processor.id);\n * });\n * ```\n */\n public listProcessors(): TProcessors | undefined {\n return this.#processors;\n }\n\n /**\n * Adds a new processor to the Mastra instance.\n *\n * This method allows dynamic registration of processors after the Mastra instance\n * has been created.\n *\n * @throws {MastraError} When a processor with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newProcessor = {\n * id: 'text-processor',\n * processInput: async (messages) => messages\n * };\n * mastra.addProcessor(newProcessor); // Uses processor.id as key\n * // or\n * mastra.addProcessor(newProcessor, 'customKey'); // Uses custom key\n * ```\n */\n public addProcessor<P extends Processor>(processor: P, key?: string): void {\n if (!processor) {\n throw createUndefinedPrimitiveError('processor', processor, key);\n }\n const processorKey = key || processor.id;\n const processors = this.#processors as Record<string, Processor>;\n if (processors[processorKey]) {\n return;\n }\n\n // Register Mastra with the processor if it supports it\n if (typeof processor.__registerMastra === 'function') {\n processor.__registerMastra(this);\n }\n\n processors[processorKey] = processor;\n }\n\n /**\n * Registers a processor configuration with agent context.\n * This tracks which agents use which processors with what configuration.\n *\n * @param processor - The processor instance\n * @param agentId - The ID of the agent that uses this processor\n * @param type - Whether this is an input or output processor\n */\n public addProcessorConfiguration(processor: Processor, agentId: string, type: 'input' | 'output'): void {\n const processorId = processor.id;\n if (!this.#processorConfigurations.has(processorId)) {\n this.#processorConfigurations.set(processorId, []);\n }\n const configs = this.#processorConfigurations.get(processorId)!;\n\n // Check if this exact configuration already exists\n const exists = configs.some(c => c.agentId === agentId && c.type === type);\n if (!exists) {\n configs.push({ processor, agentId, type });\n }\n }\n\n /**\n * Gets all processor configurations for a specific processor ID.\n *\n * @param processorId - The ID of the processor\n * @returns Array of configurations with agent context\n */\n public getProcessorConfigurations(\n processorId: string,\n ): Array<{ processor: Processor; agentId: string; type: 'input' | 'output' }> {\n return this.#processorConfigurations.get(processorId) || [];\n }\n\n /**\n * Gets all processor configurations.\n *\n * @returns Map of processor IDs to their configurations\n */\n public listProcessorConfigurations(): Map<\n string,\n Array<{ processor: Processor; agentId: string; type: 'input' | 'output' }>\n > {\n return this.#processorConfigurations;\n }\n\n /**\n * Retrieves a registered memory instance by its registration key.\n *\n * @throws {MastraError} When the memory instance with the specified key is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * memory: {\n * chat: new Memory({ storage })\n * }\n * });\n *\n * const chatMemory = mastra.getMemory('chat');\n * ```\n */\n public getMemory<TMemoryName extends keyof TMemory>(name: TMemoryName): TMemory[TMemoryName] {\n if (!this.#memory || !this.#memory[name]) {\n const error = new MastraError({\n id: 'MASTRA_GET_MEMORY_BY_KEY_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Memory with key ${String(name)} not found`,\n details: {\n status: 404,\n memoryKey: String(name),\n memory: Object.keys(this.#memory ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#memory[name];\n }\n\n /**\n * Retrieves a registered memory instance by its ID.\n *\n * Searches through all registered memory instances and returns the one whose ID matches.\n *\n * @throws {MastraError} When no memory instance with the specified ID is found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * memory: {\n * chat: new Memory({ id: 'chat-memory', storage })\n * }\n * });\n *\n * const memory = mastra.getMemoryById('chat-memory');\n * ```\n */\n public getMemoryById(id: string): MastraMemory {\n const allMemory = this.#memory;\n if (allMemory) {\n for (const [, memory] of Object.entries(allMemory)) {\n if (memory.id === id) {\n return memory;\n }\n }\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_MEMORY_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Memory with id ${id} not found`,\n details: {\n status: 404,\n memoryId: id,\n availableIds: Object.values(allMemory ?? {})\n .map(m => m.id)\n .join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Returns all registered memory instances as a record keyed by their names.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * memory: {\n * chat: new Memory({ storage }),\n * longTerm: new Memory({ storage })\n * }\n * });\n *\n * const allMemory = mastra.listMemory();\n * console.log(Object.keys(allMemory)); // ['chat', 'longTerm']\n * ```\n */\n public listMemory(): TMemory | undefined {\n return this.#memory;\n }\n\n /**\n * Adds a new memory instance to the Mastra instance.\n *\n * This method allows dynamic registration of memory instances after the Mastra instance\n * has been created.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const chatMemory = new Memory({\n * id: 'chat-memory',\n * storage: mastra.getStorage()\n * });\n * mastra.addMemory(chatMemory); // Uses memory.id as key\n * // or\n * mastra.addMemory(chatMemory, 'customKey'); // Uses custom key\n * ```\n */\n public addMemory<M extends MastraMemory>(memory: M, key?: string): void {\n if (!memory) {\n throw createUndefinedPrimitiveError('memory', memory, key);\n }\n const memoryKey = key || memory.id;\n const memoryRegistry = this.#memory as Record<string, MastraMemory>;\n if (memoryRegistry[memoryKey]) {\n return;\n }\n\n memoryRegistry[memoryKey] = memory;\n }\n\n /**\n * Returns all registered workflows as a record keyed by their IDs.\n *\n * @example Listing all workflows\n * ```typescript\n * const mastra = new Mastra({\n * workflows: {\n * dataProcessor: createWorkflow({...}).commit(),\n * emailSender: createWorkflow({...}).commit(),\n * reportGenerator: createWorkflow({...}).commit()\n * }\n * });\n *\n * const allWorkflows = mastra.listWorkflows();\n * console.log(Object.keys(allWorkflows)); // ['dataProcessor', 'emailSender', 'reportGenerator']\n *\n * // Execute all workflows with sample data\n * for (const [id, workflow] of Object.entries(allWorkflows)) {\n * console.log(`Workflow ${id}:`, workflow.name);\n * // const result = await workflow.execute(sampleData);\n * }\n * ```\n */\n public listWorkflows(props: { serialized?: boolean } = {}): Record<string, Workflow> {\n if (props.serialized) {\n return Object.entries(this.#workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#workflows;\n }\n\n /**\n * Adds a new workflow to the Mastra instance.\n *\n * This method allows dynamic registration of workflows after the Mastra instance\n * has been created. The workflow will be initialized with Mastra and primitives.\n *\n * @throws {MastraError} When a workflow with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newWorkflow = createWorkflow({\n * id: 'data-pipeline',\n * name: 'Data Pipeline'\n * }).commit();\n * mastra.addWorkflow(newWorkflow); // Uses workflow.id as key\n * // or\n * mastra.addWorkflow(newWorkflow, 'customKey'); // Uses custom key\n * ```\n */\n public addWorkflow(workflow: AnyWorkflow, key?: string): void {\n if (!workflow) {\n throw createUndefinedPrimitiveError('workflow', workflow, key);\n }\n const workflowKey = key || workflow.id;\n const workflows = this.#workflows as Record<string, AnyWorkflow>;\n if (workflows[workflowKey]) {\n return;\n }\n\n // Initialize the workflow with Mastra and primitives\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n storage: this.getStorage(),\n });\n if (!workflow.committed) {\n workflow.commit();\n }\n workflows[workflowKey] = workflow;\n }\n\n /**\n * Sets the storage provider for the Mastra instance.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n *\n * // Set PostgreSQL storage\n * mastra.setStorage(new PostgresStore({\n * connectionString: process.env.DATABASE_URL\n * }));\n *\n * // Now agents can use memory with the storage\n * const agent = new Agent({\n * id: 'assistant',\n * name: 'assistant',\n * memory: new Memory({ storage: mastra.getStorage() })\n * });\n * ```\n */\n public setStorage(storage: MastraCompositeStore) {\n this.#storage = augmentWithInit(storage);\n }\n\n public setLogger({ logger }: { logger: TLogger }) {\n // Wrap the new logger in a DualLogger to maintain dual-write to loggerVNext\n const dualLogger = new DualLogger(logger, () => this.loggerVNext);\n this.#logger = dualLogger as unknown as TLogger;\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n this.#agents?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#deployer) {\n this.#deployer.__setLogger(this.#logger);\n }\n\n if (this.#tts) {\n Object.keys(this.#tts).forEach(key => {\n this.#tts?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#storage) {\n this.#storage.__setLogger(this.#logger);\n }\n\n if (this.#vectors) {\n Object.keys(this.#vectors).forEach(key => {\n this.#vectors?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#mcpServers) {\n Object.keys(this.#mcpServers).forEach(key => {\n this.#mcpServers?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#workflows) {\n Object.keys(this.#workflows).forEach(key => {\n this.#workflows?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#serverAdapter) {\n this.#serverAdapter.__setLogger(this.#logger);\n }\n\n if (this.#workspace) {\n this.#workspace.__setLogger(this.#logger);\n }\n\n if (this.#memory) {\n Object.keys(this.#memory).forEach(key => {\n this.#memory?.[key]?.__setLogger(this.#logger);\n });\n }\n\n // Pass the raw logger (not the DualLogger) to observability to avoid circular forwarding\n this.#observability.setLogger({ logger });\n }\n\n /**\n * Gets all registered text-to-speech (TTS) providers.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * tts: {\n * openai: new OpenAITTS({\n * apiKey: process.env.OPENAI_API_KEY,\n * voice: 'alloy'\n * })\n * }\n * });\n *\n * const ttsProviders = mastra.getTTS();\n * const openaiTTS = ttsProviders?.openai;\n * if (openaiTTS) {\n * const audioBuffer = await openaiTTS.synthesize('Hello, world!');\n * }\n * ```\n */\n public getTTS() {\n return this.#tts;\n }\n\n /**\n * Gets the currently configured logger instance.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * logger: new PinoLogger({\n * name: 'MyApp',\n * level: 'info'\n * })\n * });\n *\n * const logger = mastra.getLogger();\n * logger.info('Application started');\n * logger.error('An error occurred', { error: 'details' });\n * ```\n */\n public getLogger() {\n return this.#logger;\n }\n\n /**\n * Gets the currently configured storage provider.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * storage: new LibSQLStore({ id: 'mastra-storage', url: 'file:./data.db' })\n * });\n *\n * // Use the storage in agent memory\n * const agent = new Agent({\n * id: 'assistant',\n * name: 'assistant',\n * memory: new Memory({\n * storage: mastra.getStorage()\n * })\n * });\n * ```\n */\n public getStorage() {\n return this.#storage;\n }\n\n get observability(): ObservabilityEntrypoint {\n return this.#observability;\n }\n\n /**\n * Structured logging API for observability.\n * Logs emitted via this API will not have trace correlation when used outside a span.\n * Use for startup logs, background jobs, or other non-traced scenarios.\n *\n * Note: For the infrastructure logger (IMastraLogger), use getLogger() instead.\n */\n get loggerVNext(): LoggerContext {\n return this.#observability.getDefaultInstance()?.getLoggerContext?.() ?? noOpLoggerContext;\n }\n\n /**\n * Direct metrics API for use outside trace context.\n * Metrics emitted via this API will not have auto correlation or cost context from spans.\n * Use for background jobs, startup metrics, or other non-traced scenarios.\n */\n get metrics(): MetricsContext {\n return this.#observability.getDefaultInstance()?.getMetricsContext?.() ?? noOpMetricsContext;\n }\n\n public getServerMiddleware() {\n return this.#serverMiddleware;\n }\n\n public getServerCache() {\n return this.#serverCache;\n }\n\n public setServerMiddleware(serverMiddleware: Middleware | Middleware[]) {\n if (typeof serverMiddleware === 'function') {\n this.#serverMiddleware = [\n {\n handler: serverMiddleware,\n path: '/api/*',\n },\n ];\n return;\n }\n\n if (!Array.isArray(serverMiddleware)) {\n const error = new MastraError({\n id: 'MASTRA_SET_SERVER_MIDDLEWARE_INVALID_TYPE',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Invalid middleware: expected a function or array, received ${typeof serverMiddleware}`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n this.#serverMiddleware = serverMiddleware.map(m => {\n if (typeof m === 'function') {\n return {\n handler: m,\n path: '/api/*',\n };\n }\n return {\n handler: m.handler,\n path: m.path || '/api/*',\n };\n });\n }\n\n public getServer() {\n return this.#server;\n }\n\n /**\n * Sets the server adapter for this Mastra instance.\n *\n * The server adapter provides access to the underlying server app (e.g., Hono, Express)\n * and allows users to call routes directly via `app.fetch()` instead of making HTTP requests.\n *\n * This is typically called by `createHonoServer` or similar factory functions during\n * server initialization.\n *\n * @param adapter - The server adapter instance (e.g., MastraServer from @mastra/hono or @mastra/express)\n *\n * @example\n * ```typescript\n * const app = new Hono();\n * const adapter = new MastraServer({ app, mastra });\n * mastra.setMastraServer(adapter);\n * ```\n */\n public setMastraServer(adapter: MastraServerBase): void {\n if (this.#serverAdapter) {\n this.#logger?.debug(\n 'Replacing existing server adapter. Only one adapter should be registered per Mastra instance.',\n );\n }\n this.#serverAdapter = adapter;\n // Inject the logger into the adapter\n if (this.#logger) {\n adapter.__setLogger(this.#logger);\n }\n }\n\n /**\n * Gets the server adapter for this Mastra instance.\n *\n * @returns The server adapter, or undefined if not set\n *\n * @example\n * ```typescript\n * const adapter = mastra.getMastraServer();\n * if (adapter) {\n * const app = adapter.getApp<Hono>();\n * }\n * ```\n */\n public getMastraServer(): MastraServerBase | undefined {\n return this.#serverAdapter;\n }\n\n /**\n * Gets the server app from the server adapter.\n *\n * This is a convenience method that calls `getMastraServer()?.getApp<T>()`.\n * Use this to access the underlying server framework's app instance (e.g., Hono, Express)\n * for direct operations like calling routes via `app.fetch()`.\n *\n * @template T - The expected type of the app (e.g., Hono, Express Application)\n * @returns The server app, or undefined if no adapter is set\n *\n * @example\n * ```typescript\n * // After createHonoServer() is called:\n * const app = mastra.getServerApp<Hono>();\n *\n * // Call routes directly without HTTP overhead\n * const response = await app?.fetch(new Request('http://localhost/health'));\n * const data = await response?.json();\n * ```\n */\n public getServerApp<T = unknown>(): T | undefined {\n return this.#serverAdapter?.getApp<T>();\n }\n\n public getBundlerConfig() {\n return this.#bundler;\n }\n\n public async listLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n runId: string;\n transportId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_LIST_LOGS_BY_RUN_ID_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger?.listLogsByRunId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not configured or does not support listLogsByRunId operation',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return await this.#logger.listLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n });\n }\n\n public async listLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not set',\n details: {\n transportId,\n },\n });\n throw error;\n }\n\n return await this.#logger.listLogs(transportId, params);\n }\n\n /**\n * Gets all registered Model Context Protocol (MCP) server instances.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * mcpServers: {\n * filesystem: new FileSystemMCPServer({\n * rootPath: '/app/data'\n * })\n * }\n * });\n *\n * const mcpServers = mastra.getMCPServers();\n * if (mcpServers) {\n * const fsServer = mcpServers.filesystem;\n * const tools = await fsServer.listTools();\n * }\n * ```\n */\n public listMCPServers(): Record<string, MCPServerBase> | undefined {\n return this.#mcpServers;\n }\n\n /**\n * Adds a new MCP server to the Mastra instance.\n *\n * This method allows dynamic registration of MCP servers after the Mastra instance\n * has been created. The server will be initialized with ID, Mastra instance, and logger.\n *\n * @throws {MastraError} When an MCP server with the same key already exists\n *\n * @example\n * ```typescript\n * const mastra = new Mastra();\n * const newServer = new FileSystemMCPServer({\n * rootPath: '/data'\n * });\n * mastra.addMCPServer(newServer); // Uses server.id as key\n * // or\n * mastra.addMCPServer(newServer, 'customKey'); // Uses custom key\n * ```\n */\n public addMCPServer<M extends MCPServerBase>(server: M, key?: string): void {\n if (!server) {\n throw createUndefinedPrimitiveError('mcp-server', server, key);\n }\n // If a key is provided, try to set it as the ID\n // The setId method will only update if the ID wasn't explicitly set by the user\n if (key) {\n server.setId(key);\n }\n\n // Now resolve the ID after potentially setting it\n const resolvedId = server.id;\n if (!resolvedId) {\n const error = new MastraError({\n id: 'MASTRA_ADD_MCP_SERVER_MISSING_ID',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'MCP server must expose an id or be registered under one',\n details: { status: 400 },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n const serverKey = key ?? resolvedId;\n const servers = this.#mcpServers as Record<string, MCPServerBase>;\n if (servers[serverKey]) {\n return;\n }\n\n // Initialize the server\n server.__registerMastra(this);\n server.__setLogger(this.getLogger());\n servers[serverKey] = server;\n }\n\n /**\n * Retrieves a specific MCP server instance by registration key.\n *\n * @throws {MastraError} When the specified MCP server is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * mcpServers: {\n * filesystem: new FileSystemMCPServer({...})\n * }\n * });\n *\n * const fsServer = mastra.getMCPServer('filesystem');\n * const tools = await fsServer.listTools();\n * ```\n */\n public getMCPServer<TMCPServerName extends keyof TMCPServers>(\n name: TMCPServerName,\n ): TMCPServers[TMCPServerName] | undefined {\n if (!this.#mcpServers || !this.#mcpServers[name]) {\n this.#logger?.debug(`MCP server with name ${String(name)} not found`);\n return undefined as TMCPServers[TMCPServerName] | undefined;\n }\n return this.#mcpServers[name];\n }\n\n /**\n * Retrieves a specific Model Context Protocol (MCP) server instance by its logical ID.\n *\n * This method searches for an MCP server using its logical ID. If a version is specified,\n * it returns the exact version match. If no version is provided, it returns the server\n * with the most recent release date.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * mcpServers: {\n * filesystem: new FileSystemMCPServer({\n * id: 'fs-server',\n * version: '1.0.0',\n * rootPath: '/app/data'\n * })\n * }\n * });\n *\n * const fsServer = mastra.getMCPServerById('fs-server');\n * if (fsServer) {\n * const tools = await fsServer.listTools();\n * }\n * ```\n */\n public getMCPServerById<TMCPServerName extends keyof TMCPServers>(\n serverId: TMCPServers[TMCPServerName]['id'],\n version?: string,\n ): TMCPServers[TMCPServerName] | undefined {\n if (!this.#mcpServers) {\n return undefined;\n }\n\n const allRegisteredServers = Object.values(this.#mcpServers || {});\n\n const matchingLogicalIdServers = allRegisteredServers.filter(server => server.id === serverId);\n\n if (matchingLogicalIdServers.length === 0) {\n this.#logger?.debug(`No MCP servers found with logical ID: ${serverId}`);\n return undefined;\n }\n\n if (version) {\n const specificVersionServer = matchingLogicalIdServers.find(server => server.version === version);\n if (!specificVersionServer) {\n this.#logger?.debug(`MCP server with logical ID '${serverId}' found, but not version '${version}'.`);\n }\n return specificVersionServer as TMCPServers[TMCPServerName] | undefined;\n } else {\n // No version specified, find the one with the most recent releaseDate\n if (matchingLogicalIdServers.length === 1) {\n return matchingLogicalIdServers[0] as TMCPServers[TMCPServerName];\n }\n\n matchingLogicalIdServers.sort((a, b) => {\n // Ensure releaseDate exists and is a string before creating a Date object\n const dateAVal = a.releaseDate && typeof a.releaseDate === 'string' ? new Date(a.releaseDate).getTime() : NaN;\n const dateBVal = b.releaseDate && typeof b.releaseDate === 'string' ? new Date(b.releaseDate).getTime() : NaN;\n\n if (isNaN(dateAVal) && isNaN(dateBVal)) return 0;\n if (isNaN(dateAVal)) return 1; // Treat invalid/missing dates as older\n if (isNaN(dateBVal)) return -1; // Treat invalid/missing dates as older\n\n return dateBVal - dateAVal; // Sorts in descending order of time (latest first)\n });\n\n // After sorting, the first element should be the latest if its date is valid\n if (matchingLogicalIdServers.length > 0) {\n const latestServer = matchingLogicalIdServers[0];\n if (\n latestServer &&\n latestServer.releaseDate &&\n typeof latestServer.releaseDate === 'string' &&\n !isNaN(new Date(latestServer.releaseDate).getTime())\n ) {\n return latestServer as TMCPServers[TMCPServerName];\n }\n }\n this.#logger?.warn(\n `Could not determine the latest server for logical ID '${serverId}' due to invalid or missing release dates, or no servers left after filtering.`,\n );\n return undefined;\n }\n }\n\n public async addTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.subscribe(topic, listener);\n }\n\n public async removeTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n\n public async startEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.subscribe(topic, listener);\n }\n }\n }\n\n public async stopEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n }\n\n await this.#pubsub.flush();\n }\n\n /**\n * Retrieves a registered gateway by its key.\n *\n * @throws {MastraError} When the gateway with the specified key is not found\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * gateways: {\n * myGateway: new CustomGateway()\n * }\n * });\n *\n * const gateway = mastra.getGateway('myGateway');\n * ```\n */\n public getGateway(key: string): MastraModelGateway {\n const gateway = this.#gateways?.[key];\n if (!gateway) {\n const error = new MastraError({\n id: 'MASTRA_GET_GATEWAY_BY_KEY_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Gateway with key ${key} not found`,\n details: {\n status: 404,\n gatewayKey: key,\n gateways: Object.keys(this.#gateways ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return gateway;\n }\n\n /**\n * Retrieves a registered gateway by its ID.\n *\n * Searches through all registered gateways and returns the one whose ID matches.\n * If a gateway doesn't have an explicit ID, its name is used as the ID.\n *\n * @throws {MastraError} When no gateway with the specified ID is found\n *\n * @example\n * ```typescript\n * class CustomGateway extends MastraModelGateway {\n * readonly id = 'custom-gateway-v1';\n * readonly name = 'Custom Gateway';\n * // ...\n * }\n *\n * const mastra = new Mastra({\n * gateways: {\n * myGateway: new CustomGateway()\n * }\n * });\n *\n * const gateway = mastra.getGatewayById('custom-gateway-v1');\n * ```\n */\n public getGatewayById(id: string): MastraModelGateway {\n const gateways = this.#gateways ?? {};\n for (const gateway of Object.values(gateways)) {\n if (gateway.getId() === id) {\n return gateway;\n }\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_GATEWAY_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Gateway with ID ${id} not found`,\n details: {\n status: 404,\n gatewayId: id,\n availableIds: Object.values(gateways)\n .map(g => g.getId())\n .join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n /**\n * Returns all registered gateways as a record keyed by their names.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * gateways: {\n * netlify: new NetlifyGateway(),\n * custom: new CustomGateway()\n * }\n * });\n *\n * const allGateways = mastra.listGateways();\n * console.log(Object.keys(allGateways)); // ['netlify', 'custom']\n * ```\n */\n public listGateways(): Record<string, MastraModelGateway> | undefined {\n return this.#gateways;\n }\n\n /**\n * Adds a new gateway to the Mastra instance.\n *\n * This method allows dynamic registration of gateways after the Mastra instance\n * has been created. Gateways enable access to LLM providers through custom\n * authentication and routing logic.\n *\n * If no key is provided, the gateway's ID (or name if no ID is set) will be used as the key.\n *\n * @example\n * ```typescript\n * import { MastraModelGateway } from '@mastra/core';\n *\n * class CustomGateway extends MastraModelGateway {\n * readonly id = 'custom-gateway-v1'; // Optional, defaults to name\n * readonly name = 'custom';\n * readonly prefix = 'custom';\n *\n * async fetchProviders() {\n * return {\n * myProvider: {\n * name: 'My Provider',\n * models: ['model-1', 'model-2'],\n * apiKeyEnvVar: 'MY_API_KEY',\n * gateway: 'custom'\n * }\n * };\n * }\n *\n * buildUrl(modelId: string) {\n * return 'https://api.myprovider.com/v1';\n * }\n *\n * async getApiKey(modelId: string) {\n * return process.env.MY_API_KEY || '';\n * }\n *\n * async resolveLanguageModel({ modelId, providerId, apiKey }) {\n * const baseURL = this.buildUrl(`${providerId}/${modelId}`);\n * return createOpenAICompatible({\n * name: providerId,\n * apiKey,\n * baseURL,\n * supportsStructuredOutputs: true,\n * }).chatModel(modelId);\n * }\n * }\n *\n * const mastra = new Mastra();\n * const newGateway = new CustomGateway();\n * mastra.addGateway(newGateway); // Uses gateway.getId() as key (gateway.id)\n * // or\n * mastra.addGateway(newGateway, 'customKey'); // Uses custom key\n * ```\n */\n public addGateway(gateway: MastraModelGateway, key?: string): void {\n if (!gateway) {\n throw createUndefinedPrimitiveError('gateway', gateway, key);\n }\n const gatewayKey = key || gateway.getId();\n const gateways = this.#gateways as Record<string, MastraModelGateway>;\n if (gateways[gatewayKey]) {\n return;\n }\n\n gateways[gatewayKey] = gateway;\n\n // Register custom gateways with the registry for type generation\n this.#syncGatewayRegistry();\n }\n\n /**\n * Sync custom gateways with the GatewayRegistry for type generation\n * @private\n */\n #syncGatewayRegistry(): void {\n try {\n // Only sync in dev mode (when MASTRA_DEV is set)\n if (process.env.MASTRA_DEV !== 'true' && process.env.MASTRA_DEV !== '1') {\n return;\n }\n\n // Trigger sync immediately (non-blocking, but logs progress)\n import('../llm/model/provider-registry.js')\n .then(async ({ GatewayRegistry }) => {\n const registry = GatewayRegistry.getInstance();\n const customGateways = Object.values(this.#gateways || {});\n registry.registerCustomGateways(customGateways);\n\n // Log that we're syncing\n const logger = this.getLogger();\n logger.info('🔄 Syncing custom gateway types...');\n\n // Trigger a sync to regenerate types\n await registry.syncGateways(true);\n\n logger.info('✅ Custom gateway types synced! Restart your TypeScript server to see autocomplete.');\n })\n .catch(err => {\n const logger = this.getLogger();\n logger.debug('Gateway registry sync skipped:', err);\n });\n } catch (err) {\n // Silent fail - this is a dev-only feature\n const logger = this.getLogger();\n logger.debug('Gateway registry sync failed:', err);\n }\n }\n\n /**\n * Gracefully shuts down the Mastra instance and cleans up all resources.\n *\n * This method performs a clean shutdown of all Mastra components, including:\n * - tracing registry and all tracing instances\n * - Event engine and pub/sub system\n * - All registered components and their resources\n *\n * It's important to call this method when your application is shutting down\n * to ensure proper cleanup and prevent resource leaks.\n *\n * @example\n * ```typescript\n * const mastra = new Mastra({\n * agents: { myAgent },\n * workflows: { myWorkflow }\n * });\n *\n * // Graceful shutdown on SIGINT\n * process.on('SIGINT', async () => {\n * await mastra.shutdown();\n * process.exit(0);\n * });\n * ```\n */\n async shutdown(): Promise<void> {\n await this.stopEventEngine();\n // Shutdown observability registry, exporters, etc...\n await this.#observability.shutdown();\n\n this.#logger?.info('Mastra shutdown completed');\n }\n\n // This method is only used internally for server hnadlers that require temporary persistence\n public get serverCache() {\n return this.#serverCache;\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/observability/types/core.ts","../src/observability/types/metrics.ts","../src/observability/no-op.ts","../src/observability/context-factory.ts","../src/observability/context.ts"],"names":["SamplingStrategyType"],"mappings":"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","file":"chunk-ZHMULBPD.js","sourcesContent":["/**\n * Top-level observability infrastructure types.\n *\n * This file contains the core observability interfaces for managing instances,\n * exporters, bridges, configuration, event bus, and the context mixin.\n *\n * For tracing-specific types (spans, span types, attributes, etc.), see tracing.ts.\n */\nimport type { IMastraLogger } from '../../logger';\nimport type { Mastra } from '../../mastra';\nimport type { RequestContext } from '../../request-context';\nimport type { FeedbackEvent, FeedbackInput } from './feedback';\nimport type { LoggerContext, LogEvent } from './logging';\nimport type { MetricsContext, MetricEvent } from './metrics';\nimport type { ScoreEvent, ScoreInput } from './scores';\nimport type {\n AnySpan,\n RecordedTrace,\n CreateSpanOptions,\n EntityType,\n ExportedSpan,\n Span,\n SpanIds,\n SpanOutputProcessor,\n SpanType,\n StartSpanOptions,\n TracingContext,\n TracingEvent,\n} from './tracing';\n\n// ============================================================================\n// ObservabilityContext\n// ============================================================================\n\n/**\n * Canonical observability correlation and execution context.\n * These fields can travel alongside observability signals without being encoded in labels.\n */\nexport interface CorrelationContext {\n /**\n * @deprecated Use the signal's top-level `traceId` instead.\n */\n traceId?: string;\n /**\n * @deprecated Use the signal's top-level `spanId` instead.\n */\n spanId?: string;\n entityType?: EntityType;\n entityId?: string;\n entityName?: string;\n parentEntityType?: EntityType;\n parentEntityId?: string;\n parentEntityName?: string;\n rootEntityType?: EntityType;\n rootEntityId?: string;\n rootEntityName?: string;\n userId?: string;\n organizationId?: string;\n resourceId?: string;\n runId?: string;\n sessionId?: string;\n threadId?: string;\n requestId?: string;\n environment?: string;\n source?: string;\n serviceName?: string;\n experimentId?: string;\n tags?: string[];\n}\n\n/**\n * Mixin interface that provides unified observability access.\n * All execution contexts (tools, workflow steps, processors) extend this\n * to gain access to tracing, logging, and metrics.\n *\n * ## Naming conventions\n *\n * `tracingContext` is the **source** — it represents your position in the span tree.\n * Creating a child span produces a new `tracingContext` with that child as `currentSpan`.\n *\n * `loggerVNext` and `metrics` are **derived** — they are rebuilt from the current span so that\n * log entries and metric data points are automatically correlated to the active trace:\n *\n * ```\n * tracingContext → create child span → new tracingContext\n * → new loggerVNext (correlated to child span)\n * → new metrics (tagged with child span metadata)\n * ```\n *\n * The short names (`tracing`, `loggerVNext`, `metrics`) read naturally at **usage sites**:\n * `tracing.createSpan()`, `loggerVNext.info()`, `metrics.record()`.\n *\n * `loggerVNext` uses the VNext suffix to distinguish from the existing `logger: IMastraLogger`\n * infrastructure logger used throughout the codebase (e.g. `MastraPrimitives.logger`).\n *\n * The `tracingContext` alias is preferred at **forwarding sites** where the \"Context\"\n * suffix clarifies that a structural context object is being passed, not a subsystem.\n */\nexport interface ObservabilityContext {\n /** Tracing context for span creation and tree navigation. */\n tracing: TracingContext;\n\n /** Logger derived from the current span — log entries are trace-correlated. Uses VNext suffix to avoid conflict with IMastraLogger. */\n loggerVNext: LoggerContext;\n\n /** Metrics derived from the current span — data points are span-tagged. */\n metrics: MetricsContext;\n\n /**\n * Alias for `tracing`. Preferred at forwarding sites where the \"Context\" suffix\n * clarifies that a structural context object is being passed between functions.\n */\n tracingContext: TracingContext;\n}\n\n// ============================================================================\n// Shared Scorer Types\n// ============================================================================\n\n/** Where a registered definition came from. */\nexport type DefinitionSource = 'code' | 'stored';\n\n/** What kind of scoring flow produced the score. */\nexport type ScorerScoreSource = 'live' | 'trace' | 'experiment';\n\n/** How the scorer interpreted the target data. */\nexport type ScorerTargetScope = 'span' | 'trajectory';\n\n/** Execution style for a scorer step. */\nexport type ScorerStepType = 'function' | 'prompt';\n\n// ============================================================================\n// ObservabilityEventBus\n// ============================================================================\n\n/**\n * Generic event bus interface for observability events.\n * Implementations handle buffering, batching, and delivery to exporters.\n */\nexport interface ObservabilityEventBus<TEvent> {\n /** Emit an event to the bus */\n emit(event: TEvent): void;\n\n /** Subscribe to events. Returns unsubscribe function. */\n subscribe(handler: (event: TEvent) => void): () => void;\n\n /** Flush any buffered events */\n flush(): Promise<void>;\n\n /** Shutdown the bus and release resources */\n shutdown(): Promise<void>;\n}\n\n/**\n * Union of all observability event types.\n * Used by the unified ObservabilityBus that handles all signals.\n */\nexport type ObservabilityEvent = TracingEvent | LogEvent | MetricEvent | ScoreEvent | FeedbackEvent;\n\n// ============================================================================\n// ObservabilityInstance\n// ============================================================================\n\n/**\n * Primary interface for Observability\n */\nexport interface ObservabilityInstance {\n /**\n * Get current configuration\n */\n getConfig(): Readonly<ObservabilityInstanceConfig>;\n\n /**\n * Get all exporters\n */\n getExporters(): readonly ObservabilityExporter[];\n\n /**\n * Get all span output processors\n */\n getSpanOutputProcessors(): readonly SpanOutputProcessor[];\n\n /**\n * Get the logger instance (for exporters and other components)\n */\n getLogger(): IMastraLogger;\n\n /**\n * Get the bridge instance if configured\n */\n getBridge(): ObservabilityBridge | undefined;\n\n /**\n * Start a new span of a specific SpanType\n */\n startSpan<TType extends SpanType>(options: StartSpanOptions<TType>): Span<TType>;\n\n /**\n * Rebuild a span from exported data for lifecycle operations.\n * Used by durable execution engines (e.g., Inngest) to end/update spans\n * that were created in a previous durable operation.\n *\n * @param cached - The exported span data to rebuild from\n * @returns A span that can have end()/update()/error() called on it\n */\n rebuildSpan<TType extends SpanType>(cached: ExportedSpan<TType>): Span<TType>;\n\n /**\n * Force flush any buffered/queued spans from all exporters and the bridge\n * without shutting down the observability instance.\n *\n * This is useful in serverless environments (like Vercel's fluid compute) where\n * you need to ensure all spans are exported before the runtime instance is\n * terminated, while keeping the observability system active for future requests.\n *\n * Unlike shutdown(), flush() does not release resources or prevent future tracing.\n */\n flush(): Promise<void>;\n\n /**\n * Shutdown tracing and clean up resources\n */\n shutdown(): Promise<void>;\n\n /**\n * Override setLogger to add tracing specific initialization log\n */\n __setLogger(logger: IMastraLogger): void;\n\n /**\n * Get a LoggerContext for this instance, optionally correlated to a span.\n * When a span is provided, the returned logger automatically includes\n * the span's traceId, spanId, and other metadata in every log entry.\n * Returns no-op context when logging is not configured on this instance.\n *\n * @param span - Optional span to correlate logs with\n */\n getLoggerContext?(span?: AnySpan): LoggerContext;\n\n /**\n * Get a MetricsContext for this instance, optionally tagged from a span.\n * When a span is provided, the returned metrics context automatically\n * includes the span's metadata as labels/tags on emitted data points.\n * Returns no-op context when metrics are not configured on this instance.\n *\n * @param span - Optional span to derive metric tags from\n */\n getMetricsContext?(span?: AnySpan): MetricsContext;\n\n /**\n * Register an additional exporter to this instance at runtime.\n * Duplicate registrations (same instance) are silently ignored.\n *\n * @param exporter - The exporter to register\n */\n registerExporter?(exporter: ObservabilityExporter): void;\n}\n\n// ============================================================================\n// ObservabilityEntrypoint\n// ============================================================================\n\nexport interface ObservabilityEntrypoint {\n shutdown(): Promise<void>;\n\n setMastraContext(options: { mastra: Mastra }): void;\n\n setLogger(options: { logger: IMastraLogger }): void;\n\n getSelectedInstance(options: ConfigSelectorOptions): ObservabilityInstance | undefined;\n\n /**\n * Load a persisted trace as a hydrated RecordedTrace object.\n * Returns null when storage is unavailable or the trace does not exist.\n */\n getRecordedTrace?(args: { traceId: string }): Promise<RecordedTrace | null>;\n\n /**\n * Add a score to a persisted trace or span without hydrating a RecordedTrace.\n * Useful for durable executions that persist only identifiers across serialization boundaries.\n *\n * `traceId` anchors the scored target when available.\n * Include `spanId` when the score is about a specific span.\n * Include `correlationContext` to emit immediately from live span/trace state\n * without rehydrating the target from storage first.\n */\n addScore?(args: {\n traceId?: string;\n spanId?: string;\n correlationContext?: CorrelationContext;\n score: ScoreInput;\n }): Promise<void>;\n\n /**\n * Add feedback to a persisted trace or span without hydrating a RecordedTrace.\n * Useful for durable executions that persist only identifiers across serialization boundaries.\n *\n * `traceId` anchors the feedback target when available.\n * Include `spanId` when the feedback is about a specific span.\n * Include `correlationContext` to emit immediately from live span/trace state\n * without rehydrating the target from storage first.\n */\n addFeedback?(args: {\n traceId?: string;\n spanId?: string;\n correlationContext?: CorrelationContext;\n feedback: FeedbackInput;\n }): Promise<void>;\n\n // Registry management methods\n registerInstance(name: string, instance: ObservabilityInstance, isDefault?: boolean): void;\n getInstance(name: string): ObservabilityInstance | undefined;\n getDefaultInstance(): ObservabilityInstance | undefined;\n listInstances(): ReadonlyMap<string, ObservabilityInstance>;\n unregisterInstance(name: string): boolean;\n hasInstance(name: string): boolean;\n setConfigSelector(selector: ConfigSelector): void;\n clear(): void;\n}\n\n// ============================================================================\n// Sampling Strategy\n// ============================================================================\n\n/**\n * Sampling strategy types\n */\nexport enum SamplingStrategyType {\n ALWAYS = 'always',\n NEVER = 'never',\n RATIO = 'ratio',\n CUSTOM = 'custom',\n}\n\n/**\n * Sampling strategy configuration\n */\nexport type SamplingStrategy =\n | { type: SamplingStrategyType.ALWAYS }\n | { type: SamplingStrategyType.NEVER }\n | { type: SamplingStrategyType.RATIO; probability: number }\n | { type: SamplingStrategyType.CUSTOM; sampler: (options?: CustomSamplerOptions) => boolean };\n\n/**\n * Options passed when using a custom sampler strategy\n */\nexport interface CustomSamplerOptions {\n requestContext?: RequestContext;\n metadata?: Record<string, any>;\n}\n\n// ============================================================================\n// Serialization Options\n// ============================================================================\n\n/**\n * Options for controlling serialization of span data.\n * These options control how input, output, and attributes are cleaned before export.\n */\nexport interface SerializationOptions {\n /**\n * Maximum length for string values\n * @default 1024\n */\n maxStringLength?: number;\n /**\n * Maximum depth for nested objects\n * @default 6\n */\n maxDepth?: number;\n /**\n * Maximum number of items in arrays\n * @default 50\n */\n maxArrayLength?: number;\n /**\n * Maximum number of keys in objects\n * @default 50\n */\n maxObjectKeys?: number;\n}\n\n// ============================================================================\n// Registry Config\n// ============================================================================\n\n/**\n * Configuration for a single observability instance\n */\nexport interface ObservabilityInstanceConfig {\n /** Unique identifier for this config in the observability registry */\n name: string;\n /** Service name for observability */\n serviceName: string;\n /** Sampling strategy - controls whether tracing is collected (defaults to ALWAYS) */\n sampling?: SamplingStrategy;\n /** Custom exporters */\n exporters?: ObservabilityExporter[];\n /** Custom processors */\n spanOutputProcessors?: SpanOutputProcessor[];\n /** OpenTelemetry bridge for integration with existing OTEL infrastructure */\n bridge?: ObservabilityBridge;\n /** Set to `true` if you want to see spans internal to the operation of mastra */\n includeInternalSpans?: boolean;\n /**\n * RequestContext keys to automatically extract as metadata for all spans\n * created with this observability configuration.\n * Supports dot notation for nested values.\n */\n requestContextKeys?: string[];\n /**\n * Options for controlling serialization of span data (input/output/attributes).\n * Use these to customize truncation limits for large payloads.\n */\n serializationOptions?: SerializationOptions;\n}\n\n/**\n * Complete Observability registry configuration\n */\nexport interface ObservabilityRegistryConfig {\n /** Enables default exporters, with sampling: always, and sensitive data filtering */\n default?: {\n enabled?: boolean;\n };\n /** Map of tracing instance names to their configurations or pre-instantiated instances */\n configs?: Record<string, Omit<ObservabilityInstanceConfig, 'name'> | ObservabilityInstance>;\n /** Optional selector function to choose which tracing instance to use */\n configSelector?: ConfigSelector;\n}\n\n// ============================================================================\n// Config Selector\n// ============================================================================\n\n/**\n * Options passed when using a custom tracing config selector\n */\nexport interface ConfigSelectorOptions {\n /** Request Context */\n requestContext?: RequestContext;\n}\n\n/**\n * Function to select which tracing instance to use for a given span\n * Returns the name of the tracing instance, or undefined to use default\n */\nexport type ConfigSelector = (\n options: ConfigSelectorOptions,\n availableConfigs: ReadonlyMap<string, ObservabilityInstance>,\n) => string | undefined;\n\n// ============================================================================\n// Exporter and Bridge Interfaces\n// ============================================================================\n\nexport interface InitExporterOptions {\n mastra?: Mastra;\n config?: ObservabilityInstanceConfig;\n}\n\nexport interface InitBridgeOptions {\n mastra?: Mastra;\n config?: ObservabilityInstanceConfig;\n}\n\n/**\n * Shared Observability event interface for Exporters & Bridges\n */\nexport interface ObservabilityEvents {\n /** Handle tracing events */\n onTracingEvent?(event: TracingEvent): void | Promise<void>;\n\n /** Handle log events */\n onLogEvent?(event: LogEvent): void | Promise<void>;\n\n /** Handle metric events */\n onMetricEvent?(event: MetricEvent): void | Promise<void>;\n\n /** Handle score events */\n onScoreEvent?(event: ScoreEvent): void | Promise<void>;\n\n /** Handle feedback events */\n onFeedbackEvent?(event: FeedbackEvent): void | Promise<void>;\n\n /** Export tracing events */\n exportTracingEvent(event: TracingEvent): Promise<void>;\n}\n\n/**\n * Interface for tracing exporters\n */\nexport interface ObservabilityExporter extends ObservabilityEvents {\n /** Exporter name */\n name: string;\n\n /** Initialize exporter with tracing configuration and/or access to Mastra */\n init?(options: InitExporterOptions): void;\n\n /** Sets logger instance on the exporter. */\n __setLogger?(logger: IMastraLogger): void;\n\n addScoreToTrace?({\n traceId,\n spanId,\n score,\n reason,\n scorerName,\n metadata,\n }: {\n traceId: string;\n spanId?: string;\n score: number;\n reason?: string;\n scorerName: string;\n metadata?: Record<string, any>;\n }): Promise<void>;\n\n /**\n * Force flush any buffered/queued spans without shutting down the exporter.\n * This is useful in serverless environments where you need to ensure spans\n * are exported before the runtime instance is terminated, while keeping\n * the exporter active for future requests.\n *\n * Unlike shutdown(), flush() does not release resources or prevent future exports.\n */\n flush(): Promise<void>;\n\n /** Shutdown exporter */\n shutdown(): Promise<void>;\n}\n\n/**\n * Interface for observability bridges\n */\nexport interface ObservabilityBridge extends ObservabilityEvents {\n /** Bridge name */\n name: string;\n\n /** Initialize bridge with observability configuration and/or access to Mastra */\n init?(options: InitBridgeOptions): void;\n\n /** Sets logger instance on the bridge */\n __setLogger?(logger: IMastraLogger): void;\n\n /**\n * Execute an async function within the tracing context of a Mastra span.\n * This enables auto-instrumented operations (HTTP, DB) to have correct parent spans\n * in the external tracing system (e.g., OpenTelemetry, DataDog, etc.).\n *\n * @param spanId - The ID of the Mastra span to use as context\n * @param fn - The async function to execute within the span context\n * @returns The result of the function execution\n */\n executeInContext?<T>(spanId: string, fn: () => Promise<T>): Promise<T>;\n\n /**\n * Execute a synchronous function within the tracing context of a Mastra span.\n * This enables auto-instrumented operations (HTTP, DB) to have correct parent spans\n * in the external tracing system (e.g., OpenTelemetry, DataDog, etc.).\n *\n * @param spanId - The ID of the Mastra span to use as context\n * @param fn - The synchronous function to execute within the span context\n * @returns The result of the function execution\n */\n executeInContextSync?<T>(spanId: string, fn: () => T): T;\n\n /**\n * Create a span in the bridge's tracing system.\n * Called during Mastra span construction to get bridge-generated identifiers.\n *\n * @param options - Span creation options from Mastra\n * @returns Span identifiers (spanId, traceId, parentSpanId) from bridge, or undefined if creation fails\n */\n createSpan(options: CreateSpanOptions<SpanType>): SpanIds | undefined;\n\n /**\n * Force flush any buffered/queued spans without shutting down the bridge.\n * This is useful in serverless environments where you need to ensure spans\n * are exported before the runtime instance is terminated, while keeping\n * the bridge active for future requests.\n *\n * Unlike shutdown(), flush() does not release resources or prevent future exports.\n */\n flush(): Promise<void>;\n\n /** Shutdown bridge and cleanup resources */\n shutdown(): Promise<void>;\n}\n","import type { CorrelationContext } from './core';\n\n// ============================================================================\n// Metric Type\n// ============================================================================\n\n/**\n * @deprecated MetricType is no longer stored. All metrics are raw events\n * with aggregation determined at query time.\n */\nexport type MetricType = 'counter' | 'gauge' | 'histogram';\n\n// ============================================================================\n// MetricsContext (API Interface)\n// ============================================================================\n\n/**\n * MetricsContext - API for emitting metrics.\n * Use `emit()` to record a metric observation.\n */\nexport interface MetricEmitOptions {\n /** Canonical model/cost context for this specific metric row */\n costContext?: CostContext;\n}\n\nexport interface MetricsContext {\n /** Emit a metric observation. */\n emit(name: string, value: number, labels?: Record<string, string>, options?: MetricEmitOptions): void;\n\n /** @deprecated Use `emit()` instead. */\n counter(name: string): Counter;\n /** @deprecated Use `emit()` instead. */\n gauge(name: string): Gauge;\n /** @deprecated Use `emit()` instead. */\n histogram(name: string): Histogram;\n}\n\n/** @deprecated Use MetricsContext.emit() instead. */\nexport interface Counter {\n add(value: number, additionalLabels?: Record<string, string>): void;\n}\n\n/** @deprecated Use MetricsContext.emit() instead. */\nexport interface Gauge {\n set(value: number, additionalLabels?: Record<string, string>): void;\n}\n\n/** @deprecated Use MetricsContext.emit() instead. */\nexport interface Histogram {\n record(value: number, additionalLabels?: Record<string, string>): void;\n}\n\n// ============================================================================\n// ExportedMetric (Event Bus Transport)\n// ============================================================================\n\n/**\n * Typed context used for cost estimations.\n */\nexport interface CostContext {\n provider?: string;\n model?: string;\n estimatedCost?: number;\n costUnit?: string;\n costMetadata?: Record<string, unknown>;\n}\n\n/**\n * Metric data transported via the event bus.\n * Represents a single metric observation.\n * Must be JSON-serializable (Date serializes via toJSON()).\n *\n * Descriptive correlation metadata travels in `correlationContext`.\n * Signal identity stays on the top-level `traceId` / `spanId` fields.\n * pricing/model fields travel in `costContext`.\n */\nexport interface ExportedMetric {\n /** When the metric was recorded */\n timestamp: Date;\n\n /** Trace associated with this metric (undefined = not tied to a trace) */\n traceId?: string;\n\n /** Specific span associated with this metric */\n spanId?: string;\n\n /** Metric name (e.g., mastra_agent_duration_ms) */\n name: string;\n\n /** Metric value (single observation) */\n value: number;\n\n /** Metric labels for dimensional filtering */\n labels: Record<string, string>;\n\n /** Context for correlation to traces */\n correlationContext?: CorrelationContext;\n\n /** Context for cost estimation */\n costContext?: CostContext;\n\n /**\n * User-defined metadata.\n * This is reserved for non-canonical metadata that does not belong\n * in record context or cost context.\n */\n metadata?: Record<string, unknown>;\n}\n\n// ============================================================================\n// MetricEvent (Event Bus Event)\n// ============================================================================\n\n/** Metric event emitted to the ObservabilityBus */\nexport interface MetricEvent {\n type: 'metric';\n metric: ExportedMetric;\n}\n\n// ============================================================================\n// Cardinality Protection\n// ============================================================================\n\n/**\n * Default labels to block from metrics to prevent cardinality explosion.\n * These are high-cardinality fields that should not be used as metric labels.\n */\nexport const DEFAULT_BLOCKED_LABELS = [\n 'trace_id',\n 'span_id',\n 'run_id',\n 'request_id',\n 'user_id',\n 'resource_id',\n 'session_id',\n 'thread_id',\n] as const;\n\n/** Cardinality protection configuration */\nexport interface CardinalityConfig {\n /**\n * Labels to block from metrics. **Replaces** the default list entirely —\n * DEFAULT_BLOCKED_LABELS are NOT merged in when this is set.\n *\n * - `undefined` (default) → uses DEFAULT_BLOCKED_LABELS\n * - `[]` → disables label blocking (allows all labels through)\n * - `['x', 'y']` → blocks only x and y; defaults like trace_id are allowed\n *\n * To extend the defaults, spread them into your list:\n * ```ts\n * blockedLabels: [...DEFAULT_BLOCKED_LABELS, 'my_custom_label']\n * ```\n */\n blockedLabels?: string[];\n\n /**\n * Whether to block UUID-like values in labels.\n * @default true\n */\n blockUUIDs?: boolean;\n}\n\n/** Metrics-specific configuration */\nexport interface MetricsConfig {\n /** Whether metrics are enabled */\n enabled?: boolean;\n /** Cardinality protection settings */\n cardinality?: CardinalityConfig;\n}\n","import type { Mastra } from '..';\nimport type { IMastraLogger } from '../logger';\nimport type {\n CorrelationContext,\n ConfigSelector,\n ConfigSelectorOptions,\n Counter,\n FeedbackInput,\n Gauge,\n Histogram,\n LoggerContext,\n MetricsContext,\n ObservabilityEntrypoint,\n ObservabilityInstance,\n RecordedTrace,\n ScoreInput,\n TracingContext,\n} from './types';\n\n// ============================================================================\n// No-Op Metric Instruments\n// ============================================================================\n\nconst noOpCounter: Counter = {\n add() {},\n};\n\nconst noOpGauge: Gauge = {\n set() {},\n};\n\nconst noOpHistogram: Histogram = {\n record() {},\n};\n\n// ============================================================================\n// No-Op TracingContext\n// ============================================================================\n\n/**\n * No-op tracing context used when observability is not configured.\n */\nexport const noOpTracingContext: TracingContext = {\n currentSpan: undefined,\n};\n\n// ============================================================================\n// No-Op LoggerContext\n// ============================================================================\n\n/**\n * No-op logger context that silently discards all log calls.\n * Used when observability is not configured.\n */\nexport const noOpLoggerContext: LoggerContext = {\n debug() {},\n info() {},\n warn() {},\n error() {},\n fatal() {},\n};\n\n// ============================================================================\n// No-Op MetricsContext\n// ============================================================================\n\n/**\n * No-op metrics context that silently discards all metric operations.\n * Used when observability is not configured.\n */\nexport const noOpMetricsContext: MetricsContext = {\n emit() {},\n counter() {\n return noOpCounter;\n },\n gauge() {\n return noOpGauge;\n },\n histogram() {\n return noOpHistogram;\n },\n};\n\n// ============================================================================\n// No-Op Observability\n// ============================================================================\n\n/** No-op observability entrypoint that silently discards all operations. */\nexport class NoOpObservability implements ObservabilityEntrypoint {\n setMastraContext(_options: { mastra: Mastra }): void {\n return;\n }\n\n setLogger(_options: { logger: IMastraLogger }): void {\n return;\n }\n\n getSelectedInstance(_options: ConfigSelectorOptions): ObservabilityInstance | undefined {\n return;\n }\n\n async getRecordedTrace(_args: { traceId: string }): Promise<RecordedTrace | null> {\n return null;\n }\n\n async addScore(_args: {\n traceId?: string;\n spanId?: string;\n correlationContext?: CorrelationContext;\n score: ScoreInput;\n }): Promise<void> {\n return;\n }\n\n async addFeedback(_args: {\n traceId?: string;\n spanId?: string;\n correlationContext?: CorrelationContext;\n feedback: FeedbackInput;\n }): Promise<void> {\n return;\n }\n\n registerInstance(_name: string, _instance: ObservabilityInstance, _isDefault = false): void {\n return;\n }\n\n getInstance(_name: string): ObservabilityInstance | undefined {\n return;\n }\n\n getDefaultInstance(): ObservabilityInstance | undefined {\n return;\n }\n\n listInstances(): ReadonlyMap<string, ObservabilityInstance> {\n return new Map();\n }\n\n unregisterInstance(_name: string): boolean {\n return false;\n }\n\n hasInstance(_name: string): boolean {\n return false;\n }\n\n setConfigSelector(_selector: ConfigSelector): void {\n return;\n }\n\n clear(): void {\n return;\n }\n\n async shutdown(): Promise<void> {\n return;\n }\n}\n","// packages/core/src/observability/context-factory.ts\n\nimport { noOpLoggerContext, noOpMetricsContext, noOpTracingContext } from './no-op';\nimport type { LoggerContext, MetricsContext, ObservabilityContext, TracingContext } from './types';\n\n// ============================================================================\n// Context Derivation\n// ============================================================================\n\n/**\n * Derives a LoggerContext from the current span's ObservabilityInstance.\n * Falls back to no-op when there is no span or the instance doesn't support logging.\n */\nfunction deriveLoggerContext(tracing: TracingContext): LoggerContext {\n const span = tracing.currentSpan;\n return span?.observabilityInstance?.getLoggerContext?.(span) ?? noOpLoggerContext;\n}\n\n/**\n * Derives a MetricsContext from the current span's ObservabilityInstance.\n * Falls back to no-op when there is no span or the instance doesn't support metrics.\n */\nfunction deriveMetricsContext(tracing: TracingContext): MetricsContext {\n const span = tracing.currentSpan;\n return span?.observabilityInstance?.getMetricsContext?.(span) ?? noOpMetricsContext;\n}\n\n// ============================================================================\n// Context Factory\n// ============================================================================\n\n/**\n * Creates an observability context with real or no-op implementations for\n * tracing, logging, and metrics.\n *\n * When a TracingContext with a current span is provided, the logger and metrics\n * contexts are derived from the span's ObservabilityInstance so that log entries\n * and metric data points are automatically correlated to the active trace.\n *\n * @param tracingContext - TracingContext with current span, or undefined for no-op\n * @returns ObservabilityContext with all three signals (tracing, logger, metrics)\n */\nexport function createObservabilityContext(tracingContext?: TracingContext): ObservabilityContext {\n const tracing = tracingContext ?? noOpTracingContext;\n\n return {\n tracing,\n loggerVNext: deriveLoggerContext(tracing),\n metrics: deriveMetricsContext(tracing),\n tracingContext: tracing, // alias — preferred at forwarding sites\n };\n}\n\n/**\n * Resolves a partial observability context (from execute params) into a\n * complete ObservabilityContext with no-op defaults for any missing fields.\n *\n * Explicitly provided logger/metrics contexts are preserved (e.g. when set\n * upstream). When missing, they are derived from the tracing context's span,\n * following the same derivation logic as createObservabilityContext().\n *\n * @param partial - Partial context from ExecuteFunctionParams\n * @returns Complete ObservabilityContext\n */\nexport function resolveObservabilityContext(partial: Partial<ObservabilityContext>): ObservabilityContext {\n const tracing = partial.tracing ?? partial.tracingContext ?? noOpTracingContext;\n\n return {\n tracing,\n loggerVNext: partial.loggerVNext ?? deriveLoggerContext(tracing),\n metrics: partial.metrics ?? deriveMetricsContext(tracing),\n tracingContext: tracing, // alias — preferred at forwarding sites\n };\n}\n","/**\n * Tracing Context Integration\n *\n * This module provides automatic tracing context propagation throughout Mastra's execution contexts.\n * It uses JavaScript Proxies to transparently wrap Mastra, Agent, and Workflow instances so that\n * tracing context is automatically injected without requiring manual passing by users.\n */\n\nimport type { MastraPrimitives } from '../action';\nimport type { Agent } from '../agent';\nimport type { Mastra } from '../mastra';\nimport type { Workflow } from '../workflows';\nimport { createObservabilityContext } from './context-factory';\nimport type { TracingContext, AnySpan } from './types';\n\nconst AGENT_GETTERS = ['getAgent', 'getAgentById'];\nconst AGENT_METHODS_TO_WRAP = ['generate', 'stream', 'generateLegacy', 'streamLegacy'];\n\nconst WORKFLOW_GETTERS = ['getWorkflow', 'getWorkflowById'];\nconst WORKFLOW_METHODS_TO_WRAP = ['execute', 'createRun', 'createRun'];\n\n/**\n * Helper function to detect NoOp spans to avoid unnecessary wrapping\n */\nfunction isNoOpSpan(span: AnySpan): boolean {\n // Check if this is a NoOp span implementation\n return span.constructor.name === 'NoOpSpan' || (span as any).__isNoOp === true;\n}\n\n/**\n * Checks to see if a passed object is an actual instance of Mastra\n * (for the purposes of wrapping it for Tracing)\n */\nexport function isMastra<T extends Mastra | (Mastra & MastraPrimitives) | MastraPrimitives>(mastra: T): boolean {\n const hasAgentGetters = AGENT_GETTERS.every(method => typeof (mastra as any)?.[method] === 'function');\n const hasWorkflowGetters = WORKFLOW_GETTERS.every(method => typeof (mastra as any)?.[method] === 'function');\n\n return hasAgentGetters && hasWorkflowGetters;\n}\n\n/**\n * Creates a tracing-aware Mastra proxy that automatically injects\n * tracing context into agent and workflow method calls\n */\nexport function wrapMastra<T extends Mastra | (Mastra & MastraPrimitives) | MastraPrimitives>(\n mastra: T,\n tracingContext: TracingContext,\n): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return mastra;\n }\n\n // Check if this object has the methods we want to wrap - if not, return as is\n if (!isMastra(mastra)) {\n return mastra;\n }\n\n try {\n return new Proxy(mastra, {\n get(target, prop) {\n try {\n if (AGENT_GETTERS.includes(prop as string)) {\n return (...args: any[]) => {\n const agent = (target as any)[prop](...args);\n return wrapAgent(agent, tracingContext);\n };\n }\n\n // Wrap workflow getters\n if (WORKFLOW_GETTERS.includes(prop as string)) {\n return (...args: any[]) => {\n const workflow = (target as any)[prop](...args);\n return wrapWorkflow(workflow, tracingContext);\n };\n }\n\n // Pass through all other methods unchanged - bind functions to preserve 'this' context\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n } catch (error) {\n console.warn('Tracing: Failed to wrap method, falling back to original', error);\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n }\n },\n });\n } catch (error) {\n console.warn('Tracing: Failed to create proxy, using original Mastra instance', error);\n return mastra;\n }\n}\n\n/**\n * Creates a tracing-aware Agent proxy that automatically injects\n * tracing context into generation method calls\n */\nfunction wrapAgent<T extends Agent>(agent: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return agent;\n }\n\n try {\n return new Proxy(agent, {\n get(target, prop) {\n try {\n if (AGENT_METHODS_TO_WRAP.includes(prop as string)) {\n return (input: any, options: any = {}) => {\n return (target as any)[prop](input, {\n ...options,\n ...createObservabilityContext(tracingContext),\n });\n };\n }\n\n // Bind functions to preserve 'this' context for private member access\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n } catch (error) {\n console.warn('Tracing: Failed to wrap agent method, falling back to original', error);\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n }\n },\n });\n } catch (error) {\n console.warn('Tracing: Failed to create agent proxy, using original instance', error);\n return agent;\n }\n}\n\n/**\n * Creates a tracing-aware Workflow proxy that automatically injects\n * tracing context into execution method calls\n */\nfunction wrapWorkflow<T extends Workflow>(workflow: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return workflow;\n }\n\n try {\n return new Proxy(workflow, {\n get(target, prop) {\n try {\n // Wrap workflow execution methods with tracing context\n if (WORKFLOW_METHODS_TO_WRAP.includes(prop as string)) {\n // Handle createRun and createRun methods differently\n if (prop === 'createRun' || prop === 'createRun') {\n return async (options: any = {}) => {\n const run = await (target as any)[prop](options);\n return run ? wrapRun(run, tracingContext) : run;\n };\n }\n\n // Handle other methods like execute\n return (input: any, options: any = {}) => {\n return (target as any)[prop](input, {\n ...options,\n ...createObservabilityContext(tracingContext),\n });\n };\n }\n\n // Bind functions to preserve 'this' context for private member access\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n } catch (error) {\n console.warn('Tracing: Failed to wrap workflow method, falling back to original', error);\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n }\n },\n });\n } catch (error) {\n console.warn('Tracing: Failed to create workflow proxy, using original instance', error);\n return workflow;\n }\n}\n\n/**\n * Creates a tracing-aware Run proxy that automatically injects\n * tracing context into start method calls\n */\nfunction wrapRun<T extends object>(run: T, tracingContext: TracingContext): T {\n // Don't wrap if no current span or if using NoOp span\n if (!tracingContext.currentSpan || isNoOpSpan(tracingContext.currentSpan)) {\n return run;\n }\n\n try {\n return new Proxy(run, {\n get(target, prop) {\n try {\n if (prop === 'start') {\n return (startOptions: any = {}) => {\n return (target as any).start({\n ...startOptions,\n ...createObservabilityContext(startOptions.tracingContext ?? tracingContext),\n });\n };\n }\n\n // Pass through all other properties and methods unchanged\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n } catch (error) {\n console.warn('Tracing: Failed to wrap run method, falling back to original', error);\n const value = (target as any)[prop];\n return typeof value === 'function' ? value.bind(target) : value;\n }\n },\n });\n } catch (error) {\n console.warn('Tracing: Failed to create run proxy, using original instance', error);\n return run;\n }\n}\n"]}
@@ -1,3 +0,0 @@
1
- export { MastraGateway } from './chunk-KPNURYWF.js';
2
- //# sourceMappingURL=mastra-JWFZL5TC.js.map
3
- //# sourceMappingURL=mastra-JWFZL5TC.js.map
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkUNQCLA7I_cjs = require('./chunk-UNQCLA7I.cjs');
4
-
5
-
6
-
7
- Object.defineProperty(exports, "MastraGateway", {
8
- enumerable: true,
9
- get: function () { return chunkUNQCLA7I_cjs.MastraGateway; }
10
- });
11
- //# sourceMappingURL=mastra-ZQK3PKEU.cjs.map
12
- //# sourceMappingURL=mastra-ZQK3PKEU.cjs.map
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk7OU57YXD_cjs = require('./chunk-7OU57YXD.cjs');
4
-
5
-
6
-
7
- Object.defineProperty(exports, "ModelsDevGateway", {
8
- enumerable: true,
9
- get: function () { return chunk7OU57YXD_cjs.ModelsDevGateway; }
10
- });
11
- //# sourceMappingURL=models-dev-6DVNVKP4.cjs.map
12
- //# sourceMappingURL=models-dev-6DVNVKP4.cjs.map
@@ -1,3 +0,0 @@
1
- export { ModelsDevGateway } from './chunk-N7W2KRUH.js';
2
- //# sourceMappingURL=models-dev-FOTHHSEK.js.map
3
- //# sourceMappingURL=models-dev-FOTHHSEK.js.map
@@ -1,3 +0,0 @@
1
- export { NetlifyGateway } from './chunk-4LJ4M2DI.js';
2
- //# sourceMappingURL=netlify-NMTX7SVL.js.map
3
- //# sourceMappingURL=netlify-NMTX7SVL.js.map
@@ -1,12 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkWCQOOGVM_cjs = require('./chunk-WCQOOGVM.cjs');
4
-
5
-
6
-
7
- Object.defineProperty(exports, "NetlifyGateway", {
8
- enumerable: true,
9
- get: function () { return chunkWCQOOGVM_cjs.NetlifyGateway; }
10
- });
11
- //# sourceMappingURL=netlify-S2IW3O2X.cjs.map
12
- //# sourceMappingURL=netlify-S2IW3O2X.cjs.map