@mastra/core 0.16.2-alpha.0 → 0.16.3-alpha.0

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 (166) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/agent/agent.d.ts +316 -0
  3. package/dist/agent/agent.d.ts.map +1 -0
  4. package/dist/agent/agent.types.d.ts +19 -2
  5. package/dist/agent/agent.types.d.ts.map +1 -1
  6. package/dist/agent/index.cjs +11 -11
  7. package/dist/agent/index.d.ts +4 -313
  8. package/dist/agent/index.d.ts.map +1 -1
  9. package/dist/agent/index.js +2 -2
  10. package/dist/agent/input-processor/index.cjs +6 -6
  11. package/dist/agent/input-processor/index.js +1 -1
  12. package/dist/agent/types.d.ts +8 -1
  13. package/dist/agent/types.d.ts.map +1 -1
  14. package/dist/ai-tracing/base.d.ts.map +1 -1
  15. package/dist/ai-tracing/context.d.ts.map +1 -1
  16. package/dist/ai-tracing/default.d.ts +1 -2
  17. package/dist/ai-tracing/default.d.ts.map +1 -1
  18. package/dist/ai-tracing/exporters/cloud.d.ts +32 -0
  19. package/dist/ai-tracing/exporters/cloud.d.ts.map +1 -0
  20. package/dist/ai-tracing/exporters/default.d.ts.map +1 -1
  21. package/dist/ai-tracing/exporters/index.d.ts +2 -0
  22. package/dist/ai-tracing/exporters/index.d.ts.map +1 -1
  23. package/dist/ai-tracing/index.cjs +36 -40
  24. package/dist/ai-tracing/index.js +1 -1
  25. package/dist/ai-tracing/no-op.d.ts +1 -0
  26. package/dist/ai-tracing/no-op.d.ts.map +1 -1
  27. package/dist/ai-tracing/registry.d.ts.map +1 -1
  28. package/dist/ai-tracing/types.d.ts +39 -14
  29. package/dist/ai-tracing/types.d.ts.map +1 -1
  30. package/dist/ai-tracing/utils.d.ts +29 -19
  31. package/dist/ai-tracing/utils.d.ts.map +1 -1
  32. package/dist/{chunk-YI3AIJJL.js → chunk-3JG5JEKX.js} +3 -3
  33. package/dist/{chunk-YI3AIJJL.js.map → chunk-3JG5JEKX.js.map} +1 -1
  34. package/dist/{chunk-RVNDGKE5.js → chunk-3WWYKE4R.js} +3 -3
  35. package/dist/{chunk-RVNDGKE5.js.map → chunk-3WWYKE4R.js.map} +1 -1
  36. package/dist/{chunk-YBKHXKRR.js → chunk-4MVIJIOL.js} +3 -3
  37. package/dist/{chunk-YBKHXKRR.js.map → chunk-4MVIJIOL.js.map} +1 -1
  38. package/dist/chunk-4WQYXT2I.cjs +12 -0
  39. package/dist/chunk-4WQYXT2I.cjs.map +1 -0
  40. package/dist/{chunk-YYRE76UM.js → chunk-6SPMCTI2.js} +4 -4
  41. package/dist/{chunk-YYRE76UM.js.map → chunk-6SPMCTI2.js.map} +1 -1
  42. package/dist/{chunk-P67M4R6G.js → chunk-ASFX33CM.js} +5 -5
  43. package/dist/{chunk-P67M4R6G.js.map → chunk-ASFX33CM.js.map} +1 -1
  44. package/dist/{chunk-SJO2HEVU.cjs → chunk-AV5QBG6P.cjs} +185 -125
  45. package/dist/chunk-AV5QBG6P.cjs.map +1 -0
  46. package/dist/{chunk-OYHHJUTH.cjs → chunk-EJB4UMEV.cjs} +12 -12
  47. package/dist/{chunk-OYHHJUTH.cjs.map → chunk-EJB4UMEV.cjs.map} +1 -1
  48. package/dist/{chunk-JLVFFZT7.cjs → chunk-GOA5GU6X.cjs} +4 -4
  49. package/dist/{chunk-JLVFFZT7.cjs.map → chunk-GOA5GU6X.cjs.map} +1 -1
  50. package/dist/{chunk-D3UG2YLU.cjs → chunk-HT57W63C.cjs} +4 -4
  51. package/dist/{chunk-D3UG2YLU.cjs.map → chunk-HT57W63C.cjs.map} +1 -1
  52. package/dist/{chunk-ZIDWSQFD.cjs → chunk-HYKEC3OC.cjs} +8 -8
  53. package/dist/{chunk-ZIDWSQFD.cjs.map → chunk-HYKEC3OC.cjs.map} +1 -1
  54. package/dist/chunk-KETY3ZMA.cjs +808 -0
  55. package/dist/chunk-KETY3ZMA.cjs.map +1 -0
  56. package/dist/{chunk-IMDDMIVR.cjs → chunk-L52VPDJB.cjs} +6 -6
  57. package/dist/{chunk-IMDDMIVR.cjs.map → chunk-L52VPDJB.cjs.map} +1 -1
  58. package/dist/chunk-NEBAQHIS.js +737 -0
  59. package/dist/chunk-NEBAQHIS.js.map +1 -0
  60. package/dist/chunk-PJKCPRYF.js +3 -0
  61. package/dist/chunk-PJKCPRYF.js.map +1 -0
  62. package/dist/{chunk-6RVOPJVP.cjs → chunk-PUTAA3ZN.cjs} +7 -7
  63. package/dist/{chunk-6RVOPJVP.cjs.map → chunk-PUTAA3ZN.cjs.map} +1 -1
  64. package/dist/{chunk-DUABZASJ.js → chunk-RAR5G5S3.js} +4 -4
  65. package/dist/{chunk-DUABZASJ.js.map → chunk-RAR5G5S3.js.map} +1 -1
  66. package/dist/{chunk-UGCG7DI3.cjs → chunk-VVUCWRGD.cjs} +855 -87
  67. package/dist/chunk-VVUCWRGD.cjs.map +1 -0
  68. package/dist/{chunk-2NKNTPFR.js → chunk-W5K2KOZX.js} +834 -85
  69. package/dist/chunk-W5K2KOZX.js.map +1 -0
  70. package/dist/{chunk-BQ43NQXK.js → chunk-WAN6BRTN.js} +182 -122
  71. package/dist/chunk-WAN6BRTN.js.map +1 -0
  72. package/dist/index.cjs +38 -38
  73. package/dist/index.js +7 -7
  74. package/dist/llm/model/base.types.d.ts +6 -4
  75. package/dist/llm/model/base.types.d.ts.map +1 -1
  76. package/dist/llm/model/model.d.ts +0 -2
  77. package/dist/llm/model/model.d.ts.map +1 -1
  78. package/dist/llm/model/model.loop.d.ts.map +1 -1
  79. package/dist/loop/index.cjs +2 -2
  80. package/dist/loop/index.js +1 -1
  81. package/dist/loop/loop.d.ts.map +1 -1
  82. package/dist/loop/network/index.d.ts +139 -0
  83. package/dist/loop/network/index.d.ts.map +1 -0
  84. package/dist/loop/types.d.ts +2 -0
  85. package/dist/loop/types.d.ts.map +1 -1
  86. package/dist/loop/workflow/llm-execution.d.ts +5 -5
  87. package/dist/loop/workflow/llm-execution.d.ts.map +1 -1
  88. package/dist/loop/workflow/outer-llm-step.d.ts +2 -2
  89. package/dist/loop/workflow/schema.d.ts +12 -12
  90. package/dist/loop/workflow/stream.d.ts.map +1 -1
  91. package/dist/loop/workflow/tool-call-step.d.ts +10 -10
  92. package/dist/mastra/index.cjs +2 -2
  93. package/dist/mastra/index.js +1 -1
  94. package/dist/memory/index.cjs +4 -4
  95. package/dist/memory/index.js +1 -1
  96. package/dist/network/index.cjs +6 -3
  97. package/dist/network/index.cjs.map +1 -1
  98. package/dist/network/index.js +5 -2
  99. package/dist/network/index.js.map +1 -1
  100. package/dist/network/network.d.ts.map +1 -1
  101. package/dist/network/vNext/index.cjs +32 -30
  102. package/dist/network/vNext/index.cjs.map +1 -1
  103. package/dist/network/vNext/index.d.ts +7 -7
  104. package/dist/network/vNext/index.d.ts.map +1 -1
  105. package/dist/network/vNext/index.js +5 -3
  106. package/dist/network/vNext/index.js.map +1 -1
  107. package/dist/processors/index.cjs +8 -8
  108. package/dist/processors/index.js +2 -2
  109. package/dist/processors/runner.d.ts +2 -2
  110. package/dist/processors/runner.d.ts.map +1 -1
  111. package/dist/relevance/index.cjs +4 -4
  112. package/dist/relevance/index.js +1 -1
  113. package/dist/scores/index.cjs +8 -8
  114. package/dist/scores/index.js +1 -1
  115. package/dist/scores/types.d.ts +2 -2
  116. package/dist/storage/index.cjs +3 -3
  117. package/dist/storage/index.js +1 -1
  118. package/dist/stream/MastraWorkflowStream.d.ts +1 -1
  119. package/dist/stream/base/output-format-handlers.d.ts.map +1 -1
  120. package/dist/stream/base/output.d.ts +13 -3
  121. package/dist/stream/base/output.d.ts.map +1 -1
  122. package/dist/stream/base/schema.d.ts +3 -2
  123. package/dist/stream/base/schema.d.ts.map +1 -1
  124. package/dist/stream/index.cjs +3 -3
  125. package/dist/stream/index.d.ts +1 -1
  126. package/dist/stream/index.d.ts.map +1 -1
  127. package/dist/stream/index.js +1 -1
  128. package/dist/stream/types.d.ts +139 -1
  129. package/dist/stream/types.d.ts.map +1 -1
  130. package/dist/test-utils/llm-mock.cjs +2 -2
  131. package/dist/test-utils/llm-mock.js +1 -1
  132. package/dist/utils.cjs +17 -17
  133. package/dist/utils.js +1 -1
  134. package/dist/workflows/default.d.ts +3 -2
  135. package/dist/workflows/default.d.ts.map +1 -1
  136. package/dist/workflows/evented/index.cjs +10 -10
  137. package/dist/workflows/evented/index.js +1 -1
  138. package/dist/workflows/execution-engine.d.ts +2 -2
  139. package/dist/workflows/execution-engine.d.ts.map +1 -1
  140. package/dist/workflows/index.cjs +10 -10
  141. package/dist/workflows/index.js +1 -1
  142. package/dist/workflows/legacy/index.cjs +22 -22
  143. package/dist/workflows/legacy/index.js +1 -1
  144. package/dist/workflows/legacy/machine.d.ts +1 -1
  145. package/dist/workflows/legacy/workflow.d.ts +1 -1
  146. package/dist/workflows/types.d.ts +5 -4
  147. package/dist/workflows/types.d.ts.map +1 -1
  148. package/dist/workflows/workflow.d.ts +8 -4
  149. package/dist/workflows/workflow.d.ts.map +1 -1
  150. package/dist/zod-to-json.cjs +2 -2
  151. package/dist/zod-to-json.cjs.map +1 -1
  152. package/dist/zod-to-json.js +1 -1
  153. package/dist/zod-to-json.js.map +1 -1
  154. package/package.json +5 -5
  155. package/dist/chunk-2NKNTPFR.js.map +0 -1
  156. package/dist/chunk-3MSZBGO3.js +0 -15991
  157. package/dist/chunk-3MSZBGO3.js.map +0 -1
  158. package/dist/chunk-BJASJTXK.cjs +0 -16061
  159. package/dist/chunk-BJASJTXK.cjs.map +0 -1
  160. package/dist/chunk-BQ43NQXK.js.map +0 -1
  161. package/dist/chunk-KB4IEMPV.cjs +0 -548
  162. package/dist/chunk-KB4IEMPV.cjs.map +0 -1
  163. package/dist/chunk-SJO2HEVU.cjs.map +0 -1
  164. package/dist/chunk-TDLB5JKT.js +0 -527
  165. package/dist/chunk-TDLB5JKT.js.map +0 -1
  166. package/dist/chunk-UGCG7DI3.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ai-tracing/no-op.ts","../src/ai-tracing/types.ts","../src/ai-tracing/base.ts","../src/ai-tracing/exporters/console.ts","../src/ai-tracing/exporters/default.ts","../src/ai-tracing/registry.ts","../src/ai-tracing/utils.ts","../src/ai-tracing/default.ts","../src/ai-tracing/context.ts"],"names":["AISpanType","SamplingStrategyType","AITracingEventType"],"mappings":";;;;;AAOO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAoE;AAAA,EACxE,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAOA,QAAA;AAAA,EAEP,WAAA,CAAY,SAA+B,SAAA,EAA4B;AACrE,IAAA,IAAA,CAAK,EAAA,GAAK,OAAA;AACV,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA,CAAQ,UAAA,IAAe,EAAC;AAC1C,IAAA,IAAA,CAAK,WAAW,OAAA,CAAQ,QAAA;AACxB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,OAAA,GAAU,aAAA;AACf,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,KAAA;AACrB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,MAAA;AACjD,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AAAA,EACzB;AAAA,EAEA,IAAI,QAAA,EAA+G;AAAA,EAAC;AAAA,EAEpH,MAAM,QAAA,EAKG;AAAA,EAAC;AAAA,EAEV,gBAA+C,OAAA,EAMxB;AACrB,IAAA,OAAO,IAAI,WAAA,CAAuB,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,KAAA,EAAM,EAAG,IAAA,CAAK,SAAS,CAAA;AAAA,EAChG;AAAA,EAEA,gBAA+C,OAAA,EAMxB;AACrB,IAAA,OAAO,IAAI,WAAA,CAAuB,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,IAAA,EAAK,EAAG,IAAA,CAAK,SAAS,CAAA;AAAA,EAC/F;AAAA,EAEA,OAAO,QAAA,EAKE;AAAA,EAAC;AAAA,EAEV,IAAI,UAAA,GAAsB;AACxB,IAAA,OAAO,CAAC,IAAA,CAAK,MAAA;AAAA,EACf;AACF,CAAA;;;ACnEO,IAAK,UAAA,qBAAAA,WAAAA,KAAL;AAEL,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,YAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,YAAA,gBAAA,CAAA,GAAiB,gBAAA;AAEjB,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,YAAA,WAAA,CAAA,GAAY,WAAA;AAEZ,EAAAA,YAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,YAAA,sBAAA,CAAA,GAAuB,sBAAA;AAEvB,EAAAA,YAAA,2BAAA,CAAA,GAA4B,2BAAA;AAE5B,EAAAA,YAAA,mBAAA,CAAA,GAAoB,mBAAA;AAEpB,EAAAA,YAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,YAAA,gBAAA,CAAA,GAAiB,gBAAA;AAEjB,EAAAA,YAAA,qBAAA,CAAA,GAAsB,qBAAA;AA5BZ,EAAA,OAAAA,WAAAA;AAAA,CAAA,EAAA,UAAA,IAAA,EAAA;AA4WL,IAAK,oBAAA,qBAAAC,qBAAAA,KAAL;AACL,EAAAA,sBAAA,QAAA,CAAA,GAAS,QAAA;AACT,EAAAA,sBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,sBAAA,OAAA,CAAA,GAAQ,OAAA;AACR,EAAAA,sBAAA,QAAA,CAAA,GAAS,QAAA;AAJC,EAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AA2DL,IAAK,kBAAA,qBAAAC,mBAAAA,KAAL;AACL,EAAAA,oBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,oBAAA,cAAA,CAAA,GAAe,cAAA;AACf,EAAAA,oBAAA,YAAA,CAAA,GAAa,YAAA;AAHH,EAAA,OAAAA,mBAAAA;AAAA,CAAA,EAAA,kBAAA,IAAA,EAAA;;;ACxZL,IAAe,eAAA,GAAf,cAAuC,UAAA,CAAW;AAAA,EAC7C,MAAA;AAAA,EAEV,YAAY,MAAA,EAAiC;AAC3C,IAAA,KAAA,CAAM,EAAE,SAAA,EAAW,gBAAA,CAAiB,YAAY,IAAA,EAAM,MAAA,CAAO,aAAa,CAAA;AAG1E,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,cAAc,MAAA,CAAO,YAAA;AAAA,MACrB,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,EAAE,IAAA,EAAA,QAAA,eAAkC;AAAA,MACjE,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,EAAC;AAAA,MAChC,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc;AAAC,KACpC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,MAAA,EAAuB;AACjC,IAAA,KAAA,CAAM,YAAY,MAAM,CAAA;AAExB,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA;AAAA,MACV,CAAA,kCAAA,EAAqC,IAAA,CAAK,MAAA,CAAO,WAAW,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,YAAA,EAAe,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,CAAA;AAAA,KAC7I;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAMA,IAAc,SAAA,GAAiC;AAC7C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,EAAC;AAAA,EACnC;AAAA,EAEA,IAAc,UAAA,GAAgC;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,UAAA,IAAc,EAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,UAAoC,OAAA,EAYlB;AAChB,IAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,YAAY,QAAA,EAAU,MAAA,EAAQ,YAAA,EAAc,OAAA,EAAQ,GAAI,OAAA;AAC3F,IAAA,MAAM,EAAE,cAAA,EAAe,GAAI,YAAA,IAAgB,EAAC;AAE5C,IAAA,IAAI,CAAC,IAAA,CAAK,YAAA,CAAa,EAAE,cAAA,EAAgB,CAAA,EAAG;AAC1C,MAAA,OAAO,IAAI,UAAA;AAAA,QACT,EAAE,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,YAAY,QAAA,EAAU,MAAA,EAAQ,OAAA,EAAS,OAAA,KAAY,IAAA,EAAK;AAAA,QACrF;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAoC;AAAA,MACxC,IAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAS,OAAA,KAAY;AAAA,KACvB;AAEA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,CAAW,WAAW,CAAA;AAExC,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,IACzB,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAG3B,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAC3B;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,SAAA,GAAyD;AACvD,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,YAAA,GAA6C;AAC3C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,SAAS,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAA4C;AAC1C,IAAA,OAAO,CAAC,GAAG,IAAA,CAAK,UAAU,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAY;AACV,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,kBAA4C,IAAA,EAA2B;AAE7E,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAG5C,IAAA,IAAA,CAAK,GAAA,GAAM,CAAC,OAAA,KAIN;AACJ,MAAA,WAAA,CAAY,OAAO,CAAA;AACnB,MAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AAAA,IACzB,CAAA;AAEA,IAAA,IAAA,CAAK,MAAA,GAAS,CAAC,OAAA,KAKT;AACJ,MAAA,cAAA,CAAe,OAAO,CAAA;AACtB,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,aAAa,YAAA,EAAqC;AAE1D,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,IAAA,CAAK,MAAA;AAE1B,IAAA,QAAQ,SAAS,IAAA;AAAM,MACrB,KAAA,QAAA;AACE,QAAA,OAAO,IAAA;AAAA,MACT,KAAA,OAAA;AACE,QAAA,OAAO,KAAA;AAAA,MACT,KAAA,OAAA;AACE,QAAA,IAAI,QAAA,CAAS,gBAAgB,MAAA,IAAa,QAAA,CAAS,cAAc,CAAA,IAAK,QAAA,CAAS,cAAc,CAAA,EAAG;AAC9F,UAAA,IAAA,CAAK,MAAA,CAAO,IAAA;AAAA,YACV,CAAA,8BAAA,EAAiC,SAAS,WAAW,CAAA,4DAAA;AAAA,WACvD;AACA,UAAA,OAAO,KAAA;AAAA,QACT;AACA,QAAA,OAAO,IAAA,CAAK,MAAA,EAAO,GAAI,QAAA,CAAS,WAAA;AAAA,MAClC,KAAA,QAAA;AACE,QAAA,OAAO,QAAA,CAAS,QAAQ,YAAY,CAAA;AAAA,MACtC;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA4C,QAAA,CAAiB,IAAI,CAAA,CAAE,CAAA;AAAA;AACvF,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,IAAA,EAAmC;AACrD,IAAA,IAAI,aAAA,GAAkC,IAAA;AAEtC,IAAA,KAAA,MAAW,SAAA,IAAa,KAAK,UAAA,EAAY;AACvC,MAAA,IAAI,CAAC,aAAA,EAAe;AAClB,QAAA;AAAA,MACF;AAEA,MAAA,IAAI;AACF,QAAA,aAAA,GAAgB,SAAA,CAAU,QAAQ,aAAa,CAAA;AAAA,MACjD,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,mCAAA,EAAsC,SAAA,CAAU,IAAI,KAAK,KAAK,CAAA;AAAA,MAElF;AAAA,IACF;AAEA,IAAA,OAAO,aAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASU,gBAAgB,IAAA,EAAuB;AAE/C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,cAAA,qBAAuC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC9F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,kDAAA,EAAoD,KAAK,CAAA;AAAA,MAC7E,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,cAAc,IAAA,EAAuB;AAE7C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,YAAA,mBAAqC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC5F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,gDAAA,EAAkD,KAAK,CAAA;AAAA,MAC3E,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKU,gBAAgB,IAAA,EAAuB;AAE/C,IAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AAC3C,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAA,cAAA,qBAAuC,IAAA,EAAM,eAAe,CAAA,CAAE,MAAM,CAAA,KAAA,KAAS;AAC9F,QAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,kDAAA,EAAoD,KAAK,CAAA;AAAA,MAC7E,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,YAAY,KAAA,EAAsC;AAChE,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAM,QAAA,KAAY;AAC1D,MAAA,IAAI;AACF,QAAA,IAAI,SAAS,WAAA,EAAa;AACxB,UAAA,MAAM,QAAA,CAAS,YAAY,KAAK,CAAA;AAChC,UAAA,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA,sCAAA,EAAyC,QAAA,CAAS,IAAI,CAAA,QAAA,EAAW,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,QAClG;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,OAAO,KAAA,CAAM,CAAA,oCAAA,EAAuC,QAAA,CAAS,IAAI,KAAK,KAAK,CAAA;AAAA,MAElF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,OAAA,CAAQ,WAAW,cAAc,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAA,GAAa;AACX,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,0CAAA,EAA6C,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAK3E,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,4CAAA,EAA+C,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EAC9E;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,oCAAA,EAAuC,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAGrE,IAAA,MAAM,mBAAmB,CAAC,GAAG,KAAK,SAAA,CAAU,GAAA,CAAI,OAAK,CAAA,CAAE,QAAA,EAAU,CAAA,EAAG,GAAG,KAAK,UAAA,CAAW,GAAA,CAAI,OAAK,CAAA,CAAE,QAAA,EAAU,CAAC,CAAA;AAE7G,IAAA,MAAM,OAAA,CAAQ,WAAW,gBAAgB,CAAA;AAEzC,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,sCAAA,EAAyC,IAAA,CAAK,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACxE;AACF;;;ACjWO,IAAM,kBAAN,MAAmD;AAAA,EACxD,IAAA,GAAO,0BAAA;AAAA,EACC,MAAA;AAAA,EAER,YAAY,MAAA,EAAwB;AAClC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,IAChB,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,SAAS,IAAI,aAAA,CAAc,EAAE,KAAA,EAAO,QAAA,CAAS,MAAM,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,KAAA,EAAsC;AACtD,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAGnB,IAAA,MAAM,gBAAA,GAAmB,CAAC,UAAA,KAAoB;AAC5C,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,UAAA,EAAY,IAAA,EAAM,CAAC,CAAA;AAAA,MAC3C,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,MAAA,GAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,0BAAA;AACxD,QAAA,OAAO,oCAAoC,MAAM,CAAA,CAAA,CAAA;AAAA,MACnD;AAAA,IACF,CAAA;AAGA,IAAA,MAAM,cAAA,GAAiB,CAAC,SAAA,EAAiB,OAAA,KAAmB;AAC1D,MAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,EAAQ,GAAI,UAAU,OAAA,EAAQ;AACvD,MAAA,OAAO,GAAG,QAAQ,CAAA,EAAA,CAAA;AAAA,IACpB,CAAA;AAEA,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAA,cAAA;AACE,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,sBAAA,CAAiB,CAAA;AAClC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,iBAAiB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,QAC9D;AACA,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,iBAAiB,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,CAAA;AACtE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF,KAAA,YAAA;AACE,QAAA,MAAM,QAAA,GAAW,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,KAAK,OAAO,CAAA;AAC5D,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,iBAAA,CAAc,CAAA;AAC/B,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAE,CAAA;AAC3C,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,iBAAiB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,QAC9D;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,WAAA,EAAc,iBAAiB,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,QAChE;AACA,QAAA,IAAI,KAAK,SAAA,EAAW;AAClB,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,iBAAiB,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,eAAA,EAAkB,iBAAiB,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,CAAA;AACtE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF,KAAA,cAAA;AACE,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,sBAAA,CAAiB,CAAA;AAClC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACxC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,OAAA,EAAU,IAAA,CAAK,EAAE,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAC/C,QAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,iBAAiB,IAAA,CAAK,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,QAC9D;AACA,QAAA,IAAI,IAAA,CAAK,WAAW,MAAA,EAAW;AAC7B,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,WAAA,EAAc,iBAAiB,IAAA,CAAK,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,QAChE;AACA,QAAA,IAAI,KAAK,SAAA,EAAW;AAClB,UAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,UAAA,EAAa,iBAAiB,IAAA,CAAK,SAAS,CAAC,CAAA,CAAE,CAAA;AAAA,QAClE;AACA,QAAA,IAAA,CAAK,OAAO,IAAA,CAAK,CAAA,uBAAA,EAA0B,iBAAiB,IAAA,CAAK,UAAU,CAAC,CAAA,CAAE,CAAA;AAC9E,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC/B,QAAA;AAAA,MAEF;AACE,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oCAAA,EAAwC,KAAA,CAAc,IAAI,CAAA,CAAE,CAAA;AAAA;AACjF,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,0BAA0B,CAAA;AAAA,EAC7C;AACF;;;ACjDA,SAAS,eAAA,CAAgB,UAAA,EAA4B,OAAA,EAAwB,MAAA,EAAwC;AACnH,EAAA,IAAI,UAAA,CAAW,QAAA,IAAY,UAAA,CAAW,QAAA,KAAa,MAAA,EAAQ;AACzD,IAAA,MAAM,QAAQ,OAAA,CAAQ,iBAAA;AACtB,IAAA,IAAI,KAAA,CAAM,SAAA,CAAU,QAAA,CAAS,UAAA,CAAW,QAAQ,CAAA,EAAG;AACjD,MAAA,OAAO,UAAA,CAAW,QAAA;AAAA,IACpB;AAEA,IAAA,MAAA,CAAO,KAAK,qGAAA,EAAuG;AAAA,MACjH,cAAc,UAAA,CAAW,QAAA;AAAA,MACzB,cAAA,EAAgB,QAAQ,WAAA,CAAY,IAAA;AAAA,MACpC,qBAAqB,KAAA,CAAM,SAAA;AAAA,MAC3B,kBAAkB,KAAA,CAAM;AAAA,KACzB,CAAA;AAAA,EACH;AACA,EAAA,OAAO,QAAQ,iBAAA,CAAkB,SAAA;AACnC;AAEO,IAAM,kBAAN,MAAmD;AAAA,EACxD,IAAA,GAAO,0BAAA;AAAA,EACC,MAAA;AAAA,EACA,MAAA,GAAwB,IAAA;AAAA,EACxB,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA,GAAoC,IAAA;AAAA,EAE5C,WAAA,CAAY,MAAA,GAAyB,EAAC,EAAG,MAAA,EAAwB;AAC/D,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,IAChB,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,SAAS,IAAI,aAAA,CAAc,EAAE,KAAA,EAAO,QAAA,CAAS,MAAM,CAAA;AAAA,IAC1D;AAGA,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,YAAA,EAAc,OAAO,YAAA,IAAgB,GAAA;AAAA,MACrC,aAAA,EAAe,OAAO,aAAA,IAAiB,GAAA;AAAA,MACvC,cAAA,EAAgB,OAAO,cAAA,IAAkB,GAAA;AAAA,MACzC,UAAA,EAAY,OAAO,UAAA,IAAc,CAAA;AAAA,MACjC,YAAA,EAAc,OAAO,YAAA,IAAgB,GAAA;AAAA,MACrC,QAAA,EAAU,OAAO,QAAA,IAAY;AAAA,KAC/B;AAGA,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,SAAS,EAAC;AAAA,MACV,SAAS,EAAC;AAAA,MACV,YAAY,EAAC;AAAA,MACb,SAAA,sBAAe,GAAA,EAAI;AAAA,MACnB,aAAA,sBAAmB,GAAA,EAAI;AAAA,MACvB,eAAA,EAAiB,CAAA;AAAA,MACjB,SAAA,EAAW;AAAA,KACb;AAGA,IAAA,IAAA,CAAK,gBAAA,GAAmB,oBAAA;AAAA,EAC1B;AAAA,EAEQ,mBAAA,GAAsB,KAAA;AAAA;AAAA;AAAA;AAAA,EAK9B,iBAAiB,MAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAa;AACX,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,IAC5E;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,UAAA,EAAW;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,MAAM,8DAA8D,CAAA;AAAA,IAChF;AAEA,IAAA,IAAA,CAAK,mBAAmB,OAAO,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,OAAA,EAA8B;AACvD,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAE9B,IAAA,IAAA,CAAK,mBAAmB,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,OAAA,EAAS,KAAK,MAAM,CAAA;AACzE,IAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAE3B,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,iCAAA,EAAmC;AAAA,MAClD,UAAU,IAAA,CAAK,gBAAA;AAAA,MACf,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,QAAA,KAAa,SAAS,MAAA,GAAS,MAAA;AAAA,MACnD,cAAA,EAAgB,QAAQ,WAAA,CAAY,IAAA;AAAA,MACpC,YAAA,EAAc,KAAK,MAAA,CAAO,YAAA;AAAA,MAC1B,cAAA,EAAgB,KAAK,MAAA,CAAO;AAAA,KAC7B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAA,CAAa,SAAiB,MAAA,EAAwB;AAC5D,IAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKQ,gBAAgB,OAAA,EAAyB;AAC/C,IAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,OAAO,CAAA,IAAK,CAAA;AAC1D,IAAA,MAAM,OAAO,OAAA,GAAU,CAAA;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,OAAA,EAAS,IAAI,CAAA;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,KAAA,EAA6B;AAC1D,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,oDAAA,EAAsD;AAAA,MACrE,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,MACnB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,MACpB,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKQ,YAAY,KAAA,EAA6B;AAC/C,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,KAAA,CAAM,KAAK,OAAA,EAAS,KAAA,CAAM,KAAK,EAAE,CAAA;AAGnE,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,KAAc,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,MAAA,CAAO,cAAA,mBAAiB,IAAI,IAAA,EAAK;AAAA,IACxC;AAEA,IAAA,QAAQ,MAAM,IAAA;AAAM,MAClB,KAAA,cAAA;AACE,QAAA,IAAI,IAAA,CAAK,qBAAqB,oBAAA,EAAsB;AAClD,UAAA,MAAM,YAAA,GAAe;AAAA,YACnB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,YACpB,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,YACnB,GAAG,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,YACpC,SAAA,sBAAe,IAAA,EAAK;AAAA,YACpB,SAAA,EAAW;AAAA,WACb;AACA,UAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AACrC,UAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AAAA,QACnC;AAEA,QAAA;AAAA,MAEF,KAAA,cAAA;AACE,QAAA,IAAI,IAAA,CAAK,qBAAqB,oBAAA,EAAsB;AAClD,UAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AAEtC,YAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,CAAK;AAAA,cACvB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,cACpB,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,cACnB,OAAA,EAAS;AAAA,gBACP,GAAG,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,gBACpC,SAAA,sBAAe,IAAA;AAAK,eACtB;AAAA,cACA,cAAA,EAAgB,IAAA,CAAK,eAAA,CAAgB,OAAO;AAAA,aAC7C,CAAA;AAAA,UACH,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA;AACjC,YAAA,IAAA,CAAK,MAAA,CAAO,eAAA,EAAA;AAAA,UACd;AAAA,QACF;AAEA,QAAA;AAAA,MAEF,KAAA,YAAA;AACE,QAAA,IAAI,IAAA,CAAK,qBAAqB,oBAAA,EAAsB;AAClD,UAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA,EAAG;AAEtC,YAAA,IAAA,CAAK,MAAA,CAAO,QAAQ,IAAA,CAAK;AAAA,cACvB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,cACpB,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,cACnB,OAAA,EAAS;AAAA,gBACP,GAAG,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,gBACpC,SAAA,sBAAe,IAAA;AAAK,eACtB;AAAA,cACA,cAAA,EAAgB,IAAA,CAAK,eAAA,CAAgB,OAAO;AAAA,aAC7C,CAAA;AAAA,UACH,CAAA,MAAA,IAAW,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS;AAE7B,YAAA,MAAM,YAAA,GAAe;AAAA,cACnB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,cACpB,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,cACnB,GAAG,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,cACpC,SAAA,sBAAe,IAAA,EAAK;AAAA,cACpB,SAAA,EAAW;AAAA,aACb;AACA,YAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AACrC,YAAA,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,OAAO,CAAA;AAAA,UACnC,CAAA,MAAO;AAEL,YAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA;AACjC,YAAA,IAAA,CAAK,MAAA,CAAO,eAAA,EAAA;AAAA,UACd;AAAA,QACF,CAAA,MAAA,IAAW,IAAA,CAAK,gBAAA,KAAqB,aAAA,EAAe;AAElD,UAAA,MAAM,YAAA,GAAe;AAAA,YACnB,OAAA,EAAS,MAAM,IAAA,CAAK,OAAA;AAAA,YACpB,MAAA,EAAQ,MAAM,IAAA,CAAK,EAAA;AAAA,YACnB,GAAG,IAAA,CAAK,iBAAA,CAAkB,KAAA,CAAM,IAAI,CAAA;AAAA,YACpC,SAAA,sBAAe,IAAA,EAAK;AAAA,YACpB,SAAA,EAAW;AAAA,WACb;AACA,UAAA,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,IAAA,CAAK,YAAY,CAAA;AAAA,QAC1C;AACA,QAAA;AAAA;AAIJ,IAAA,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,UAAA,CAAW,MAAA;AAAA,EAC3G;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAuB;AAE7B,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,OAAO,aAAA,EAAe;AACtD,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,OAAO,YAAA,EAAc;AACrD,MAAA,OAAO,IAAA;AAAA,IACT;AAGA,IAAA,IAAI,KAAK,MAAA,CAAO,cAAA,IAAkB,IAAA,CAAK,MAAA,CAAO,YAAY,CAAA,EAAG;AAC3D,MAAA,MAAM,UAAU,IAAA,CAAK,GAAA,KAAQ,IAAA,CAAK,MAAA,CAAO,eAAe,OAAA,EAAQ;AAChE,MAAA,IAAI,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,cAAA,EAAgB;AACzC,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKQ,WAAA,GAAoB;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,EAAC;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,EAAC;AACvB,IAAA,IAAA,CAAK,MAAA,CAAO,aAAa,EAAC;AAC1B,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,KAAA,EAAM;AAC5B,IAAA,IAAA,CAAK,MAAA,CAAO,cAAc,KAAA,EAAM;AAChC,IAAA,IAAA,CAAK,OAAO,eAAA,GAAkB,CAAA;AAC9B,IAAA,IAAA,CAAK,OAAO,cAAA,GAAiB,MAAA;AAC7B,IAAA,IAAA,CAAK,OAAO,SAAA,GAAY,CAAA;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKQ,aAAA,GAAsB;AAC5B,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAAA,IAC9B;AACA,IAAA,IAAA,CAAK,UAAA,GAAa,WAAW,MAAM;AACjC,MAAA,IAAA,CAAK,KAAA,EAAM,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAC1B,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,wBAAA,EAA0B;AAAA,UAC1C,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,cAAc,CAAA;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,oBAAoB,IAAA,EAA6C;AACvE,IAAA,IAAI,CAAC,KAAK,UAAA,EAAY;AACpB,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,IAAI;AAGF,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,QACV,KAAK,SAAA,CAAU,IAAA,CAAK,UAAA,EAAY,CAAC,MAAM,KAAA,KAAU;AAE/C,UAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,YAAA,OAAO,MAAM,WAAA,EAAY;AAAA,UAC3B;AAEA,UAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA,EAAM;AAE/C,YAAA,OAAO,KAAA;AAAA,UACT;AAEA,UAAA,OAAO,KAAA;AAAA,QACT,CAAC;AAAA,OACH;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,sDAAA,EAAwD;AAAA,QACvE,QAAQ,IAAA,CAAK,EAAA;AAAA,QACb,UAAU,IAAA,CAAK,IAAA;AAAA,QACf,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC7D,CAAA;AACD,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEQ,kBAAkB,IAAA,EAAuC;AAC/D,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,IAAA,CAAK,MAAA,EAAQ,EAAA,IAAM,IAAA;AAAA,MACjC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAU,IAAA,CAAK,IAAA;AAAA,MACf,UAAA,EAAY,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAA;AAAA,MACzC,QAAA,EAAU,KAAK,QAAA,IAAY,IAAA;AAAA,MAC3B,KAAA,EAAO,IAAA;AAAA,MACP,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,IAAA,CAAK,SAAA;AAAA,MACZ,SAAS,IAAA,CAAK;AAAA,KAChB;AAAA,EACF;AAAA,EAEQ,kBAAkB,IAAA,EAAgD;AACxE,IAAA,OAAO;AAAA,MACL,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY,IAAA,CAAK,mBAAA,CAAoB,IAAI,CAAA;AAAA,MACzC,QAAA,EAAU,KAAK,QAAA,IAAY,IAAA;AAAA,MAC3B,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,KAAK,OAAA,IAAW,IAAA;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,OAAO,IAAA,CAAK;AAAA,KACd;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBAAA,CAAoB,KAAA,EAAuB,OAAA,EAAuC;AAC9F,IAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAGnB,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAI,MAAM,IAAA,KAAA,YAAA,mBAAwC;AAChD,QAAA,MAAM,QAAQ,YAAA,CAAa;AAAA,UACzB,SAAS,IAAA,CAAK,OAAA;AAAA,UACd,QAAQ,IAAA,CAAK,EAAA;AAAA,UACb,GAAG,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AAAA,UAC9B,SAAA,sBAAe,IAAA,EAAK;AAAA,UACpB,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,oDAAA,EAAuD,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA,MACtF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAA,cAAA;AACE,UAAA,MAAM,QAAQ,YAAA,CAAa;AAAA,YACzB,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,QAAQ,IAAA,CAAK,EAAA;AAAA,YACb,GAAG,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AAAA,YAC9B,SAAA,sBAAe,IAAA,EAAK;AAAA,YACpB,SAAA,EAAW;AAAA,WACZ,CAAA;AACD,UAAA;AAAA,QACF,KAAA,cAAA;AAAA,QACA,KAAA,YAAA;AACE,UAAA,MAAM,QAAQ,YAAA,CAAa;AAAA,YACzB,SAAS,IAAA,CAAK,OAAA;AAAA,YACd,QAAQ,IAAA,CAAK,EAAA;AAAA,YACb,OAAA,EAAS;AAAA,cACP,GAAG,IAAA,CAAK,iBAAA,CAAkB,IAAI,CAAA;AAAA,cAC9B,SAAA,sBAAe,IAAA;AAAK;AACtB,WACD,CAAA;AACD,UAAA;AAAA,QACF;AACE,UAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,CAAA,mDAAA,EAAuD,KAAA,CAAc,IAAI,CAAA,CAAE,CAAA;AAAA;AAChG,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,4BAA4B,KAAA,EAA6B;AAC/D,IAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAEtB,IAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AAEtB,MAAA,IAAA,CAAK,KAAA,EAAM,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAC1B,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,oBAAA,EAAsB;AAAA,UACtC,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,SAAA,KAAc,CAAA,EAAG;AAEtC,MAAA,IAAA,CAAK,aAAA,EAAc;AAAA,IACrB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,KAAA,EAA6B;AAEzD,IAAA,IAAI,MAAM,IAAA,KAAA,YAAA,mBAAwC;AAChD,MAAA,IAAA,CAAK,YAAY,KAAK,CAAA;AAEtB,MAAA,IAAI,IAAA,CAAK,aAAY,EAAG;AAEtB,QAAA,IAAA,CAAK,KAAA,EAAM,CAAE,KAAA,CAAM,CAAA,KAAA,KAAS;AAC1B,UAAA,IAAA,CAAK,MAAA,CAAO,MAAM,oBAAA,EAAsB;AAAA,YACtC,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,WAC7D,CAAA;AAAA,QACH,CAAC,CAAA;AAAA,MACH,CAAA,MAAA,IAAW,IAAA,CAAK,MAAA,CAAO,SAAA,KAAc,CAAA,EAAG;AAEtC,QAAA,IAAA,CAAK,aAAA,EAAc;AAAA,MACrB;AAAA,IACF;AAAA,EAEF;AAAA;AAAA;AAAA;AAAA,EAKQ,oBAAoB,OAAA,EAAyB;AACnD,IAAA,OAAO,KAAK,MAAA,CAAO,YAAA,GAAe,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,KAAA,GAAuB;AACnC,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,0DAA0D,CAAA;AAC3E,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,UAAA,EAAW;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,wDAAwD,CAAA;AACzE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAC5B,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAEA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,KAAc,CAAA,EAAG;AAC/B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,WAAA,GACJ,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,KAAK,MAAA,CAAO,aAAA,GACjC,UAAA,GACA,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,IAAA,CAAK,MAAA,CAAO,eACnC,MAAA,GACA,MAAA;AAGR,IAAA,MAAM,UAAA,GAA0B;AAAA,MAC9B,OAAA,EAAS,CAAC,GAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC,OAAA,EAAS,CAAC,GAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAAA,MAChC,UAAA,EAAY,CAAC,GAAG,IAAA,CAAK,OAAO,UAAU,CAAA;AAAA,MACtC,SAAA,EAAW,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,SAAS,CAAA;AAAA,MACxC,aAAA,EAAe,IAAI,GAAA,CAAI,IAAA,CAAK,OAAO,aAAa,CAAA;AAAA,MAChD,eAAA,EAAiB,KAAK,MAAA,CAAO,eAAA;AAAA,MAC7B,cAAA,EAAgB,KAAK,MAAA,CAAO,cAAA;AAAA,MAC5B,SAAA,EAAW,KAAK,MAAA,CAAO;AAAA,KACzB;AAGA,IAAA,IAAA,CAAK,WAAA,EAAY;AAGjB,IAAA,MAAM,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,UAAA,EAAY,CAAC,CAAA;AAElD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC7B,IAAA,IAAA,CAAK,MAAA,CAAO,MAAM,eAAA,EAAiB;AAAA,MACjC,UAAU,IAAA,CAAK,gBAAA;AAAA,MACf,WAAW,UAAA,CAAW,SAAA;AAAA,MACtB,WAAA;AAAA,MACA,UAAA,EAAY,OAAA;AAAA,MACZ,eAAA,EAAiB,UAAA,CAAW,eAAA,GAAkB,CAAA,GAAI,WAAW,eAAA,GAAkB;AAAA,KAChF,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,gBAAA,CAAiB,OAAA,EAAwB,MAAA,EAAqB,OAAA,EAAgC;AAC1G,IAAA,IAAI;AACF,MAAA,IAAI,IAAA,CAAK,qBAAqB,oBAAA,EAAsB;AAElD,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,QAAQ,kBAAA,CAAmB,EAAE,OAAA,EAAS,MAAA,CAAO,SAAS,CAAA;AAAA,QAC9D;AAGA,QAAA,IAAI,MAAA,CAAO,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,gBAAgB,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM;AAClD,YAAA,MAAM,cAAc,IAAA,CAAK,YAAA,CAAa,EAAE,OAAA,EAAS,CAAA,CAAE,MAAM,CAAA,CAAE,aAAA;AAAA,cACzD,IAAA,CAAK,YAAA,CAAa,CAAA,CAAE,OAAA,EAAS,EAAE,MAAM;AAAA,aACvC;AACA,YAAA,IAAI,WAAA,KAAgB,GAAG,OAAO,WAAA;AAC9B,YAAA,OAAO,CAAA,CAAE,iBAAiB,CAAA,CAAE,cAAA;AAAA,UAC9B,CAAC,CAAA;AAED,UAAA,MAAM,OAAA,CAAQ,kBAAA,CAAmB,EAAE,OAAA,EAAS,eAAe,CAAA;AAAA,QAC7D;AAAA,MACF,CAAA,MAAA,IAAW,IAAA,CAAK,gBAAA,KAAqB,aAAA,EAAe;AAElD,QAAA,IAAI,MAAA,CAAO,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AAChC,UAAA,MAAM,QAAQ,kBAAA,CAAmB,EAAE,OAAA,EAAS,MAAA,CAAO,YAAY,CAAA;AAAA,QACjE;AAAA,MACF;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;AACpC,QAAA,MAAM,UAAA,GAAa,IAAA,CAAK,mBAAA,CAAoB,OAAO,CAAA;AACnD,QAAA,IAAA,CAAK,MAAA,CAAO,KAAK,8BAAA,EAAgC;AAAA,UAC/C,SAAS,OAAA,GAAU,CAAA;AAAA,UACnB,UAAA,EAAY,KAAK,MAAA,CAAO,UAAA;AAAA,UACxB,aAAA,EAAe,UAAA;AAAA,UACf,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D,CAAA;AAED,QAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,UAAU,CAAC,CAAA;AAC5D,QAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,OAAA,EAAS,MAAA,EAAQ,UAAU,CAAC,CAAA;AAAA,MAC3D,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,sDAAA,EAAwD;AAAA,UACxE,cAAc,OAAA,GAAU,CAAA;AAAA,UACxB,UAAA,EAAY,KAAK,MAAA,CAAO,UAAA;AAAA,UACxB,kBAAkB,MAAA,CAAO,SAAA;AAAA,UACzB,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,KAAA,EAAsC;AACtD,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,qEAAqE,CAAA;AACtF,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,UAAA,EAAW;AACvC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,wDAAwD,CAAA;AACzE,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,CAAC,KAAK,mBAAA,EAAqB;AAC7B,MAAA,IAAA,CAAK,mBAAmB,OAAO,CAAA;AAAA,IACjC;AAGA,IAAA,QAAQ,KAAK,gBAAA;AAAkB,MAC7B,KAAK,UAAA;AACH,QAAA,MAAM,IAAA,CAAK,mBAAA,CAAoB,KAAA,EAAO,OAAO,CAAA;AAC7C,QAAA;AAAA,MACF,KAAK,oBAAA;AACH,QAAA,IAAA,CAAK,4BAA4B,KAAK,CAAA;AACtC,QAAA;AAAA,MACF,KAAK,aAAA;AACH,QAAA,IAAA,CAAK,sBAAsB,KAAK,CAAA;AAChC,QAAA;AAAA;AACJ,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAE9B,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,YAAA,CAAa,KAAK,UAAU,CAAA;AAC5B,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAAA,IACpB;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,SAAA,GAAY,CAAA,EAAG;AAC7B,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,uCAAA,EAAyC;AAAA,QACxD,eAAA,EAAiB,KAAK,MAAA,CAAO;AAAA,OAC9B,CAAA;AACD,MAAA,IAAI;AACF,QAAA,MAAM,KAAK,KAAA,EAAM;AAAA,MACnB,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,MAAA,CAAO,MAAM,kDAAA,EAAoD;AAAA,UACpE,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,SAC7D,CAAA;AAAA,MACH;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,KAAK,mCAAmC,CAAA;AAAA,EACtD;AACF;;;ACtoBA,IAAM,oBAAN,MAAwB;AAAA,EACd,SAAA,uBAAgB,GAAA,EAA6B;AAAA,EAC7C,eAAA;AAAA,EACA,QAAA;AAAA;AAAA;AAAA;AAAA,EAKR,QAAA,CAAS,IAAA,EAAc,QAAA,EAA2B,SAAA,GAAY,KAAA,EAAa;AACzE,IAAA,IAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAI,CAAA,oBAAA,CAAsB,CAAA;AAAA,IACpE;AAEA,IAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAA,EAAM,QAAQ,CAAA;AAGjC,IAAA,IAAI,SAAA,IAAa,CAAC,IAAA,CAAK,eAAA,EAAiB;AACtC,MAAA,IAAA,CAAK,eAAA,GAAkB,QAAA;AAAA,IACzB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,IAAA,EAA2C;AAC7C,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAA0C;AACxC,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,QAAA,EAAiC;AAC3C,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,OAAA,EAAgE;AAE1E,IAAA,IAAI,KAAK,QAAA,EAAU;AACjB,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,OAAA,EAAS,KAAK,SAAS,CAAA;AACtD,MAAA,IAAI,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5C,QAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA;AAAA,MACpC;AAAA,IACF;AAGA,IAAA,OAAO,IAAA,CAAK,eAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,IAAA,EAAuB;AAChC,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,CAAA,CAAE,GAAA,CAAI,CAAA,QAAA,KAAY,QAAA,CAAS,QAAA,EAAU,CAAA;AAEhG,IAAA,MAAM,OAAA,CAAQ,WAAW,gBAAgB,CAAA;AACzC,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AACvB,IAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAA+C;AAC7C,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,SAAS,CAAA;AAAA,EAC/B;AACF,CAAA;AAEA,IAAM,iBAAA,GAAoB,IAAI,iBAAA,EAAkB;AASzC,SAAS,iBAAA,CAAkB,IAAA,EAAc,QAAA,EAA2B,SAAA,GAAY,KAAA,EAAa;AAClG,EAAA,iBAAA,CAAkB,QAAA,CAAS,IAAA,EAAM,QAAA,EAAU,SAAS,CAAA;AACtD;AAKO,SAAS,aAAa,IAAA,EAA2C;AACtE,EAAA,OAAO,iBAAA,CAAkB,IAAI,IAAI,CAAA;AACnC;AAKO,SAAS,mBAAA,GAAmD;AACjE,EAAA,OAAO,kBAAkB,UAAA,EAAW;AACtC;AAKO,SAAS,qBAAqB,QAAA,EAAiC;AACpE,EAAA,iBAAA,CAAkB,YAAY,QAAQ,CAAA;AACxC;AAKO,SAAS,qBAAqB,OAAA,EAAgE;AACnG,EAAA,OAAO,iBAAA,CAAkB,YAAY,OAAO,CAAA;AAC9C;AAKO,SAAS,oBAAoB,IAAA,EAAuB;AACzD,EAAA,OAAO,iBAAA,CAAkB,WAAW,IAAI,CAAA;AAC1C;AAKA,eAAsB,yBAAA,GAA2C;AAC/D,EAAA,MAAM,kBAAkB,QAAA,EAAS;AACnC;AAKO,SAAS,sBAAA,GAA+B;AAC7C,EAAA,iBAAA,CAAkB,KAAA,EAAM;AAC1B;AAKO,SAAS,eAAA,GAAwD;AACtE,EAAA,OAAO,kBAAkB,MAAA,EAAO;AAClC;AAKO,SAAS,aAAa,IAAA,EAAuB;AAClD,EAAA,MAAM,OAAA,GAAU,aAAa,IAAI,CAAA;AACjC,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AAErB,EAAA,MAAM,MAAA,GAAS,QAAQ,SAAA,EAAU;AACjC,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AAGxB,EAAA,OAAO,QAAA,CAAS,IAAA,KAAA,OAAA;AAClB;AAKA,SAAS,oBACP,GAAA,EACwB;AACxB,EAAA,OAAO,GAAA,YAAe,eAAA;AACxB;AAKO,SAAS,eAAe,MAAA,EAA+B;AAC5D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA;AAE/C,EAAA,OAAA,CAAQ,QAAQ,CAAC,CAAC,IAAA,EAAM,UAAU,GAAG,KAAA,KAAU;AAC7C,IAAA,MAAM,QAAA,GAAW,mBAAA,CAAoB,UAAU,CAAA,GAC3C,UAAA,GACA,IAAI,gBAAA,CAAiB,EAAE,GAAG,UAAA,EAAY,YAAA,EAAc,IAAA,EAAM,CAAA;AAG9D,IAAA,MAAM,YAAY,KAAA,KAAU,CAAA;AAC5B,IAAA,iBAAA,CAAkB,IAAA,EAAM,UAAU,SAAS,CAAA;AAAA,EAC7C,CAAC,CAAA;AAGD,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,oBAAA,CAAqB,OAAO,QAAQ,CAAA;AAAA,EACtC;AACF;;;AC/MO,SAAS,mBAAmB,GAAA,EAA+C;AAChF,EAAA,MAAM,UAA+B,EAAC;AAEtC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,MAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,KAAA;AAAA,IACjB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,GAAG,IAAI,CAAA,CAAA,EAAI,KAAA,YAAiB,QAAQ,KAAA,CAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,IAC3E;AAAA,EACF;AAEA,EAAA,OAAO,OAAA;AACT;AAOO,SAAS,kBAAkB,GAAA,EAAmB;AACnD,EAAA,OAAO,GAAA,CAAI,IAAI,CAAA,IAAA,KAAQ;AACrB,IAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,EAAG;AAE5D,MAAA,OAAO,mBAAmB,IAAI,CAAA;AAAA,IAChC;AAGA,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAU,IAAI,CAAA;AACnB,MAAA,OAAO,IAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,IAAI,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,IACnE;AAAA,EACF,CAAC,CAAA;AACH;AAQO,SAAS,aAAa,KAAA,EAAiB;AAC5C,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACzC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,kBAAkB,KAAK,CAAA;AAAA,EAChC;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,mBAAmB,KAAK,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AACpB,IAAA,OAAO,KAAA;AAAA,EACT,SAAS,KAAA,EAAO;AACd,IAAA,OAAO,IAAI,KAAA,YAAiB,KAAA,GAAQ,MAAM,OAAA,GAAU,MAAA,CAAO,KAAK,CAAC,CAAA,CAAA,CAAA;AAAA,EACnE;AACF;AAQO,SAAS,QAAA,CAAwC,KAAQ,UAAA,EAAkC;AAChG,EAAA,OAAO,OAAO,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,GAAG,EAAE,MAAA,CAAO,CAAC,CAAC,GAAG,MAAM,CAAC,UAAA,CAAW,QAAA,CAAS,GAAG,CAAC,CAAC,CAAA;AAC5F;AASO,SAAS,YAAA,CAAa,KAAU,MAAA,EAAuB;AAC5D,EAAA,IAAI,CAAC,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AACnC,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,MAAM,SAAc,EAAC;AAErB,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,GAAA,EAAK,KAAK,CAAA;AACvC,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,cAAA,CAAe,MAAA,EAAQ,OAAO,KAAK,CAAA;AAAA,IACrC;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAQA,SAAS,cAAA,CAAe,KAAU,IAAA,EAAmB;AACnD,EAAA,OAAO,KAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AAC9C,IAAA,OAAO,WAAW,OAAO,OAAA,KAAY,QAAA,GAAW,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAA;AAAA,EACjE,GAAG,GAAG,CAAA;AACR;AAQA,SAAS,cAAA,CAAe,GAAA,EAAU,IAAA,EAAc,KAAA,EAAkB;AAChE,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,EAAI;AACzB,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,CAAO,CAAC,SAAS,GAAA,KAAQ;AAC3C,IAAA,IAAI,CAAC,QAAQ,GAAG,CAAA,IAAK,OAAO,OAAA,CAAQ,GAAG,MAAM,QAAA,EAAU;AACrD,MAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAAA,IAClB;AACA,IAAA,OAAO,QAAQ,GAAG,CAAA;AAAA,EACpB,GAAG,GAAG,CAAA;AAEN,EAAA,MAAA,CAAO,OAAO,CAAA,GAAI,KAAA;AACpB;AAWO,SAAS,gBAAsC,OAAA,EAQ5B;AACxB,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,gBAAgB,cAAA,EAAgB,GAAG,MAAK,GAAI,OAAA;AAGtE,EAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,IAAA,OAAO,cAAA,CAAe,YAAY,eAAA,CAAgB;AAAA,MAChD,IAAA;AAAA,MACA,UAAA;AAAA,MACA,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,YAAY,oBAAA,CAAqB;AAAA,IACrC;AAAA,GACD,CAAA;AAED,EAAA,OAAO,WAAW,SAAA,CAAU;AAAA,IAC1B,IAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA,EAAc;AAAA,MACZ;AAAA,KACF;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AACH;;;ACpKA,SAAS,cAAA,GAAyB;AAEhC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,CAAC,CAAA;AAC9B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAC3D,IAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AAC1B,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA,IAAA,KAAQ,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9E;AAKA,SAAS,eAAA,GAA0B;AAEjC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAe,MAAA,CAAO,eAAA,EAAiB;AAC3D,IAAA,MAAA,CAAO,gBAAgB,KAAK,CAAA;AAAA,EAC9B,CAAA,MAAO;AAEL,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,CAAK,MAAM,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AAAA,IAC3C;AAAA,EACF;AACA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,KAAA,EAAO,CAAA,IAAA,KAAQ,KAAK,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA;AAC9E;AAEA,IAAM,gBAAN,MAAuE;AAAA,EAC9D,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EAOA,QAAA;AAAA,EACC,MAAA;AAAA,EAER,WAAA,CAAY,SAA+B,SAAA,EAA4B;AACrE,IAAA,IAAA,CAAK,KAAK,cAAA,EAAe;AACzB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,OAAO,OAAA,CAAQ,IAAA;AACpB,IAAA,IAAA,CAAK,UAAA,GAAa,YAAA,CAAa,OAAA,CAAQ,UAAU,KAAM,EAAC;AACxD,IAAA,IAAA,CAAK,QAAA,GAAW,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAC7C,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AACtB,IAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AACvC,IAAA,IAAA,CAAK,UAAU,OAAA,CAAQ,OAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc;AAAA,MAC9B,IAAA,EAAM,iBAAA;AAAA,MACN,OAAO,QAAA,CAAS;AAAA;AAAA,KACjB,CAAA;AAGD,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAEnB,MAAA,IAAA,CAAK,UAAU,eAAA,EAAgB;AAAA,IACjC,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,OAAA,GAAU,QAAQ,MAAA,CAAO,OAAA;AAAA,IAChC;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAGhB,MAAA,IAAA,CAAK,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,IAAI,OAAA,EAA8G;AAChH,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,yCAAA,CAA2C,CAAA;AAC5D,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,OAAA,uBAAc,IAAA,EAAK;AACxB,IAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,IAAA,CAAK,YAAY,GAAG,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA,EAAE;AAAA,IAC9E;AACA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,IAAA,CAAK,QAAA,GAAW,EAAE,GAAG,IAAA,CAAK,UAAU,GAAG,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,IACxE;AAAA,EAEF;AAAA,EAEA,MAAM,OAAA,EAKG;AACP,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,2CAAA,CAA6C,CAAA;AAC9D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,EAAE,KAAA,EAAO,OAAA,GAAU,IAAA,EAAM,UAAA,EAAY,UAAS,GAAI,OAAA;AAExD,IAAA,IAAA,CAAK,SAAA,GACH,iBAAiB,WAAA,GACb;AAAA,MACE,IAAI,KAAA,CAAM,EAAA;AAAA,MACV,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,UAAU,KAAA,CAAM,QAAA;AAAA,MAChB,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,SAAS,KAAA,CAAM;AAAA,KACjB,GACA;AAAA,MACE,SAAS,KAAA,CAAM;AAAA,KACjB;AAGN,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,IAAA,CAAK,YAAY,GAAG,YAAA,CAAa,UAAU,CAAA,EAAE;AAAA,IACtE;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAA,CAAK,QAAA,GAAW,EAAE,GAAG,IAAA,CAAK,UAAU,GAAG,YAAA,CAAa,QAAQ,CAAA,EAAE;AAAA,IAChE;AAEA,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,GAAA,EAAI;AAAA,IACX,CAAA,MAAO;AAEL,MAAA,IAAA,CAAK,MAAA,CAAO,EAAE,CAAA;AAAA,IAChB;AAAA,EAEF;AAAA,EAEA,gBAA+C,OAAA,EAMxB;AACrB,IAAA,OAAO,IAAA,CAAK,UAAU,SAAA,CAAU;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAAA,EAEA,gBAA+C,OAAA,EAMxB;AACrB,IAAA,OAAO,IAAA,CAAK,UAAU,SAAA,CAAU;AAAA,MAC9B,GAAG,OAAA;AAAA,MACH,MAAA,EAAQ,IAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,OAAA,EAKE;AACP,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA,wCAAA,CAA0C,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,EAAS,UAAU,MAAA,EAAW;AAChC,MAAA,IAAA,CAAK,KAAA,GAAQ,YAAA,CAAa,OAAA,CAAQ,KAAK,CAAA;AAAA,IACzC;AACA,IAAA,IAAI,OAAA,EAAS,WAAW,MAAA,EAAW;AACjC,MAAA,IAAA,CAAK,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,MAAM,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAS,UAAA,EAAY;AACvB,MAAA,IAAA,CAAK,UAAA,GAAa,EAAE,GAAG,IAAA,CAAK,YAAY,GAAG,YAAA,CAAa,OAAA,CAAQ,UAAU,CAAA,EAAE;AAAA,IAC9E;AACA,IAAA,IAAI,SAAS,QAAA,EAAU;AACrB,MAAA,IAAA,CAAK,QAAA,GAAW,EAAE,GAAG,IAAA,CAAK,UAAU,GAAG,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA,EAAE;AAAA,IACxE;AAAA,EAEF;AAAA,EAEA,IAAI,UAAA,GAAsB;AACxB,IAAA,OAAO,CAAC,IAAA,CAAK,MAAA;AAAA,EACf;AAAA,EAEA,MAAM,MAAA,GAA0B;AAC9B,IAAA,OAAO,KAAK,SAAA,CAAU;AAAA,MACpB,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,YAAY,IAAA,CAAK,UAAA;AAAA,MACjB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK;AAAA;AAAA,KACf,CAAA;AAAA,EACH;AACF,CAAA;AAMO,IAAM,sBAAN,MAAqD;AAAA,EAC1D,IAAA,GAAO,uBAAA;AAAA,EACC,eAAA;AAAA,EAER,YAAY,eAAA,EAA4B;AAEtC,IAAA,IAAA,CAAK,mBACH,eAAA,IAAmB;AAAA,MACjB,UAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,KAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,EACA,GAAA,CAAI,CAAA,KAAA,KAAS,KAAA,CAAM,aAAa,CAAA;AAAA,EACpC;AAAA,EAEA,QAAQ,IAAA,EAAmC;AAEzC,IAAA,MAAM,aAAa,CAAC,GAAA,EAAU,IAAA,mBAAO,IAAI,SAAQ,KAAW;AAC1D,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,EAAU;AAC3C,QAAA,OAAO,GAAA;AAAA,MACT;AAGA,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,QAAA,OAAO,sBAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AAEZ,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,QAAA,OAAO,IAAI,GAAA,CAAI,CAAA,IAAA,KAAQ,UAAA,CAAW,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,MAC/C;AAEA,MAAA,MAAM,WAAgB,EAAC;AACvB,MAAA,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,OAAA,CAAQ,CAAA,GAAA,KAAO;AAC9B,QAAA,IAAI,KAAK,eAAA,CAAgB,QAAA,CAAS,GAAA,CAAI,WAAA,EAAa,CAAA,EAAG;AAEpD,UAAA,IAAI,IAAI,GAAG,CAAA,IAAK,OAAO,GAAA,CAAI,GAAG,MAAM,QAAA,EAAU;AAC5C,YAAA,QAAA,CAAS,GAAG,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,GAAG,GAAG,IAAI,CAAA;AAAA,UAC3C,CAAA,MAAO;AACL,YAAA,QAAA,CAAS,GAAG,CAAA,GAAI,YAAA;AAAA,UAClB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,QAAA,CAAS,GAAG,CAAA,GAAI,UAAA,CAAW,GAAA,CAAI,GAAG,GAAG,IAAI,CAAA;AAAA,QAC3C;AAAA,MACF,CAAC,CAAA;AAED,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI;AAEF,MAAA,MAAM,YAAA,GAAe,EAAE,GAAG,IAAA,EAAK;AAC/B,MAAA,YAAA,CAAa,UAAA,GAAa,UAAA,CAAW,IAAA,CAAK,UAAU,CAAA;AACpD,MAAA,YAAA,CAAa,QAAA,GAAW,UAAA,CAAW,IAAA,CAAK,QAAQ,CAAA;AAChD,MAAA,YAAA,CAAa,KAAA,GAAQ,UAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AAC1C,MAAA,YAAA,CAAa,MAAA,GAAS,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA;AAC5C,MAAA,YAAA,CAAa,SAAA,GAAY,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAClD,MAAA,OAAO,YAAA;AAAA,IACT,SAAS,KAAA,EAAO;AAEd,MAAA,MAAM,QAAA,GAAW,EAAE,GAAG,IAAA,EAAK;AAC3B,MAAA,QAAA,CAAS,UAAA,GAAa;AAAA,QACpB,mBAAA,EAAqB,4DAAA;AAAA,QACrB,iBAAA,EAAmB,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,OAC9D;AACA,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,QAAA,GAA0B;AAAA,EAEhC;AACF;AAMO,IAAM,sBAAA,GAAkD;AAAA,EAC7D,WAAA,EAAa,mBAAA;AAAA,EACb,YAAA,EAAc,SAAA;AAAA,EACd,QAAA,EAAU,EAAE,IAAA,EAAA,QAAA,eAAkC;AAAA,EAC9C,SAAA,EAAW,CAAC,IAAI,eAAA,EAAiB,CAAA;AAAA,EACjC,UAAA,EAAY,CAAC,IAAI,mBAAA,EAAqB;AACxC;AAMO,IAAM,gBAAA,GAAN,cAA+B,eAAA,CAAgB;AAAA,EACpD,WAAA,CAAY,SAAkC,sBAAA,EAAwB;AACpE,IAAA,KAAA,CAAM,MAAM,CAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAMU,WAAqC,OAAA,EAA8C;AAE3F,IAAA,OAAO,IAAI,aAAA,CAAqB,OAAA,EAAS,IAAI,CAAA;AAAA,EAC/C;AACF;;;AC1VA,IAAM,aAAA,GAAgB,CAAC,UAAA,EAAY,cAAc,CAAA;AACjD,IAAM,wBAAwB,CAAC,UAAA,EAAY,UAAU,eAAA,EAAiB,aAAA,EAAe,kBAAkB,cAAc,CAAA;AAErH,IAAM,gBAAA,GAAmB,CAAC,aAAA,EAAe,iBAAiB,CAAA;AAC1D,IAAM,wBAAA,GAA2B,CAAC,SAAA,EAAW,WAAA,EAAa,gBAAgB,CAAA;AAK1E,SAAS,WAAW,IAAA,EAA0B;AAE5C,EAAA,OACE,IAAA,CAAK,YAAY,IAAA,KAAS,YAAA,IAAiB,KAAa,QAAA,KAAa,IAAA,IAAQ,CAAC,IAAA,CAAK,SAAA;AAEvF;AAMO,SAAS,SAA4E,MAAA,EAAoB;AAC9G,EAAA,MAAM,eAAA,GAAkB,cAAc,KAAA,CAAM,CAAA,MAAA,KAAU,OAAQ,MAAA,GAAiB,MAAM,MAAM,UAAU,CAAA;AACrG,EAAA,MAAM,kBAAA,GAAqB,iBAAiB,KAAA,CAAM,CAAA,MAAA,KAAU,OAAQ,MAAA,GAAiB,MAAM,MAAM,UAAU,CAAA;AAE3G,EAAA,OAAO,eAAA,IAAmB,kBAAA;AAC5B;AAMO,SAAS,UAAA,CACd,QACA,cAAA,EACG;AAEH,EAAA,IAAI,CAAC,cAAA,CAAe,WAAA,IAAe,UAAA,CAAW,cAAA,CAAe,WAAW,CAAA,EAAG;AACzE,IAAA,OAAO,MAAA;AAAA,EACT;AAGA,EAAA,IAAI,CAAC,QAAA,CAAS,MAAM,CAAA,EAAG;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,MAAM,MAAA,EAAQ;AAAA,MACvB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAI;AACF,UAAA,IAAI,aAAA,CAAc,QAAA,CAAS,IAAc,CAAA,EAAG;AAC1C,YAAA,OAAO,IAAI,IAAA,KAAgB;AACzB,cAAA,MAAM,KAAA,GAAS,MAAA,CAAe,IAAI,CAAA,CAAE,GAAG,IAAI,CAAA;AAC3C,cAAA,OAAO,SAAA,CAAU,OAAO,cAAc,CAAA;AAAA,YACxC,CAAA;AAAA,UACF;AAGA,UAAA,IAAI,gBAAA,CAAiB,QAAA,CAAS,IAAc,CAAA,EAAG;AAC7C,YAAA,OAAO,IAAI,IAAA,KAAgB;AACzB,cAAA,MAAM,QAAA,GAAY,MAAA,CAAe,IAAI,CAAA,CAAE,GAAG,IAAI,CAAA;AAC9C,cAAA,OAAO,YAAA,CAAa,UAAU,cAAc,CAAA;AAAA,YAC9C,CAAA;AAAA,UACF;AAGA,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,+DAA+D,KAAK,CAAA;AACjF,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,sEAAsE,KAAK,CAAA;AACxF,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAMA,SAAS,SAAA,CAA2B,OAAU,cAAA,EAAmC;AAE/E,EAAA,IAAI,CAAC,cAAA,CAAe,WAAA,IAAe,UAAA,CAAW,cAAA,CAAe,WAAW,CAAA,EAAG;AACzE,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,MAAM,KAAA,EAAO;AAAA,MACtB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAI;AACF,UAAA,IAAI,qBAAA,CAAsB,QAAA,CAAS,IAAc,CAAA,EAAG;AAClD,YAAA,OAAO,CAAC,KAAA,EAAY,OAAA,GAAe,EAAC,KAAM;AACxC,cAAA,OAAQ,MAAA,CAAe,IAAI,CAAA,CAAE,KAAA,EAAO;AAAA,gBAClC,GAAG,OAAA;AAAA,gBACH;AAAA,eACD,CAAA;AAAA,YACH,CAAA;AAAA,UACF;AAGA,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,qEAAqE,KAAK,CAAA;AACvF,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,qEAAqE,KAAK,CAAA;AACvF,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAMA,SAAS,YAAA,CAAiC,UAAa,cAAA,EAAmC;AAExF,EAAA,IAAI,CAAC,cAAA,CAAe,WAAA,IAAe,UAAA,CAAW,cAAA,CAAe,WAAW,CAAA,EAAG;AACzE,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,MAAM,QAAA,EAAU;AAAA,MACzB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAI;AAEF,UAAA,IAAI,wBAAA,CAAyB,QAAA,CAAS,IAAc,CAAA,EAAG;AAErD,YAAA,IAAI,IAAA,KAAS,WAAA,IAAe,IAAA,KAAS,gBAAA,EAAkB;AACrD,cAAA,OAAO,OAAO,OAAA,GAAe,EAAC,KAAM;AAClC,gBAAA,MAAM,GAAA,GAAM,MAAO,MAAA,CAAe,IAAI,EAAE,OAAO,CAAA;AAC/C,gBAAA,OAAO,GAAA,GAAM,OAAA,CAAQ,GAAA,EAAK,cAAc,CAAA,GAAI,GAAA;AAAA,cAC9C,CAAA;AAAA,YACF;AAGA,YAAA,OAAO,CAAC,KAAA,EAAY,OAAA,GAAe,EAAC,KAAM;AACxC,cAAA,OAAQ,MAAA,CAAe,IAAI,CAAA,CAAE,KAAA,EAAO;AAAA,gBAClC,GAAG,OAAA;AAAA,gBACH;AAAA,eACD,CAAA;AAAA,YACH,CAAA;AAAA,UACF;AAGA,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,wEAAwE,KAAK,CAAA;AAC1F,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,wEAAwE,KAAK,CAAA;AAC1F,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAMA,SAAS,OAAA,CAA0B,KAAQ,cAAA,EAAmC;AAE5E,EAAA,IAAI,CAAC,cAAA,CAAe,WAAA,IAAe,UAAA,CAAW,cAAA,CAAe,WAAW,CAAA,EAAG;AACzE,IAAA,OAAO,GAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,MAAM,GAAA,EAAK;AAAA,MACpB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,QAAA,IAAI;AACF,UAAA,IAAI,SAAS,OAAA,EAAS;AACpB,YAAA,OAAO,CAAC,YAAA,GAAoB,EAAC,KAAM;AACjC,cAAA,OAAQ,OAAe,KAAA,CAAM;AAAA,gBAC3B,GAAG,YAAA;AAAA,gBACH,cAAA,EAAgB,aAAa,cAAA,IAAkB;AAAA,eAChD,CAAA;AAAA,YACH,CAAA;AAAA,UACF;AAGA,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D,SAAS,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,IAAA,CAAK,mEAAmE,KAAK,CAAA;AACrF,UAAA,MAAM,KAAA,GAAS,OAAe,IAAI,CAAA;AAClC,UAAA,OAAO,OAAO,KAAA,KAAU,UAAA,GAAa,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AAAA,QAC5D;AAAA,MACF;AAAA,KACD,CAAA;AAAA,EACH,SAAS,KAAA,EAAO;AACd,IAAA,OAAA,CAAQ,IAAA,CAAK,mEAAmE,KAAK,CAAA;AACrF,IAAA,OAAO,GAAA;AAAA,EACT;AACF","file":"chunk-2NKNTPFR.js","sourcesContent":["/**\n * No Op Implementation for MastraAITracing\n */\n\nimport type { MastraAITracing } from './base';\nimport type { AISpanType, AISpan, AISpanOptions, AISpanTypeMap, AnyAISpan } from './types';\n\nexport class NoOpAISpan<TType extends AISpanType = any> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public attributes: AISpanTypeMap[TType];\n public parent?: AnyAISpan;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public isEvent: boolean;\n public aiTracing: MastraAITracing;\n public input?: any;\n public output?: any;\n public errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n public metadata?: Record<string, any>;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = 'no-op';\n this.name = options.name;\n this.type = options.type;\n this.attributes = options.attributes || ({} as AISpanTypeMap[TType]);\n this.metadata = options.metadata;\n this.parent = options.parent;\n this.traceId = 'no-op-trace';\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n this.input = options.input;\n this.output = options.isEvent ? options.output : undefined;\n this.isEvent = options.isEvent;\n }\n\n end(_options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void {}\n\n error(_options: {\n error: any;\n endSpan?: boolean;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {}\n\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return new NoOpAISpan<TChildType>({ ...options, parent: this, isEvent: false }, this.aiTracing);\n }\n\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return new NoOpAISpan<TChildType>({ ...options, parent: this, isEvent: true }, this.aiTracing);\n }\n\n update(_options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {}\n\n get isRootSpan(): boolean {\n return !this.parent;\n }\n}\n","/**\n * AI Tracing interfaces\n */\n\nimport type { MastraError } from '../error';\nimport type { RuntimeContext } from '../runtime-context';\nimport type { WorkflowRunStatus, WorkflowStepStatus } from '../workflows';\nimport type { MastraAITracing } from './base';\n\n// ============================================================================\n// Core AI-Specific Span Types\n// ============================================================================\n\n/**\n * AI-specific span types with their associated metadata\n */\nexport enum AISpanType {\n /** Agent run - root span for agent processes */\n AGENT_RUN = 'agent_run',\n /** Generic span for custom operations */\n GENERIC = 'generic',\n /** LLM generation with model calls, token usage, prompts, completions */\n LLM_GENERATION = 'llm_generation',\n /** Individual LLM streaming chunk/event */\n LLM_CHUNK = 'llm_chunk',\n /** MCP (Model Context Protocol) tool execution */\n MCP_TOOL_CALL = 'mcp_tool_call',\n /** Function/tool execution with inputs, outputs, errors */\n TOOL_CALL = 'tool_call',\n /** Workflow run - root span for workflow processes */\n WORKFLOW_RUN = 'workflow_run',\n /** Workflow step execution with step status, data flow */\n WORKFLOW_STEP = 'workflow_step',\n /** Workflow conditional execution with condition evaluation */\n WORKFLOW_CONDITIONAL = 'workflow_conditional',\n /** Individual condition evaluation within conditional */\n WORKFLOW_CONDITIONAL_EVAL = 'workflow_conditional_eval',\n /** Workflow parallel execution */\n WORKFLOW_PARALLEL = 'workflow_parallel',\n /** Workflow loop execution */\n WORKFLOW_LOOP = 'workflow_loop',\n /** Workflow sleep operation */\n WORKFLOW_SLEEP = 'workflow_sleep',\n /** Workflow wait for event operation */\n WORKFLOW_WAIT_EVENT = 'workflow_wait_event',\n}\n\n// ============================================================================\n// Type-Specific Attributes Interfaces\n// ============================================================================\n\n/**\n * Base attributes that all spans can have\n */\nexport interface AIBaseAttributes {}\n\n/**\n * Agent Run attributes\n */\nexport interface AgentRunAttributes extends AIBaseAttributes {\n /** Agent identifier */\n agentId: string;\n /** Agent Instructions **/\n instructions?: string;\n /** Agent Prompt **/\n prompt?: string;\n /** Available tools for this execution */\n availableTools?: string[];\n /** Maximum steps allowed */\n maxSteps?: number;\n}\n\n/**\n * LLM Generation attributes\n */\nexport interface LLMGenerationAttributes extends AIBaseAttributes {\n /** Model name (e.g., 'gpt-4', 'claude-3') */\n model?: string;\n /** Model provider (e.g., 'openai', 'anthropic') */\n provider?: string;\n /** Type of result/output this LLM call produced */\n resultType?: 'tool_selection' | 'response_generation' | 'reasoning' | 'planning';\n /** Token usage statistics */\n usage?: {\n promptTokens?: number;\n completionTokens?: number;\n totalTokens?: number;\n promptCacheHitTokens?: number;\n promptCacheMissTokens?: number;\n };\n /** Model parameters */\n parameters?: {\n temperature?: number;\n maxTokens?: number;\n topP?: number;\n frequencyPenalty?: number;\n presencePenalty?: number;\n stop?: string[];\n };\n /** Whether this was a streaming response */\n streaming?: boolean;\n /** Reason the generation finished */\n finishReason?: string;\n}\n\n/**\n * LLM Chunk attributes - for individual streaming chunks/events\n */\nexport interface LLMChunkAttributes extends AIBaseAttributes {\n /** Type of chunk (text-delta, reasoning-delta, tool-call, etc.) */\n chunkType?: string;\n /** Sequence number of this chunk in the stream */\n sequenceNumber?: number;\n}\n\n/**\n * Tool Call attributes\n */\nexport interface ToolCallAttributes extends AIBaseAttributes {\n toolId?: string;\n toolType?: string;\n toolDescription?: string;\n success?: boolean;\n}\n\n/**\n * MCP Tool Call attributes\n */\nexport interface MCPToolCallAttributes extends AIBaseAttributes {\n /** Id of the MCP tool/function */\n toolId: string;\n /** MCP server identifier */\n mcpServer: string;\n /** MCP server version */\n serverVersion?: string;\n /** Whether tool execution was successful */\n success?: boolean;\n}\n\n/**\n * Workflow Run attributes\n */\nexport interface WorkflowRunAttributes extends AIBaseAttributes {\n /** Workflow identifier */\n workflowId: string;\n /** Workflow status */\n status?: WorkflowRunStatus;\n}\n\n/**\n * Workflow Step attributes\n */\nexport interface WorkflowStepAttributes extends AIBaseAttributes {\n /** Step identifier */\n stepId: string;\n /** Step status */\n status?: WorkflowStepStatus;\n}\n\n/**\n * Workflow Conditional attributes\n */\nexport interface WorkflowConditionalAttributes extends AIBaseAttributes {\n /** Number of conditions evaluated */\n conditionCount: number;\n /** Which condition indexes evaluated to true */\n truthyIndexes?: number[];\n /** Which steps will be executed */\n selectedSteps?: string[];\n}\n\n/**\n * Workflow Conditional Evaluation attributes\n */\nexport interface WorkflowConditionalEvalAttributes extends AIBaseAttributes {\n /** Index of this condition in the conditional */\n conditionIndex: number;\n /** Result of condition evaluation */\n result?: boolean;\n}\n\n/**\n * Workflow Parallel attributes\n */\nexport interface WorkflowParallelAttributes extends AIBaseAttributes {\n /** Number of parallel branches */\n branchCount: number;\n /** Step IDs being executed in parallel */\n parallelSteps?: string[];\n}\n\n/**\n * Workflow Loop attributes\n */\nexport interface WorkflowLoopAttributes extends AIBaseAttributes {\n /** Type of loop (foreach, dowhile, dountil) */\n loopType?: 'foreach' | 'dowhile' | 'dountil';\n /** Current iteration number (for individual iterations) */\n iteration?: number;\n /** Total iterations (if known) */\n totalIterations?: number;\n /** Number of steps to run concurrently in foreach loop */\n concurrency?: number;\n}\n\n/**\n * Workflow Sleep attributes\n */\nexport interface WorkflowSleepAttributes extends AIBaseAttributes {\n /** Sleep duration in milliseconds */\n durationMs?: number;\n /** Sleep until date */\n untilDate?: Date;\n /** Sleep type */\n sleepType?: 'fixed' | 'dynamic';\n}\n\n/**\n * Workflow Wait Event attributes\n */\nexport interface WorkflowWaitEventAttributes extends AIBaseAttributes {\n /** Event name being waited for */\n eventName?: string;\n /** Timeout in milliseconds */\n timeoutMs?: number;\n /** Whether event was received or timed out */\n eventReceived?: boolean;\n /** Wait duration in milliseconds */\n waitDurationMs?: number;\n}\n\n/**\n * AI-specific span types mapped to their attributes\n */\nexport interface AISpanTypeMap {\n [AISpanType.AGENT_RUN]: AgentRunAttributes;\n [AISpanType.WORKFLOW_RUN]: WorkflowRunAttributes;\n [AISpanType.LLM_GENERATION]: LLMGenerationAttributes;\n [AISpanType.LLM_CHUNK]: LLMChunkAttributes;\n [AISpanType.TOOL_CALL]: ToolCallAttributes;\n [AISpanType.MCP_TOOL_CALL]: MCPToolCallAttributes;\n [AISpanType.WORKFLOW_STEP]: WorkflowStepAttributes;\n [AISpanType.WORKFLOW_CONDITIONAL]: WorkflowConditionalAttributes;\n [AISpanType.WORKFLOW_CONDITIONAL_EVAL]: WorkflowConditionalEvalAttributes;\n [AISpanType.WORKFLOW_PARALLEL]: WorkflowParallelAttributes;\n [AISpanType.WORKFLOW_LOOP]: WorkflowLoopAttributes;\n [AISpanType.WORKFLOW_SLEEP]: WorkflowSleepAttributes;\n [AISpanType.WORKFLOW_WAIT_EVENT]: WorkflowWaitEventAttributes;\n [AISpanType.GENERIC]: AIBaseAttributes;\n}\n\n/**\n * Union type for cases that need to handle any span type\n */\nexport type AnyAISpanAttributes = AISpanTypeMap[keyof AISpanTypeMap];\n\n// ============================================================================\n// Span Interfaces\n// ============================================================================\n\n/**\n * AI Span interface with type safety\n */\nexport interface AISpan<TType extends AISpanType> {\n /** Unique span identifier */\n id: string;\n /** Name of the span */\n name: string;\n /** Type of the span */\n type: TType;\n /** When span started */\n startTime: Date;\n /** When span ended */\n endTime?: Date;\n /** Is an event span? (event occurs at startTime, has no endTime) */\n isEvent: boolean;\n /** AI-specific attributes - strongly typed based on span type */\n attributes?: AISpanTypeMap[TType];\n /** Parent span reference (undefined for root spans) */\n parent?: AnyAISpan;\n /** OpenTelemetry-compatible trace ID (32 hex chars) - present on all spans */\n traceId: string;\n /** Pointer to the AITracing instance */\n aiTracing: MastraAITracing;\n\n /** Input passed at the start of the span */\n input?: any;\n /** Output generated at the end of the span */\n output?: any;\n\n /** Error information if span failed */\n errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n\n /** User-defined metadata */\n metadata?: Record<string, any>;\n\n // Methods for span lifecycle\n /** End the span */\n end(options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void;\n\n /** Record an error for the span, optionally end the span as well */\n error(options: {\n error: MastraError | Error;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n endSpan?: boolean;\n }): void;\n\n /** Update span attributes */\n update(options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void;\n\n /** Create child span - can be any span type independent of parent */\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType>;\n\n /** Create event span - can be any span type independent of parent \n Event spans have no input, and no endTime.\n */\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType>;\n\n /** Returns `TRUE` if the span is the root span of a trace */\n get isRootSpan(): boolean;\n}\n\n/**\n * Union type for cases that need to handle any span\n */\nexport type AnyAISpan = AISpan<keyof AISpanTypeMap>;\n\n/**\n * Options for span creation\n */\nexport interface AISpanOptions<TType extends AISpanType> {\n /** Span name */\n name: string;\n /** Span type */\n type: TType;\n /** Input data */\n input?: any;\n /** Output data (for event spans) */\n output?: any;\n /** Span attributes */\n attributes?: AISpanTypeMap[TType];\n /** Span metadata */\n metadata?: Record<string, any>;\n /** Parent span */\n parent?: AnyAISpan;\n /** Is an event span? */\n isEvent: boolean;\n}\n\n// ============================================================================\n// Configuration Types\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 * Context for TraceSampling\n */\nexport interface TraceContext {\n runtimeContext?: RuntimeContext;\n metadata?: Record<string, any>;\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: (traceContext: TraceContext) => boolean };\n\nexport type TracingStrategy = 'realtime' | 'batch-with-updates' | 'insert-only';\n\n/**\n * Configuration for a single AI tracing instance\n */\nexport interface AITracingInstanceConfig {\n /** Service name for tracing */\n serviceName: string;\n /** Instance name from the registry */\n instanceName: string;\n /** Sampling strategy - controls whether tracing is collected (defaults to ALWAYS) */\n sampling?: SamplingStrategy;\n /** Custom exporters */\n exporters?: AITracingExporter[];\n /** Custom processors */\n processors?: AISpanProcessor[];\n}\n\n/**\n * Complete AI Tracing configuration\n */\nexport interface AITracingConfig {\n /** Map of tracing instance names to their configurations or pre-instantiated instances */\n instances: Record<string, Omit<AITracingInstanceConfig, 'instanceName'> | MastraAITracing>;\n /** Optional selector function to choose which tracing instance to use */\n selector?: TracingSelector;\n}\n\n// ============================================================================\n// Exporter and Processor Interfaces\n// ============================================================================\n\n/**\n * AI Tracing event types\n */\nexport enum AITracingEventType {\n SPAN_STARTED = 'span_started',\n SPAN_UPDATED = 'span_updated',\n SPAN_ENDED = 'span_ended',\n}\n\n/**\n * Tracing events that can be exported\n */\nexport type AITracingEvent =\n | { type: AITracingEventType.SPAN_STARTED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_UPDATED; span: AnyAISpan }\n | { type: AITracingEventType.SPAN_ENDED; span: AnyAISpan };\n\n/**\n * Interface for tracing exporters\n */\nexport interface AITracingExporter {\n /** Exporter name */\n name: string;\n\n /** Initialize exporter (called after all dependencies are ready) */\n init?(): void;\n\n /** Export tracing events */\n exportEvent(event: AITracingEvent): Promise<void>;\n\n /** Shutdown exporter */\n shutdown(): Promise<void>;\n}\n\n/**\n * Interface for span processors\n */\nexport interface AISpanProcessor {\n /** Processor name */\n name: string;\n /** Process span before export */\n process(span: AnyAISpan): AnyAISpan | null;\n /** Shutdown processor */\n shutdown(): Promise<void>;\n}\n\n// ============================================================================\n// AI Tracing Selection Types\n// ============================================================================\n\n/**\n * Context provided to tracing selector functions\n */\nexport interface AITracingSelectorContext {\n /** Runtime context */\n runtimeContext?: RuntimeContext;\n}\n\n/**\n * Function to select which AI tracing instance to use for a given span\n * Returns the name of the tracing instance, or undefined to use default\n */\nexport type TracingSelector = (\n context: AITracingSelectorContext,\n availableTracers: ReadonlyMap<string, MastraAITracing>,\n) => string | undefined;\n\n/**\n * Context for AI tracing that flows through workflow and agent execution\n */\nexport interface TracingContext {\n /** Current AI span for creating child spans and adding metadata */\n currentSpan?: AnyAISpan;\n}\n","/**\n * MastraAITracing - Abstract base class for AI Tracing implementations\n */\n\nimport { MastraBase } from '../base';\nimport type { IMastraLogger } from '../logger';\nimport { RegisteredLogger } from '../logger/constants';\nimport type { RuntimeContext } from '../runtime-context';\nimport { NoOpAISpan } from './no-op';\nimport type {\n AITracingInstanceConfig,\n AISpan,\n AISpanOptions,\n AISpanType,\n AITracingExporter,\n AISpanProcessor,\n AITracingEvent,\n TraceContext,\n AISpanTypeMap,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType, AITracingEventType } from './types';\n\n// ============================================================================\n// Abstract Base Class\n// ============================================================================\n\n/**\n * Abstract base class for all AI Tracing implementations in Mastra.\n *\n */\nexport abstract class MastraAITracing extends MastraBase {\n protected config: Required<AITracingInstanceConfig>;\n\n constructor(config: AITracingInstanceConfig) {\n super({ component: RegisteredLogger.AI_TRACING, name: config.serviceName });\n\n // Apply defaults for optional fields\n this.config = {\n serviceName: config.serviceName,\n instanceName: config.instanceName,\n sampling: config.sampling ?? { type: SamplingStrategyType.ALWAYS },\n exporters: config.exporters ?? [],\n processors: config.processors ?? [],\n };\n }\n\n /**\n * Override setLogger to add AI tracing specific initialization log\n */\n __setLogger(logger: IMastraLogger) {\n super.__setLogger(logger);\n // Log AI tracing initialization details after logger is properly set\n this.logger.debug(\n `[AI Tracing] Initialized [service=${this.config.serviceName}] [instance=${this.config.instanceName}] [sampling=${this.config.sampling.type}]`,\n );\n }\n\n // ============================================================================\n // Protected getters for clean config access\n // ============================================================================\n\n protected get exporters(): AITracingExporter[] {\n return this.config.exporters || [];\n }\n\n protected get processors(): AISpanProcessor[] {\n return this.config.processors || [];\n }\n\n // ============================================================================\n // Public API - Single type-safe span creation method\n // ============================================================================\n\n /**\n * Start a new span of a specific AISpanType\n */\n startSpan<TType extends AISpanType>(options: {\n type: TType;\n name: string;\n input?: any;\n output?: any;\n attributes?: AISpanTypeMap[TType];\n metadata?: Record<string, any>;\n parent?: AnyAISpan;\n startOptions?: {\n runtimeContext?: RuntimeContext;\n };\n isEvent?: boolean;\n }): AISpan<TType> {\n const { type, name, input, output, attributes, metadata, parent, startOptions, isEvent } = options;\n const { runtimeContext } = startOptions || {};\n\n if (!this.shouldSample({ runtimeContext })) {\n return new NoOpAISpan<TType>(\n { type, name, input, output, attributes, metadata, parent, isEvent: isEvent === true },\n this,\n );\n }\n\n const spanOptions: AISpanOptions<TType> = {\n type,\n name,\n input,\n output,\n attributes,\n metadata,\n parent,\n isEvent: isEvent === true,\n };\n\n const span = this.createSpan(spanOptions);\n\n if (span.isEvent) {\n this.emitSpanEnded(span);\n } else {\n // Automatically wire up tracing lifecycle\n this.wireSpanLifecycle(span);\n\n // Emit span started event\n this.emitSpanStarted(span);\n }\n\n return span;\n }\n\n // ============================================================================\n // Abstract Methods - Must be implemented by concrete classes\n // ============================================================================\n\n /**\n * Create a new span (called after sampling)\n *\n * Implementations should:\n * 1. Create a plain span with the provided attributes\n * 2. Return the span - base class handles all tracing lifecycle automatically\n *\n * The base class will automatically:\n * - Set trace relationships\n * - Wire span lifecycle callbacks\n * - Emit span_started event\n */\n protected abstract createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType>;\n\n // ============================================================================\n // Configuration Management\n // ============================================================================\n\n /**\n * Get current configuration\n */\n getConfig(): Readonly<Required<AITracingInstanceConfig>> {\n return { ...this.config };\n }\n\n // ============================================================================\n // Plugin Access\n // ============================================================================\n\n /**\n * Get all exporters\n */\n getExporters(): readonly AITracingExporter[] {\n return [...this.exporters];\n }\n\n /**\n * Get all processors\n */\n getProcessors(): readonly AISpanProcessor[] {\n return [...this.processors];\n }\n\n /**\n * Get the logger instance (for exporters and other components)\n */\n getLogger() {\n return this.logger;\n }\n\n // ============================================================================\n // Span Lifecycle Management\n // ============================================================================\n\n /**\n * Automatically wires up AI tracing lifecycle events for any span\n * This ensures all spans emit events regardless of implementation\n */\n private wireSpanLifecycle<TType extends AISpanType>(span: AISpan<TType>): void {\n // Store original methods\n const originalEnd = span.end.bind(span);\n const originalUpdate = span.update.bind(span);\n\n // Wrap methods to automatically emit tracing events\n span.end = (options?: {\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }) => {\n originalEnd(options);\n this.emitSpanEnded(span);\n };\n\n span.update = (options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }) => {\n originalUpdate(options);\n this.emitSpanUpdated(span);\n };\n }\n\n // ============================================================================\n // Utility Methods\n // ============================================================================\n\n /**\n * Check if an AI trace should be sampled\n */\n protected shouldSample(traceContext: TraceContext): boolean {\n // Check built-in sampling strategy\n const { sampling } = this.config;\n\n switch (sampling.type) {\n case SamplingStrategyType.ALWAYS:\n return true;\n case SamplingStrategyType.NEVER:\n return false;\n case SamplingStrategyType.RATIO:\n if (sampling.probability === undefined || sampling.probability < 0 || sampling.probability > 1) {\n this.logger.warn(\n `Invalid sampling probability: ${sampling.probability}. Expected value between 0 and 1. Defaulting to no sampling.`,\n );\n return false;\n }\n return Math.random() < sampling.probability;\n case SamplingStrategyType.CUSTOM:\n return sampling.sampler(traceContext);\n default:\n throw new Error(`Sampling strategy type not implemented: ${(sampling as any).type}`);\n }\n }\n\n /**\n * Process a span through all processors\n */\n private processSpan(span: AnyAISpan): AnyAISpan | null {\n let processedSpan: AnyAISpan | null = span;\n\n for (const processor of this.processors) {\n if (!processedSpan) {\n break;\n }\n\n try {\n processedSpan = processor.process(processedSpan);\n } catch (error) {\n this.logger.error(`[AI Tracing] Processor error [name=${processor.name}]`, error);\n // Continue with other processors\n }\n }\n\n return processedSpan;\n }\n\n // ============================================================================\n // Event-driven Export Methods\n // ============================================================================\n\n /**\n * Emit a span started event\n */\n protected emitSpanStarted(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_STARTED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_started event', error);\n });\n }\n }\n\n /**\n * Emit a span ended event (called automatically when spans end)\n */\n protected emitSpanEnded(span: AnyAISpan): void {\n // Process the span through all processors\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_ENDED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_ended event', error);\n });\n }\n }\n\n /**\n * Emit a span updated event\n */\n protected emitSpanUpdated(span: AnyAISpan): void {\n // Process the span before emitting\n const processedSpan = this.processSpan(span);\n if (processedSpan) {\n this.exportEvent({ type: AITracingEventType.SPAN_UPDATED, span: processedSpan }).catch(error => {\n this.logger.error('[AI Tracing] Failed to export span_updated event', error);\n });\n }\n }\n\n /**\n * Export tracing event through all exporters (realtime mode)\n */\n protected async exportEvent(event: AITracingEvent): Promise<void> {\n const exportPromises = this.exporters.map(async exporter => {\n try {\n if (exporter.exportEvent) {\n await exporter.exportEvent(event);\n this.logger.debug(`[AI Tracing] Event exported [exporter=${exporter.name}] [type=${event.type}]`);\n }\n } catch (error) {\n this.logger.error(`[AI Tracing] Export error [exporter=${exporter.name}]`, error);\n // Don't rethrow - continue with other exporters\n }\n });\n\n await Promise.allSettled(exportPromises);\n }\n\n // ============================================================================\n // Lifecycle Management\n // ============================================================================\n\n /**\n * Initialize AI tracing (called by Mastra during component registration)\n */\n init(): void {\n this.logger.debug(`[AI Tracing] Initialization started [name=${this.name}]`);\n\n // Any initialization logic for the AI tracing system\n // This could include setting up queues, starting background processes, etc.\n\n this.logger.info(`[AI Tracing] Initialized successfully [name=${this.name}]`);\n }\n\n /**\n * Shutdown AI tracing and clean up resources\n */\n async shutdown(): Promise<void> {\n this.logger.debug(`[AI Tracing] Shutdown started [name=${this.name}]`);\n\n // Shutdown all components\n const shutdownPromises = [...this.exporters.map(e => e.shutdown()), ...this.processors.map(p => p.shutdown())];\n\n await Promise.allSettled(shutdownPromises);\n\n this.logger.info(`[AI Tracing] Shutdown completed [name=${this.name}]`);\n }\n}\n","import { ConsoleLogger, LogLevel } from '../../logger';\nimport type { IMastraLogger } from '../../logger';\nimport { AITracingEventType } from '../types';\nimport type { AITracingEvent, AITracingExporter } from '../types';\n\nexport class ConsoleExporter implements AITracingExporter {\n name = 'tracing-console-exporter';\n private logger: IMastraLogger;\n\n constructor(logger?: IMastraLogger) {\n if (logger) {\n this.logger = logger;\n } else {\n // Fallback: create a direct ConsoleLogger instance if none provided\n this.logger = new ConsoleLogger({ level: LogLevel.INFO });\n }\n }\n\n async exportEvent(event: AITracingEvent): Promise<void> {\n const span = event.span;\n\n // Helper to safely stringify attributes (filtering already done by processor)\n const formatAttributes = (attributes: any) => {\n try {\n return JSON.stringify(attributes, null, 2);\n } catch (error) {\n const errMsg = error instanceof Error ? error.message : 'Unknown formatting error';\n return `[Unable to serialize attributes: ${errMsg}]`;\n }\n };\n\n // Helper to format duration\n const formatDuration = (startTime: Date, endTime?: Date) => {\n if (!endTime) return 'N/A';\n const duration = endTime.getTime() - startTime.getTime();\n return `${duration}ms`;\n };\n\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n this.logger.info(`🚀 SPAN_STARTED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n this.logger.info(` Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_ENDED:\n const duration = formatDuration(span.startTime, span.endTime);\n this.logger.info(`✅ SPAN_ENDED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Duration: ${duration}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n if (span.output !== undefined) {\n this.logger.info(` Output: ${formatAttributes(span.output)}`);\n }\n if (span.errorInfo) {\n this.logger.info(` Error: ${formatAttributes(span.errorInfo)}`);\n }\n this.logger.info(` Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n case AITracingEventType.SPAN_UPDATED:\n this.logger.info(`📝 SPAN_UPDATED`);\n this.logger.info(` Type: ${span.type}`);\n this.logger.info(` Name: ${span.name}`);\n this.logger.info(` ID: ${span.id}`);\n this.logger.info(` Trace ID: ${span.traceId}`);\n if (span.input !== undefined) {\n this.logger.info(` Input: ${formatAttributes(span.input)}`);\n }\n if (span.output !== undefined) {\n this.logger.info(` Output: ${formatAttributes(span.output)}`);\n }\n if (span.errorInfo) {\n this.logger.info(` Error: ${formatAttributes(span.errorInfo)}`);\n }\n this.logger.info(` Updated Attributes: ${formatAttributes(span.attributes)}`);\n this.logger.info('─'.repeat(80));\n break;\n\n default:\n this.logger.warn(`Tracing event type not implemented: ${(event as any).type}`);\n }\n }\n\n async shutdown(): Promise<void> {\n this.logger.info('ConsoleExporter shutdown');\n }\n}\n","import { ConsoleLogger, LogLevel } from '../../logger';\nimport type { IMastraLogger } from '../../logger';\nimport type { Mastra } from '../../mastra';\nimport type { MastraStorage } from '../../storage/base';\nimport type { AISpanRecord } from '../../storage/types';\nimport { AITracingEventType } from '../types';\nimport type { AITracingEvent, AITracingExporter, AnyAISpan, TracingStrategy } from '../types';\n\ntype InternalAISpanRecord = Omit<AISpanRecord, 'spanId' | 'traceId' | 'createdAt' | 'updatedAt'>;\n\ninterface BatchingConfig {\n maxBatchSize?: number; // Default: 1000 spans\n maxBufferSize?: number; // Default: 10000 spans\n maxBatchWaitMs?: number; // Default: 5000ms\n maxRetries?: number; // Default: 4\n retryDelayMs?: number; // Default: 500ms (base delay for exponential backoff)\n\n // Strategy selection (optional)\n strategy?: TracingStrategy | 'auto';\n}\n\ninterface BatchBuffer {\n // For batch-with-updates strategy\n creates: AISpanRecord[];\n updates: UpdateRecord[];\n\n // For insert-only strategy\n insertOnly: AISpanRecord[];\n\n // Ordering enforcement (batch-with-updates only)\n seenSpans: Set<string>; // \"traceId:spanId\" combinations we've seen creates for\n spanSequences: Map<string, number>; // \"traceId:spanId\" -> next sequence number\n\n // Metrics\n outOfOrderCount: number;\n\n // Metadata\n firstEventTime?: Date;\n totalSize: number;\n}\n\ninterface UpdateRecord {\n traceId: string;\n spanId: string;\n updates: Partial<Omit<AISpanRecord, 'spanId' | 'traceId'>>;\n sequenceNumber: number; // For ordering updates to same span\n}\n\n/**\n * Resolves the final strategy based on user config and storage hints\n */\nfunction resolveStrategy(userConfig: BatchingConfig, storage: MastraStorage, logger: IMastraLogger): TracingStrategy {\n if (userConfig.strategy && userConfig.strategy !== 'auto') {\n const hints = storage.aiTracingStrategy;\n if (hints.supported.includes(userConfig.strategy)) {\n return userConfig.strategy;\n }\n // Log warning and fall through to auto-selection\n logger.warn('User-specified AI tracing strategy not supported by storage adapter, falling back to auto-selection', {\n userStrategy: userConfig.strategy,\n storageAdapter: storage.constructor.name,\n supportedStrategies: hints.supported,\n fallbackStrategy: hints.preferred,\n });\n }\n return storage.aiTracingStrategy.preferred;\n}\n\nexport class DefaultExporter implements AITracingExporter {\n name = 'tracing-default-exporter';\n private logger: IMastraLogger;\n private mastra: Mastra | null = null;\n private config: Required<BatchingConfig>;\n private resolvedStrategy: TracingStrategy;\n private buffer: BatchBuffer;\n private flushTimer: NodeJS.Timeout | null = null;\n\n constructor(config: BatchingConfig = {}, logger?: IMastraLogger) {\n if (logger) {\n this.logger = logger;\n } else {\n // Fallback: create a direct ConsoleLogger instance if none provided\n this.logger = new ConsoleLogger({ level: LogLevel.INFO });\n }\n\n // Set default configuration\n this.config = {\n maxBatchSize: config.maxBatchSize ?? 1000,\n maxBufferSize: config.maxBufferSize ?? 10000,\n maxBatchWaitMs: config.maxBatchWaitMs ?? 5000,\n maxRetries: config.maxRetries ?? 4,\n retryDelayMs: config.retryDelayMs ?? 500,\n strategy: config.strategy ?? 'auto',\n };\n\n // Initialize buffer\n this.buffer = {\n creates: [],\n updates: [],\n insertOnly: [],\n seenSpans: new Set(),\n spanSequences: new Map(),\n outOfOrderCount: 0,\n totalSize: 0,\n };\n\n // Resolve strategy - we'll do this lazily on first export since we need storage\n this.resolvedStrategy = 'batch-with-updates'; // temporary default\n }\n\n private strategyInitialized = false;\n\n /**\n * Register the Mastra instance (called after Mastra construction is complete)\n */\n __registerMastra(mastra: Mastra): void {\n this.mastra = mastra;\n }\n\n /**\n * Initialize the exporter (called after all dependencies are ready)\n */\n init(): void {\n if (!this.mastra) {\n throw new Error('DefaultExporter: init() called before __registerMastra()');\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n throw new Error('DefaultExporter: Storage not available during initialization');\n }\n\n this.initializeStrategy(storage);\n }\n\n /**\n * Initialize the resolved strategy once storage is available\n */\n private initializeStrategy(storage: MastraStorage): void {\n if (this.strategyInitialized) return;\n\n this.resolvedStrategy = resolveStrategy(this.config, storage, this.logger);\n this.strategyInitialized = true;\n\n this.logger.info('AI tracing exporter initialized', {\n strategy: this.resolvedStrategy,\n source: this.config.strategy !== 'auto' ? 'user' : 'auto',\n storageAdapter: storage.constructor.name,\n maxBatchSize: this.config.maxBatchSize,\n maxBatchWaitMs: this.config.maxBatchWaitMs,\n });\n }\n\n /**\n * Builds a unique span key for tracking\n */\n private buildSpanKey(traceId: string, spanId: string): string {\n return `${traceId}:${spanId}`;\n }\n\n /**\n * Gets the next sequence number for a span\n */\n private getNextSequence(spanKey: string): number {\n const current = this.buffer.spanSequences.get(spanKey) || 0;\n const next = current + 1;\n this.buffer.spanSequences.set(spanKey, next);\n return next;\n }\n\n /**\n * Handles out-of-order span updates by logging and skipping\n */\n private handleOutOfOrderUpdate(event: AITracingEvent): void {\n this.logger.warn('Out-of-order span update detected - skipping event', {\n spanId: event.span.id,\n traceId: event.span.traceId,\n eventType: event.type,\n });\n }\n\n /**\n * Adds an event to the appropriate buffer based on strategy\n */\n private addToBuffer(event: AITracingEvent): void {\n const spanKey = this.buildSpanKey(event.span.traceId, event.span.id);\n\n // Set first event time if buffer is empty\n if (this.buffer.totalSize === 0) {\n this.buffer.firstEventTime = new Date();\n }\n\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n const createRecord = {\n traceId: event.span.traceId,\n spanId: event.span.id,\n ...this.buildCreateRecord(event.span),\n createdAt: new Date(),\n updatedAt: null,\n };\n this.buffer.creates.push(createRecord);\n this.buffer.seenSpans.add(spanKey);\n }\n // insert-only ignores SPAN_STARTED\n break;\n\n case AITracingEventType.SPAN_UPDATED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n if (this.buffer.seenSpans.has(spanKey)) {\n // Normal case: create already in buffer\n this.buffer.updates.push({\n traceId: event.span.traceId,\n spanId: event.span.id,\n updates: {\n ...this.buildUpdateRecord(event.span),\n updatedAt: new Date(),\n },\n sequenceNumber: this.getNextSequence(spanKey),\n });\n } else {\n // Out-of-order case: log and skip\n this.handleOutOfOrderUpdate(event);\n this.buffer.outOfOrderCount++;\n }\n }\n // insert-only ignores SPAN_UPDATED\n break;\n\n case AITracingEventType.SPAN_ENDED:\n if (this.resolvedStrategy === 'batch-with-updates') {\n if (this.buffer.seenSpans.has(spanKey)) {\n // Normal case: create already in buffer\n this.buffer.updates.push({\n traceId: event.span.traceId,\n spanId: event.span.id,\n updates: {\n ...this.buildUpdateRecord(event.span),\n updatedAt: new Date(),\n },\n sequenceNumber: this.getNextSequence(spanKey),\n });\n } else if (event.span.isEvent) {\n // Event-type spans only emit SPAN_ENDED (no prior SPAN_STARTED)\n const createRecord = {\n traceId: event.span.traceId,\n spanId: event.span.id,\n ...this.buildCreateRecord(event.span),\n createdAt: new Date(),\n updatedAt: null,\n };\n this.buffer.creates.push(createRecord);\n this.buffer.seenSpans.add(spanKey);\n } else {\n // Out-of-order case: log and skip\n this.handleOutOfOrderUpdate(event);\n this.buffer.outOfOrderCount++;\n }\n } else if (this.resolvedStrategy === 'insert-only') {\n // Only process SPAN_ENDED for insert-only strategy\n const createRecord = {\n traceId: event.span.traceId,\n spanId: event.span.id,\n ...this.buildCreateRecord(event.span),\n createdAt: new Date(),\n updatedAt: null,\n };\n this.buffer.insertOnly.push(createRecord);\n }\n break;\n }\n\n // Update total size\n this.buffer.totalSize = this.buffer.creates.length + this.buffer.updates.length + this.buffer.insertOnly.length;\n }\n\n /**\n * Checks if buffer should be flushed based on size or time triggers\n */\n private shouldFlush(): boolean {\n // Emergency flush - buffer overflow\n if (this.buffer.totalSize >= this.config.maxBufferSize) {\n return true;\n }\n\n // Size-based flush\n if (this.buffer.totalSize >= this.config.maxBatchSize) {\n return true;\n }\n\n // Time-based flush\n if (this.buffer.firstEventTime && this.buffer.totalSize > 0) {\n const elapsed = Date.now() - this.buffer.firstEventTime.getTime();\n if (elapsed >= this.config.maxBatchWaitMs) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Resets the buffer after successful flush\n */\n private resetBuffer(): void {\n this.buffer.creates = [];\n this.buffer.updates = [];\n this.buffer.insertOnly = [];\n this.buffer.seenSpans.clear();\n this.buffer.spanSequences.clear();\n this.buffer.outOfOrderCount = 0;\n this.buffer.firstEventTime = undefined;\n this.buffer.totalSize = 0;\n }\n\n /**\n * Schedules a flush using setTimeout\n */\n private scheduleFlush(): void {\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n }\n this.flushTimer = setTimeout(() => {\n this.flush().catch(error => {\n this.logger.error('Scheduled flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n }, this.config.maxBatchWaitMs);\n }\n\n /**\n * Serializes span attributes to storage record format\n * Handles all AI span types and their specific attributes\n */\n private serializeAttributes(span: AnyAISpan): Record<string, any> | null {\n if (!span.attributes) {\n return null;\n }\n\n try {\n // Convert the typed attributes to a plain object\n // This handles nested objects, dates, and other complex types\n return JSON.parse(\n JSON.stringify(span.attributes, (_key, value) => {\n // Handle Date objects\n if (value instanceof Date) {\n return value.toISOString();\n }\n // Handle other objects that might not serialize properly\n if (typeof value === 'object' && value !== null) {\n // For arrays and plain objects, let JSON.stringify handle them\n return value;\n }\n // For primitives, return as-is\n return value;\n }),\n );\n } catch (error) {\n this.logger.warn('Failed to serialize span attributes, storing as null', {\n spanId: span.id,\n spanType: span.type,\n error: error instanceof Error ? error.message : String(error),\n });\n return null;\n }\n }\n\n private buildCreateRecord(span: AnyAISpan): InternalAISpanRecord {\n return {\n parentSpanId: span.parent?.id ?? null,\n name: span.name,\n scope: null,\n spanType: span.type,\n attributes: this.serializeAttributes(span),\n metadata: span.metadata ?? null,\n links: null,\n startedAt: span.startTime,\n endedAt: span.endTime ?? null,\n input: span.input,\n output: span.output,\n error: span.errorInfo,\n isEvent: span.isEvent,\n };\n }\n\n private buildUpdateRecord(span: AnyAISpan): Partial<InternalAISpanRecord> {\n return {\n name: span.name,\n scope: null,\n attributes: this.serializeAttributes(span),\n metadata: span.metadata ?? null,\n links: null,\n endedAt: span.endTime ?? null,\n input: span.input,\n output: span.output,\n error: span.errorInfo,\n };\n }\n\n /**\n * Handles realtime strategy - processes each event immediately\n */\n private async handleRealtimeEvent(event: AITracingEvent, storage: MastraStorage): Promise<void> {\n const span = event.span;\n\n // Event spans only have an end event\n if (span.isEvent) {\n if (event.type === AITracingEventType.SPAN_ENDED) {\n await storage.createAISpan({\n traceId: span.traceId,\n spanId: span.id,\n ...this.buildCreateRecord(span),\n createdAt: new Date(),\n updatedAt: null,\n });\n } else {\n this.logger.warn(`Tracing event type not implemented for event spans: ${event.type}`);\n }\n } else {\n switch (event.type) {\n case AITracingEventType.SPAN_STARTED:\n await storage.createAISpan({\n traceId: span.traceId,\n spanId: span.id,\n ...this.buildCreateRecord(span),\n createdAt: new Date(),\n updatedAt: null,\n });\n break;\n case AITracingEventType.SPAN_UPDATED:\n case AITracingEventType.SPAN_ENDED:\n await storage.updateAISpan({\n traceId: span.traceId,\n spanId: span.id,\n updates: {\n ...this.buildUpdateRecord(span),\n updatedAt: new Date(),\n },\n });\n break;\n default:\n this.logger.warn(`Tracing event type not implemented for span spans: ${(event as any).type}`);\n }\n }\n }\n\n /**\n * Handles batch-with-updates strategy - buffers events and processes in batches\n */\n private handleBatchWithUpdatesEvent(event: AITracingEvent): void {\n this.addToBuffer(event);\n\n if (this.shouldFlush()) {\n // Immediate flush for size/emergency triggers\n this.flush().catch(error => {\n this.logger.error('Batch flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n } else if (this.buffer.totalSize === 1) {\n // Schedule flush for the first event in buffer\n this.scheduleFlush();\n }\n }\n\n /**\n * Handles insert-only strategy - only processes SPAN_ENDED events in batches\n */\n private handleInsertOnlyEvent(event: AITracingEvent): void {\n // Only process SPAN_ENDED events for insert-only strategy\n if (event.type === AITracingEventType.SPAN_ENDED) {\n this.addToBuffer(event);\n\n if (this.shouldFlush()) {\n // Immediate flush for size/emergency triggers\n this.flush().catch(error => {\n this.logger.error('Batch flush failed', {\n error: error instanceof Error ? error.message : String(error),\n });\n });\n } else if (this.buffer.totalSize === 1) {\n // Schedule flush for the first event in buffer\n this.scheduleFlush();\n }\n }\n // Ignore SPAN_STARTED and SPAN_UPDATED events\n }\n\n /**\n * Calculates retry delay using exponential backoff\n */\n private calculateRetryDelay(attempt: number): number {\n return this.config.retryDelayMs * Math.pow(2, attempt);\n }\n\n /**\n * Flushes the current buffer to storage with retry logic\n */\n private async flush(): Promise<void> {\n if (!this.mastra) {\n this.logger.warn('Cannot flush traces. Mastra instance not registered yet.');\n return;\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n this.logger.warn('Cannot flush traces. Mastra storage is not initialized');\n return;\n }\n\n // Clear timer since we're flushing\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n\n if (this.buffer.totalSize === 0) {\n return; // Nothing to flush\n }\n\n const startTime = Date.now();\n const flushReason =\n this.buffer.totalSize >= this.config.maxBufferSize\n ? 'overflow'\n : this.buffer.totalSize >= this.config.maxBatchSize\n ? 'size'\n : 'time';\n\n // Create a copy of the buffer to work with\n const bufferCopy: BatchBuffer = {\n creates: [...this.buffer.creates],\n updates: [...this.buffer.updates],\n insertOnly: [...this.buffer.insertOnly],\n seenSpans: new Set(this.buffer.seenSpans),\n spanSequences: new Map(this.buffer.spanSequences),\n outOfOrderCount: this.buffer.outOfOrderCount,\n firstEventTime: this.buffer.firstEventTime,\n totalSize: this.buffer.totalSize,\n };\n\n // Reset buffer immediately to prevent blocking new events\n this.resetBuffer();\n\n // Attempt to flush with retry logic\n await this.flushWithRetries(storage, bufferCopy, 0);\n\n const elapsed = Date.now() - startTime;\n this.logger.debug('Batch flushed', {\n strategy: this.resolvedStrategy,\n batchSize: bufferCopy.totalSize,\n flushReason,\n durationMs: elapsed,\n outOfOrderCount: bufferCopy.outOfOrderCount > 0 ? bufferCopy.outOfOrderCount : undefined,\n });\n }\n\n /**\n * Attempts to flush with exponential backoff retry logic\n */\n private async flushWithRetries(storage: MastraStorage, buffer: BatchBuffer, attempt: number): Promise<void> {\n try {\n if (this.resolvedStrategy === 'batch-with-updates') {\n // Process creates first (always safe)\n if (buffer.creates.length > 0) {\n await storage.batchCreateAISpans({ records: buffer.creates });\n }\n\n // Sort updates by span, then by sequence number\n if (buffer.updates.length > 0) {\n const sortedUpdates = buffer.updates.sort((a, b) => {\n const spanCompare = this.buildSpanKey(a.traceId, a.spanId).localeCompare(\n this.buildSpanKey(b.traceId, b.spanId),\n );\n if (spanCompare !== 0) return spanCompare;\n return a.sequenceNumber - b.sequenceNumber;\n });\n\n await storage.batchUpdateAISpans({ records: sortedUpdates });\n }\n } else if (this.resolvedStrategy === 'insert-only') {\n // Simple batch insert for insert-only strategy\n if (buffer.insertOnly.length > 0) {\n await storage.batchCreateAISpans({ records: buffer.insertOnly });\n }\n }\n } catch (error) {\n if (attempt < this.config.maxRetries) {\n const retryDelay = this.calculateRetryDelay(attempt);\n this.logger.warn('Batch flush failed, retrying', {\n attempt: attempt + 1,\n maxRetries: this.config.maxRetries,\n nextRetryInMs: retryDelay,\n error: error instanceof Error ? error.message : String(error),\n });\n\n await new Promise(resolve => setTimeout(resolve, retryDelay));\n return this.flushWithRetries(storage, buffer, attempt + 1);\n } else {\n this.logger.error('Batch flush failed after all retries, dropping batch', {\n finalAttempt: attempt + 1,\n maxRetries: this.config.maxRetries,\n droppedBatchSize: buffer.totalSize,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n }\n\n async exportEvent(event: AITracingEvent): Promise<void> {\n if (!this.mastra) {\n this.logger.warn('Cannot export AI tracing event. Mastra instance not registered yet.');\n return;\n }\n\n const storage = this.mastra.getStorage();\n if (!storage) {\n this.logger.warn('Cannot store traces. Mastra storage is not initialized');\n return;\n }\n\n // Initialize strategy if not already done (fallback for edge cases)\n if (!this.strategyInitialized) {\n this.initializeStrategy(storage);\n }\n\n // Clear strategy routing - explicit and readable\n switch (this.resolvedStrategy) {\n case 'realtime':\n await this.handleRealtimeEvent(event, storage);\n break;\n case 'batch-with-updates':\n this.handleBatchWithUpdatesEvent(event);\n break;\n case 'insert-only':\n this.handleInsertOnlyEvent(event);\n break;\n }\n }\n\n async shutdown(): Promise<void> {\n // Clear any pending timer\n if (this.flushTimer) {\n clearTimeout(this.flushTimer);\n this.flushTimer = null;\n }\n\n // Flush any remaining events\n if (this.buffer.totalSize > 0) {\n this.logger.info('Flushing remaining events on shutdown', {\n remainingEvents: this.buffer.totalSize,\n });\n try {\n await this.flush();\n } catch (error) {\n this.logger.error('Failed to flush remaining events during shutdown', {\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n this.logger.info('DefaultExporter shutdown complete');\n }\n}\n","/**\n * AI Tracing Registry for Mastra\n *\n * Provides a global registry for AI tracing instances.\n */\n\nimport { MastraAITracing } from './base';\nimport { DefaultAITracing } from './default';\nimport { SamplingStrategyType } from './types';\nimport type { TracingSelector, AITracingSelectorContext, AITracingConfig, AITracingInstanceConfig } from './types';\n\n// ============================================================================\n// Global AI Tracing Registry\n// ============================================================================\n\n/**\n * Global registry for AI Tracing instances.\n */\nclass AITracingRegistry {\n private instances = new Map<string, MastraAITracing>();\n private defaultInstance?: MastraAITracing;\n private selector?: TracingSelector;\n\n /**\n * Register a tracing instance\n */\n register(name: string, instance: MastraAITracing, isDefault = false): void {\n if (this.instances.has(name)) {\n throw new Error(`AI Tracing instance '${name}' already registered`);\n }\n\n this.instances.set(name, instance);\n\n // Set as default if explicitly marked or if it's the first instance\n if (isDefault || !this.defaultInstance) {\n this.defaultInstance = instance;\n }\n }\n\n /**\n * Get a tracing instance by name\n */\n get(name: string): MastraAITracing | undefined {\n return this.instances.get(name);\n }\n\n /**\n * Get the default tracing instance\n */\n getDefault(): MastraAITracing | undefined {\n return this.defaultInstance;\n }\n\n /**\n * Set the tracing selector function\n */\n setSelector(selector: TracingSelector): void {\n this.selector = selector;\n }\n\n /**\n * Get the selected tracing instance based on context\n */\n getSelected(context: AITracingSelectorContext): MastraAITracing | undefined {\n // 1. Try selector function if provided\n if (this.selector) {\n const selected = this.selector(context, this.instances);\n if (selected && this.instances.has(selected)) {\n return this.instances.get(selected);\n }\n }\n\n // 2. Fall back to default\n return this.defaultInstance;\n }\n\n /**\n * Unregister a tracing instance\n */\n unregister(name: string): boolean {\n return this.instances.delete(name);\n }\n\n /**\n * Shutdown all instances and clear the registry\n */\n async shutdown(): Promise<void> {\n const shutdownPromises = Array.from(this.instances.values()).map(instance => instance.shutdown());\n\n await Promise.allSettled(shutdownPromises);\n this.instances.clear();\n }\n\n /**\n * Clear all instances without shutdown\n */\n clear(): void {\n this.instances.clear();\n this.defaultInstance = undefined;\n this.selector = undefined;\n }\n\n /**\n * Get all registered instances\n */\n getAll(): ReadonlyMap<string, MastraAITracing> {\n return new Map(this.instances);\n }\n}\n\nconst aiTracingRegistry = new AITracingRegistry();\n\n// ============================================================================\n// Registry Management Functions\n// ============================================================================\n\n/**\n * Register an AI tracing instance globally\n */\nexport function registerAITracing(name: string, instance: MastraAITracing, isDefault = false): void {\n aiTracingRegistry.register(name, instance, isDefault);\n}\n\n/**\n * Get an AI tracing instance from the registry\n */\nexport function getAITracing(name: string): MastraAITracing | undefined {\n return aiTracingRegistry.get(name);\n}\n\n/**\n * Get the default AI tracing instance\n */\nexport function getDefaultAITracing(): MastraAITracing | undefined {\n return aiTracingRegistry.getDefault();\n}\n\n/**\n * Set the AI tracing selector function\n */\nexport function setAITracingSelector(selector: TracingSelector): void {\n aiTracingRegistry.setSelector(selector);\n}\n\n/**\n * Get the selected AI tracing instance based on context\n */\nexport function getSelectedAITracing(context: AITracingSelectorContext): MastraAITracing | undefined {\n return aiTracingRegistry.getSelected(context);\n}\n\n/**\n * Unregister an AI tracing instance\n */\nexport function unregisterAITracing(name: string): boolean {\n return aiTracingRegistry.unregister(name);\n}\n\n/**\n * Shutdown all AI tracing instances and clear the registry\n */\nexport async function shutdownAITracingRegistry(): Promise<void> {\n await aiTracingRegistry.shutdown();\n}\n\n/**\n * Clear all AI tracing instances without shutdown\n */\nexport function clearAITracingRegistry(): void {\n aiTracingRegistry.clear();\n}\n\n/**\n * Get all registered AI tracing instances\n */\nexport function getAllAITracing(): ReadonlyMap<string, MastraAITracing> {\n return aiTracingRegistry.getAll();\n}\n\n/**\n * Check if AI tracing is available and enabled\n */\nexport function hasAITracing(name: string): boolean {\n const tracing = getAITracing(name);\n if (!tracing) return false;\n\n const config = tracing.getConfig();\n const sampling = config.sampling;\n\n // Check if sampling allows tracing\n return sampling.type !== SamplingStrategyType.NEVER;\n}\n\n/**\n * Type guard to check if an object is a MastraAITracing instance\n */\nfunction isAITracingInstance(\n obj: Omit<AITracingInstanceConfig, 'instanceName'> | MastraAITracing,\n): obj is MastraAITracing {\n return obj instanceof MastraAITracing;\n}\n\n/**\n * Setup AI tracing from the AITracingConfig\n */\nexport function setupAITracing(config: AITracingConfig): void {\n const entries = Object.entries(config.instances);\n\n entries.forEach(([name, tracingDef], index) => {\n const instance = isAITracingInstance(tracingDef)\n ? tracingDef // Pre-instantiated custom implementation\n : new DefaultAITracing({ ...tracingDef, instanceName: name }); // Config -> DefaultAITracing with instance name\n\n // First registered instance becomes default\n const isDefault = index === 0;\n registerAITracing(name, instance, isDefault);\n });\n\n // Set selector function if provided\n if (config.selector) {\n setAITracingSelector(config.selector);\n }\n}\n","/**\n * Utility functions for cleaning and manipulating metadata objects\n * used in AI tracing and observability.\n */\n\nimport type { RuntimeContext } from '../di';\nimport { getSelectedAITracing } from './registry';\nimport type { AISpan, AISpanType, AISpanTypeMap, TracingContext } from './types';\n\n/**\n * Cleans an object by testing each key-value pair for circular references.\n * Problematic values are replaced with error messages for debugging.\n * @param obj - Object to clean\n * @returns Cleaned object with circular references marked\n */\nexport function shallowCleanObject(obj: Record<string, any>): Record<string, any> {\n const cleaned: Record<string, any> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n try {\n JSON.stringify(value);\n cleaned[key] = value;\n } catch (error) {\n // Use the actual error message for debugging\n cleaned[key] = `[${error instanceof Error ? error.message : String(error)}]`;\n }\n }\n\n return cleaned;\n}\n\n/**\n * Cleans an array by applying object cleaning to each item.\n * @param arr - Array to clean\n * @returns Cleaned array with problematic items marked\n */\nexport function shallowCleanArray(arr: any[]): any[] {\n return arr.map(item => {\n if (item && typeof item === 'object' && !Array.isArray(item)) {\n // Apply object cleaning to each array item\n return shallowCleanObject(item);\n }\n\n // For primitives, nested arrays, etc. - test directly\n try {\n JSON.stringify(item);\n return item;\n } catch (error) {\n return `[${error instanceof Error ? error.message : String(error)}]`;\n }\n });\n}\n\n/**\n * Safely cleans any value by removing circular references and marking problematic data.\n * Provides detailed error information to help identify issues in source code.\n * @param value - Value to clean (object, array, primitive, etc.)\n * @returns Cleaned value with circular references marked\n */\nexport function shallowClean(value: any): any {\n if (value === null || value === undefined) {\n return value;\n }\n\n if (Array.isArray(value)) {\n return shallowCleanArray(value);\n }\n\n if (typeof value === 'object') {\n return shallowCleanObject(value);\n }\n\n // Primitives, functions, etc. - test directly\n try {\n JSON.stringify(value);\n return value;\n } catch (error) {\n return `[${error instanceof Error ? error.message : String(error)}]`;\n }\n}\n\n/**\n * Removes specific keys from an object.\n * @param obj - The original object\n * @param keysToOmit - Keys to exclude from the returned object\n * @returns A new object with the specified keys removed\n */\nexport function omitKeys<T extends Record<string, any>>(obj: T, keysToOmit: string[]): Partial<T> {\n return Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToOmit.includes(key))) as Partial<T>;\n}\n\n/**\n * Selectively extracts specific fields from an object using dot notation.\n * Does not error if fields don't exist - simply omits them from the result.\n * @param obj - The source object to extract fields from\n * @param fields - Array of field paths (supports dot notation like 'output.text')\n * @returns New object containing only the specified fields\n */\nexport function selectFields(obj: any, fields: string[]): any {\n if (!obj || typeof obj !== 'object') {\n return obj;\n }\n\n const result: any = {};\n\n for (const field of fields) {\n const value = getNestedValue(obj, field);\n if (value !== undefined) {\n setNestedValue(result, field, value);\n }\n }\n\n return result;\n}\n\n/**\n * Gets a nested value from an object using dot notation\n * @param obj - Source object\n * @param path - Dot notation path (e.g., 'output.text')\n * @returns The value at the path, or undefined if not found\n */\nfunction getNestedValue(obj: any, path: string): any {\n return path.split('.').reduce((current, key) => {\n return current && typeof current === 'object' ? current[key] : undefined;\n }, obj);\n}\n\n/**\n * Sets a nested value in an object using dot notation\n * @param obj - Target object\n * @param path - Dot notation path (e.g., 'output.text')\n * @param value - Value to set\n */\nfunction setNestedValue(obj: any, path: string, value: any): void {\n const keys = path.split('.');\n const lastKey = keys.pop();\n if (!lastKey) {\n return;\n }\n\n const target = keys.reduce((current, key) => {\n if (!current[key] || typeof current[key] !== 'object') {\n current[key] = {};\n }\n return current[key];\n }, obj);\n\n target[lastKey] = value;\n}\n\n/**\n * Creates or gets a child span from existing tracing context or starts a new trace.\n * This helper consolidates the common pattern of creating spans that can either be:\n * 1. Children of an existing span (when tracingContext.currentSpan exists)\n * 2. New root spans (when no current span exists)\n *\n * @param options - Configuration object for span creation\n * @returns The created AI span or undefined if tracing is disabled\n */\nexport function getOrCreateSpan<T extends AISpanType>(options: {\n type: T;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[T];\n metadata?: Record<string, any>;\n tracingContext?: TracingContext;\n runtimeContext?: RuntimeContext;\n}): AISpan<T> | undefined {\n const { type, attributes, tracingContext, runtimeContext, ...rest } = options;\n\n // If we have a current span, create a child span\n if (tracingContext?.currentSpan) {\n return tracingContext.currentSpan.createChildSpan({\n type,\n attributes,\n ...rest,\n });\n }\n\n // Otherwise, try to create a new root span\n const aiTracing = getSelectedAITracing({\n runtimeContext: runtimeContext,\n });\n\n return aiTracing?.startSpan({\n type,\n attributes,\n startOptions: {\n runtimeContext,\n },\n ...rest,\n });\n}\n","/**\n * Default Implementation for MastraAITracing\n */\n\nimport { MastraError } from '../error';\nimport type { IMastraLogger } from '../logger';\nimport { ConsoleLogger, LogLevel } from '../logger';\nimport { MastraAITracing } from './base';\nimport { ConsoleExporter } from './exporters';\nimport type {\n AISpanType,\n AISpan,\n AISpanOptions,\n AITracingInstanceConfig,\n AISpanTypeMap,\n AISpanProcessor,\n AnyAISpan,\n} from './types';\nimport { SamplingStrategyType } from './types';\nimport { shallowClean } from './utils';\n\n// ============================================================================\n// Default AISpan Implementation\n// ============================================================================\n\n/**\n * Generate OpenTelemetry-compatible span ID (64-bit, 16 hex chars)\n */\nfunction generateSpanId(): string {\n // Generate 8 random bytes (64 bits) in hex format\n const bytes = new Uint8Array(8);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 8; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\n/**\n * Generate OpenTelemetry-compatible trace ID (128-bit, 32 hex chars)\n */\nfunction generateTraceId(): string {\n // Generate 16 random bytes (128 bits) in hex format\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Fallback for environments without crypto.getRandomValues\n for (let i = 0; i < 16; i++) {\n bytes[i] = Math.floor(Math.random() * 256);\n }\n }\n return Array.from(bytes, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nclass DefaultAISpan<TType extends AISpanType> implements AISpan<TType> {\n public id: string;\n public name: string;\n public type: TType;\n public attributes: AISpanTypeMap[TType];\n public parent?: AnyAISpan;\n public traceId: string;\n public startTime: Date;\n public endTime?: Date;\n public isEvent: boolean;\n public aiTracing: MastraAITracing;\n public input?: any;\n public output?: any;\n public errorInfo?: {\n message: string;\n id?: string;\n domain?: string;\n category?: string;\n details?: Record<string, any>;\n };\n public metadata?: Record<string, any>;\n private logger: IMastraLogger;\n\n constructor(options: AISpanOptions<TType>, aiTracing: MastraAITracing) {\n this.id = generateSpanId();\n this.name = options.name;\n this.type = options.type;\n this.attributes = shallowClean(options.attributes) || ({} as AISpanTypeMap[TType]);\n this.metadata = shallowClean(options.metadata);\n this.parent = options.parent;\n this.startTime = new Date();\n this.aiTracing = aiTracing;\n this.input = shallowClean(options.input);\n this.isEvent = options.isEvent;\n this.logger = new ConsoleLogger({\n name: 'default-ai-span',\n level: LogLevel.INFO, // Set to INFO so that info() calls actually log\n });\n\n // Set trace ID: generate new for root spans, inherit for child spans\n if (!options.parent) {\n // This is a root span, so it becomes its own trace with a new trace ID\n this.traceId = generateTraceId();\n } else {\n // Child span inherits trace ID from root span\n this.traceId = options.parent.traceId;\n }\n\n if (this.isEvent) {\n // Event spans don't have endTime or input.\n // Event spans are immediately emitted by the base class via the end() event.\n this.output = shallowClean(options.output);\n }\n }\n\n end(options?: { output?: any; attributes?: Partial<AISpanTypeMap[TType]>; metadata?: Record<string, any> }): void {\n if (this.isEvent) {\n this.logger.warn(`End event is not available on event spans`);\n return;\n }\n this.endTime = new Date();\n if (options?.output !== undefined) {\n this.output = shallowClean(options.output);\n }\n if (options?.attributes) {\n this.attributes = { ...this.attributes, ...shallowClean(options.attributes) };\n }\n if (options?.metadata) {\n this.metadata = { ...this.metadata, ...shallowClean(options.metadata) };\n }\n // Tracing events automatically handled by base class\n }\n\n error(options: {\n error: MastraError | Error;\n endSpan?: boolean;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {\n if (this.isEvent) {\n this.logger.warn(`Error event is not available on event spans`);\n return;\n }\n\n const { error, endSpan = true, attributes, metadata } = options;\n\n this.errorInfo =\n error instanceof MastraError\n ? {\n id: error.id,\n details: error.details,\n category: error.category,\n domain: error.domain,\n message: error.message,\n }\n : {\n message: error.message,\n };\n\n // Update attributes if provided\n if (attributes) {\n this.attributes = { ...this.attributes, ...shallowClean(attributes) };\n }\n if (metadata) {\n this.metadata = { ...this.metadata, ...shallowClean(metadata) };\n }\n\n if (endSpan) {\n this.end();\n } else {\n // Trigger span update event when not ending the span\n this.update({});\n }\n // Note: errorInfo is now a span property, attributes handled above\n }\n\n createChildSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n input?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return this.aiTracing.startSpan({\n ...options,\n parent: this,\n isEvent: false,\n });\n }\n\n createEventSpan<TChildType extends AISpanType>(options: {\n type: TChildType;\n name: string;\n output?: any;\n attributes?: AISpanTypeMap[TChildType];\n metadata?: Record<string, any>;\n }): AISpan<TChildType> {\n return this.aiTracing.startSpan({\n ...options,\n parent: this,\n isEvent: true,\n });\n }\n\n update(options?: {\n input?: any;\n output?: any;\n attributes?: Partial<AISpanTypeMap[TType]>;\n metadata?: Record<string, any>;\n }): void {\n if (this.isEvent) {\n this.logger.warn(`Update() is not available on event spans`);\n return;\n }\n\n if (options?.input !== undefined) {\n this.input = shallowClean(options.input);\n }\n if (options?.output !== undefined) {\n this.output = shallowClean(options.output);\n }\n if (options?.attributes) {\n this.attributes = { ...this.attributes, ...shallowClean(options.attributes) };\n }\n if (options?.metadata) {\n this.metadata = { ...this.metadata, ...shallowClean(options.metadata) };\n }\n // Tracing events automatically handled by base class\n }\n\n get isRootSpan(): boolean {\n return !this.parent;\n }\n\n async export(): Promise<string> {\n return JSON.stringify({\n id: this.id,\n attributes: this.attributes,\n metadata: this.metadata,\n startTime: this.startTime,\n endTime: this.endTime,\n traceId: this.traceId, // OpenTelemetry trace ID\n });\n }\n}\n\n// ============================================================================\n// Sensitive Data Filter Processor\n// ============================================================================\n\nexport class SensitiveDataFilter implements AISpanProcessor {\n name = 'sensitive-data-filter';\n private sensitiveFields: string[];\n\n constructor(sensitiveFields?: string[]) {\n // Default sensitive fields with case-insensitive matching\n this.sensitiveFields = (\n sensitiveFields || [\n 'password',\n 'token',\n 'secret',\n 'key',\n 'apiKey',\n 'auth',\n 'authorization',\n 'bearer',\n 'jwt',\n 'credential',\n 'sessionId',\n ]\n ).map(field => field.toLowerCase());\n }\n\n process(span: AnyAISpan): AnyAISpan | null {\n // Deep filter function to recursively handle nested objects\n const deepFilter = (obj: any, seen = new WeakSet()): any => {\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (seen.has(obj)) {\n return '[Circular Reference]';\n }\n seen.add(obj);\n\n if (Array.isArray(obj)) {\n return obj.map(item => deepFilter(item, seen));\n }\n\n const filtered: any = {};\n Object.keys(obj).forEach(key => {\n if (this.sensitiveFields.includes(key.toLowerCase())) {\n // Only redact primitive values, recurse into objects/arrays\n if (obj[key] && typeof obj[key] === 'object') {\n filtered[key] = deepFilter(obj[key], seen);\n } else {\n filtered[key] = '[REDACTED]';\n }\n } else {\n filtered[key] = deepFilter(obj[key], seen);\n }\n });\n\n return filtered;\n };\n\n try {\n // Create a copy of the span with filtered attributes\n const filteredSpan = { ...span };\n filteredSpan.attributes = deepFilter(span.attributes);\n filteredSpan.metadata = deepFilter(span.metadata);\n filteredSpan.input = deepFilter(span.input);\n filteredSpan.output = deepFilter(span.output);\n filteredSpan.errorInfo = deepFilter(span.errorInfo);\n return filteredSpan;\n } catch (error) {\n // If filtering fails, return heavily redacted span for security\n const safeSpan = { ...span };\n safeSpan.attributes = {\n '[FILTERING_ERROR]': 'Attributes were completely redacted due to filtering error',\n '[ERROR_MESSAGE]': error instanceof Error ? error.message : 'Unknown filtering error',\n } as any;\n return safeSpan;\n }\n }\n\n async shutdown(): Promise<void> {\n // No cleanup needed\n }\n}\n\n// ============================================================================\n// Default Configuration (defined after classes to avoid circular dependencies)\n// ============================================================================\n\nexport const aiTracingDefaultConfig: AITracingInstanceConfig = {\n serviceName: 'mastra-ai-service',\n instanceName: 'default',\n sampling: { type: SamplingStrategyType.ALWAYS },\n exporters: [new ConsoleExporter()],\n processors: [new SensitiveDataFilter()],\n};\n\n// ============================================================================\n// Default AI Tracing Implementation\n// ============================================================================\n\nexport class DefaultAITracing extends MastraAITracing {\n constructor(config: AITracingInstanceConfig = aiTracingDefaultConfig) {\n super(config);\n }\n\n // ============================================================================\n // Abstract Method Implementations\n // ============================================================================\n\n protected createSpan<TType extends AISpanType>(options: AISpanOptions<TType>): AISpan<TType> {\n // Simple span creation - base class handles all tracing lifecycle automatically\n return new DefaultAISpan<TType>(options, this);\n }\n}\n","/**\n * AI Tracing Context Integration\n *\n * This module provides automatic AI 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 type { TracingContext, AnyAISpan } from './types';\n\nconst AGENT_GETTERS = ['getAgent', 'getAgentById'];\nconst AGENT_METHODS_TO_WRAP = ['generate', 'stream', 'generateVNext', 'streamVNext', 'generateLegacy', 'streamLegacy'];\n\nconst WORKFLOW_GETTERS = ['getWorkflow', 'getWorkflowById'];\nconst WORKFLOW_METHODS_TO_WRAP = ['execute', 'createRun', 'createRunAsync'];\n\n/**\n * Helper function to detect NoOp spans to avoid unnecessary wrapping\n */\nfunction isNoOpSpan(span: AnyAISpan): boolean {\n // Check if this is a NoOp span implementation\n return (\n span.constructor.name === 'NoOpAISpan' || (span as any).__isNoOp === true || !span.aiTracing // NoOp spans might not have aiTracing reference\n );\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 AI 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 * AI 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('AI 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('AI 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 * AI 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 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('AI 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('AI 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 * AI 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 createRunAsync methods differently\n if (prop === 'createRun' || prop === 'createRunAsync') {\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 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('AI 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('AI 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 * AI 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 tracingContext: 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('AI 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('AI Tracing: Failed to create run proxy, using original instance', error);\n return run;\n }\n}\n"]}