@mastra/core 0.15.3-alpha.3 → 0.15.3-alpha.5

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 (173) hide show
  1. package/CHANGELOG.md +3188 -0
  2. package/dist/agent/agent.types.d.ts +9 -4
  3. package/dist/agent/agent.types.d.ts.map +1 -1
  4. package/dist/agent/index.cjs +11 -11
  5. package/dist/agent/index.d.ts +33 -5
  6. package/dist/agent/index.d.ts.map +1 -1
  7. package/dist/agent/index.js +2 -2
  8. package/dist/agent/input-processor/index.cjs +6 -6
  9. package/dist/agent/input-processor/index.js +1 -1
  10. package/dist/agent/types.d.ts +11 -6
  11. package/dist/agent/types.d.ts.map +1 -1
  12. package/dist/ai-tracing/context.d.ts.map +1 -1
  13. package/dist/ai-tracing/default.d.ts.map +1 -1
  14. package/dist/ai-tracing/index.cjs +43 -31
  15. package/dist/ai-tracing/index.js +1 -1
  16. package/dist/ai-tracing/no-op.d.ts +0 -1
  17. package/dist/ai-tracing/no-op.d.ts.map +1 -1
  18. package/dist/ai-tracing/types.d.ts +0 -2
  19. package/dist/ai-tracing/types.d.ts.map +1 -1
  20. package/dist/ai-tracing/utils.d.ts +44 -8
  21. package/dist/ai-tracing/utils.d.ts.map +1 -1
  22. package/dist/{chunk-BGOXFBFK.js → chunk-23NO6AMW.js} +458 -223
  23. package/dist/chunk-23NO6AMW.js.map +1 -0
  24. package/dist/{chunk-MEROMP3Z.js → chunk-2L6PFHHU.js} +3 -3
  25. package/dist/{chunk-MEROMP3Z.js.map → chunk-2L6PFHHU.js.map} +1 -1
  26. package/dist/{chunk-TWNFR6MQ.cjs → chunk-5CJDO3UO.cjs} +8 -8
  27. package/dist/{chunk-TWNFR6MQ.cjs.map → chunk-5CJDO3UO.cjs.map} +1 -1
  28. package/dist/{chunk-APVV75XG.js → chunk-A5NC3XK2.js} +62 -16
  29. package/dist/chunk-A5NC3XK2.js.map +1 -0
  30. package/dist/{chunk-ZAJTIZZF.cjs → chunk-ABRPHTOG.cjs} +2 -2
  31. package/dist/{chunk-ZAJTIZZF.cjs.map → chunk-ABRPHTOG.cjs.map} +1 -1
  32. package/dist/{chunk-GOG77M6R.js → chunk-BJGHUKKM.js} +2 -2
  33. package/dist/{chunk-GOG77M6R.js.map → chunk-BJGHUKKM.js.map} +1 -1
  34. package/dist/{chunk-5TFCIXWE.js → chunk-CKM2ESZF.js} +44 -21
  35. package/dist/chunk-CKM2ESZF.js.map +1 -0
  36. package/dist/{chunk-AYFN43FB.cjs → chunk-E264YNL3.cjs} +68 -22
  37. package/dist/chunk-E264YNL3.cjs.map +1 -0
  38. package/dist/{chunk-QHEB6ZLO.cjs → chunk-F2CAC2R2.cjs} +47 -24
  39. package/dist/chunk-F2CAC2R2.cjs.map +1 -0
  40. package/dist/{chunk-O7IQL4DX.js → chunk-F4SQXAXR.js} +7 -7
  41. package/dist/{chunk-O7IQL4DX.js.map → chunk-F4SQXAXR.js.map} +1 -1
  42. package/dist/{chunk-HXEHQLBD.cjs → chunk-F6XWBVVG.cjs} +4 -4
  43. package/dist/{chunk-HXEHQLBD.cjs.map → chunk-F6XWBVVG.cjs.map} +1 -1
  44. package/dist/{chunk-4DKPMUAC.cjs → chunk-I7OAONIW.cjs} +259 -177
  45. package/dist/chunk-I7OAONIW.cjs.map +1 -0
  46. package/dist/{chunk-EMAAAVRA.js → chunk-IODUKRQP.js} +3 -3
  47. package/dist/{chunk-EMAAAVRA.js.map → chunk-IODUKRQP.js.map} +1 -1
  48. package/dist/{chunk-DJKIK6ZB.cjs → chunk-JQKPRJCJ.cjs} +489 -254
  49. package/dist/chunk-JQKPRJCJ.cjs.map +1 -0
  50. package/dist/{chunk-WOTBMZCN.js → chunk-LOYT3WUA.js} +255 -176
  51. package/dist/chunk-LOYT3WUA.js.map +1 -0
  52. package/dist/{chunk-24TFSB6Z.cjs → chunk-LVGGMWSE.cjs} +8 -8
  53. package/dist/chunk-LVGGMWSE.cjs.map +1 -0
  54. package/dist/{chunk-D2GH2HAK.cjs → chunk-MVEPSGWQ.cjs} +10 -10
  55. package/dist/chunk-MVEPSGWQ.cjs.map +1 -0
  56. package/dist/{chunk-UGN2UU3K.cjs → chunk-OBKBA6CO.cjs} +4 -4
  57. package/dist/{chunk-UGN2UU3K.cjs.map → chunk-OBKBA6CO.cjs.map} +1 -1
  58. package/dist/{chunk-TQRLZH64.js → chunk-PQ3VP6NG.js} +5 -5
  59. package/dist/chunk-PQ3VP6NG.js.map +1 -0
  60. package/dist/{chunk-YTVX52NU.cjs → chunk-VVTB47UG.cjs} +6 -6
  61. package/dist/{chunk-YTVX52NU.cjs.map → chunk-VVTB47UG.cjs.map} +1 -1
  62. package/dist/{chunk-ZC64CG7J.js → chunk-WWQ3QRPF.js} +4 -4
  63. package/dist/chunk-WWQ3QRPF.js.map +1 -0
  64. package/dist/{chunk-WUQSFK7W.js → chunk-XPFWOBV4.js} +4 -4
  65. package/dist/{chunk-WUQSFK7W.js.map → chunk-XPFWOBV4.js.map} +1 -1
  66. package/dist/index.cjs +44 -44
  67. package/dist/index.js +10 -10
  68. package/dist/integration/index.cjs +3 -3
  69. package/dist/integration/index.js +1 -1
  70. package/dist/llm/index.d.ts +2 -2
  71. package/dist/llm/index.d.ts.map +1 -1
  72. package/dist/llm/model/base.types.d.ts +2 -2
  73. package/dist/llm/model/base.types.d.ts.map +1 -1
  74. package/dist/llm/model/model.d.ts +4 -4
  75. package/dist/llm/model/model.d.ts.map +1 -1
  76. package/dist/llm/model/model.loop.d.ts +1 -1
  77. package/dist/llm/model/model.loop.d.ts.map +1 -1
  78. package/dist/llm/model/model.loop.types.d.ts +2 -0
  79. package/dist/llm/model/model.loop.types.d.ts.map +1 -1
  80. package/dist/loop/index.cjs +2 -2
  81. package/dist/loop/index.js +1 -1
  82. package/dist/loop/loop.d.ts +1 -1
  83. package/dist/loop/loop.d.ts.map +1 -1
  84. package/dist/loop/types.d.ts +2 -0
  85. package/dist/loop/types.d.ts.map +1 -1
  86. package/dist/loop/workflow/stream.d.ts +1 -1
  87. package/dist/loop/workflow/stream.d.ts.map +1 -1
  88. package/dist/mastra/hooks.d.ts.map +1 -1
  89. package/dist/mastra/index.cjs +2 -2
  90. package/dist/mastra/index.d.ts +8 -3
  91. package/dist/mastra/index.d.ts.map +1 -1
  92. package/dist/mastra/index.js +1 -1
  93. package/dist/memory/index.cjs +4 -4
  94. package/dist/memory/index.js +1 -1
  95. package/dist/network/index.cjs +4 -4
  96. package/dist/network/index.js +2 -2
  97. package/dist/network/vNext/index.cjs +14 -14
  98. package/dist/network/vNext/index.js +2 -2
  99. package/dist/processors/index.cjs +13 -11
  100. package/dist/processors/index.cjs.map +1 -1
  101. package/dist/processors/index.d.ts +4 -0
  102. package/dist/processors/index.d.ts.map +1 -1
  103. package/dist/processors/index.js +7 -5
  104. package/dist/processors/index.js.map +1 -1
  105. package/dist/processors/processors/moderation.d.ts +4 -0
  106. package/dist/processors/processors/moderation.d.ts.map +1 -1
  107. package/dist/processors/processors/pii-detector.d.ts +3 -0
  108. package/dist/processors/processors/pii-detector.d.ts.map +1 -1
  109. package/dist/processors/processors/prompt-injection-detector.d.ts +2 -0
  110. package/dist/processors/processors/prompt-injection-detector.d.ts.map +1 -1
  111. package/dist/processors/processors/system-prompt-scrubber.d.ts +2 -0
  112. package/dist/processors/processors/system-prompt-scrubber.d.ts.map +1 -1
  113. package/dist/processors/runner.d.ts +5 -4
  114. package/dist/processors/runner.d.ts.map +1 -1
  115. package/dist/relevance/index.cjs +4 -4
  116. package/dist/relevance/index.js +1 -1
  117. package/dist/scores/base.d.ts +2 -0
  118. package/dist/scores/base.d.ts.map +1 -1
  119. package/dist/scores/hooks.d.ts +3 -1
  120. package/dist/scores/hooks.d.ts.map +1 -1
  121. package/dist/scores/index.cjs +27 -18
  122. package/dist/scores/index.cjs.map +1 -1
  123. package/dist/scores/index.js +23 -14
  124. package/dist/scores/index.js.map +1 -1
  125. package/dist/scores/run-experiment/index.d.ts +2 -0
  126. package/dist/scores/run-experiment/index.d.ts.map +1 -1
  127. package/dist/scores/types.d.ts +3 -0
  128. package/dist/scores/types.d.ts.map +1 -1
  129. package/dist/storage/domains/workflows/inmemory.d.ts +1 -1
  130. package/dist/storage/domains/workflows/inmemory.d.ts.map +1 -1
  131. package/dist/storage/index.cjs +13 -14
  132. package/dist/storage/index.cjs.map +1 -1
  133. package/dist/storage/index.js +11 -12
  134. package/dist/storage/index.js.map +1 -1
  135. package/dist/stream/index.cjs +3 -3
  136. package/dist/stream/index.js +1 -1
  137. package/dist/test-utils/llm-mock.cjs +2 -2
  138. package/dist/test-utils/llm-mock.js +1 -1
  139. package/dist/tools/index.cjs +4 -4
  140. package/dist/tools/index.js +1 -1
  141. package/dist/tools/is-vercel-tool.cjs +2 -2
  142. package/dist/tools/is-vercel-tool.js +1 -1
  143. package/dist/tools/tool.d.ts +3 -1
  144. package/dist/tools/tool.d.ts.map +1 -1
  145. package/dist/utils.cjs +17 -17
  146. package/dist/utils.d.ts +3 -3
  147. package/dist/utils.d.ts.map +1 -1
  148. package/dist/utils.js +1 -1
  149. package/dist/workflows/default.d.ts +13 -3
  150. package/dist/workflows/default.d.ts.map +1 -1
  151. package/dist/workflows/evented/index.cjs +10 -10
  152. package/dist/workflows/evented/index.js +1 -1
  153. package/dist/workflows/execution-engine.d.ts +2 -2
  154. package/dist/workflows/execution-engine.d.ts.map +1 -1
  155. package/dist/workflows/index.cjs +10 -10
  156. package/dist/workflows/index.js +1 -1
  157. package/dist/workflows/legacy/index.cjs +22 -22
  158. package/dist/workflows/legacy/index.js +1 -1
  159. package/dist/workflows/workflow.d.ts +15 -10
  160. package/dist/workflows/workflow.d.ts.map +1 -1
  161. package/package.json +18 -8
  162. package/dist/chunk-24TFSB6Z.cjs.map +0 -1
  163. package/dist/chunk-4DKPMUAC.cjs.map +0 -1
  164. package/dist/chunk-5TFCIXWE.js.map +0 -1
  165. package/dist/chunk-APVV75XG.js.map +0 -1
  166. package/dist/chunk-AYFN43FB.cjs.map +0 -1
  167. package/dist/chunk-BGOXFBFK.js.map +0 -1
  168. package/dist/chunk-D2GH2HAK.cjs.map +0 -1
  169. package/dist/chunk-DJKIK6ZB.cjs.map +0 -1
  170. package/dist/chunk-QHEB6ZLO.cjs.map +0 -1
  171. package/dist/chunk-TQRLZH64.js.map +0 -1
  172. package/dist/chunk-WOTBMZCN.js.map +0 -1
  173. package/dist/chunk-ZC64CG7J.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import { WorkflowEventProcessor } from './chunk-TQRLZH64.js';
1
+ import { WorkflowEventProcessor } from './chunk-PQ3VP6NG.js';
2
2
  import { augmentWithInit } from './chunk-436FFEF6.js';
3
3
  import { PubSub } from './chunk-BVUMKER5.js';
4
4
  import { InstrumentClass, Telemetry } from './chunk-76MWMAR7.js';
5
5
  import { registerHook } from './chunk-TTELJD4F.js';
6
- import { setupAITracing, getAllAITracing, shutdownAITracingRegistry } from './chunk-WOTBMZCN.js';
6
+ import { setupAITracing, getAllAITracing, shutdownAITracingRegistry } from './chunk-LOYT3WUA.js';
7
7
  import { noopLogger } from './chunk-PFXXH2RP.js';
8
8
  import { MastraError } from './chunk-MCOVMKIS.js';
9
9
  import { ConsoleLogger, LogLevel } from './chunk-X3GXU6TZ.js';
@@ -44,19 +44,8 @@ function createOnScorerHook(mastra) {
44
44
  const entityId = hookData.entity.id;
45
45
  const entityType = hookData.entityType;
46
46
  const scorer = hookData.scorer;
47
- let scorerToUse;
48
47
  try {
49
- if (entityType === "AGENT") {
50
- const agent = mastra.getAgentById(entityId);
51
- const scorers = await agent.getScorers();
52
- scorerToUse = scorers[scorer.id];
53
- } else if (entityType === "WORKFLOW") {
54
- const workflow = mastra.getWorkflowById(entityId);
55
- const scorers = await workflow.getScorers();
56
- scorerToUse = scorers[scorer.id];
57
- } else {
58
- return;
59
- }
48
+ const scorerToUse = await findScorer(mastra, entityId, entityType, scorer.id);
60
49
  if (!scorerToUse) {
61
50
  throw new MastraError({
62
51
  id: "MASTRA_SCORER_NOT_FOUND",
@@ -107,6 +96,23 @@ function createOnScorerHook(mastra) {
107
96
  }
108
97
  };
109
98
  }
99
+ async function findScorer(mastra, entityId, entityType, scorerId) {
100
+ let scorerToUse;
101
+ if (entityType === "AGENT") {
102
+ const scorers = await mastra.getAgentById(entityId).getScorers();
103
+ scorerToUse = scorers[scorerId];
104
+ } else if (entityType === "WORKFLOW") {
105
+ const scorers = await mastra.getWorkflowById(entityId).getScorers();
106
+ scorerToUse = scorers[scorerId];
107
+ }
108
+ if (!scorerToUse) {
109
+ const mastraRegisteredScorer = mastra.getScorerByName(scorerId);
110
+ scorerToUse = mastraRegisteredScorer ? {
111
+ scorer: mastraRegisteredScorer
112
+ } : void 0;
113
+ }
114
+ return scorerToUse;
115
+ }
110
116
 
111
117
  // src/mastra/index.ts
112
118
  var _Mastra_decorators, _init;
@@ -128,6 +134,7 @@ var Mastra = class {
128
134
  #memory;
129
135
  #networks;
130
136
  #vnext_networks;
137
+ #scorers;
131
138
  #server;
132
139
  #mcpServers;
133
140
  #bundler;
@@ -358,6 +365,13 @@ do:
358
365
  this.#vnext_networks[key] = network;
359
366
  });
360
367
  }
368
+ const scorers = {};
369
+ if (config?.scorers) {
370
+ Object.entries(config.scorers).forEach(([key, scorer]) => {
371
+ scorers[key] = scorer;
372
+ });
373
+ }
374
+ this.#scorers = scorers;
361
375
  this.#legacy_workflows = {};
362
376
  if (config?.legacy_workflows) {
363
377
  Object.entries(config.legacy_workflows).forEach(([key, workflow]) => {
@@ -603,6 +617,38 @@ do:
603
617
  }
604
618
  return this.#legacy_workflows;
605
619
  }
620
+ getScorers() {
621
+ return this.#scorers;
622
+ }
623
+ getScorer(key) {
624
+ const scorer = this.#scorers?.[key];
625
+ if (!scorer) {
626
+ const error = new MastraError({
627
+ id: "MASTRA_GET_SCORER_NOT_FOUND",
628
+ domain: "MASTRA" /* MASTRA */,
629
+ category: "USER" /* USER */,
630
+ text: `Scorer with ${String(key)} not found`
631
+ });
632
+ this.#logger?.trackException(error);
633
+ throw error;
634
+ }
635
+ return scorer;
636
+ }
637
+ getScorerByName(name) {
638
+ for (const [_key, value] of Object.entries(this.#scorers ?? {})) {
639
+ if (value.name === name) {
640
+ return value;
641
+ }
642
+ }
643
+ const error = new MastraError({
644
+ id: "MASTRA_GET_SCORER_BY_NAME_NOT_FOUND",
645
+ domain: "MASTRA" /* MASTRA */,
646
+ category: "USER" /* USER */,
647
+ text: `Scorer with name ${String(name)} not found`
648
+ });
649
+ this.#logger?.trackException(error);
650
+ throw error;
651
+ }
606
652
  getWorkflows(props = {}) {
607
653
  if (props.serialized) {
608
654
  return Object.entries(this.#workflows).reduce((acc, [k, v]) => {
@@ -963,5 +1009,5 @@ Mastra = /*@__PURE__*/(_ => {
963
1009
  })();
964
1010
 
965
1011
  export { Mastra };
966
- //# sourceMappingURL=chunk-APVV75XG.js.map
967
- //# sourceMappingURL=chunk-APVV75XG.js.map
1012
+ //# sourceMappingURL=chunk-A5NC3XK2.js.map
1013
+ //# sourceMappingURL=chunk-A5NC3XK2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/events/event-emitter.ts","../src/mastra/hooks.ts","../src/mastra/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAO,kBAAkB,CAAA,MAAA,EAAA;AAIlB,EAAA,OAAM,MAAA,QAAA;AAAkC,IACrC,IAAA,CAAA,MAAA,CAAA,UAAA,EAAA,EAAA;AAAA,MAER;AACE,IAAA;AACA,IAAA,MAAK,OAAA,SAAc,CAAA,UAAa,EAAA;AAAA,IAClC,MAAA,QAAA,GAAA,QAAA,CAAA,MAAA,CAAA,EAAA;AAAA,IAEA,MAAM,UAAQ,GAAe,QAAuD,CAAA,UAAA;AAClF,IAAA,MAAM,iBAAY,CAAA,MAAW;AAC7B,IAAA,IAAA;AACA,MAAA,MAAK,WAAa,GAAA,MAAO,UAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,CAAA,EAAA,CAAA;AAAA,MACvB,IAAG,CAAA,WAAA,EAAA;AAAA,QACH,MAAA,IAAA,WAAA,CAAA;AAAA,UACA,EAAA,EAAA,yBAAA;AAAA,UACD,MAAA,EAAA,QAAA;AAAA,UACH,QAAA,EAAA,MAAA;AAAA,UAEM,IAAA,EAAA,CAAA,eAA+F,EAAA,QAAA,CAAA,MAAA,CAAA,EAAA,CAAA,UAAA;AACnG,SAAK,CAAA;AAAoB,MAC3B;AAAA,MAEA,IAAM,KAAA,GAAA,QAAY,CAAe,KAAsE;AACrG,MAAA,IAAK,MAAA,GAAQ,QAAI,CAAO,MAAE;AAAA,MAC5B,IAAA,UAAA,KAAA,OAAA,EAAA;AAAA,QAEM,MAAA,GAAuB;AAAA,UAE7B,MAAA,EAAA,QAAA,CAAA;AACF,SAAA;;;AC7BO,QAAA;AACL,QAAA;AACE,OAAA,GAAK,QAAO;AACV,MAAA,MAAA,SAAA,GAAA,MAAA,WAAA,CAAA,MAAA,CAAA,GAAA,CAAA;AAAA,QACF,GAAA,IAAA;AAEA,QAAA,KAAM;AACN,QAAA;AACA,OAAA,CAAA;AACA,MAAA,aAAe,GAAA;AACf,QAAI,GAAA,IAAA;AACF,QAAA,GAAA;AAEA,QAAA,QAAK;AACH,QAAA,UAAU,QAAA,CAAA,MAAY,CAAA,EAAA;AAAA,QAAA,QAChB,EAAA;AAAA,UACJ,gBAAA,EAAA,CAAA,CAAA;AAAA;AACA,OAAA;AAC0C,MAAA,MAC3C,OAAA,EAAA,SAAA,CAAA,OAAA,CAAA;AAAA,IAAA,CAAA,CACH,OAAA,KAAA,EAAA;AAEA,MAAA,iBAAY,GAAA,IAAS,WAAA,CAAA;AACrB,QAAA,EAAI,oCAAkB;AAEtB,QAAA;AACE,QAAA,QAAA,EAAS,MAAE;AAAwB,QACrC,OAAA,EAAA;AAEA,UAAA,QAAQ,EAAA,MAAA,CAAA,EAAA;AAER,UAAA,QAAM;AAAyC,UAC7C;AAAG;AACH,OAAA,EACA,KAAA,CAAA;AAAA,MACF,MAAC,CAAA,SAAA,EAAA,EAAA,cAAA,CAAA,WAAA,CAAA;AAED,MAAA,MAAM,CAAA,SAAU,EAAA,EAAA,KAAA,CAAA,WAAA,CAAA,QAAA,EAAA,CAAA;AAAA,IAAA;AACX,EAAA,CAAA;AACA;AACH,eACA,iBAAmB,EAAO,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA;AAAA,EAAA,IAAA,WAC1B;AAAU,EAAA,IAAA,UACR,KAAA,OAAkB,EAAE;AAAA,IAAA,MACtB,OAAA,GAAA,MAAA,MAAA,CAAA,YAAA,CAAA,QAAA,CAAA,CAAA,UAAA,EAAA;AAAA,IAAA,WACF,GAAA,OAAA,CAAA,QAAA,CAAA;AACA,EAAA,CAAA,MAAA,IAAM,yBAA0B,EAAA;AAAA,IAClC,aAAS,GAAO,MAAA,MAAA,CAAA,eAAA,CAAA,QAAA,CAAA,CAAA,UAAA,EAAA;AACd,IAAA,sBAAoB,QAAI,CAAA;AAAA,EAAA;AACtB,EAAA,IAAA,CAAA,WACM,EAAA;AAAA,IAAA,MACJ,sBAAA,GAAA,MAAA,CAAA,eAAA,CAAA,QAAA,CAAA;AAAA,IAAA,WACA,GAAA,sBAAA,GAAA;AAAA,MAAA,MACA,EAAA;AAAS,KAAA,GAAA;AACU,EAAA;AACjB,EAAA,OAAA,WACA;AAAA;;AAEJ;AACA,IAAA,kBACF,EAAA,KAAA;AAEA,kBAAO,GAAA,CAAA,eAAa,CAAA;AACpB,EAAA,MAAA,EAAA,QAAO;AAAyC,EAAA,cAClD,EAAA,CAAA,WAAA,EAAA,cAAA;AAAA,CAAA,CACF,CAAA;AACF,IAAA,MAAA,GAAA,MAAA;AAEA,EAAA,QAAA;AACE,EAAA,OAAI;AACJ,EAAA;AACE,EAAA;AACA,EAAA,UAAA;AAA8B,EAChC,IAAA;AACE,EAAA;AACA,EAAA;AAA8B,EAChC,UAAA;AAGA,EAAA,QAAK;AACH,EAAA,OAAA;AACA,EAAA,SAAA;AAA4E,EAC9E,eAAA;AAEA,EAAA,QAAO;AACT,EAAA,OAAA;;;ACzFA,EAAA,YAAA;AAkFA,EAAA,OAAA;AAAiB,EACf,OAAA,GAAQ,EAAA;AAAA;AAEV;AACO;AAWL,EACA,IAAA,SAAA,GAAA;AAAA,IACA,OAAA,IAAA,CAAA,UAAA;AAAA,EACA;AAAA;AACA;AACA;AACA,EACA,IAAA,OAAA,GAAA;AAAA,wBAIM;AAAA,EACN;AAAA;AACA;AACA;AACA,EACA,IAAA,MAAA,GAAA;AAAA,IACA,OAAA,IAAA,CAAA,OAAA;AAAA,EACA;AAAA,EACA,IAAA,MAAA,GAAA;AAAA,IACA,OAAA,IAAA,CAAA,OAAA;AAAA,EACA;AAAA,EACA,cAAA,GAAA;AAAA,eAGK,CAAA,YAAA;AAAA,EAAA;AAAA;AAAA;AAAA;AAMH;AAAY,EACd,UAAA,GAAA;AAAA,IAAA,IAAA,IAAA,CAAA,YAAA,EAAA;AAAA,MAAA,MAAA,EAAA,GAAA,IAAA,CAAA,YAAA,EAAA;AAAA,MAAA,IAAA,CAAA,EAAA,EAAA;AAAA,QAKI,MAAA,KAAU,GAAA,IAAA,WAAA,CAAA;AACZ,UAAA,EAAO,EAAA,2CAAK;AAAA,UACd,MAAA,EAAA,QAAA;AAAA,UAAA,QAAA,EAAA,MAAA;AAAA,UAAA,IAAA,EAAA;AAAA,SAAA,CAAA;AAAA,QAKI,IAAA,CAAA,OAAS,EAAA,cAAA,CAAA,KAAA,CAAA;AACX,QAAA,MAAO,KAAK;AAAA,MACd;AAAA,MAEI,OAAA,EAAS;AACX,IAAA;AAAY,IACd,OAAA,MAAA,CAAA,UAAA,EAAA;AAAA,EAEO;AACL,EAAA,cAAY,CAAA,WAAA,EAAA;AAAA,IACd,IAAA,CAAA,YAAA,GAAA,WAAA;AAAA,EAAA;AAAA,EAAA,WAAA,CAAA,MAAA,EAAA;AAAA,IAAA,IAAA,MAAA,EAAA,gBAAA,EAAA;AAAA,MAAA,IAAA,CAAA,iBAAA,GAAA,MAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,KAAA;AAAA,QAMO,OAAqB,EAAA,CAAA,CAAA,OAAA;AAC1B,QAAI,MAAK,CAAA,CAAA,IAAA,IAAA;AACP,OAAA,CAAA,CAAA;AACA,IAAA;AACE,IAAA,IAAA,MAAM,EAAA,MAAQ;AAAgB,MAAA,IAC5B,CAAA,OAAI,GAAA,MAAA,CAAA,MAAA;AAAA,IAAA,CAAA,MACJ;AAAA,MAAA,IACA,CAAA,OAAA,GAAA,IAAA,kBAAA,EAAA;AAAA,IAAA;AACM,IAAA,IACR,CAAC,OAAA,GAAA,EAAA;AACD,IAAA,KAAA,MAAK,KAAA,kBAAwB,IAAK,EAAA,EAAA;AAClC,MAAA,IAAA,CAAA,KAAM,CAAA,OAAA,CAAA,MAAA,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA,EAAA;AAAA,QACR,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,CAAA,MAAA,EAAA,MAAA,GAAA,KAAA,CAAA,CAAA;AACA,MAAA,CAAA,MAAO;AAAA,QACT,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,MAAA,EAAA,MAAA,GAAA,KAAA,CAAA,IAAA,EAAA;AACA,MAAA;AAAyB,IAC3B;AAAA,gCAEsD,GAAA,IAAA,sBAAA,CAAA;AACpD,MAAA,MAAK,EAAA;AAAe,KACtB,CAAA;AAAA,yBAeE,GAAA,OAAA,KAAA,EAAA,EAAA,KAAA;AAEA,MAAA;AACE,QAAA,MAAK,sBAAoB,CAAA,OAAO,CAAA,KAAA,EAAA,EAAA,CAAiB;AAAU,MAAA,CAAA,CACzD,UAAS;AAAE,QACX,QAAQ,KAAA,CAAA,wBAAQ,EAAA,CAAA,CAAA;AAAA,MAClB;AAAE,IACJ,CAAA;AAKA,IAAA,IAAI,YAAQ,CAAA,SAAQ,EAAA;AAClB,MAAA,IAAA,CAAK,iBAAiB,CAAA,IAAA,CAAA,eAAA,CAAA;AAAA,IACxB,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,OAAA,CAAA,SAAc,GAAA,CAAA,eAAmB,CAAA;AAAA,IACxC;AAEA,IAAA,IAAA;AACA,IAAA,IAAA,MAAA,EAAW,MAAA,KAAS,KAAQ,EAAA;AAC1B,MAAA,MAAK,GAAA,UAAc;AACjB,IAAA,CAAA,MAAA;AAAqD,MACvD,IAAA,MAAO,EAAA,MAAA,EAAA;AACL,QAAA,eAAa,CAAA,MAAS;AAA4B,MACpD,CAAA,MAAA;AAAA,QACF,MAAA,UAAA,GAAA,OAAA,CAAA,GAAA,CAAA,QAAA,KAAA,YAAA,IAAA,OAAA,CAAA,GAAA,CAAA,UAAA,KAAA,MAAA,GAAA,QAAA,CAAA,IAAA,GAAA,QAAA,CAAA,IAAA;AAEA,QAAA,2BAA+B;AAC/B,UAAM,IAAA,EAAA,QAAA;AACJ,UAAI,KAAA,EAAA;AACF,SAAA,CAAA;AAA8C,MAChD;AACE,IAAA;AAAyC,IAAA,IAC3C,CAAA,OAAA,GAAA,MAAA;AAAA,IACF,IAAA,CAAA,YAAA,GAAA,MAAA,EAAA,WAAA;AACA,IAAA,IAAI,gBAAa,EAAA,OAAW;AAC1B,IAAA,IAAA,OAAK,EAAA;AAAsC,MAC7C,OAAO,GAAA,eAAA,CAAA,OAAA,CAAA;AACL,IAAA;AAAyC,IAC3C,IAAA,CAAA,UAAA,GAAA,SAAA,CAAA,IAAA,CAAA,MAAA,EAAA,SAAA,CAAA;AAMA,IAAA,IAAI,MAAA,EAAA,SAAA,EAAA,OAAA,KAAA,KAAA,IAAA,OAAA,UAAA,KAAA,WAAA,IAAA,UAAA,CAAA,sBAAA,KAAA,IAAA,EAAA;AACJ,MAAA,IAAI,CAAA,kQAA0B,CAAA,EAAA,CAAA,wKAAA,CAAA,CAAA;AAC5B,IAAA;AAAS,IACX,IAAA,MAAO,EAAA,aAAA,EAAA;AACL,MAAA,cAAY,CAAA,MAAQ,CAAA,aAAA,CAAA;AAClB,IAAA;AAAgB,IAAA,IAClB,IAAA,CAAO,UAAA,IAAA,OAAA,EAAA;AACL,MAAA,IAAA,CAAA,QAAM,GAAA,IAAA,CACJ,UAAQ,CAAA,UAAI,CAAA,OAAa,EAAA;AAC3B,QAAA,cAAa,EAAA,CAAA,kBAAsB,gBAAU,oBAAmB,EAAA,WAAA,EAAA,qBAAA;AAAA,OAClE,CAAA;AAAA,MACF,IAAA,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AACA,IAAA,CAAA,MAAK;AAEL,MAAA,uBAAoB;AAEpB,IAAA;AAEA,IAAA,IAAI,MAAA,EAAA,OAAS,EAAA;AACX,MAAA,IAAA;AAAiC,MACnC,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA;AAMA,QAAA,IAAK,IAAA,CAAA,UAAa,EAAA;AAGlB,UACE,mBAAmB,CAAA,UAAY,CAAA,iBACxB,EAAA;AAGP,YAAK,cAAS,EAAA,CAAA,gBAAA,EAAA,gBAAA;AAAA,WACZ,CAAA;AAAA,UAEA,OAAA,CAAA,GAAA,CAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,QACF,CAAA,MAAA;AAAA,UACF,OAAA,CAAA,GAAA,CAAA,GAAA,MAAA;AAMA,QAAI;AACF,MAAA,CAAA,CAAA;AAAmC,MACrC,IAAA,CAAA,QAAA,GAAA,OAAA;AAKA,IAAA;AACE,IAAA,IAAA,MAAK,EAAA,QAAW,EAAA;AAAoC,MAAA,uBACjC,CAAA,QAAA;AAA0F,IAAA;AAE7G,IAAA,IAAA,MAAK,EAAA,cAAS,EAAA;AAA8B,MAC9C,IAAA,CAAO,eAAA,GAAA,MAAA,CAAA,cAAA;AACL,IAAA;AAAgB,IAClB,IAAA,MAAA,EAAA,UAAA,EAAA;AAKA,MAAA,gBAAY,GAAS,MAAA,CAAA,UAAA;AACnB,MAAA,cAA4C,CAAC,IAAA,CAAA,WAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA;AAC7C,QAAA,MAAO,CAAA,KAAA,CAAQ;AACb,QAAA,IAAI,KAAK,UAAA,EAAY;AACnB,UAAA,MAAA,CAAA,cAAoB,CAAA,IAAA,CAAA;AAA8B,QAAA;AACG,QAAA,MACpD,CAAA,gBAAA,CAAA,IAAA,CAAA;AACD,QAAA,MAAA,CAAA,WAAa,CAAA,IAAA,CAAA,SAAe,EAAK,CAAA;AAAU,MAAA,CAAA,CAC7C;AACE,IAAA;AAAe,IAAA,IACjB,MAAA,IAAA,CAAA,MAAA,CAAA,IAAA,MAAA,EAAA;AAAA,MACF,MAAC,KAAA,GAAA,IAAA,WAAA,CAAA;AAED,QAAA,EAAA,EAAK,0CAAW;AAAA,QAClB,MAAA,EAAA,QAAA;AAEA,QAAI,QAAQ,EAAA,MAAA;AACV,QAAA;AAAwB;;AAIxB;AAA8B;;AAI9B;AAGA;AACE;AACA,OAAA,CAAA;AACE,MAAA,IAAA,CAAA,OAAO,EAAA,oBAAoB,CAAA;AAAU,MAAA,MACvC,KAAA;AAEA,IAAA;AACA,IAAA,IAAA,MAAA,EAAO,GAAA,EAAA;AAA4B,MACrC,IAAC,CAAA,IAAA,GAAA,MAAA,CAAA,GAAA;AAAA,MACH,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,KAAA,CAAA,KAAA;AAEA,QAAI,IAAA,IAAA,CAAA,aAAsB;AACxB,UAAA,IAAM,IAAA,CAAA,UAAY,EAAA;AAAY,YACxB,IAAA,CAAA,IAAA,CAAA,GAAA,CAAA,GAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,KAAA,EAAA;AAAA,cACJ,cAAA,EAAA,CAAA,gBAAA,EAAA,gBAAA;AAAA,aACA,CAAA;AAAA,YACA,IAAM,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,CAAA,CAAA;AAAA,IAAA;AAAA,IAAA,MAAA,MAAA,GAAA,EAAA;AAAA,IAAA,IAAA,MAAA,EAAA,MAAA,EAAA;AAAA,MAAA,MAAA,CAAA,OAAA,CAAA,MAAA,CAAA,MAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,KAAA,CAAA,KAAA;AAAA,QAAA,IAAA,MAAA,CAAA,GAAA,CAAA,EAAA;AAAA,UASP,MAAA,KAAA,GAAA,IAAA,WAAA,CAAA;AACD,YAAK,EAAA,EAAA,wCAA6B;AAClC,YAAM,MAAA,EAAA,QAAA;AAAA,YACR,QAAA,EAAA,MAAA;AAEA,gBAAY,EAAA,CAAA,mBAAK,EAAA,GAAA,CAAA,eAAA,CAAA;AACf,mBAAY,EAAA;AACZ,cAAO,OAAQ;AACb;AACE,WAAA,CAAA;AAEE,UAAA,IAAA,CAAA,OAAU,EAAA,cAAY,CAAA,KAAA,CAAW;AAAkB,UAAA,MACjD,KAAA;AAAmD,QAAA;AAErD,QAAA,KAAA,CAAA,gBAAe,CAAA,IAAA,CAAA;AAA8B,QAAA,KAC/C,CAAA,oBAAA,CAAA;AAAA,UACF,MAAA,EAAA,IAAA,CAAA,SAAA,EAAA;AAAA,UACD,SAAA,EAAA,IAAA,CAAA,UAAA;AAAA,UACH,OAAA,EAAA,IAAA,CAAA,OAAA;AAKA,UAAM,YAAiC,CAAA,MAAA;AACvC,gBAAY;AACV,UAAA,GAAO,EAAA,IAAA,CAAA;AACL,UAAA,OAAI,EAAO,IAAG,CAAA;AACZ,SAAA,CAAA;AAA8B,QAAA,MAC5B,CAAA,GAAI,CAAA,GAAA,KAAA;AAAA,MAAA,CAAA,CAAA;AACJ,IAAA;AACA,IAAA,IAAA,CAAA,OACA;AAA+B,IAAA,IAAA,CAAA,SAC/B,GAAS,EAAA;AAAA,IAAA,IAAA,CAAA,eACE,GAAA,EAAA;AAAA,IAAA,IAAA,MACX,EAAA,QAAA,EAAA;AAAA,MAAA,MACD,CAAA,OAAA,CAAA,MAAA,CAAA,QAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,OAAA,CAAA,KAAA;AACD,QAAA,OAAK,CAAA;AACL,QAAA,IAAA,CAAA,SAAM,CAAA,GAAA,CAAA,GAAA,OAAA;AAAA,MAAA,CAAA,CACR;AACA,IAAA;AAEA,IAAA,IAAA,MAAM,EAAA,cAAA,EAAA;AAAqB,MAAA,MACzB,CAAA,cAAa,CAAA,cAAU,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,OAAA,CAAA,KAAA;AAAA,QAAA,wBACP,CAAA,IAAA,CAAA;AAAA,QAAA,oBACF,CAAA,GAAA,CAAA,GAAA,OAAA;AAAA,MAAA,CAAA,CAAA;AACD,IAAA;AACb,IAAA,MACA,OAAK,GAAK,EAAA;AAAA,IAAA,IAAA,eACD,EAAK;AAAA,MAAA,MACf,CAAA,OAAA,CAAA,MAAA,CAAA,OAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,MAAA,CAAA,KAAA;AAED,QAAA,OAAO,IAAG,CAAA,GAAI,MAAA;AAAA,MAChB,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,IAAA,CAAK,QAAA,GAAU,OAAA;AAKf,IAAA,IAAA,CAAK,iBAAa,GAAA,EAAA;AAClB,IAAA,IAAA,wBAAwB,EAAA;AAExB,MAAA,cAAY,CAAA,MAAU,CAAA,gBAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,QAAA,CAAA,KAAA;AACpB,QAAA,QAAO,CAAA,gBAAe,CAAA,IAAU;AAC9B,QAAA,QAAQ,qBAAqB,CAAA;AAE7B,UAAA,MAAK,EAAA,IAAA,CAAU,SAAO,EAAA;AAAA,UACvB,SAAA,EAAA,IAAA,CAAA,UAAA;AAAA,UACH,OAAA,EAAA,IAAA,CAAA,OAAA;AAEA,gBAAY,EAAA,IAAA,CAAA,MAAA;AACV,UAAA,MAAO;AACL,UAAA,GAAA,EAAA;AAEA,UAAA,OAAK,EAAA,IAAA,CAAA;AAAuB,SAC7B,CAAA;AAAA,QACH,IAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,GAAA,QAAA;AAMA,QAAA,mBAAiB,GAAA,MAAA,CAAA,MAAA,CAAA,QAAA,CAAA,KAAA,CAAA,CAAA,MAAA,CAAA,IAAA,IAAA,CAAA,CAAA,IAAA,CAAA,UAAA,IAAA,CAAA,CAAA,IAAA,CAAA,QAAA,CAAA;AACjB,QAAI,iBAAiB,CAAA,MAAA,GAAA,CAAA,EAAA;AACnB,UAAA,qBAAsB,CAAA,IAAO;AAC3B,YAAA,IAAQ,kBAAO,CAAA,IAAA,CAAA,UAAA,CAAA,GAAA,IAAA,CAAA,QAAA;AAAA,UAChB,CAAA,CAAA;AAAA,QACH;AACA,MAAA,CAAA,CAAA;AAKA,IAAA;AAEA,IAAA,IAAI,WAAQ,GAAA,EAAA;AACV,IAAA,IAAA,MAAO,EAAA;AACL,MAAA,MAAA,CAAA,wBAA0B,CAAI,CAAA,OAAA,CAAA,CAAA,CAAA,GAAA,EAAA,QAAA,CAAA,KAAA;AAC9B,QAAA,QAAA,CAAS,gBAAA,CAAA,IAAqB,CAAA;AAAA,QAAA,QAC5B,CAAA,oBAAuB,CAAA;AAAA,UACvB,YAAW,CAAA,SAAK,EAAA;AAAA,UAChB,SAAS,EAAA,IAAK,CAAA,UAAA;AAAA,UACd,SAAQ,IAAK,CAAA,OAAA;AAAA,UACb,MAAA,EAAA,IAAA,CAAA,MAAA;AAAA,UACA,MAAK;AAAK,UACV,SAAS,CAAA,IAAK;AAAA,UACf,OAAA,EAAA,IAAA,CAAA;AAED,SAAA,CAAA;AAEA,QAAA,IAAA,CAAA,UAAM,CAAA,GAAA,CAAA,GAAgB,QAAO;AAC7B,MAAA,CAAA,CAAA;AACE,IAAA;AAEE,IAAA,IAAA,MAAA,EAAA,MAAK,EAAA;AAA0C,MAAA,IACjD,CAAC,OAAA,GAAA,MAAA,CAAA,MAAA;AAAA,IAAA;AACH,IAAA,YACD,CAAA,aAAA,sBAAA,kBAAA,CAAA,IAAA,CAAA,CAAA;AAAA,IACH,IAAA,MAAA,EAAA,aAAA,EAAA;AAEA,MAAA,+BAAmB,EAAA;AACnB,MAAA,2BAAuB,EAAA;AACrB,IAAA;AACE,IAAA,IAAA,CAAA;AACA,MAAA;AAA8B,KAAA,CAAA;AACL,EAAA;AACP;AACF;AACD;AACb,EAAA,0BACU,GAAA;AAAA,IAAA,MACV,mBAAc,GAAA,eAAA,EAAA;AAAA,IAAA,mBACf,CAAA,OAAA,CAAA,OAAA,IAAA;AAED,MAAA,MAAA,SAAK,GAAW,OAAO,CAAA,YAAA,EAAA;AAAA,MACzB,SAAC,CAAA,OAAA,CAAA,QAAA,IAAA;AAAA,QACH,IAAA,kBAAA,IAAA,QAAA,IAAA,OAAA,QAAA,CAAA,gBAAA,KAAA,UAAA,EAAA;AAEA,kBAAY,CAAA,gBAAQ,CAAA,IAAA,CAAA;AAClB,QAAA;AAAsB,MACxB,CAAA,CAAA;AAEA,IAAA,CAAA,CAAA;AAKA,EAAA;AACE;AACA;AAA4B;AAG9B,EAAA,sBAAiB,GAAA;AAAQ,IAC3B,MAAA,mBAAA,GAAA,eAAA,EAAA;AAAA,IAAA,mBAAA,CAAA,OAAA,CAAA,OAAA,IAAA;AAAA,MAAA,MAAA,SAAA,GAAA,OAAA,CAAA,YAAA,EAAA;AAAA,MAAA,SAAA,CAAA,OAAA,CAAA,QAAA,IAAA;AAAA,QAKQ,IAAA,MAAA,IAAA,QAAA,IAAmC,OAAA,QAAA,CAAA,IAAA,KAAA,UAAA,EAAA;AACzC,UAAM;AACN,YAAA,QAAA,CAAA;AACE,UAAA,CAAA,CAAM,OAAA,KAAY;AAClB,YAAA,IAAU,QAAQ,EAAA,IAAA,CAAA,0CAAY,EAAA;AAE5B,cAAI,YAAA,EAAA,QAAsB,CAAA,IAAA;AACxB,cAAC,KAAiB,mBAAiB,KAAI,GAAA,KAAA,CAAA,OAAA,GAAA,MAAA,CAAA,KAAA;AAAA,aACzC,CAAA;AAAA,UACD;AAAA,QACF;AAAA,MACH,CAAA,CAAA;AAAA,IAAA,CAAA,CAAA;AAAA,EAAA;AAAA,EAAA,QAAA,CAAA,IAAA,EAAA;AAAA,IAKQ,MAAA,KAAA,GAAA,IAAA,CAAA,OAA+B,GAAA,IAAA,CAAA;AACrC,IAAA,IAAA,CAAA;AAEA,MAAA,MAAA,KAAA,GAAA,IAAoB,WAAQ,CAAA;AAC1B,QAAA,EAAA,EAAM,oCAAiC;AACvC,QAAA,MAAA,EAAU,QAAQ;AAEhB,QAAA,QAAI,EAAA,MAAU;AACZ,QAAA,IAAA,EAAI,CAAA,gBAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,UAAA,CAAA;AACF,QAAA,OAAA,EAAA;AAAc,UAChB,WAAS;AACP,UAAA,SAAK,EAAA,WAAc,CAAA;AAA4C,UAAA,mBAC/C,CAAA,IAAA,CAAA,OAAS,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA;AACqC,OAAA,CAAA;AAC7D,MAAA,IACH,CAAA,OAAA,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MAAA,MACF,KAAA;AAAA,IAAA;AACD,IACH,OAAC,IAAA,CAAA,OAAA,CAAA,IAAA,CAAA;AAAA,EACH;AAAA,EAEO,YAA2C,CAAA,EAAuC,EAAA;AACvF,IAAA,IAAA,KAAM,GAAA,MAAQ,CAAK,MAAA,CAAA,IAAU,CAAA,OAAI,CAAA,CAAA,IAAA,CAAA,CAAA,IAAA,CAAA,CAAA,EAAA,KAAA,EAAA,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,IAAA;AAA8B,QAC5B,KAAI,GAAA,IAAA,CAAA,QAAA,CAAA,EAAA,CAAA;AAAA,MAAA,CAAA,CACJ,MAAA,CAAA;AAAA,IAAA;AACA,IAAA,IACA,CAAA,KAAM,EAAA;AAA+B,MAAA,MACrC,KAAS,GAAA,IAAA,WAAA,CAAA;AAAA,QAAA,EACP,EAAA,wCAAQ;AAAA,QAAA,MACR,EAAA;AAAsB,QAAA,QACtB,EAAQ;AAAyC,QACnD,IAAA,EAAA,CAAA,cAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA;AAAA,QACD,OAAA,EAAA;AACD,UAAA,MAAK,EAAA;AACL,UAAA,OAAM,EAAA,MAAA,CAAA,EAAA,CAAA;AAAA,UACR,MAAA,EAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AACA;AAAwB,OAC1B,CAAA;AAAA,kBAEoB,EAAmB,cAAA,CAAA,KAAA,CAAA;AACrC,MAAA,MAAI,KAAQ;AAEZ,IAAA;AACE,IAAA,OAAI,KAAA;AACF,EAAA;AAA+B,EAAA,SACjC,GAAQ;AAAA,IAAA,OAER,IAAA,CAAA,OAAA;AAAA,EAAA;AAGF,EAAA,SAAK,CAAA,IAAO,EAAA;AACV,IAAA,MAAA,MAAM,GAAA,KAAY,QAAA,GAAA,IAAY,CAAA;AAAA,IAAA,IAC5B,CAAA,MAAI,EAAA;AAAA,MAAA,MACJ,KAAA,GAAA,IAAA,WAAA,CAAA;AAAA,QACA,EAAA,EAAA,qCAAA;AAAA,QACA,MAAM,EAAA,QAAA;AAA2B,QACjC,QAAA,EAAS,MAAA;AAAA,QAAA,IACP,EAAA,CAAA,iBAAQ,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,UAAA,CAAA;AAAA,QAAA,OACR,EAAA;AAAkB,UAClB,MAAA,EAAQ;AAAyC,UACnD,UAAA,EAAA,MAAA,CAAA,IAAA,CAAA;AAAA,UACD,OAAA,EAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,QAAA,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AACD;AACA,OAAA,CAAA;AAAM,MACR,IAAA,CAAA,OAAA,EAAA,cAAA,CAAA,KAAA,CAAA;AAEA,MAAA,MAAO,KAAA;AAAA,IACT;AAAA,IAEO,OAAA,MAAY;AACjB,EAAA;AAAY,EACd,UAAA,GAAA;AAAA,eAEqD,CAAA,QAA0C;AAC7F,EAAA;AACA,EAAA,WAAK,GAAA;AACH,IAAA,OAAA,IAAM,CAAA,SAAY;AAAY,EAAA;AACxB,EAAA,kBACJ,CAAA,EAAA,EAAA;AAAA,IAAA;AACA,GAAA,GAAA,EACA,EAAA;AAAsC,IAAA,MACtC,QAAS,GAAA,IAAA,CAAA,iBAAA,GAAA,EAAA,CAAA;AAAA,IAAA,IAAA,CAAA,QACP,EAAQ;AAAA,MAAA,MACR,KAAA,GAAA,eAAuB,CAAA;AAAA,QAAA,EACvB,EAAA,4CAA0C;AAAS,QACrD,MAAA,EAAA,QAAA;AAAA,QACD,QAAA,EAAA,MAAA;AACD,QAAA,IAAK,EAAA,CAAA,yBAA6B,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA;AAClC,QAAA,OAAM,EAAA;AAAA,UACR,MAAA,EAAA,GAAA;AACA,UAAA,UAAO,EAAA,MAAA,CAAA,EAAA,CAAA;AAAA,UACT,SAAA,EAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,iBAAA,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA;AAGE,OAAA,CAAA;AAAY,MACd,IAAA,CAAA,OAAA,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MAEO,MAAA,KAAc;AACnB,IAAA;AAAY,IACd,IAAA,UAAA,EAAA;AAAA;AAME,QAAA,IAAM,EAAA,QAAW,CAAA;AACjB,OAAA;AACE,IAAA;AAA8B,IAAA,OAC5B,QAAI;AAAA,EAAA;AACJ,EAAA,WACA,CAAA,EAAA,EAAA;AAAA,IAAA;AACoC,GAAA,GAAA,EACpC,EAAA;AAAS,IAAA,MACP,QAAQ,GAAA,IAAA,CAAA,UAAA,GAAA,EAAA,CAAA;AAAA,IAAA,IAAA,CAAA,QACR,EAAA;AAAqB,MAAA,MACrB,KAAA,GAAA,eAAuB,CAAA;AAAuC,QAChE,EAAA,EAAA,qCAAA;AAAA,QACD,MAAA,EAAA,QAAA;AACD,QAAA,QAAK,EAAA;AACL,QAAA,IAAM,EAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA;AAAA,QACR,OAAA,EAAA;AAEA,UAAI,MAAA,EAAA,GAAY;AACd,UAAA,UAAS,EAAM,MAAA,CAAA,EAAS,CAAA;AAAK,UAC/B,SAAA,EAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,UAAA,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAEA;AAAO,OACT,CAAA;AAAA,kBAIE,EAAE,cAAW,CAA8B,KAClB,CAAA;AACzB,MAAA,MAAM,KAAA;AACN,IAAA;AACE,IAAA,IAAA,UAAM,EAAQ;AAAgB,MAAA,OACxB;AAAA,QACJ,IAAA,EAAA,QAAA,CAAA;AAAA,OAAA;AACA,IAAA;AACoC,IAAA,OACpC,QAAS;AAAA,EAAA;AACC,EAAA,eACR,CAAA,EAAA,EAAY;AAAS,IAAA,IAAA,QACrB,GAAA,aAAkB,CAAK,IAAA,CAAK,gBAAgB,CAAA,CAAE,IAAA,CAAK,CAAA,EAAA,KAAI,EAAA,CAAA;AAAA,IAAA,IACzD,CAAA,QAAA,EAAA;AAAA,MACF,IAAC;AACD,QAAA,QAAK,GAAA,gBAAwB,CAAA,EAAA,CAAA;AAC7B,MAAA,CAAA,CAAA,MAAM,CAAA;AAAA,IACR;AAEA,IAAA,IAAI,CAAA,QAAA,EAAA;AACF,MAAA,MAAA,KAAS,GAAA,IAAM,WAAc,CAAA;AAAA,QAC/B,EAAA,EAAA,qCAAA;AAEA,QAAA,MAAO,EAAA,QAAA;AAAA,QACT,QAAA,EAAA,MAAA;AAAA,gCAE6C,EAAA,MAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA;AAC3C,QAAI,OAAA,EAAA;AAEJ,UAAK,MAAA,EAAA,GAAU;AACb,UAAI,UAAA,EAAA,MAAA,CAAA,EAAA,CAAA;AACF,UAAA,SAAW,EAAA,gBAAiB,CAAS,UAAA,IAAA,EAAA,CAAA,CAAA,IAAA,CAAA,IAAA;AAAA;AAC/B,OAER,CAAA;AAAA,MACF,IAAA,CAAA,OAAA,EAAA,cAAA,CAAA,KAAA,CAAA;AAEA,MAAA,MAAK,KAAA;AACH,IAAA;AAA8B,IAAA,OAC5B,QAAI;AAAA,EAAA;AACJ,EAAA,mBACA,CAAA,KAAA,GAAA,EAAA,EAAA;AAAA,IAAA,IACA,KAAA,CAAM,UAAA,EAAA;AAA8B,MAAA,OACpC,MAAS,CAAA,OAAA,CAAA,IAAA,CAAA,iBAAA,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,KAAA;AAAA,QAAA,OACP;AAAQ,UACR,GAAA,GAAA;AAAqB,UACrB,CAAA,CAAA,GAAA;AAAuD,YACzD,IAAA,EAAA,CAAA,CAAA;AAAA;AAEF,SAAA;AACA,MAAA,CAAA,EAAA,EAAA,CAAM;AAAA,IACR;AAEA,IAAA,OAAO,IAAA,CAAA,iBAAA;AAAA,EACT;AAAA,EAEO,UAAA,GAAA;AACL,IAAA,WAAU,CAAA,QAAA;AACR,EAAA;AACE,EAAA,SAAA,CAAA,GAAO,EAAA;AAAA,IAAA,MACL,MAAG,GAAA,IAAA,CAAA,QAAA,GAAA,GAAA,CAAA;AAAA,IAAA,IAAA,CAAA,MACE,EAAE;AAAa,MAAA,MACtB,KAAA,GAAA,IAAA,WAAA,CAAA;AAAA,QACF,EAAI,EAAC,6BAAA;AAAA,QACP,MAAA,EAAA,QAAA;AACA,QAAA,QAAY,EAAA,MAAA;AAAA,QACd,IAAA,EAAA,CAAA,YAAA,EAAA,MAAA,CAAA,GAAA,CAAA,CAAA,UAAA;AAAA,OAEO,CAAA;AACL,MAAA,IAAA,CAAO,OAAK,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MACd,MAAA,KAAA;AAAA;AAGE,IAAA,OAAM,MAAA;AACN,EAAA;AACE,EAAA,eAAM,CAAA,MAAY;AAAY,IAAA,KAC5B,MAAI,CAAA,IAAA,EAAA,KAAA,CAAA,IAAA,MAAA,CAAA,OAAA,CAAA,IAAA,CAAA,QAAA,IAAA,EAAA,CAAA,EAAA;AAAA,MAAA,IACJ,KAAA,CAAA,IAAA,KAAA,IAAA,EAAA;AAAA,QACA,OAAA,KAAA;AAAA,MAAA;AACgC,IAAA;AAElC,IAAA,MAAA,KAAK,GAAA;AACL,MAAA,EAAA,EAAA,qCAAM;AAAA,MACR,MAAA,EAAA,QAAA;AACA,MAAA,QAAO,EAAA,MAAA;AAAA,MACT,IAAA,EAAA,CAAA,iBAAA,EAAA,MAAA,CAAA,IAAA,CAAA,CAAA,UAAA;AAAA;AAGE,IAAA,IAAA,CAAA,OAAY,EAAA,cAAgB,CAAA,KAAA,CAAO;AACjC,IAAA,MAAI,KAAA;AACF,EAAA;AAAO,EAAA,YACT,CAAA,KAAA,GAAA,EAAA,EAAA;AAAA,IACF,IAAA,KAAA,CAAA,UAAA,EAAA;AAEA,MAAA,OAAM,cAAY,CAAA,IAAA,CAAA,UAAY,CAAA,CAAA,MAAA,CAAA,CAAA,GAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,KAAA;AAAA,QAC5B,OAAI;AAAA,UACJ,GAAA,GAAA;AAAA,UACA,CAAA,CAAA,GAAA;AAAA,YACM,IAAA,EAAA,CAAA,CAAA;AAAgC;AAExC,SAAK;AACL,MAAA,CAAA,EAAA,EAAM,CAAA;AAAA,IACR;AAAA,IAEO,OAAA,IAAa,CAAA,UAAmC;AACrD,EAAA;AACE,EAAA,UAAA,CAAO,OAAO,EAAA;AACZ,IAAA,IAAA,CAAA,QAAO,GAAA,eAAA,CAAA,OAAA,CAAA;AAAA,EAAA;AACF,EAAA,SACF,CAAC;AAAkB,IAAA;AACtB,GAAA,EAAA;AACG,IACP,IAAA,CAAA,OAAA,GAAA,MAAA;AACA,IAAA,IAAA,IAAO,CAAA,OAAK,EAAA;AAAA,MACd,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,OAAA,CAAA,CAAA,OAAA,CAAA,GAAA,IAAA;AAAA,aAEkB,OAAA,GAAwB,GAAA,CAAA,EAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AACxC,MAAA,CAAA,CAAA;AAAuC,IACzC;AAAA,IAEO,IAAA,IAAU,CAAA,OAAE,EAAO;AACxB,MAAA,IAAK,CAAA,OAAA,CAAU,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AAEf,IAAA;AACE,IAAA,IAAA,IAAA,CAAO,SAAK,EAAK;AACf,MAAA,IAAA,CAAA,SAAK,CAAA,WAAgB,CAAA,IAAA,CAAA,QAAiB;AAAO,IAAA;AAC9C,IACH,IAAA,IAAA,CAAA,IAAA,EAAA;AAEA,MAAA,OAAS,IAAA,CAAA,IAAS,CAAA,IAAA,CAAA,CAAA,OAAA,CAAA,GAAA,IAAA;AAChB,QAAA,IAAK,CAAA,IAAA,GAAQ,GAAA,CAAA,EAAA,WAAiB,CAAA,IAAA,CAAO,OAAA,CAAA;AAAA,MACvC,CAAA,CAAA;AAEA,IAAA;AACE,IAAA,IAAA,IAAK,CAAA,QAAU,EAAA;AAAwB,MACzC,IAAA,CAAA,QAAA,CAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AAEA,IAAA;AACE,IAAA,IAAA,IAAA,CAAO,QAAK,EAAK;AACf,MAAA,MAAA,CAAK,IAAA,CAAA,IAAO,CAAG,QAAG,CAAA,CAAA,WAAiB,IAAA;AAAO,QAC3C,IAAA,CAAA,QAAA,GAAA,GAAA,CAAA,EAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AAAA,MACH,CAAA,CAAA;AAEA,IAAA;AACE,IAAA,IAAA,IAAK,CAAA,WAAS,EAAA;AAAwB,MACxC,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,WAAA,CAAA,CAAA,OAAA,CAAA,GAAA,IAAA;AAEA,QAAI,KAAK,WAAU,GAAA,GAAA,CAAA,EAAA,WAAA,CAAA,IAAA,CAAA,OAAA,CAAA;AACjB,MAAA,CAAA,CAAA;AACE,IAAA;AAA8C,IAAA,MAC/C,mBAAA,GAAA,eAAA,EAAA;AAAA,IACH,mBAAA,CAAA,OAAA,CAAA,QAAA,IAAA;AAEA,MAAA,QAAS,CAAA,WAAa,CAAA,IAAA,CAAA,OAAA,CAAA;AACpB,IAAA,CAAA,CAAA;AACE,EAAA;AAAiD,EAAA,YAClD,CAAA,SAAA,EAAA;AAAA,IACH,IAAA,CAAA,UAAA,GAAA,SAAA,CAAA,IAAA,CAAA,SAAA,CAAA;AAGA,IAAA,IAAA;AACA,MAAA,MAAA,CAAA,IAAA,CAAA,IAAA,CAAA,SAA4B,OAAA,CAAA,GAAA,IAAY;AACtC,QAAA,IAAA,IAAS,CAAA,UAAY;AAAY,UAClC,IAAA,CAAA,OAAA,GAAA,GAAA,CAAA,EAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,QACH;AAAA;AAGE,IAAA;AAEA,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAA,OAAY,GAAA,IAAK,CAAA,qBAAiB,CAAA,IAAO,CAAA,OAAA,EAAA;AACvC,QAAA,cAAS,EAAA,CAAA,gBAAY,EAAA,gBAAA;AACnB,OAAA,CAAA;AAAmD,MAAA,IACrD,CAAA,OAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AAAA,IAAA;AACD,IACH,IAAA,IAAA,CAAA,SAAA,EAAA;AAEA,MAAA,cAAS,GAAS,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,SAAA,EAAA;AAChB,QAAA,cAAe,EAAA,CAAA,gBAAgB,EAAA,gBAAgB;AAAS,OAAA,CACtD;AAAmD,MACrD,IAAC,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AACD,IAAA;AAA2C,IAC7C,IAAA,IAAA,CAAA,IAAA,EAAA;AAEA,MAAA,OAAS,GAAA,EAAA;AACP,MAAA,MAAK,CAAA,OAAA,CAAA,IAAY,CAAA,IAAK,CAAA,CAAA,OAAW,CAAA,CAAA,CAAA,GAAA,EAAA,WAAgB;AAAW,QAC1D,IAAA,IAAA,CAAA,UAAiB,EAAA;AAAkC,UACpD,GAAA,CAAA,GAAA,CAAA,GAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,KAAA,EAAA;AACD,YAAK,cAAU,EAAA,CAAA,gBAAoB,EAAA,gBAAU;AAAA,WAC/C,CAAA;AAEA,aAAS,CAAA,GAAA,CAAA,CAAM,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AACb,QAAA;AACA,MAAA,CAAA,CAAA;AACE,MAAA,IAAA,CAAA,OAAS,GAAA;AACP,IAAA;AAA6C,IAAA,IAAA,IAC3C,CAAA,QAAA,EAAA;AAAmD,MAAA,IACrD,CAAC,QAAA,GAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,IAAA,CAAA,QAAA,EAAA;AACD,QAAA,cAAS,EAAA,CAAA,gBAAoB,EAAA,gBAAU;AAAA,OAAA,CACzC;AAAA,MACF,IAAC,CAAA,QAAA,CAAA,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AACD,IAAA;AAAY,IACd,IAAA,IAAA,CAAA,QAAA,EAAA;AAEA,MAAA,WAAS,GAAA,EAAA;AACP,MAAA,MAAK,CAAA,OAAA,CAAA,IAAW,CAAA,QAAK,CAAA,CAAA,OAAW,CAAA,CAAA,CAAA,GAAW,QAAK,CAAA,KAAA;AAAU,QACxD,IAAA,IAAA,CAAA,UAAiB,EAAA;AAAkC,UACpD,OAAA,CAAA,GAAA,CAAA,GAAA,IAAA,CAAA,UAAA,CAAA,UAAA,CAAA,MAAA,EAAA;AACD,YAAK,cAAS,EAAA,CAAA,gBAAoB,EAAA,gBAAU;AAAA,WAC9C,CAAA;AAEA,iBAAS,CAAA,GAAA,CAAA,CAAU,cAAA,CAAA,IAAA,CAAA,UAAA,CAAA;AACjB,QAAA;AACA,MAAA,CAAA,CAAA;AACE,MAAA,IAAA,CAAA,QAAS,GAAA,OAAY;AACnB,IAAA;AAAkD,EAAA;AACG,EAAA,MAAA,GACpD;AACD,IAAA,OAAA,IAAA,CAAA,IAAQ;AAAmC,EAAA;AAC7C,EAAA,SACD,GAAA;AACD,IAAA,OAAK,IAAA,CAAA,OAAW;AAAA,EAAA;AAClB,EACF,YAAA,GAAA;AAAA,IAEO,OAAS,IAAA,CAAA,UAAA;AACd,EAAA;AAAY,EACd,SAAA,GAAA;AAAA,IAEO,OAAA,IAAY,CAAA,OAAA;AACjB,EAAA;AAAY,EACd,UAAA,GAAA;AAAA,IAEO,OAAA,IAAA,CAAA,QAAe;AACpB,EAAA;AAAY,EACd,mBAAA,GAAA;AAAA,IAEO,OAAA,IAAY,CAAA,iBAAA;AACjB,EAAA;AAAY,EACd,mBAAA,CAAA,gBAAA,EAAA;AAAA,IAEO,IAAA,OAAa,gBAAA,KAAA,UAAA,EAAA;AAClB,MAAA,IAAA,CAAO,iBAAK,GAAA,CAAA;AAAA,QACd,OAAA,EAAA,gBAAA;AAAA,QAEO,IAAA,EAAA;AACL,OAAA,CAAA;AAAY,MACd;AAAA;AAGE,IAAA,IAAI,CAAA,KAAA,CAAO,wBAAqB,CAAA,EAAA;AAC9B,MAAA,MAAK,KAAA,GAAA,IAAA,WAAoB,CAAA;AAAA,QACvB,EAAA,EAAA,2CAAA;AAAA,QAAA,MACE,EAAA,QAAS;AAAA,QAAA,QACH,EAAA,MAAA;AAAA,QACR,IAAA,EAAA,CAAA,2DAAA,EAAA,OAAA,gBAAA,CAAA;AAAA,OACF,CAAA;AACA,MAAA,IAAA,CAAA,OAAA,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MACF,MAAA,KAAA;AAEA,IAAA;AACE,IAAA,IAAA,CAAA,iBAAkB,GAAA,gBAAY,CAAA,GAAA,CAAA,CAAA,IAAA;AAAA,MAAA,IAC5B,OAAI,CAAA,KAAA,UAAA,EAAA;AAAA,QACJ,OAAA;AAAA,UACA,OAAA,EAAA,CAAA;AAAA,UACA,IAAM,EAAA;AAAqF,SAC5F;AACD,MAAA;AACA,MAAA,OAAM;AAAA,QACR,OAAA,EAAA,CAAA,CAAA,OAAA;AAEA,QAAA,IAAK,EAAA,CAAA,CAAA,IAAA,IAAA;AACH,OAAA;AACE,IAAA,CAAA,CAAA;AAAO,EAAA;AACI,EAAA,WACT,GAAM;AAAA,IAAA,OACR,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,SAAA,IAAA,EAAA,CAAA;AAAA,EAAA;AAEF,EAAA,iBAAO,GAAA;AAAA,IAAA,aACI,CAAA,MAAE,CAAA,IAAA,CAAA,eAAA,IAAA,EAAA,CAAA;AAAA,EAAA;AACK,EAAA,SAClB,GAAA;AAAA,IACF,OAAC,IAAA,CAAA,OAAA;AAAA,EACH;AAAA,EAEO,gBAAc,GAAA;AACnB,IAAA,OAAO,IAAA,CAAA,QAAO;AAA2B,EAC3C;AAAA;AAGE;AAA+C;AACjD;AAGE;AAAY,EACd,UAAA,CAAA,SAAA,EAAA;AAAA,IAEO,MAAA,QAAA,GAAmB,IAAA,CAAA,WAAA,EAAA;AACxB,IAAA,OAAO,QAAK,CAAA,IAAA,CAAA,OAAA,IAAA;AAAA,MACd,MAAA,YAAA,GAAA,OAAA,CAAA,eAAA,EAAA;AAAA,MAAA,OAAA,OAAA,CAAA,aAAA,CAAA,YAAA,CAAA,IAAA,CAAA,KAAA,SAAA;AAAA,IAAA,CAAA,CAAA;AAAA,EAAA;AAAA,EAAA,gBAAA,CAAA,SAAA,EAAA;AAAA,IAAA,MAAA,QAAA,GAAA,IAAA,CAAA,iBAAA,EAAA;AAAA,mBAOkB,CAAA,IAA6C,CAAA,OAAA,IAAA,OAAA,CAAA,EAAA,KAAA,SAAA,CAAA;AAC7D,EAAA;AACA,EAAA,MAAA;AACE,IAAA,KAAA;AACA,IAAA,WAAO;AAA6C,IACtD,QAAC;AAAA,IACH,MAAA;AAAA;AAGE,IAAA,OAAM;AACN,IAAA,IAAA;AAAwD,IAC1D;AAAA;AAE4B,IAC1B,IAAA,CAAA,WAAA,EAAA;AAAA,MACA,MAAA,KAAA,GAAA,IAAA,WAAA,CAAA;AAAA,QACA,EAAA,EAAA,6CAAA;AAAA,QACA,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAA,0BAAA;AAAA,QACA,OAAA,EAAA;AAAA,UACA,KAAA;AAAA,UAUC;AACD;AACE,OAAA,CAAA;AAA8B,MAAA,IAC5B,CAAA,OAAI,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MAAA,MACJ,KAAA;AAAA,IAAA;AACA,IAAA,IACA,CAAA,IAAA,CAAM,OAAA,EAAA,cAAA,EAAA;AAAA,MAAA,MACN,KAAS,GAAA,IAAA,WAAA,CAAA;AAAA,QAAA,EACP,EAAA,iDAAA;AAAA,QAAA,MACA,EAAA,QAAA;AAAA,QACF,QAAA,EAAA,QAAA;AAAA,QACD,IAAA,EAAA,uEAAA;AACD,QAAA,OAAK,EAAA;AACL,UAAA,KAAM;AAAA,UACR;AAEA;AACE,OAAA,CAAA;AAA8B,MAAA,IAC5B,CAAA,OAAI,EAAA,cAAA,CAAA,KAAA,CAAA;AAAA,MAAA,MACJ,KAAA;AAAA,IAAA;AACA,IAAA,OACA,MAAM,IAAA,CAAA,OAAA,CAAA,cAAA,CAAA;AAAA,MAAA,KACN;AAAS,MAAA,WACP;AAAA,MAAA,QACA;AAAA,MAAA,MACF;AAAA,MACF,QAAC;AACD,MAAA,OAAK;AACL,MAAA,IAAA;AAAM,MACR;AAEA,KAAA,CAAA;AAAyC,EAAA;AACvC,EAAA,MACA,OAAA,CAAA,WAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IACA,CAAA,WAAA,EAAA;AAAA,MACA,MAAA,KAAA,GAAA,IAAA,WAAA,CAAA;AAAA,QACA,EAAA,EAAA,mCAAA;AAAA,QACA,MAAA,EAAA,QAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,QACA,IAAA,EAAA,0BAAA;AAAA,QACD,OAAA,EAAA;AAAA,UACH;AAAA;AAaE,OAAA,CAAI;AACF,MAAA,IAAA,CAAA,OAAM,EAAQ,cAAI,CAAA,KAAY,CAAA;AAAA,MAAA,MACxB,KAAA;AAAA,IAAA;AACJ,IAAA,IACA,CAAA,IAAA,CAAA,OAAA,EAAA;AAAA,MAAA,MACA,KAAM,GAAA,IAAA,WAAA,CAAA;AAAA,QACN,EAAA,EAAA,uCAAS;AAAA,QAAA,MACP,EAAA,QAAA;AAAA,QACF,QAAA,EAAA,QAAA;AAAA,QACD,IAAA,EAAA,mBAAA;AACD,QAAA,OAAK,EAAA;AACL,UAAA;AAAM;AAGR,OAAA,CAAI;AACF,MAAA,MAAM,KAAA;AAAwB,IAAA;AACxB,IAAA,OACJ,MAAA,IAAA,CAAA,OAAA,CAAA,OAAA,CAAA,WAAA,EAAA,MAAA,CAAA;AAAA,EAAA;AACA;AACM;AACG;AACP;AACF,EAAA,aACD,GAAA;AACD,IAAA,OAAA,IAAM,CAAA,WAAA;AAAA,EAAA;AAGR;AAAqD;AACvD;AAAA;AAAA;AAAA;AAAA;AAOE;AAAY;AACd,EAAA,YAAA,CAAA,QAAA,EAAA,OAAA,EAAA;AAAA,IAAA,IAAA,CAAA,IAAA,CAAA,WAAA,EAAA;AAAA,MAAA,OAAA,MAAA;AAAA,IAAA;AAAA,IAAA,MAAA,oBAAA,GAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,WAAA,IAAA,EAAA,CAAA;AAAA,IAAA,MAAA,wBAAA,GAAA,oBAAA,CAAA,MAAA,CAAA,MAAA,IAAA,MAAA,CAAA,EAAA,KAAA,QAAA,CAAA;AAAA,IAAA,IAAA,wBAAA,CAAA,MAAA,KAAA,CAAA,EAAA;AAAA,MAAA,IAAA,CAAA,OAAA,EAAA,KAAA,CAAA,CAAA,sCAAA,EAAA,QAAA,CAAA,CAAA,CAAA;AAAA,MAAA,OAAA,MAAA;AAAA,IAWO;AACL,IAAA,IAAI,OAAM,EAAA;AACR,MAAA,MAAA,qBAAO,GAAA,wBAAA,CAAA,IAAA,CAAA,MAAA,IAAA,MAAA,CAAA,OAAA,KAAA,OAAA,CAAA;AAAA,MACT,IAAA,CAAA,qBAAA,EAAA;AAEA,QAAA,iDAAgD,EAAA,QAAe,CAAC,0BAAC,EAAA,OAAA,CAAA,EAAA,CAAA,CAAA;AAEjE,MAAA;AAEA,MAAA,OAAI;AACF,IAAA,CAAA,MAAK;AACL,MAAA,IAAA,wBAAO,CAAA,MAAA,KAAA,CAAA,EAAA;AAAA,QACT,OAAA,wBAAA,CAAA,CAAA,CAAA;AAEA,MAAA;AACE,MAAA,8BAA8B,CAAA,CAAA,EAAA,CAAA,KAAA;AAC9B,QAAA,MAAK,QAAA,GAAA,CAAA,CAAA,WAAuB,IAAA,OAAA,CAAA,CAAA,WAAA,KAAA,QAAA,GAAA,IAAA,IAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAA,OAAA,EAAA,GAAA,GAAA;AAC1B,QAAA,cAAc,GAAA,CAAA,CAAA,WAAM,IAAA,OAAA,CAAA,CAAA,WAA+B,KAAQ,QAAA,GAAA,IAAA,IAAA,CAAA,CAAA,CAAA,oBAAwC,EAAA,GAAA,GAAA;AAAA,QACrG,IAAA,KAAA,CAAA,QAAA,CAAA,IAAA,KAAA,CAAA,QAAA,CAAA,EAAA,OAAA,CAAA;AACA,QAAA,IAAA,KAAO,CAAA,QAAA,CAAA,EAAA,OAAA,CAAA;AAAA,QACT,IAAO,KAAA,CAAA,QAAA,CAAA,EAAA,OAAA,EAAA;AAEL,QAAA,OAAI,QAAA,GAAA,QAAA;AACF,MAAA,CAAA,CAAA;AAAiC,MACnC,IAAA,wBAAA,CAAA,MAAA,GAAA,CAAA,EAAA;AAEA,QAAA,MAAA,YAAA,GAAA,wBAAwC,CAAA,CAAA,CAAA;AAEtC,QAAA,IAAA,YAAM,IAAa,YAAA,CAAA,WAAwB,IAAA,OAAA,YAAgB,CAAA,WAAoB,KAAE,QAAW,UAAU,CAAA,IAAI,IAAA,CAAA,YAAA,CAAA,WAAA,CAAA,CAAA,OAAA,EAAA,CAAA,EAAA;AAC1G,UAAA,OAAM,YAAa;AAEnB,QAAA;AACA,MAAA;AACA,MAAA,IAAA,CAAA,OAAU,EAAA,IAAA,CAAA,CAAQ,sDAAU,EAAA,QAAA,CAAA,8EAAA,CAAA,CAAA;AAE5B,MAAA,OAAA,MAAO;AAAW,IAAA;AAIpB,EAAA;AACE,EAAA,MAAA,gBAAM,CAAA;AACN,IAAA,MAAA,sBAEE,CAAA,KAAA,EAAA,QAAa,CAAA;AAIb,EAAA;AAAO,EAAA,MACT,mBAAA,CAAA,KAAA,EAAA,QAAA,EAAA;AAAA,IAAA,MACF,IAAA,CAAA,OAAA,CAAA,WAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AACA,EAAA;AAAc,EAAA,MACZ;AAAiE,IAAA,KACnE,MAAA,KAAA,IAAA,IAAA,CAAA,OAAA,EAAA;AACA,MAAA,IAAA,CAAA,IAAO,CAAA,OAAA,CAAA,KAAA,CAAA,EAAA;AAAA,QACT;AAAA,MACF;AAAA,MAEA,MAAa,SAAA,GAAA,KAAiB,CAAA,OAAe,CAAA,IAAyC,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,GAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,GAAA,CAAA,IAAA,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA;AACpF,MAAA,KAAM,MAAK,QAAQ,IAAA,SAAU,EAAO;AAAQ,QAC9C,MAAA,IAAA,CAAA,OAAA,CAAA,SAAA,CAAA,KAAA,EAAA,QAAA,CAAA;AAAA,MAEA;AACE,IAAA;AAA8C,EAChD;AAAA,EAEA,MAAa,eAAA,GAAA;AACX,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,OAAA,EAAS;AAChC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,GAAI,CAAC,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAC,CAAA;AACjG,MAAA,KAAA,MAAW,YAAY,SAAA,EAAW;AAChC,QAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,WAAU,CAAA,KAAO,EAAA,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,IACF,MAAA,IAAA,CAAA,OAAA,CAAA,KAAA,EAAA;AAAA,EAEA;AACE;AACE;AACE;AAAA,EAAA,MACF,QAAA,GAAA;AAEA,IAAA,MAAA,yBAAwB,EAAA;AACxB,IAAA,MAAA,IAAA,CAAA,eAAuB,EAAA;AACrB,IAAA,IAAA,CAAA,OAAM,EAAA,IAAK,CAAA,2BAA2B,CAAA;AAAQ,EAAA;AAChD;AAGF,MAAA,iBAAmB,CAAA,IAAA;AAAM,EAC3B,KAAA,GAAA,gBAAA,CAAA,IAAA,CAAA;AAAA,EAAA,MAAA,GAAA,iBAAA,CAAA,KAAA,EAAA,CAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,CAAA;AAAA,EAAA,iBAAA,CAAA,KAAA,EAAA,CAAA,EAAA,MAAA,CAAA;AAAA,EAAA,OAAA,MAAA;AAAA,CAAA,EAKM","file":"chunk-A5NC3XK2.js","sourcesContent":["import EventEmitter from 'events';\nimport { PubSub } from './pubsub';\nimport type { Event } from './types';\n\nexport class EventEmitterPubSub extends PubSub {\n private emitter: EventEmitter;\n\n constructor() {\n super();\n this.emitter = new EventEmitter();\n }\n\n async publish(topic: string, event: Omit<Event, 'id' | 'createdAt'>): Promise<void> {\n const id = crypto.randomUUID();\n const createdAt = new Date();\n this.emitter.emit(topic, {\n ...event,\n id,\n createdAt,\n });\n }\n\n async subscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.on(topic, cb);\n }\n\n async unsubscribe(topic: string, cb: (event: Event, ack?: () => Promise<void>) => void): Promise<void> {\n this.emitter.off(topic, cb);\n }\n\n async flush(): Promise<void> {\n // no-op\n }\n}\n","import type { Mastra } from '..';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../error';\nimport type { ScoringHookInput } from '../scores';\n\nexport function createOnScorerHook(mastra: Mastra) {\n return async (hookData: ScoringHookInput) => {\n if (!mastra.getStorage()) {\n return;\n }\n\n const storage = mastra.getStorage();\n const entityId = hookData.entity.id;\n const entityType = hookData.entityType;\n const scorer = hookData.scorer;\n try {\n const scorerToUse = await findScorer(mastra, entityId, entityType, scorer.id);\n\n if (!scorerToUse) {\n throw new MastraError({\n id: 'MASTRA_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ID ${hookData.scorer.id} not found`,\n });\n }\n\n let input = hookData.input;\n let output = hookData.output;\n\n if (entityType !== 'AGENT') {\n output = { object: hookData.output };\n }\n\n const { structuredOutput, ...rest } = hookData;\n\n const runResult = await scorerToUse.scorer.run({\n ...rest,\n input,\n output,\n });\n\n const payload = {\n ...rest,\n ...runResult,\n entityId,\n scorerId: hookData.scorer.id,\n metadata: {\n structuredOutput: !!structuredOutput,\n },\n };\n await storage?.saveScore(payload);\n } catch (error) {\n const mastraError = new MastraError(\n {\n id: 'MASTRA_SCORER_FAILED_TO_RUN_HOOK',\n domain: ErrorDomain.SCORER,\n category: ErrorCategory.USER,\n details: {\n scorerId: scorer.id,\n entityId,\n entityType,\n },\n },\n error,\n );\n\n mastra.getLogger()?.trackException(mastraError);\n mastra.getLogger()?.error(mastraError.toString());\n }\n };\n}\n\nasync function findScorer(mastra: Mastra, entityId: string, entityType: string, scorerId: string) {\n let scorerToUse;\n if (entityType === 'AGENT') {\n const scorers = await mastra.getAgentById(entityId).getScorers();\n scorerToUse = scorers[scorerId];\n } else if (entityType === 'WORKFLOW') {\n const scorers = await mastra.getWorkflowById(entityId).getScorers();\n scorerToUse = scorers[scorerId];\n }\n\n // Fallback to mastra-registered scorer\n if (!scorerToUse) {\n const mastraRegisteredScorer = mastra.getScorerByName(scorerId);\n scorerToUse = mastraRegisteredScorer ? { scorer: mastraRegisteredScorer } : undefined;\n }\n\n return scorerToUse;\n}\n","import type { Agent } from '../agent';\nimport { getAllAITracing, setupAITracing, shutdownAITracingRegistry } from '../ai-tracing';\nimport type { AITracingConfig } from '../ai-tracing';\nimport type { BundlerConfig } from '../bundler/types';\nimport type { MastraDeployer } from '../deployer';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport { EventEmitterPubSub } from '../events/event-emitter';\nimport type { PubSub } from '../events/pubsub';\nimport type { Event } from '../events/types';\nimport { AvailableHooks, registerHook } from '../hooks';\nimport { LogLevel, noopLogger, ConsoleLogger } from '../logger';\nimport type { IMastraLogger } from '../logger';\nimport type { MCPServerBase } from '../mcp';\nimport type { MastraMemory } from '../memory/memory';\nimport type { AgentNetwork } from '../network';\nimport type { NewAgentNetwork } from '../network/vNext';\nimport type { MastraScorer } from '../scores';\nimport type { Middleware, ServerConfig } from '../server/types';\nimport type { MastraStorage } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport { InstrumentClass, Telemetry } from '../telemetry';\nimport type { OtelConfig } from '../telemetry';\nimport type { MastraTTS } from '../tts';\nimport type { MastraIdGenerator } from '../types';\nimport type { MastraVector } from '../vector';\nimport type { Workflow } from '../workflows';\nimport { WorkflowEventProcessor } from '../workflows/evented/workflow-event-processor';\nimport type { LegacyWorkflow } from '../workflows/legacy';\nimport { createOnScorerHook } from './hooks';\n\nexport interface Config<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n> {\n agents?: TAgents;\n networks?: TNetworks;\n vnext_networks?: TVNextNetworks;\n storage?: MastraStorage;\n vectors?: TVectors;\n logger?: TLogger | false;\n legacy_workflows?: TLegacyWorkflows;\n workflows?: TWorkflows;\n tts?: TTTS;\n telemetry?: OtelConfig;\n observability?: AITracingConfig;\n idGenerator?: MastraIdGenerator;\n deployer?: MastraDeployer;\n server?: ServerConfig;\n mcpServers?: TMCPServers;\n bundler?: BundlerConfig;\n pubsub?: PubSub;\n scorers?: TScorers;\n\n /**\n * Server middleware functions to be applied to API routes\n * Each middleware can specify a path pattern (defaults to '/api/*')\n * @deprecated use server.middleware instead\n */\n serverMiddleware?: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path?: string;\n }>;\n\n // @deprecated add memory to your Agent directly instead\n memory?: never;\n\n events?: {\n [topic: string]: (\n event: Event,\n cb?: () => Promise<void>,\n ) => Promise<void> | ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n };\n}\n\n@InstrumentClass({\n prefix: 'mastra',\n excludeMethods: ['getLogger', 'getTelemetry'],\n})\nexport class Mastra<\n TAgents extends Record<string, Agent<any>> = Record<string, Agent<any>>,\n TLegacyWorkflows extends Record<string, LegacyWorkflow> = Record<string, LegacyWorkflow>,\n TWorkflows extends Record<string, Workflow> = Record<string, Workflow>,\n TVectors extends Record<string, MastraVector> = Record<string, MastraVector>,\n TTTS extends Record<string, MastraTTS> = Record<string, MastraTTS>,\n TLogger extends IMastraLogger = IMastraLogger,\n TNetworks extends Record<string, AgentNetwork> = Record<string, AgentNetwork>,\n TVNextNetworks extends Record<string, NewAgentNetwork> = Record<string, NewAgentNetwork>,\n TMCPServers extends Record<string, MCPServerBase> = Record<string, MCPServerBase>,\n TScorers extends Record<string, MastraScorer<any, any, any, any>> = Record<string, MastraScorer<any, any, any, any>>,\n> {\n #vectors?: TVectors;\n #agents: TAgents;\n #logger: TLogger;\n #legacy_workflows: TLegacyWorkflows;\n #workflows: TWorkflows;\n #tts?: TTTS;\n #deployer?: MastraDeployer;\n #serverMiddleware: Array<{\n handler: (c: any, next: () => Promise<void>) => Promise<Response | void>;\n path: string;\n }> = [];\n #telemetry?: Telemetry;\n #storage?: MastraStorage;\n #memory?: MastraMemory;\n #networks?: TNetworks;\n #vnext_networks?: TVNextNetworks;\n #scorers?: TScorers;\n #server?: ServerConfig;\n #mcpServers?: TMCPServers;\n #bundler?: BundlerConfig;\n #idGenerator?: MastraIdGenerator;\n #pubsub: PubSub;\n #events: {\n [topic: string]: ((event: Event, cb?: () => Promise<void>) => Promise<void>)[];\n } = {};\n\n /**\n * @deprecated use getTelemetry() instead\n */\n get telemetry() {\n return this.#telemetry;\n }\n\n /**\n * @deprecated use getStorage() instead\n */\n get storage() {\n return this.#storage;\n }\n\n /**\n * @deprecated use getMemory() instead\n */\n get memory() {\n return this.#memory;\n }\n\n get pubsub() {\n return this.#pubsub;\n }\n\n public getIdGenerator() {\n return this.#idGenerator;\n }\n\n /**\n * Generate a unique identifier using the configured generator or default to crypto.randomUUID()\n * @returns A unique string ID\n */\n public generateId(): string {\n if (this.#idGenerator) {\n const id = this.#idGenerator();\n if (!id) {\n const error = new MastraError({\n id: 'MASTRA_ID_GENERATOR_RETURNED_EMPTY_STRING',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'ID generator returned an empty string, which is not allowed',\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return id;\n }\n return crypto.randomUUID();\n }\n\n public setIdGenerator(idGenerator: MastraIdGenerator) {\n this.#idGenerator = idGenerator;\n }\n\n constructor(\n config?: Config<\n TAgents,\n TLegacyWorkflows,\n TWorkflows,\n TVectors,\n TTTS,\n TLogger,\n TNetworks,\n TVNextNetworks,\n TMCPServers,\n TScorers\n >,\n ) {\n // Store server middleware with default path\n if (config?.serverMiddleware) {\n this.#serverMiddleware = config.serverMiddleware.map(m => ({\n handler: m.handler,\n path: m.path || '/api/*',\n }));\n }\n\n /*\n Events\n */\n if (config?.pubsub) {\n this.#pubsub = config.pubsub;\n } else {\n this.#pubsub = new EventEmitterPubSub();\n }\n\n this.#events = {};\n for (const topic in config?.events ?? {}) {\n if (!Array.isArray(config?.events?.[topic])) {\n this.#events[topic] = [config?.events?.[topic] as any];\n } else {\n this.#events[topic] = config?.events?.[topic] ?? [];\n }\n }\n\n const workflowEventProcessor = new WorkflowEventProcessor({ mastra: this });\n const workflowEventCb = async (event: Event, cb?: () => Promise<void>): Promise<void> => {\n try {\n await workflowEventProcessor.process(event, cb);\n } catch (e) {\n console.error('Error processing event', e);\n }\n };\n if (this.#events.workflows) {\n this.#events.workflows.push(workflowEventCb);\n } else {\n this.#events.workflows = [workflowEventCb];\n }\n\n /*\n Logger\n */\n\n let logger: TLogger;\n if (config?.logger === false) {\n logger = noopLogger as unknown as TLogger;\n } else {\n if (config?.logger) {\n logger = config.logger;\n } else {\n const levelOnEnv =\n process.env.NODE_ENV === 'production' && process.env.MASTRA_DEV !== 'true' ? LogLevel.WARN : LogLevel.INFO;\n logger = new ConsoleLogger({ name: 'Mastra', level: levelOnEnv }) as unknown as TLogger;\n }\n }\n this.#logger = logger;\n\n this.#idGenerator = config?.idGenerator;\n\n let storage = config?.storage;\n\n if (storage) {\n storage = augmentWithInit(storage);\n }\n\n /*\n Telemetry\n */\n\n this.#telemetry = Telemetry.init(config?.telemetry);\n\n // Warn if telemetry is enabled but the instrumentation global is not set\n if (\n config?.telemetry?.enabled !== false &&\n typeof globalThis !== 'undefined' &&\n (globalThis as any).___MASTRA_TELEMETRY___ !== true\n ) {\n this.#logger?.warn(\n `Mastra telemetry is enabled, but the required instrumentation file was not loaded. ` +\n `If you are using Mastra outside of the mastra server environment, see: https://mastra.ai/en/docs/observability/tracing#tracing-outside-mastra-server-environment`,\n `If you are using a custom instrumentation file or want to disable this warning, set the globalThis.___MASTRA_TELEMETRY___ variable to true in your instrumentation file.`,\n );\n }\n\n /*\n AI Tracing\n */\n\n if (config?.observability) {\n setupAITracing(config.observability);\n }\n\n /*\n Storage\n */\n if (this.#telemetry && storage) {\n this.#storage = this.#telemetry.traceClass(storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry', 'batchTraceInsert', 'getTraces', 'getEvalsByAgentName'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n } else {\n this.#storage = storage;\n }\n\n /*\n Vectors\n */\n if (config?.vectors) {\n let vectors: Record<string, MastraVector> = {};\n Object.entries(config.vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n } else {\n vectors[key] = vector;\n }\n });\n\n this.#vectors = vectors as TVectors;\n }\n\n if (config?.networks) {\n this.#networks = config.networks;\n }\n\n if (config?.vnext_networks) {\n this.#vnext_networks = config.vnext_networks;\n }\n\n if (config?.mcpServers) {\n this.#mcpServers = config.mcpServers;\n\n // Set logger/telemetry/Mastra instance/id for MCP servers\n Object.entries(this.#mcpServers).forEach(([key, server]) => {\n server.setId(key);\n if (this.#telemetry) {\n server.__setTelemetry(this.#telemetry);\n }\n\n server.__registerMastra(this);\n server.__setLogger(this.getLogger());\n });\n }\n\n if (config && `memory` in config) {\n const error = new MastraError({\n id: 'MASTRA_CONSTRUCTOR_INVALID_MEMORY_CONFIG',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `\n Memory should be added to Agents, not to Mastra.\n\nInstead of:\n new Mastra({ memory: new Memory() })\n\ndo:\n new Agent({ memory: new Memory() })\n`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (config?.tts) {\n this.#tts = config.tts;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#tts?.[key]) {\n if (this.#telemetry) {\n // @ts-ignore\n this.#tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#tts[key].__setTelemetry(this.#telemetry);\n }\n }\n });\n }\n\n /*\n Agents\n */\n const agents: Record<string, Agent> = {};\n if (config?.agents) {\n Object.entries(config.agents).forEach(([key, agent]) => {\n if (agents[key]) {\n const error = new MastraError({\n id: 'MASTRA_AGENT_REGISTRATION_DUPLICATE_ID',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ID:${key} already exists`,\n details: {\n agentId: key,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n agent.__registerMastra(this);\n\n agent.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n\n agents[key] = agent;\n });\n }\n\n this.#agents = agents as TAgents;\n\n /*\n Networks\n */\n this.#networks = {} as TNetworks;\n this.#vnext_networks = {} as TVNextNetworks;\n\n if (config?.networks) {\n Object.entries(config.networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#networks[key] = network;\n });\n }\n\n if (config?.vnext_networks) {\n Object.entries(config.vnext_networks).forEach(([key, network]) => {\n network.__registerMastra(this);\n // @ts-ignore\n this.#vnext_networks[key] = network;\n });\n }\n\n /**\n * Scorers\n */\n\n const scorers = {} as Record<string, MastraScorer<any, any, any, any>>;\n if (config?.scorers) {\n Object.entries(config.scorers).forEach(([key, scorer]) => {\n scorers[key] = scorer;\n });\n }\n this.#scorers = scorers as TScorers;\n\n /*\n Legacy Workflows\n */\n this.#legacy_workflows = {} as TLegacyWorkflows;\n\n if (config?.legacy_workflows) {\n Object.entries(config.legacy_workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#legacy_workflows[key] = workflow;\n\n const workflowSteps = Object.values(workflow.steps).filter(step => !!step.workflowId && !!step.workflow);\n if (workflowSteps.length > 0) {\n workflowSteps.forEach(step => {\n // @ts-ignore\n this.#legacy_workflows[step.workflowId] = step.workflow;\n });\n }\n });\n }\n\n this.#workflows = {} as TWorkflows;\n if (config?.workflows) {\n Object.entries(config.workflows).forEach(([key, workflow]) => {\n workflow.__registerMastra(this);\n workflow.__registerPrimitives({\n logger: this.getLogger(),\n telemetry: this.#telemetry,\n storage: this.storage,\n memory: this.memory,\n agents: agents,\n tts: this.#tts,\n vectors: this.#vectors,\n });\n // @ts-ignore\n this.#workflows[key] = workflow;\n });\n }\n\n if (config?.server) {\n this.#server = config.server;\n }\n\n registerHook(AvailableHooks.ON_SCORER_RUN, createOnScorerHook(this));\n\n /*\n Register Mastra instance with AI tracing exporters and initialize them\n */\n if (config?.observability) {\n this.registerAITracingExporters();\n this.initAITracingExporters();\n }\n\n this.setLogger({ logger });\n }\n\n /**\n * Register this Mastra instance with AI tracing exporters that need it\n */\n private registerAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Check if exporter has __registerMastra method\n if ('__registerMastra' in exporter && typeof (exporter as any).__registerMastra === 'function') {\n (exporter as any).__registerMastra(this);\n }\n });\n });\n }\n\n /**\n * Initialize all AI tracing exporters after registration is complete\n */\n private initAITracingExporters(): void {\n const allTracingInstances = getAllAITracing();\n\n allTracingInstances.forEach(tracing => {\n const exporters = tracing.getExporters();\n exporters.forEach(exporter => {\n // Initialize exporter if it has an init method\n if ('init' in exporter && typeof exporter.init === 'function') {\n try {\n exporter.init();\n } catch (error) {\n this.#logger?.warn('Failed to initialize AI tracing exporter', {\n exporterName: exporter.name,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n });\n });\n }\n\n public getAgent<TAgentName extends keyof TAgents>(name: TAgentName): TAgents[TAgentName] {\n const agent = this.#agents?.[name];\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with name ${String(name)} not found`,\n details: {\n status: 404,\n agentName: String(name),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return this.#agents[name];\n }\n\n public getAgentById(id: string): Agent {\n let agent = Object.values(this.#agents).find(a => a.id === id);\n\n if (!agent) {\n try {\n agent = this.getAgent(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!agent) {\n const error = new MastraError({\n id: 'MASTRA_GET_AGENT_BY_AGENT_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Agent with id ${String(id)} not found`,\n details: {\n status: 404,\n agentId: String(id),\n agents: Object.keys(this.#agents ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return agent;\n }\n\n public getAgents() {\n return this.#agents;\n }\n\n public getVector<TVectorName extends keyof TVectors>(name: TVectorName): TVectors[TVectorName] {\n const vector = this.#vectors?.[name];\n if (!vector) {\n const error = new MastraError({\n id: 'MASTRA_GET_VECTOR_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Vector with name ${String(name)} not found`,\n details: {\n status: 404,\n vectorName: String(name),\n vectors: Object.keys(this.#vectors ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return vector;\n }\n\n public getVectors() {\n return this.#vectors;\n }\n\n public getDeployer() {\n return this.#deployer;\n }\n\n public legacy_getWorkflow<TWorkflowId extends keyof TLegacyWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TLegacyWorkflows[TWorkflowId] {\n const workflow = this.#legacy_workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_LEGACY_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#legacy_workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TLegacyWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflow<TWorkflowId extends keyof TWorkflows>(\n id: TWorkflowId,\n { serialized }: { serialized?: boolean } = {},\n ): TWorkflows[TWorkflowId] {\n const workflow = this.#workflows?.[id];\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with ID ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (serialized) {\n return { name: workflow.name } as TWorkflows[TWorkflowId];\n }\n\n return workflow;\n }\n\n public getWorkflowById(id: string): Workflow {\n let workflow = Object.values(this.#workflows).find(a => a.id === id);\n\n if (!workflow) {\n try {\n workflow = this.getWorkflow(id as any);\n } catch {\n // do nothing\n }\n }\n\n if (!workflow) {\n const error = new MastraError({\n id: 'MASTRA_GET_WORKFLOW_BY_ID_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Workflow with id ${String(id)} not found`,\n details: {\n status: 404,\n workflowId: String(id),\n workflows: Object.keys(this.#workflows ?? {}).join(', '),\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return workflow;\n }\n\n public legacy_getWorkflows(props: { serialized?: boolean } = {}): Record<string, LegacyWorkflow> {\n if (props.serialized) {\n return Object.entries(this.#legacy_workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#legacy_workflows;\n }\n\n public getScorers() {\n return this.#scorers;\n }\n\n public getScorer<TScorerKey extends keyof TScorers>(key: TScorerKey): TScorers[TScorerKey] {\n const scorer = this.#scorers?.[key];\n if (!scorer) {\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with ${String(key)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n return scorer;\n }\n\n public getScorerByName(name: string): MastraScorer<any, any, any, any> {\n for (const [_key, value] of Object.entries(this.#scorers ?? {})) {\n if (value.name === name) {\n return value;\n }\n }\n\n const error = new MastraError({\n id: 'MASTRA_GET_SCORER_BY_NAME_NOT_FOUND',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Scorer with name ${String(name)} not found`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n public getWorkflows(props: { serialized?: boolean } = {}): Record<string, Workflow> {\n if (props.serialized) {\n return Object.entries(this.#workflows).reduce((acc, [k, v]) => {\n return {\n ...acc,\n [k]: { name: v.name },\n };\n }, {});\n }\n return this.#workflows;\n }\n\n public setStorage(storage: MastraStorage) {\n this.#storage = augmentWithInit(storage);\n }\n\n public setLogger({ logger }: { logger: TLogger }) {\n this.#logger = logger;\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n this.#agents?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#memory) {\n this.#memory.__setLogger(this.#logger);\n }\n\n if (this.#deployer) {\n this.#deployer.__setLogger(this.#logger);\n }\n\n if (this.#tts) {\n Object.keys(this.#tts).forEach(key => {\n this.#tts?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#storage) {\n this.#storage.__setLogger(this.#logger);\n }\n\n if (this.#vectors) {\n Object.keys(this.#vectors).forEach(key => {\n this.#vectors?.[key]?.__setLogger(this.#logger);\n });\n }\n\n if (this.#mcpServers) {\n Object.keys(this.#mcpServers).forEach(key => {\n this.#mcpServers?.[key]?.__setLogger(this.#logger);\n });\n }\n\n // Set logger for AI tracing instances\n const allTracingInstances = getAllAITracing();\n allTracingInstances.forEach(instance => {\n instance.__setLogger(this.#logger);\n });\n }\n\n public setTelemetry(telemetry: OtelConfig) {\n this.#telemetry = Telemetry.init(telemetry);\n\n if (this.#agents) {\n Object.keys(this.#agents).forEach(key => {\n if (this.#telemetry) {\n this.#agents?.[key]?.__setTelemetry(this.#telemetry);\n }\n });\n }\n\n if (this.#memory) {\n this.#memory = this.#telemetry.traceClass(this.#memory, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#memory.__setTelemetry(this.#telemetry);\n }\n\n if (this.#deployer) {\n this.#deployer = this.#telemetry.traceClass(this.#deployer, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#deployer.__setTelemetry(this.#telemetry);\n }\n\n if (this.#tts) {\n let tts = {} as Record<string, MastraTTS>;\n Object.entries(this.#tts).forEach(([key, ttsCl]) => {\n if (this.#telemetry) {\n tts[key] = this.#telemetry.traceClass(ttsCl, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n tts[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#tts = tts as TTTS;\n }\n\n if (this.#storage) {\n this.#storage = this.#telemetry.traceClass(this.#storage, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n this.#storage.__setTelemetry(this.#telemetry);\n }\n\n if (this.#vectors) {\n let vectors = {} as Record<string, MastraVector>;\n Object.entries(this.#vectors).forEach(([key, vector]) => {\n if (this.#telemetry) {\n vectors[key] = this.#telemetry.traceClass(vector, {\n excludeMethods: ['__setTelemetry', '__getTelemetry'],\n });\n vectors[key].__setTelemetry(this.#telemetry);\n }\n });\n this.#vectors = vectors as TVectors;\n }\n }\n\n public getTTS() {\n return this.#tts;\n }\n\n public getLogger() {\n return this.#logger;\n }\n\n public getTelemetry() {\n return this.#telemetry;\n }\n\n public getMemory() {\n return this.#memory;\n }\n\n public getStorage() {\n return this.#storage;\n }\n\n public getServerMiddleware() {\n return this.#serverMiddleware;\n }\n\n public setServerMiddleware(serverMiddleware: Middleware | Middleware[]) {\n if (typeof serverMiddleware === 'function') {\n this.#serverMiddleware = [\n {\n handler: serverMiddleware,\n path: '/api/*',\n },\n ];\n return;\n }\n\n if (!Array.isArray(serverMiddleware)) {\n const error = new MastraError({\n id: 'MASTRA_SET_SERVER_MIDDLEWARE_INVALID_TYPE',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: `Invalid middleware: expected a function or array, received ${typeof serverMiddleware}`,\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n this.#serverMiddleware = serverMiddleware.map(m => {\n if (typeof m === 'function') {\n return {\n handler: m,\n path: '/api/*',\n };\n }\n return {\n handler: m.handler,\n path: m.path || '/api/*',\n };\n });\n }\n\n public getNetworks() {\n return Object.values(this.#networks || {});\n }\n\n public vnext_getNetworks() {\n return Object.values(this.#vnext_networks || {});\n }\n\n public getServer() {\n return this.#server;\n }\n\n public getBundlerConfig() {\n return this.#bundler;\n }\n\n /**\n * Get a specific network by ID\n * @param networkId - The ID of the network to retrieve\n * @returns The network with the specified ID, or undefined if not found\n */\n public getNetwork(networkId: string): AgentNetwork | undefined {\n const networks = this.getNetworks();\n return networks.find(network => {\n const routingAgent = network.getRoutingAgent();\n return network.formatAgentId(routingAgent.name) === networkId;\n });\n }\n\n public vnext_getNetwork(networkId: string): NewAgentNetwork | undefined {\n const networks = this.vnext_getNetworks();\n return networks.find(network => network.id === networkId);\n }\n\n public async getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n }: {\n runId: string;\n transportId: string;\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n }) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger?.getLogsByRunId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_BY_RUN_ID_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not configured or does not support getLogsByRunId operation',\n details: {\n runId,\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n return await this.#logger.getLogsByRunId({\n runId,\n transportId,\n fromDate,\n toDate,\n logLevel,\n filters,\n page,\n perPage,\n });\n }\n\n public async getLogs(\n transportId: string,\n params?: {\n fromDate?: Date;\n toDate?: Date;\n logLevel?: LogLevel;\n filters?: Record<string, any>;\n page?: number;\n perPage?: number;\n },\n ) {\n if (!transportId) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_MISSING_TRANSPORT',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.USER,\n text: 'Transport ID is required',\n details: {\n transportId,\n },\n });\n this.#logger?.trackException(error);\n throw error;\n }\n\n if (!this.#logger) {\n const error = new MastraError({\n id: 'MASTRA_GET_LOGS_LOGGER_NOT_CONFIGURED',\n domain: ErrorDomain.MASTRA,\n category: ErrorCategory.SYSTEM,\n text: 'Logger is not set',\n details: {\n transportId,\n },\n });\n throw error;\n }\n\n return await this.#logger.getLogs(transportId, params);\n }\n\n /**\n * Get all registered MCP server instances.\n * @returns A record of MCP server ID to MCPServerBase instance, or undefined if none are registered.\n */\n public getMCPServers(): Record<string, MCPServerBase> | undefined {\n return this.#mcpServers;\n }\n\n /**\n * Get a specific MCP server instance.\n * If a version is provided, it attempts to find the server with that exact logical ID and version.\n * If no version is provided, it returns the server with the specified logical ID that has the most recent releaseDate.\n * The logical ID should match the `id` property of the MCPServer instance (typically set via MCPServerConfig.id).\n * @param serverId - The logical ID of the MCP server to retrieve.\n * @param version - Optional specific version of the MCP server to retrieve.\n * @returns The MCP server instance, or undefined if not found or if the specific version is not found.\n */\n public getMCPServer(serverId: string, version?: string): MCPServerBase | undefined {\n if (!this.#mcpServers) {\n return undefined;\n }\n\n const allRegisteredServers = Object.values(this.#mcpServers || {});\n\n const matchingLogicalIdServers = allRegisteredServers.filter(server => server.id === serverId);\n\n if (matchingLogicalIdServers.length === 0) {\n this.#logger?.debug(`No MCP servers found with logical ID: ${serverId}`);\n return undefined;\n }\n\n if (version) {\n const specificVersionServer = matchingLogicalIdServers.find(server => server.version === version);\n if (!specificVersionServer) {\n this.#logger?.debug(`MCP server with logical ID '${serverId}' found, but not version '${version}'.`);\n }\n return specificVersionServer;\n } else {\n // No version specified, find the one with the most recent releaseDate\n if (matchingLogicalIdServers.length === 1) {\n return matchingLogicalIdServers[0];\n }\n\n matchingLogicalIdServers.sort((a, b) => {\n // Ensure releaseDate exists and is a string before creating a Date object\n const dateAVal = a.releaseDate && typeof a.releaseDate === 'string' ? new Date(a.releaseDate).getTime() : NaN;\n const dateBVal = b.releaseDate && typeof b.releaseDate === 'string' ? new Date(b.releaseDate).getTime() : NaN;\n\n if (isNaN(dateAVal) && isNaN(dateBVal)) return 0;\n if (isNaN(dateAVal)) return 1; // Treat invalid/missing dates as older\n if (isNaN(dateBVal)) return -1; // Treat invalid/missing dates as older\n\n return dateBVal - dateAVal; // Sorts in descending order of time (latest first)\n });\n\n // After sorting, the first element should be the latest if its date is valid\n if (matchingLogicalIdServers.length > 0) {\n const latestServer = matchingLogicalIdServers[0];\n if (\n latestServer &&\n latestServer.releaseDate &&\n typeof latestServer.releaseDate === 'string' &&\n !isNaN(new Date(latestServer.releaseDate).getTime())\n ) {\n return latestServer;\n }\n }\n this.#logger?.warn(\n `Could not determine the latest server for logical ID '${serverId}' due to invalid or missing release dates, or no servers left after filtering.`,\n );\n return undefined;\n }\n }\n\n public async addTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.subscribe(topic, listener);\n }\n\n public async removeTopicListener(topic: string, listener: (event: any) => Promise<void>) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n\n public async startEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.subscribe(topic, listener);\n }\n }\n }\n\n public async stopEventEngine() {\n for (const topic in this.#events) {\n if (!this.#events[topic]) {\n continue;\n }\n\n const listeners = Array.isArray(this.#events[topic]) ? this.#events[topic] : [this.#events[topic]];\n for (const listener of listeners) {\n await this.#pubsub.unsubscribe(topic, listener);\n }\n }\n\n await this.#pubsub.flush();\n }\n\n /**\n * Shutdown Mastra and clean up all resources\n */\n async shutdown(): Promise<void> {\n // Shutdown AI tracing registry and all instances\n await shutdownAITracingRegistry();\n await this.stopEventEngine();\n\n this.#logger?.info('Mastra shutdown completed');\n }\n}\n"]}
@@ -104,5 +104,5 @@ exports.Tool = Tool;
104
104
  exports.createTool = createTool;
105
105
  exports.isVercelTool = isVercelTool;
106
106
  exports.validateToolInput = validateToolInput;
107
- //# sourceMappingURL=chunk-ZAJTIZZF.cjs.map
108
- //# sourceMappingURL=chunk-ZAJTIZZF.cjs.map
107
+ //# sourceMappingURL=chunk-ABRPHTOG.cjs.map
108
+ //# sourceMappingURL=chunk-ABRPHTOG.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-ZAJTIZZF.cjs","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
1
+ {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-ABRPHTOG.cjs","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { ToolCallOptions } from 'ai-v5';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: ToolExecutionOptions | ToolCallOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
@@ -99,5 +99,5 @@ function isVercelTool(tool) {
99
99
  }
100
100
 
101
101
  export { Tool, createTool, isVercelTool, validateToolInput };
102
- //# sourceMappingURL=chunk-GOG77M6R.js.map
103
- //# sourceMappingURL=chunk-GOG77M6R.js.map
102
+ //# sourceMappingURL=chunk-BJGHUKKM.js.map
103
+ //# sourceMappingURL=chunk-BJGHUKKM.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-GOG77M6R.js","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
1
+ {"version":3,"sources":["../src/tools/validation.ts","../src/tools/tool.ts","../src/tools/toolchecks.ts"],"names":[],"mappings":"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","file":"chunk-BJGHUKKM.js","sourcesContent":["import type { z } from 'zod';\n\nexport interface ValidationError<T = any> {\n error: true;\n message: string;\n validationErrors: z.ZodFormattedError<T>;\n}\n\n/**\n * Validates input against a Zod schema and returns a structured error if validation fails\n * @param schema The Zod schema to validate against\n * @param input The input to validate\n * @param toolId Optional tool ID for better error messages\n * @returns The validation error object if validation fails, undefined if successful\n */\nexport function validateToolInput<T = any>(\n schema: z.ZodSchema<T> | undefined,\n input: unknown,\n toolId?: string,\n): { data: T | unknown; error?: ValidationError<T> } {\n if (!schema || !('safeParse' in schema)) {\n return { data: input };\n }\n\n // Store validation results to avoid duplicate validation\n type ValidationAttempt = {\n result: z.SafeParseReturnType<any, T>;\n data: unknown;\n structure: 'direct' | 'context' | 'inputData';\n };\n\n const validationAttempts: ValidationAttempt[] = [];\n\n // Try validating the input directly first\n const directValidation = schema.safeParse(input);\n validationAttempts.push({\n result: directValidation,\n data: input,\n structure: 'direct',\n });\n\n if (directValidation.success) {\n return { data: input };\n }\n\n // Handle ToolExecutionContext format { context: data, ... }\n if (input && typeof input === 'object' && 'context' in input) {\n const contextData = (input as any).context;\n const contextValidation = schema.safeParse(contextData);\n validationAttempts.push({\n result: contextValidation,\n data: contextData,\n structure: 'context',\n });\n\n if (contextValidation.success) {\n return { data: { ...(input as object), context: contextValidation.data } };\n }\n\n // Handle StepExecutionContext format { context: { inputData: data, ... }, ... }\n if (contextData && typeof contextData === 'object' && 'inputData' in contextData) {\n const inputDataValue = (contextData as any).inputData;\n const inputDataValidation = schema.safeParse(inputDataValue);\n validationAttempts.push({\n result: inputDataValidation,\n data: inputDataValue,\n structure: 'inputData',\n });\n\n if (inputDataValidation.success) {\n // For inputData unwrapping, preserve the structure if the original context had additional properties\n // but return just the validated data if it was a pure inputData wrapper\n const contextKeys = Object.keys(contextData);\n\n // If context only has inputData, return the full structure with the validated data\n // Otherwise, return just the validated inputData\n if (contextKeys.length === 1 && contextKeys[0] === 'inputData') {\n return { data: { ...(input as object), context: { inputData: inputDataValidation.data } } };\n } else {\n // Multiple keys in context, return just the validated data\n return { data: inputDataValidation.data };\n }\n }\n }\n }\n\n // All validations failed, find the best error to return\n // Prefer the most specific error (deepest unwrapping level that has meaningful errors)\n let bestAttempt = validationAttempts[0]; // Start with direct validation\n\n for (const attempt of validationAttempts) {\n if (!attempt.result.success && attempt.result.error.issues.length > 0) {\n bestAttempt = attempt;\n }\n }\n\n // Use the best validation attempt for error reporting\n if (bestAttempt && !bestAttempt.result.success) {\n const errorMessages = bestAttempt.result.error.issues\n .map((e: z.ZodIssue) => `- ${e.path?.join('.') || 'root'}: ${e.message}`)\n .join('\\n');\n\n const error: ValidationError<T> = {\n error: true,\n message: `Tool validation failed${toolId ? ` for ${toolId}` : ''}. Please fix the following errors and try again:\\n${errorMessages}\\n\\nProvided arguments: ${JSON.stringify(bestAttempt.data, null, 2)}`,\n validationErrors: bestAttempt.result.error.format() as z.ZodFormattedError<T>,\n };\n\n return { data: input, error };\n }\n\n // This should not happen since we handle all valid cases above\n return { data: input };\n}\n","import type { ToolExecutionOptions } from 'ai';\nimport type { ToolCallOptions } from 'ai-v5';\nimport type { z } from 'zod';\n\nimport type { Mastra } from '../mastra';\nimport type { ToolAction, ToolExecutionContext } from './types';\nimport { validateToolInput } from './validation';\n\nexport class Tool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n> implements ToolAction<TSchemaIn, TSchemaOut, TContext>\n{\n id: string;\n description: string;\n inputSchema?: TSchemaIn;\n outputSchema?: TSchemaOut;\n execute?: ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'];\n mastra?: Mastra;\n\n constructor(opts: ToolAction<TSchemaIn, TSchemaOut, TContext>) {\n this.id = opts.id;\n this.description = opts.description;\n this.inputSchema = opts.inputSchema;\n this.outputSchema = opts.outputSchema;\n this.mastra = opts.mastra;\n\n // Wrap the execute function with validation if it exists\n if (opts.execute) {\n const originalExecute = opts.execute;\n this.execute = async (context: TContext, options?: ToolExecutionOptions) => {\n // Validate input if schema exists\n const { data, error } = validateToolInput(this.inputSchema, context, this.id);\n if (error) {\n return error as any;\n }\n\n return originalExecute(data as TContext, options);\n };\n }\n }\n}\n\nexport function createTool<\n TSchemaIn extends z.ZodSchema | undefined = undefined,\n TSchemaOut extends z.ZodSchema | undefined = undefined,\n TContext extends ToolExecutionContext<TSchemaIn> = ToolExecutionContext<TSchemaIn>,\n TExecute extends ToolAction<TSchemaIn, TSchemaOut, TContext>['execute'] = ToolAction<\n TSchemaIn,\n TSchemaOut,\n TContext\n >['execute'],\n>(\n opts: ToolAction<TSchemaIn, TSchemaOut, TContext> & {\n execute?: TExecute;\n },\n): [TSchemaIn, TSchemaOut, TExecute] extends [z.ZodSchema, z.ZodSchema, Function]\n ? Tool<TSchemaIn, TSchemaOut, TContext> & {\n inputSchema: TSchemaIn;\n outputSchema: TSchemaOut;\n execute: (context: TContext, options: ToolExecutionOptions | ToolCallOptions) => Promise<any>;\n }\n : Tool<TSchemaIn, TSchemaOut, TContext> {\n return new Tool(opts) as any;\n}\n","import { Tool } from './tool';\nimport type { ToolToConvert } from './tool-builder/builder';\nimport type { VercelTool } from './types';\n\n/**\n * Checks if a tool is a Vercel Tool\n * @param tool - The tool to check\n * @returns True if the tool is a Vercel Tool, false otherwise\n */\nexport function isVercelTool(tool?: ToolToConvert): tool is VercelTool {\n // Checks if this tool is not an instance of Tool\n return !!(tool && !(tool instanceof Tool) && 'parameters' in tool);\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { isZodType, delay } from './chunk-ZC64CG7J.js';
1
+ import { isZodType, delay } from './chunk-WWQ3QRPF.js';
2
2
  import { MastraError } from './chunk-MCOVMKIS.js';
3
3
  import { MastraBase } from './chunk-6GF5M4GX.js';
4
4
  import { OpenAIReasoningSchemaCompatLayer, OpenAISchemaCompatLayer, GoogleSchemaCompatLayer, AnthropicSchemaCompatLayer, DeepSeekSchemaCompatLayer, MetaSchemaCompatLayer, applyCompatLayer } from '@mastra/schema-compat';
@@ -63,8 +63,9 @@ var MastraLLMV1 = class extends MastraBase {
63
63
  mode: "aiSdkSchema"
64
64
  });
65
65
  }
66
- _startAISpan(model, agentAISpan, name, streaming, options) {
67
- return agentAISpan?.createChildSpan({
66
+ _startAISpan(params) {
67
+ const { model, tracingContext, name, streaming, options } = params;
68
+ return tracingContext.currentSpan?.createChildSpan({
68
69
  name,
69
70
  type: "llm_generation" /* LLM_GENERATION */,
70
71
  input: options.prompt,
@@ -83,15 +84,21 @@ var MastraLLMV1 = class extends MastraBase {
83
84
  }
84
85
  });
85
86
  }
86
- _wrapModel(model, agentAISpan) {
87
- if (!agentAISpan) {
87
+ _wrapModel(model, tracingContext) {
88
+ if (!tracingContext.currentSpan) {
88
89
  return model;
89
90
  }
90
91
  const wrappedDoGenerate = async (options) => {
91
- const llmSpan = this._startAISpan(model, agentAISpan, `llm generate: '${model.modelId}'`, false, options);
92
+ const llmSpan = this._startAISpan({
93
+ model,
94
+ tracingContext,
95
+ name: `llm generate: '${model.modelId}'`,
96
+ streaming: false,
97
+ options
98
+ });
92
99
  try {
93
100
  const result = await model.doGenerate(options);
94
- llmSpan.end({
101
+ llmSpan?.end({
95
102
  output: result.text,
96
103
  attributes: {
97
104
  usage: result.usage ? {
@@ -102,12 +109,18 @@ var MastraLLMV1 = class extends MastraBase {
102
109
  });
103
110
  return result;
104
111
  } catch (error) {
105
- llmSpan.error({ error });
112
+ llmSpan?.error({ error });
106
113
  throw error;
107
114
  }
108
115
  };
109
116
  const wrappedDoStream = async (options) => {
110
- const llmSpan = this._startAISpan(model, agentAISpan, `llm stream: '${model.modelId}'`, true, options);
117
+ const llmSpan = this._startAISpan({
118
+ model,
119
+ tracingContext,
120
+ name: `llm stream: '${model.modelId}'`,
121
+ streaming: true,
122
+ options
123
+ });
111
124
  try {
112
125
  const result = await model.doStream(options);
113
126
  const originalStream = result.stream;
@@ -117,6 +130,16 @@ var MastraLLMV1 = class extends MastraBase {
117
130
  new TransformStream({
118
131
  // this gets called on each chunk output
119
132
  transform(chunk, controller) {
133
+ if (chunk.type === "text-delta") {
134
+ llmSpan?.createEventSpan({
135
+ type: "llm_chunk" /* LLM_CHUNK */,
136
+ name: `llm chunk: ${chunk.type}`,
137
+ output: chunk.textDelta,
138
+ attributes: {
139
+ chunkType: chunk.type
140
+ }
141
+ });
142
+ }
120
143
  if (chunk.type === "finish") {
121
144
  finishReason = chunk.finishReason;
122
145
  finalUsage = chunk.usage;
@@ -125,7 +148,7 @@ var MastraLLMV1 = class extends MastraBase {
125
148
  },
126
149
  // this gets called at the end of the stream
127
150
  flush() {
128
- llmSpan.end({
151
+ llmSpan?.end({
129
152
  attributes: {
130
153
  usage: finalUsage ? {
131
154
  promptTokens: finalUsage.promptTokens,
@@ -145,7 +168,7 @@ var MastraLLMV1 = class extends MastraBase {
145
168
  stream: wrappedStream
146
169
  };
147
170
  } catch (error) {
148
- llmSpan.error({ error });
171
+ llmSpan?.error({ error });
149
172
  throw error;
150
173
  }
151
174
  };
@@ -170,7 +193,7 @@ var MastraLLMV1 = class extends MastraBase {
170
193
  threadId,
171
194
  resourceId,
172
195
  runtimeContext,
173
- agentAISpan,
196
+ tracingContext,
174
197
  ...rest
175
198
  }) {
176
199
  const model = this.#model;
@@ -209,7 +232,7 @@ var MastraLLMV1 = class extends MastraBase {
209
232
  const argsForExecute = {
210
233
  ...rest,
211
234
  messages,
212
- model: this._wrapModel(model, agentAISpan),
235
+ model: this._wrapModel(model, tracingContext),
213
236
  temperature,
214
237
  tools: {
215
238
  ...tools
@@ -295,7 +318,7 @@ var MastraLLMV1 = class extends MastraBase {
295
318
  threadId,
296
319
  resourceId,
297
320
  runtimeContext,
298
- agentAISpan,
321
+ tracingContext,
299
322
  ...rest
300
323
  }) {
301
324
  const model = this.#model;
@@ -310,7 +333,7 @@ var MastraLLMV1 = class extends MastraBase {
310
333
  const argsForExecute = {
311
334
  ...rest,
312
335
  messages,
313
- model: this._wrapModel(model, agentAISpan),
336
+ model: this._wrapModel(model, tracingContext),
314
337
  // @ts-expect-error - output in our implementation can only be object or array
315
338
  output,
316
339
  schema: processedSchema,
@@ -375,7 +398,7 @@ var MastraLLMV1 = class extends MastraBase {
375
398
  threadId,
376
399
  resourceId,
377
400
  runtimeContext,
378
- agentAISpan,
401
+ tracingContext,
379
402
  ...rest
380
403
  }) {
381
404
  const model = this.#model;
@@ -402,7 +425,7 @@ var MastraLLMV1 = class extends MastraBase {
402
425
  }
403
426
  }
404
427
  const argsForExecute = {
405
- model: this._wrapModel(model, agentAISpan),
428
+ model: this._wrapModel(model, tracingContext),
406
429
  temperature,
407
430
  tools: {
408
431
  ...tools
@@ -525,7 +548,7 @@ var MastraLLMV1 = class extends MastraBase {
525
548
  onFinish,
526
549
  structuredOutput,
527
550
  telemetry,
528
- agentAISpan,
551
+ tracingContext,
529
552
  ...rest
530
553
  }) {
531
554
  const model = this.#model;
@@ -542,7 +565,7 @@ var MastraLLMV1 = class extends MastraBase {
542
565
  const processedSchema = this._applySchemaCompat(structuredOutput);
543
566
  const argsForExecute = {
544
567
  ...rest,
545
- model: this._wrapModel(model, agentAISpan),
568
+ model: this._wrapModel(model, tracingContext),
546
569
  onFinish: async (props) => {
547
570
  try {
548
571
  await onFinish?.({ ...props, runId });
@@ -691,5 +714,5 @@ var MastraLLMV1 = class extends MastraBase {
691
714
  };
692
715
 
693
716
  export { MastraLLMV1 };
694
- //# sourceMappingURL=chunk-5TFCIXWE.js.map
695
- //# sourceMappingURL=chunk-5TFCIXWE.js.map
717
+ //# sourceMappingURL=chunk-CKM2ESZF.js.map
718
+ //# sourceMappingURL=chunk-CKM2ESZF.js.map