@mastra/core 0.24.8 → 0.24.9-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/agent/index.cjs +13 -13
  3. package/dist/agent/index.js +2 -2
  4. package/dist/agent/input-processor/index.cjs +6 -6
  5. package/dist/agent/input-processor/index.js +1 -1
  6. package/dist/ai-tracing/index.cjs +56 -39
  7. package/dist/ai-tracing/index.d.ts +1 -0
  8. package/dist/ai-tracing/index.d.ts.map +1 -1
  9. package/dist/ai-tracing/index.js +2 -1
  10. package/dist/ai-tracing/serialization.d.ts +60 -0
  11. package/dist/ai-tracing/serialization.d.ts.map +1 -0
  12. package/dist/ai-tracing/spans/base.d.ts +0 -17
  13. package/dist/ai-tracing/spans/base.d.ts.map +1 -1
  14. package/dist/ai-tracing/spans/default.d.ts.map +1 -1
  15. package/dist/{chunk-V2IMZSNO.js → chunk-2BIQL3SK.js} +3 -3
  16. package/dist/{chunk-V2IMZSNO.js.map → chunk-2BIQL3SK.js.map} +1 -1
  17. package/dist/chunk-3L3ISSMS.cjs +130 -0
  18. package/dist/chunk-3L3ISSMS.cjs.map +1 -0
  19. package/dist/{chunk-E5NCEJEJ.js → chunk-4DWBTEHS.js} +3 -3
  20. package/dist/{chunk-E5NCEJEJ.js.map → chunk-4DWBTEHS.js.map} +1 -1
  21. package/dist/{chunk-Z6ZIJYKK.js → chunk-5BMYOHKM.js} +4 -4
  22. package/dist/{chunk-Z6ZIJYKK.js.map → chunk-5BMYOHKM.js.map} +1 -1
  23. package/dist/{chunk-2BY7C6Y7.js → chunk-5KSHWBRH.js} +3 -3
  24. package/dist/{chunk-2BY7C6Y7.js.map → chunk-5KSHWBRH.js.map} +1 -1
  25. package/dist/{chunk-DSUKMFZY.js → chunk-5S5X3QPR.js} +92 -111
  26. package/dist/chunk-5S5X3QPR.js.map +1 -0
  27. package/dist/{chunk-5PSD3IKG.cjs → chunk-7GUQ2EQ4.cjs} +92 -111
  28. package/dist/chunk-7GUQ2EQ4.cjs.map +1 -0
  29. package/dist/{chunk-PPAIPZ6C.js → chunk-BBE22VBK.js} +4 -43
  30. package/dist/chunk-BBE22VBK.js.map +1 -0
  31. package/dist/{chunk-2YE6RNCZ.cjs → chunk-CSHVFDF6.cjs} +4 -4
  32. package/dist/{chunk-2YE6RNCZ.cjs.map → chunk-CSHVFDF6.cjs.map} +1 -1
  33. package/dist/{chunk-X5JTTWMF.cjs → chunk-DGL7I4HZ.cjs} +9 -9
  34. package/dist/{chunk-X5JTTWMF.cjs.map → chunk-DGL7I4HZ.cjs.map} +1 -1
  35. package/dist/{chunk-3IDFSGG3.cjs → chunk-EHTC7VYS.cjs} +4 -4
  36. package/dist/{chunk-3IDFSGG3.cjs.map → chunk-EHTC7VYS.cjs.map} +1 -1
  37. package/dist/{chunk-RLYWCJQ6.js → chunk-EMTBCXQQ.js} +3 -3
  38. package/dist/{chunk-RLYWCJQ6.js.map → chunk-EMTBCXQQ.js.map} +1 -1
  39. package/dist/{chunk-RP4YCZP7.js → chunk-GEHKQTB2.js} +3 -3
  40. package/dist/{chunk-RP4YCZP7.js.map → chunk-GEHKQTB2.js.map} +1 -1
  41. package/dist/{chunk-Y2BH2LUD.js → chunk-GSQD3QNR.js} +7 -7
  42. package/dist/{chunk-Y2BH2LUD.js.map → chunk-GSQD3QNR.js.map} +1 -1
  43. package/dist/{chunk-2YN6HGEH.js → chunk-HHPXFPNO.js} +3 -3
  44. package/dist/{chunk-2YN6HGEH.js.map → chunk-HHPXFPNO.js.map} +1 -1
  45. package/dist/{chunk-CNIM7N4E.cjs → chunk-MSFEDB5Z.cjs} +16 -16
  46. package/dist/{chunk-CNIM7N4E.cjs.map → chunk-MSFEDB5Z.cjs.map} +1 -1
  47. package/dist/{chunk-GIK7MM2K.js → chunk-NFJJ6B6P.js} +3 -3
  48. package/dist/{chunk-GIK7MM2K.js.map → chunk-NFJJ6B6P.js.map} +1 -1
  49. package/dist/chunk-PA6Z5V6U.js +124 -0
  50. package/dist/chunk-PA6Z5V6U.js.map +1 -0
  51. package/dist/{chunk-DISETAP2.cjs → chunk-PAW64WWA.cjs} +4 -4
  52. package/dist/{chunk-DISETAP2.cjs.map → chunk-PAW64WWA.cjs.map} +1 -1
  53. package/dist/{chunk-ICICKWAG.cjs → chunk-QETEFQ7T.cjs} +6 -6
  54. package/dist/{chunk-ICICKWAG.cjs.map → chunk-QETEFQ7T.cjs.map} +1 -1
  55. package/dist/{chunk-YPYLWTZI.cjs → chunk-QGJF6TRY.cjs} +16 -56
  56. package/dist/chunk-QGJF6TRY.cjs.map +1 -0
  57. package/dist/{chunk-FQTJPLCW.cjs → chunk-QLPSR67Y.cjs} +14 -14
  58. package/dist/{chunk-FQTJPLCW.cjs.map → chunk-QLPSR67Y.cjs.map} +1 -1
  59. package/dist/{chunk-N6P5GJRO.js → chunk-QQKRUSCB.js} +6 -6
  60. package/dist/{chunk-N6P5GJRO.js.map → chunk-QQKRUSCB.js.map} +1 -1
  61. package/dist/{chunk-RQPGIUUA.cjs → chunk-QWOKGSO2.cjs} +6 -6
  62. package/dist/{chunk-RQPGIUUA.cjs.map → chunk-QWOKGSO2.cjs.map} +1 -1
  63. package/dist/{chunk-4YYPQOP7.cjs → chunk-RDD5YB3T.cjs} +4 -4
  64. package/dist/{chunk-4YYPQOP7.cjs.map → chunk-RDD5YB3T.cjs.map} +1 -1
  65. package/dist/{chunk-RWPKCFZT.cjs → chunk-W54LWXCG.cjs} +4 -4
  66. package/dist/{chunk-RWPKCFZT.cjs.map → chunk-W54LWXCG.cjs.map} +1 -1
  67. package/dist/{chunk-YYKN3NDZ.cjs → chunk-ZWWHTQ72.cjs} +51 -51
  68. package/dist/{chunk-YYKN3NDZ.cjs.map → chunk-ZWWHTQ72.cjs.map} +1 -1
  69. package/dist/{chunk-6VB52TJV.js → chunk-ZZIYFEVM.js} +3 -3
  70. package/dist/{chunk-6VB52TJV.js.map → chunk-ZZIYFEVM.js.map} +1 -1
  71. package/dist/index.cjs +59 -59
  72. package/dist/index.js +9 -9
  73. package/dist/loop/index.cjs +2 -2
  74. package/dist/loop/index.js +1 -1
  75. package/dist/loop/workflows/agentic-execution/index.d.ts +24 -24
  76. package/dist/loop/workflows/agentic-execution/llm-execution-step.d.ts +16 -16
  77. package/dist/loop/workflows/agentic-execution/llm-mapping-step.d.ts +8 -8
  78. package/dist/loop/workflows/agentic-loop/index.d.ts +24 -24
  79. package/dist/loop/workflows/schema.d.ts +8 -8
  80. package/dist/mastra/index.cjs +2 -2
  81. package/dist/mastra/index.js +1 -1
  82. package/dist/memory/index.cjs +4 -4
  83. package/dist/memory/index.js +1 -1
  84. package/dist/processors/index.cjs +11 -11
  85. package/dist/processors/index.js +1 -1
  86. package/dist/relevance/index.cjs +4 -4
  87. package/dist/relevance/index.js +1 -1
  88. package/dist/scores/index.cjs +9 -9
  89. package/dist/scores/index.js +2 -2
  90. package/dist/scores/scoreTraces/index.cjs +8 -8
  91. package/dist/scores/scoreTraces/index.js +3 -3
  92. package/dist/server/index.cjs +2 -2
  93. package/dist/server/index.js +1 -1
  94. package/dist/storage/index.cjs +3 -3
  95. package/dist/storage/index.js +1 -1
  96. package/dist/stream/index.cjs +11 -11
  97. package/dist/stream/index.js +2 -2
  98. package/dist/telemetry/index.cjs +7 -7
  99. package/dist/telemetry/index.js +1 -1
  100. package/dist/telemetry/telemetry.d.ts.map +1 -1
  101. package/dist/telemetry/telemetry.decorators.d.ts.map +1 -1
  102. package/dist/test-utils/llm-mock.cjs +2 -2
  103. package/dist/test-utils/llm-mock.js +1 -1
  104. package/dist/tts/index.cjs +2 -2
  105. package/dist/tts/index.js +1 -1
  106. package/dist/utils.cjs +22 -22
  107. package/dist/utils.js +1 -1
  108. package/dist/voice/index.cjs +6 -6
  109. package/dist/voice/index.js +1 -1
  110. package/dist/workflows/evented/index.cjs +10 -10
  111. package/dist/workflows/evented/index.js +1 -1
  112. package/dist/workflows/index.cjs +17 -17
  113. package/dist/workflows/index.js +1 -1
  114. package/dist/workflows/legacy/index.cjs +22 -22
  115. package/dist/workflows/legacy/index.js +1 -1
  116. package/dist/workflows/legacy/machine.d.ts +1 -1
  117. package/package.json +3 -3
  118. package/dist/chunk-5PSD3IKG.cjs.map +0 -1
  119. package/dist/chunk-DSUKMFZY.js.map +0 -1
  120. package/dist/chunk-PPAIPZ6C.js.map +0 -1
  121. package/dist/chunk-YPYLWTZI.cjs.map +0 -1
@@ -1,4 +1,5 @@
1
1
  import { TABLE_TRACES } from './chunk-SJMKDSRF.js';
2
+ import { boundedStringify } from './chunk-PA6Z5V6U.js';
2
3
  import { MastraError } from './chunk-PZUZNPFM.js';
3
4
  import { trace, propagation, context, SpanStatusCode, SpanKind } from '@opentelemetry/api';
4
5
  import { ExportResultCode } from '@opentelemetry/core';
@@ -28,65 +29,56 @@ function getBaggageValues(ctx) {
28
29
  }
29
30
 
30
31
  // src/telemetry/telemetry.decorators.ts
31
- function safeStringify(obj) {
32
- const seen = /* @__PURE__ */ new WeakSet();
33
- return JSON.stringify(obj, (_key, value) => {
34
- if (typeof value === "function") return "[Function]";
35
- if (typeof value === "bigint") return `${value}n`;
36
- if (value instanceof Error) return { message: value.message, stack: value.stack };
37
- if (typeof value === "object" && value !== null) {
38
- if (seen.has(value)) return "[Circular]";
39
- seen.add(value);
40
- }
41
- return value;
42
- });
43
- }
44
- function isStreamingResult(result, methodName) {
45
- if (methodName === "stream" || methodName === "streamLegacy") {
46
- return true;
47
- }
48
- if (result && typeof result === "object" && result !== null) {
49
- const obj = result;
50
- return "textStream" in obj || "objectStream" in obj || "usagePromise" in obj || "finishReasonPromise" in obj;
32
+ function endSpanOnce(span) {
33
+ if (span.__mastraEnded) return;
34
+ span.__mastraEnded = true;
35
+ try {
36
+ span.end();
37
+ } catch {
51
38
  }
52
- return false;
53
39
  }
54
- function enhanceStreamingArgumentsWithTelemetry(args, span, spanName, methodName) {
55
- if (methodName === "stream" || methodName === "streamLegacy") {
56
- const enhancedArgs = [...args];
57
- const streamOptions = enhancedArgs.length > 1 && enhancedArgs[1] || {};
58
- const enhancedStreamOptions = { ...streamOptions };
59
- const originalOnFinish = enhancedStreamOptions.onFinish;
60
- enhancedStreamOptions.onFinish = async (finishData) => {
61
- try {
62
- const telemetryData = {
63
- text: finishData.text,
64
- usage: finishData.usage,
65
- finishReason: finishData.finishReason,
66
- toolCalls: finishData.toolCalls,
67
- toolResults: finishData.toolResults,
68
- warnings: finishData.warnings,
69
- ...finishData.object !== void 0 && { object: finishData.object }
70
- };
71
- span.setAttribute(`${spanName}.result`, safeStringify(telemetryData));
72
- span.setStatus({ code: SpanStatusCode.OK });
73
- span.end();
74
- } catch (error) {
75
- console.warn("Telemetry capture failed:", error);
76
- span.setAttribute(`${spanName}.result`, "[Telemetry Capture Error]");
77
- span.setStatus({ code: SpanStatusCode.ERROR });
78
- span.end();
79
- }
80
- if (originalOnFinish) {
81
- return await originalOnFinish(finishData);
82
- }
40
+ function isStreamingMethod(methodName) {
41
+ return methodName === "stream" || methodName === "streamLegacy";
42
+ }
43
+ function enhanceStreamingArgumentsWithTelemetry(args, span, spanName) {
44
+ const enhancedArgs = [...args];
45
+ const isPlainObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
46
+ const createEnhancedOnFinish = (originalOnFinish) => {
47
+ const enhancedOnFinish = async (finishData) => {
48
+ const telemetryData = {
49
+ text: finishData.text,
50
+ usage: finishData.usage,
51
+ finishReason: finishData.finishReason,
52
+ toolCalls: finishData.toolCalls,
53
+ toolResults: finishData.toolResults,
54
+ warnings: finishData.warnings,
55
+ ...finishData.object !== void 0 && { object: finishData.object }
56
+ };
57
+ span.setAttribute(`${spanName}.result`, boundedStringify(telemetryData));
58
+ span.setStatus({ code: SpanStatusCode.OK });
59
+ endSpanOnce(span);
60
+ if (originalOnFinish) return await originalOnFinish(finishData);
61
+ };
62
+ enhancedOnFinish.__hasOriginalOnFinish = !!originalOnFinish;
63
+ return enhancedOnFinish;
64
+ };
65
+ if (enhancedArgs.length === 1 && isPlainObject(enhancedArgs[0])) {
66
+ const singleArg = enhancedArgs[0];
67
+ const originalOnFinish = singleArg.onFinish;
68
+ enhancedArgs[0] = {
69
+ ...singleArg,
70
+ onFinish: createEnhancedOnFinish(originalOnFinish)
71
+ };
72
+ } else {
73
+ const streamOptions = enhancedArgs.length > 1 && isPlainObject(enhancedArgs[1]) ? enhancedArgs[1] : {};
74
+ const originalOnFinish = streamOptions.onFinish;
75
+ enhancedArgs[1] = {
76
+ ...streamOptions,
77
+ onFinish: createEnhancedOnFinish(originalOnFinish)
83
78
  };
84
- enhancedStreamOptions.onFinish.__hasOriginalOnFinish = !!originalOnFinish;
85
- enhancedArgs[1] = enhancedStreamOptions;
86
- span.__mastraStreamingSpan = true;
87
- return enhancedArgs;
88
79
  }
89
- return args;
80
+ span.__mastraStreamingSpan = true;
81
+ return enhancedArgs;
90
82
  }
91
83
  function withSpan(options) {
92
84
  return function(_target, propertyKey, descriptor) {
@@ -111,11 +103,7 @@ function withSpan(options) {
111
103
  const span = tracer.startSpan(spanName, { kind: spanKind });
112
104
  let ctx = trace.setSpan(context.active(), span);
113
105
  args.forEach((arg, index) => {
114
- try {
115
- span.setAttribute(`${spanName}.argument.${index}`, safeStringify(arg));
116
- } catch {
117
- span.setAttribute(`${spanName}.argument.${index}`, "[Not Serializable]");
118
- }
106
+ span.setAttribute(`${spanName}.argument.${index}`, boundedStringify(arg));
119
107
  });
120
108
  const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);
121
109
  if (requestId) {
@@ -129,58 +117,58 @@ function withSpan(options) {
129
117
  }
130
118
  if (componentName) {
131
119
  span.setAttribute("componentName", componentName);
132
- span.setAttribute("runId", runId);
120
+ if (runId) {
121
+ span.setAttribute("runId", runId);
122
+ }
133
123
  } else if (this && typeof this === "object" && "name" in this) {
134
124
  const contextObj = this;
135
125
  span.setAttribute("componentName", contextObj.name);
126
+ if (contextObj.runId) span.setAttribute("runId", contextObj.runId);
127
+ const baggageEntries = {};
128
+ baggageEntries.componentName = { value: contextObj.name };
136
129
  if (contextObj.runId) {
137
- span.setAttribute("runId", contextObj.runId);
130
+ baggageEntries.runId = { value: contextObj.runId };
138
131
  }
139
- ctx = propagation.setBaggage(
140
- ctx,
141
- propagation.createBaggage({
142
- // @ts-ignore
143
- componentName: { value: this.name },
144
- // @ts-ignore
145
- runId: { value: this.runId },
146
- // @ts-ignore
147
- "http.request_id": { value: requestId },
148
- // @ts-ignore
149
- threadId: { value: threadId },
150
- // @ts-ignore
151
- resourceId: { value: resourceId }
152
- })
153
- );
132
+ if (requestId) {
133
+ baggageEntries["http.request_id"] = { value: requestId };
134
+ }
135
+ if (threadId) {
136
+ baggageEntries.threadId = { value: threadId };
137
+ }
138
+ if (resourceId) {
139
+ baggageEntries.resourceId = { value: resourceId };
140
+ }
141
+ ctx = propagation.setBaggage(ctx, propagation.createBaggage(baggageEntries));
154
142
  }
155
- let result;
156
143
  try {
157
- const enhancedArgs = isStreamingResult(result, methodName) ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName, methodName) : args;
158
- result = context.with(ctx, () => originalMethod.apply(this, enhancedArgs));
144
+ const enhancedArgs = isStreamingMethod(methodName) ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName) : args;
145
+ const result = context.with(ctx, () => originalMethod.apply(this, enhancedArgs));
159
146
  if (result instanceof Promise) {
160
147
  return result.then((resolvedValue) => {
161
- if (isStreamingResult(resolvedValue, methodName)) {
162
- return resolvedValue;
163
- } else {
164
- try {
165
- span.setAttribute(`${spanName}.result`, safeStringify(resolvedValue));
166
- } catch {
167
- span.setAttribute(`${spanName}.result`, "[Not Serializable]");
168
- }
148
+ if (isStreamingMethod(methodName)) {
169
149
  return resolvedValue;
170
150
  }
171
- }).finally(() => {
172
- if (!span.__mastraStreamingSpan) {
173
- span.end();
151
+ span.setAttribute(`${spanName}.result`, boundedStringify(resolvedValue));
152
+ span.setStatus({ code: SpanStatusCode.OK });
153
+ return resolvedValue;
154
+ }).catch((err) => {
155
+ span.setStatus({
156
+ code: SpanStatusCode.ERROR,
157
+ message: err instanceof Error ? err.message : "Unknown error"
158
+ });
159
+ if (err instanceof Error) {
160
+ span.recordException(err);
174
161
  }
162
+ endSpanOnce(span);
163
+ throw err;
164
+ }).finally(() => {
165
+ if (!span.__mastraStreamingSpan) endSpanOnce(span);
175
166
  });
176
167
  }
177
- if (!isStreamingResult(result, methodName)) {
178
- try {
179
- span.setAttribute(`${spanName}.result`, safeStringify(result));
180
- } catch {
181
- span.setAttribute(`${spanName}.result`, "[Not Serializable]");
182
- }
168
+ if (!isStreamingMethod(methodName)) {
169
+ span.setAttribute(`${spanName}.result`, boundedStringify(result));
183
170
  }
171
+ span.setStatus({ code: SpanStatusCode.OK });
184
172
  return result;
185
173
  } catch (error) {
186
174
  span.setStatus({
@@ -190,10 +178,11 @@ function withSpan(options) {
190
178
  if (error instanceof Error) {
191
179
  span.recordException(error);
192
180
  }
181
+ endSpanOnce(span);
193
182
  throw error;
194
183
  } finally {
195
- if (!(result instanceof Promise) && !isStreamingResult(result, methodName)) {
196
- span.end();
184
+ if (!isStreamingMethod(methodName) && !span.__mastraEnded) {
185
+ endSpanOnce(span);
197
186
  }
198
187
  }
199
188
  };
@@ -468,11 +457,7 @@ var Telemetry = class _Telemetry {
468
457
  }
469
458
  try {
470
459
  let recordResult2 = function(res) {
471
- try {
472
- span.setAttribute(`${context3.spanName}.result`, JSON.stringify(res));
473
- } catch {
474
- span.setAttribute(`${context3.spanName}.result`, "[Not Serializable]");
475
- }
460
+ span.setAttribute(`${context3.spanName}.result`, boundedStringify(res));
476
461
  span.end();
477
462
  return res;
478
463
  };
@@ -524,11 +509,7 @@ var Telemetry = class _Telemetry {
524
509
  }
525
510
  }
526
511
  args.forEach((arg, index) => {
527
- try {
528
- span.setAttribute(`${context3.spanName}.argument.${index}`, JSON.stringify(arg));
529
- } catch {
530
- span.setAttribute(`${context3.spanName}.argument.${index}`, "[Not Serializable]");
531
- }
512
+ span.setAttribute(`${context3.spanName}.argument.${index}`, boundedStringify(arg));
532
513
  });
533
514
  let result;
534
515
  context.with(trace.setSpan(ctx, span), () => {
@@ -605,5 +586,5 @@ var BaggageTracer = class {
605
586
  };
606
587
 
607
588
  export { InstrumentClass, OTLPTraceExporter, Telemetry, getBaggageValues, hasActiveTelemetry, withSpan };
608
- //# sourceMappingURL=chunk-DSUKMFZY.js.map
609
- //# sourceMappingURL=chunk-DSUKMFZY.js.map
589
+ //# sourceMappingURL=chunk-5S5X3QPR.js.map
590
+ //# sourceMappingURL=chunk-5S5X3QPR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/telemetry/utility.ts","../src/telemetry/telemetry.decorators.ts","../src/telemetry/storage-exporter.ts","../src/telemetry/telemetry.ts"],"names":["trace","propagation","acc","otlpContext","context","SpanStatusCode","recordResult","wrappedFn"],"mappings":";;;;;;;AAIO,SAAS,kBAAA,CAAmB,aAAqB,gBAAA,EAA2B;AACjF,EAAA,IAAI;AACF,IAAA,OAAO,CAAC,CAAC,KAAA,CAAM,SAAA,CAAU,UAAU,CAAA;AAAA,EACrC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAOO,SAAS,iBAAiB,GAAA,EAAc;AAC7C,EAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,UAAA,CAAW,GAAG,CAAA;AACjD,EAAA,MAAM,SAAA,GAAY,cAAA,EAAgB,QAAA,CAAS,iBAAiB,CAAA,EAAG,KAAA;AAC/D,EAAA,MAAM,aAAA,GAAgB,cAAA,EAAgB,QAAA,CAAS,eAAe,CAAA,EAAG,KAAA;AACjE,EAAA,MAAM,KAAA,GAAQ,cAAA,EAAgB,QAAA,CAAS,OAAO,CAAA,EAAG,KAAA;AACjD,EAAA,MAAM,QAAA,GAAW,cAAA,EAAgB,QAAA,CAAS,UAAU,CAAA,EAAG,KAAA;AACvD,EAAA,MAAM,UAAA,GAAa,cAAA,EAAgB,QAAA,CAAS,YAAY,CAAA,EAAG,KAAA;AAC3D,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;ACSA,SAAS,YAAY,IAAA,EAAoB;AACvC,EAAA,IAAI,KAAK,aAAA,EAAe;AACxB,EAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AACrB,EAAA,IAAI;AACF,IAAA,IAAA,CAAK,GAAA,EAAI;AAAA,EACX,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAEA,SAAS,kBAAkB,UAAA,EAA6B;AACtD,EAAA,OAAO,UAAA,KAAe,YAAY,UAAA,KAAe,cAAA;AACnD;AAMA,SAAS,sCAAA,CAAuC,IAAA,EAAiB,IAAA,EAAoB,QAAA,EAA6B;AAChH,EAAA,MAAM,YAAA,GAAe,CAAC,GAAG,IAAI,CAAA;AAG7B,EAAA,MAAM,aAAA,GAAgB,CAAC,GAAA,KACrB,GAAA,KAAQ,IAAA,IAAQ,OAAO,GAAA,KAAQ,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAG/D,EAAA,MAAM,sBAAA,GAAyB,CAAC,gBAAA,KAAwE;AACtG,IAAA,MAAM,gBAAA,GAAmB,OAAO,UAAA,KAAiC;AAC/D,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,MAAM,UAAA,CAAW,IAAA;AAAA,QACjB,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,cAAc,UAAA,CAAW,YAAA;AAAA,QACzB,WAAW,UAAA,CAAW,SAAA;AAAA,QACtB,aAAa,UAAA,CAAW,WAAA;AAAA,QACxB,UAAU,UAAA,CAAW,QAAA;AAAA,QACrB,GAAI,UAAA,CAAW,MAAA,KAAW,UAAa,EAAE,MAAA,EAAQ,WAAW,MAAA;AAAO,OACrE;AAEA,MAAA,IAAA,CAAK,aAAa,CAAA,EAAG,QAAQ,CAAA,OAAA,CAAA,EAAW,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACvE,MAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAC1C,MAAA,WAAA,CAAY,IAAI,CAAA;AAEhB,MAAA,IAAI,gBAAA,EAAkB,OAAO,MAAM,gBAAA,CAAiB,UAAU,CAAA;AAAA,IAChE,CAAA;AACA,IAAC,gBAAA,CAAyB,qBAAA,GAAwB,CAAC,CAAC,gBAAA;AACpD,IAAA,OAAO,gBAAA;AAAA,EACT,CAAA;AAGA,EAAA,IAAI,aAAa,MAAA,KAAW,CAAA,IAAK,cAAc,YAAA,CAAa,CAAC,CAAC,CAAA,EAAG;AAC/D,IAAA,MAAM,SAAA,GAAY,aAAa,CAAC,CAAA;AAChC,IAAA,MAAM,mBAAmB,SAAA,CAAU,QAAA;AACnC,IAAA,YAAA,CAAa,CAAC,CAAA,GAAI;AAAA,MAChB,GAAG,SAAA;AAAA,MACH,QAAA,EAAU,uBAAuB,gBAAgB;AAAA,KACnD;AAAA,EACF,CAAA,MAEK;AACH,IAAA,MAAM,aAAA,GACJ,YAAA,CAAa,MAAA,GAAS,CAAA,IAAK,aAAA,CAAc,YAAA,CAAa,CAAC,CAAC,CAAA,GAAK,YAAA,CAAa,CAAC,CAAA,GAAsB,EAAC;AACpG,IAAA,MAAM,mBAAmB,aAAA,CAAc,QAAA;AACvC,IAAA,YAAA,CAAa,CAAC,CAAA,GAAI;AAAA,MAChB,GAAG,aAAA;AAAA,MACH,QAAA,EAAU,uBAAuB,gBAAgB;AAAA,KACnD;AAAA,EACF;AAEA,EAAA,IAAA,CAAK,qBAAA,GAAwB,IAAA;AAC7B,EAAA,OAAO,YAAA;AACT;AAGO,SAAS,SAAS,OAAA,EAKjB;AACN,EAAA,OAAO,SAAU,OAAA,EAAc,WAAA,EAA8B,UAAA,EAA0C;AACrG,IAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,EAAU;AAEnD,IAAA,MAAM,iBAAiB,UAAA,CAAW,KAAA;AAClC,IAAA,MAAM,UAAA,GAAa,OAAO,WAAW,CAAA;AAErC,IAAA,UAAA,CAAW,KAAA,GAAQ,YAA4B,IAAA,EAAiB;AAC9D,MAAA,IAAI,SAAS,iBAAA,IAAqB,CAAC,kBAAA,CAAmB,OAAA,EAAS,UAAU,CAAA,EAAG;AAC1E,QAAA,OAAO,cAAA,CAAe,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MACxC;AAEA,MAAA,MAAM,MAAA,GAASA,KAAAA,CAAM,SAAA,CAAU,OAAA,EAAS,cAAc,gBAAgB,CAAA;AAGtE,MAAA,IAAI,QAAA;AACJ,MAAA,IAAI,QAAA;AAEJ,MAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,QAAA,QAAA,GAAW,OAAA;AAAA,MACb,WAAW,OAAA,EAAS;AAClB,QAAA,QAAA,GAAW,QAAQ,QAAA,IAAY,UAAA;AAC/B,QAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,QAAA,GAAW,UAAA;AAAA,MACb;AAGA,MAAA,MAAM,OAAO,MAAA,CAAO,SAAA,CAAU,UAAU,EAAE,IAAA,EAAM,UAAU,CAAA;AAG1D,MAAA,IAAI,MAAMA,KAAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,MAAA,IAAU,IAAI,CAAA;AAG9C,MAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAA,KAAU;AAC3B,QAAA,IAAA,CAAK,YAAA,CAAa,GAAG,QAAQ,CAAA,UAAA,EAAa,KAAK,CAAA,CAAA,EAAI,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,MAC1E,CAAC,CAAA;AAGD,MAAA,MAAM,EAAE,WAAW,aAAA,EAAe,KAAA,EAAO,UAAU,UAAA,EAAW,GAAI,iBAAiB,GAAG,CAAA;AAEtF,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAAA,MAChD;AAEA,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAAA,MACxC;AAEA,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAAA,MAC5C;AAEA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAChD,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAAA,QAClC;AAAA,MACF,WAAW,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,UAAU,IAAA,EAAM;AAC7D,QAAA,MAAM,UAAA,GAAa,IAAA;AACnB,QAAA,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,UAAA,CAAW,IAAI,CAAA;AAClD,QAAA,IAAI,WAAW,KAAA,EAAO,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,WAAW,KAAK,CAAA;AAGjE,QAAA,MAAM,iBAAoD,EAAC;AAE3D,QAAA,cAAA,CAAe,aAAA,GAAgB,EAAE,KAAA,EAAO,UAAA,CAAW,IAAA,EAAK;AAExD,QAAA,IAAI,WAAW,KAAA,EAAO;AACpB,UAAA,cAAA,CAAe,KAAA,GAAQ,EAAE,KAAA,EAAO,UAAA,CAAW,KAAA,EAAM;AAAA,QACnD;AAEA,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,cAAA,CAAe,iBAAiB,CAAA,GAAI,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA,QACzD;AAEA,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,cAAA,CAAe,QAAA,GAAW,EAAE,KAAA,EAAO,QAAA,EAAS;AAAA,QAC9C;AAEA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,cAAA,CAAe,UAAA,GAAa,EAAE,KAAA,EAAO,UAAA,EAAW;AAAA,QAClD;AAEA,QAAA,GAAA,GAAMC,YAAY,UAAA,CAAW,GAAA,EAAKA,WAAAA,CAAY,aAAA,CAAc,cAAqB,CAAC,CAAA;AAAA,MACpF;AAEA,MAAA,IAAI;AAEF,QAAA,MAAM,YAAA,GAAe,kBAAkB,UAAU,CAAA,GAC7C,uCAAuC,IAAA,EAAM,IAAA,EAAM,QAAQ,CAAA,GAC3D,IAAA;AAEJ,QAAA,MAAM,MAAA,GAAS,QAAQ,IAAA,CAAK,GAAA,EAAK,MAAM,cAAA,CAAe,KAAA,CAAM,IAAA,EAAM,YAAY,CAAC,CAAA;AAG/E,QAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,UAAA,OAAO,MAAA,CACJ,KAAK,CAAA,aAAA,KAAiB;AAErB,YAAA,IAAI,iBAAA,CAAkB,UAAU,CAAA,EAAG;AACjC,cAAA,OAAO,aAAA;AAAA,YACT;AAEA,YAAA,IAAA,CAAK,aAAa,CAAA,EAAG,QAAQ,CAAA,OAAA,CAAA,EAAW,gBAAA,CAAiB,aAAa,CAAC,CAAA;AACvE,YAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAC1C,YAAA,OAAO,aAAA;AAAA,UACT,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,GAAA,KAAO;AACZ,YAAA,IAAA,CAAK,SAAA,CAAU;AAAA,cACb,MAAM,cAAA,CAAe,KAAA;AAAA,cACrB,OAAA,EAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU;AAAA,aAC/C,CAAA;AACD,YAAA,IAAI,eAAe,KAAA,EAAO;AAExB,cAAA,IAAA,CAAK,gBAAgB,GAAG,CAAA;AAAA,YAC1B;AAEA,YAAA,WAAA,CAAY,IAAI,CAAA;AAChB,YAAA,MAAM,GAAA;AAAA,UACR,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,YAAA,IAAI,CAAC,IAAA,CAAK,qBAAA,EAAuB,WAAA,CAAY,IAAI,CAAA;AAAA,UACnD,CAAC,CAAA;AAAA,QACL;AAGA,QAAA,IAAI,CAAC,iBAAA,CAAkB,UAAU,CAAA,EAAG;AAClC,UAAA,IAAA,CAAK,aAAa,CAAA,EAAG,QAAQ,CAAA,OAAA,CAAA,EAAW,gBAAA,CAAiB,MAAM,CAAC,CAAA;AAAA,QAClE;AACA,QAAA,IAAA,CAAK,SAAA,CAAU,EAAE,IAAA,EAAM,cAAA,CAAe,IAAI,CAAA;AAC1C,QAAA,OAAO,MAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,IAAA,CAAK,SAAA,CAAU;AAAA,UACb,MAAM,cAAA,CAAe,KAAA;AAAA,UACrB,OAAA,EAAS,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SACnD,CAAA;AACD,QAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,UAAA,IAAA,CAAK,gBAAgB,KAAK,CAAA;AAAA,QAC5B;AAEA,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,MAAM,KAAA;AAAA,MACR,CAAA,SAAE;AAEA,QAAA,IAAI,CAAC,iBAAA,CAAkB,UAAU,CAAA,IAAK,CAAC,KAAK,aAAA,EAAe;AACzD,UAAA,WAAA,CAAY,IAAI,CAAA;AAAA,QAClB;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AACF;AAGO,SAAS,gBAAgB,OAAA,EAM7B;AACD,EAAA,OAAO,SAAU,MAAA,EAAa;AAC5B,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,mBAAA,CAAoB,MAAA,CAAO,SAAS,CAAA;AAE3D,IAAA,OAAA,CAAQ,QAAQ,CAAA,MAAA,KAAU;AACxB,MAAA,IAAI,SAAS,cAAA,EAAgB,QAAA,CAAS,MAAM,CAAA,IAAK,WAAW,aAAA,EAAe;AAC3E,MAAA,IAAI,SAAS,YAAA,IAAgB,CAAC,OAAA,CAAQ,YAAA,CAAa,MAAM,CAAA,EAAG;AAE5D,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,wBAAA,CAAyB,MAAA,CAAO,WAAW,MAAM,CAAA;AAC3E,MAAA,IAAI,UAAA,IAAc,OAAO,UAAA,CAAW,KAAA,KAAU,UAAA,EAAY;AACxD,QAAA,MAAA,CAAO,cAAA;AAAA,UACL,MAAA,CAAO,SAAA;AAAA,UACP,MAAA;AAAA,UACA,QAAA,CAAS;AAAA,YACP,QAAA,EAAU,SAAS,MAAA,GAAS,CAAA,EAAG,QAAQ,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,CAAA,GAAK,MAAA;AAAA,YAC5D,iBAAA,EAAmB,IAAA;AAAA,YACnB,QAAA,EAAU,OAAA,EAAS,QAAA,IAAY,QAAA,CAAS,QAAA;AAAA,YACxC,YAAY,OAAA,EAAS;AAAA,WACtB,CAAA,CAAE,MAAA,EAAQ,MAAA,EAAQ,UAAU;AAAA,SAC/B;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACF;ACvSO,IAAM,oBAAN,MAAgD;AAAA,EAC7C,OAAA;AAAA,EACA,QAA2E,EAAC;AAAA,EAC5E,UAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA,GAAyC,MAAA;AAAA,EAEjD,WAAA,CAAY,EAAE,MAAA,EAAQ,OAAA,EAAQ,EAAsD;AAClF,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,UAAA,GAAa,mBAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAA,CAAO,wBAAwC,cAAA,EAAsD;AACnG,IAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,UAAA,CAAW,gBAAA,CAAiB,sBAAsB,CAAA;AAEjF,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,MAAA,CAAO,KAAK,iBAAA,CAAkB,MAAA,EAAQ,MAAM,CAAC,CAAA;AACxE,IAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,aAAA,GAAgB,CAAC,CAAA,EAAG,UAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAA,CAAM,MAAM,CAAA,0CAAA,CAA4C,CAAA;AAElG,IAAA,IAAA,CAAK,MAAM,IAAA,CAAK,EAAE,IAAA,EAAM,KAAA,EAAO,gBAAgB,CAAA;AAE/C,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACrB,MAAA,IAAA,CAAK,WAAA,GAAc,KAAK,KAAA,EAAM;AAAA,IAChC;AAAA,EACF;AAAA,EACA,QAAA,GAA0B;AACxB,IAAA,OAAO,KAAK,UAAA,EAAW;AAAA,EACzB;AAAA,EAEA,KAAA,GAAuB;AACrB,IAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,KAAA,EAAM;AAC/B,IAAA,IAAI,CAAC,KAAA,EAAO,OAAO,OAAA,CAAQ,OAAA,EAAQ;AAEnC,IAAA,MAAM,WAAkB,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,CAAC,KAAK,WAAA,KAAgB;AAC9D,MAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAM,GAAI,WAAA;AACzB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM;AAAA,UACJ,MAAA;AAAA,UACA,YAAA;AAAA,UACA,OAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAA;AAAA,UACA,MAAA;AAAA,UACA,KAAA;AAAA,UACA,iBAAA;AAAA,UACA,eAAA;AAAA,UACA,GAAG;AAAA,SACL,GAAI,IAAA;AAEJ,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,MAAA,CAAO,iBAAiB,IAAI,KAAK,CAAA;AAC1D,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,MAAA,CAAO,eAAe,IAAI,KAAK,CAAA;AAEtD,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,EAAA,EAAI,MAAA;AAAA,UACJ,YAAA;AAAA,UACA,OAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAO,KAAA,CAAM,IAAA;AAAA,UACb,IAAA;AAAA,UACA,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAAA,UAC7B,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAAA,UAC7B,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AAAA,UAC3B,YAAY,IAAA,CAAK,SAAA;AAAA,YACf,UAAA,CAAW,MAAA,CAAO,CAACC,IAAAA,EAA0B,IAAA,KAAc;AACzD,cAAA,MAAM,WAAW,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,KAAK,EAAE,CAAC,CAAA;AAC1C,cAAA,IAAI,QAAA,EAAU;AACZ,gBAAAA,KAAI,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,cACrC;AACA,cAAA,OAAOA,IAAAA;AAAA,YACT,CAAA,EAAG,EAAE;AAAA,WACP;AAAA,UACA,SAAA;AAAA,UACA,OAAA;AAAA,UACA,KAAA,EAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAAA,UAC1B,SAAA,EAAW;AAAA,SACZ,CAAA;AAAA,MACH;AACA,MAAA,OAAO,GAAA;AAAA,IACT,CAAA,EAAG,EAAE,CAAA;AAEL,IAAA,OAAO,IAAA,CAAK,QACT,WAAA,CAAY;AAAA,MACX,SAAA,EAAW,YAAA;AAAA,MACX,OAAA,EAAS;AAAA,KACV,CAAA,CACA,IAAA,CAAK,MAAM;AACV,MAAA,KAAA,CAAM,cAAA,CAAe;AAAA,QACnB,MAAM,gBAAA,CAAiB;AAAA,OACxB,CAAA;AAAA,IACH,CAAC,CAAA,CACA,KAAA,CAAM,CAAA,CAAA,KAAK;AACV,MAAA,MAAM,cAAc,IAAI,WAAA;AAAA,QACtB;AAAA,UACE,EAAA,EAAI,2BAAA;AAAA,UACJ,IAAA,EAAM,kCAAA;AAAA,UACN,MAAA,EAAA,kBAAA;AAAA,UACA,QAAA,EAAA,QAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACP,oBAAoB,QAAA,CAAS,MAAA;AAAA,YAC7B,WAAA,EAAa,YAAA;AAAA,YACb,eAAe,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,CAAS,CAAC,EAAE,IAAA,GAAO,EAAA;AAAA,YACxD,eAAe,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,CAAS,CAAC,EAAE,IAAA,GAAO,EAAA;AAAA,YACxD,gBAAgB,QAAA,CAAS,MAAA,GAAS,IAAI,QAAA,CAAS,CAAC,EAAE,KAAA,GAAQ;AAAA;AAC5D,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,eAAe,WAAW,CAAA;AACtC,MAAA,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,WAAA,GAAc,WAAA,CAAY,UAAU,CAAA;AACtD,MAAA,KAAA,CAAM,cAAA,CAAe;AAAA,QACnB,MAAM,gBAAA,CAAiB,MAAA;AAAA,QACvB,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AAAA,IACrB,CAAC,CAAA;AAAA,EACL;AAAA,EACA,MAAM,UAAA,GAA4B;AAChC,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ;AACtB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,CAAK,WAAA;AACX,IAAA,OAAO,IAAA,CAAK,MAAM,MAAA,EAAQ;AACxB,MAAA,MAAM,KAAK,KAAA,EAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,YAAY,MAAA,EAAuB;AACjC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;ACrIO,IAAM,SAAA,GAAN,MAAM,UAAA,CAAU;AAAA,EACd,MAAA,GAAiBF,KAAAA,CAAM,SAAA,CAAU,SAAS,CAAA;AAAA,EACjD,IAAA,GAAe,iBAAA;AAAA,EAEP,YAAY,MAAA,EAAoB;AACtC,IAAA,IAAA,CAAK,IAAA,GAAO,OAAO,WAAA,IAAe,iBAAA;AAElC,IAAA,IAAA,CAAK,MAAA,GAASA,KAAAA,CAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAa,QAAA,GAAW;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzB,OAAO,IAAA,CAAK,MAAA,GAAqB,EAAC,EAAc;AAC9C,IAAA,IAAI;AACF,MAAA,IAAI,CAAC,WAAW,aAAA,EAAe;AAC7B,QAAA,UAAA,CAAW,aAAA,GAAgB,IAAI,UAAA,CAAU,MAAM,CAAA;AAAA,MACjD;AAEA,MAAA,OAAO,UAAA,CAAW,aAAA;AAAA,IACpB,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,eAAe,IAAI,WAAA;AAAA,QACvB;AAAA,UACE,EAAA,EAAI,uBAAA;AAAA,UACJ,IAAA,EAAM,gCAAA;AAAA,UACN,MAAA,EAAA,kBAAA;AAAA,UACA,QAAA,EAAA,QAAA;AAAA,SACF;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,YAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,aAAA,GAAgB;AACrB,IAAA,MAAM,IAAA,GAAOA,MAAM,aAAA,EAAc;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAA,GAAiB;AACtB,IAAA,IAAI,CAAC,WAAW,aAAA,EAAe;AAC7B,MAAA,MAAM,IAAI,WAAA,CAAY;AAAA,QACpB,EAAA,EAAI,0DAAA;AAAA,QACJ,IAAA,EAAM,2BAAA;AAAA,QACN,MAAA,EAAA,kBAAA;AAAA,QACA,QAAA,EAAA,MAAA;AAAA,OACD,CAAA;AAAA,IACH;AACA,IAAA,OAAO,UAAA,CAAW,aAAA;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAA,CACE,QAAA,EACA,OAAA,GASI,EAAC,EACF;AACH,IAAA,MAAM,EAAE,iBAAA,GAAoB,IAAA,EAAK,GAAI,OAAA;AAGrC,IAAA,IAAI,iBAAA,IAAqB,CAAC,kBAAA,EAAmB,EAAG;AAC9C,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,MAAM,EAAE,cAAA,GAAiB,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,WAAA,EAAY,EAAG,UAAA,GAAa,EAAC,EAAG,cAAA,GAAiB,IAAG,GAAI,OAAA;AAE3G,IAAA,OAAO,IAAI,MAAM,QAAA,EAAU;AAAA,MACzB,GAAA,EAAK,CAAC,MAAA,EAAQ,IAAA,KAA0B;AACtC,QAAA,MAAM,KAAA,GAAQ,OAAO,IAAe,CAAA;AAGpC,QAAA,IACE,OAAO,KAAA,KAAU,UAAA,IACjB,SAAS,aAAA,IACT,CAAC,KAAK,QAAA,EAAS,CAAE,UAAA,CAAW,GAAG,KAC/B,CAAC,cAAA,CAAe,SAAS,IAAA,CAAK,QAAA,EAAU,CAAA,EACxC;AACA,UAAA,OAAO,IAAA,CAAK,WAAA,CAAY,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,EAAG;AAAA,YAC1C,UAAU,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,IAAA,CAAK,UAAU,CAAA,CAAA;AAAA,YAC9C,UAAA,EAAY;AAAA,cACV,GAAG,UAAA;AAAA,cACH,CAAC,CAAA,EAAG,cAAc,CAAA,KAAA,CAAO,GAAG,OAAO,WAAA,CAAY,IAAA;AAAA,cAC/C,CAAC,CAAA,EAAG,cAAc,CAAA,YAAA,CAAc,GAAG,KAAK,QAAA;AAAS;AACnD,WACD,CAAA;AAAA,QACH;AAEA,QAAA,OAAO,KAAA;AAAA,MACT;AAAA,KACD,CAAA;AAAA,EACH;AAAA,EAEA,OAAO,UAAA,CAAW,OAAA,EAAuC,GAAA,GAAeG,OAAA,CAAY,QAAO,EAAG;AAC5F,IAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,WAAA,CAAYF,WAAAA,CAAY,UAAA,CAAW,GAAG,CAAA,EAAG,aAAA,EAAc,IAAK,EAAE,CAAA;AAC5F,IAAA,MAAM,SAASA,WAAAA,CAAY,UAAA;AAAA,MACzB,GAAA;AAAA,MACAA,YAAY,aAAA,CAAc;AAAA,QACxB,GAAG,cAAA;AAAA,QACH,GAAG;AAAA,OACJ;AAAA,KACH;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,OAAO,WAAA,CAAY,GAAA,EAAc,EAAA,EAAgB;AAC/C,IAAA,OAAOE,OAAA,CAAY,IAAA,CAAK,GAAA,EAAK,EAAE,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,WAAA,CACE,QACAC,QAAAA,EAMS;AACT,IAAA,IAAI,GAAA,GAAMD,QAAY,MAAA,EAAO;AAC7B,IAAA,MAAM,EAAE,iBAAA,GAAoB,IAAA,EAAK,GAAIC,QAAAA;AAGrC,IAAA,IAAI,iBAAA,IAAqB,CAAC,kBAAA,EAAmB,EAAG;AAC9C,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,QAAQ,IAAI,IAAA,KAAoB;AAC9B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAUA,SAAQ,QAAQ,CAAA;AAEnD,MAAA,SAAS,YAAY,KAAA,EAAgB;AACnC,QAAA,IAAA,CAAK,gBAAgB,KAAc,CAAA;AACnC,QAAA,IAAA,CAAK,SAAA,CAAU;AAAA,UACb,MAAMC,cAAAA,CAAe,KAAA;AAAA,UACrB,SAAU,KAAA,CAAgB;AAAA,SAC3B,CAAA;AACD,QAAA,IAAA,CAAK,GAAA,EAAI;AACT,QAAA,MAAM,KAAA;AAAA,MACR;AACA,MAAA,IAAI;AAmEF,QAAA,IAASC,aAAAA,GAAT,SAAsB,GAAA,EAAU;AAC9B,UAAA,IAAA,CAAK,aAAa,CAAA,EAAGF,QAAAA,CAAQ,QAAQ,CAAA,OAAA,CAAA,EAAW,gBAAA,CAAiB,GAAG,CAAC,CAAA;AACrE,UAAA,IAAA,CAAK,GAAA,EAAI;AACT,UAAA,OAAO,GAAA;AAAA,QACT,CAAA;AAtEA,QAAA,MAAM,EAAE,WAAW,aAAA,EAAe,KAAA,EAAO,UAAU,UAAA,EAAW,GAAI,iBAAiB,GAAG,CAAA;AAGtF,QAAA,IAAIA,SAAQ,UAAA,EAAY;AACtB,UAAA,IAAA,CAAK,aAAA,CAAcA,SAAQ,UAAU,CAAA;AAAA,QACvC;AAEA,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAAA,QAChD;AAEA,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAAA,QACxC;AAEA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAAA,QAC5C;AAEA,QAAA,IAAIA,QAAAA,CAAQ,YAAY,aAAA,EAAe;AACrC,UAAA,GAAA,GAAMH,WAAAA,CAAY,UAAA;AAAA,YAChB,GAAA;AAAA,YACAA,YAAY,aAAA,CAAc;AAAA,cACxB,aAAA,EAAe,EAAE,KAAA,EAAOG,QAAAA,CAAQ,WAAW,aAAA,EAAc;AAAA;AAAA,cAEzD,KAAA,EAAO,EAAE,KAAA,EAAOA,QAAAA,CAAQ,WAAW,KAAA,EAAM;AAAA;AAAA,cAEzC,iBAAA,EAAmB,EAAE,KAAA,EAAO,SAAA;AAAU,aACvC;AAAA,WACH;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI,aAAA,EAAe;AACjB,YAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAEhD,YAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAAA,UAClC,CAAA,MAAA,IAAW,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAM;AAC5B,YAAA,IAAA,CAAK,YAAA,CAAa,eAAA,EAAiB,IAAA,CAAK,IAAI,CAAA;AAE5C,YAAA,IAAA,CAAK,YAAA,CAAa,OAAA,EAAS,IAAA,CAAK,KAAK,CAAA;AACrC,YAAA,GAAA,GAAMH,WAAAA,CAAY,UAAA;AAAA,cAChB,GAAA;AAAA,cACAA,YAAY,aAAA,CAAc;AAAA,gBACxB,aAAA,EAAe,EAAE,KAAA,EAAO,IAAA,CAAK,IAAA,EAAK;AAAA;AAAA,gBAElC,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,CAAK,KAAA,EAAM;AAAA;AAAA,gBAE3B,iBAAA,EAAmB,EAAE,KAAA,EAAO,SAAA,EAAU;AAAA;AAAA,gBAEtC,QAAA,EAAU,EAAE,KAAA,EAAO,QAAA,EAAS;AAAA;AAAA,gBAE5B,UAAA,EAAY,EAAE,KAAA,EAAO,UAAA;AAAW,eACjC;AAAA,aACH;AAAA,UACF;AAAA,QACF;AAGA,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,GAAA,EAAK,KAAA,KAAU;AAC3B,UAAA,IAAA,CAAK,YAAA,CAAa,GAAGG,QAAAA,CAAQ,QAAQ,aAAa,KAAK,CAAA,CAAA,EAAI,gBAAA,CAAiB,GAAG,CAAC,CAAA;AAAA,QAClF,CAAC,CAAA;AAED,QAAA,IAAI,MAAA;AACJ,QAAAD,OAAA,CAAY,KAAKH,KAAAA,CAAM,OAAA,CAAQ,GAAA,EAAK,IAAI,GAAG,MAAM;AAC/C,UAAA,MAAA,GAAS,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,QACzB,CAAC,CAAA;AAQD,QAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,UAAA,OAAO,MAAA,CAAO,IAAA,CAAKM,aAAY,CAAA,CAAE,MAAM,WAAW,CAAA;AAAA,QACpD,CAAA,MAAO;AACL,UAAA,OAAOA,cAAa,MAAM,CAAA;AAAA,QAC5B;AAAA,MACF,SAAS,KAAA,EAAO;AACd,QAAA,WAAA,CAAY,KAAK,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,EACF;AAAA,EAEA,gBAAA,GAA2B;AACzB,IAAA,OAAO,IAAI,aAAA,CAAc,IAAA,CAAK,MAAM,CAAA;AAAA,EACtC;AACF;AAEA,IAAM,gBAAN,MAAsC;AAAA,EAC5B,OAAA;AAAA,EAER,YAAY,MAAA,EAAgB;AAC1B,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA,EAEA,SAAA,CAAU,IAAA,EAAc,OAAA,GAAuB,IAAI,GAAA,EAAc;AAC/D,IAAA,GAAA,GAAM,GAAA,IAAOH,QAAY,MAAA,EAAO;AAChC,IAAA,MAAM,OAAO,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,IAAA,EAAM,SAAS,GAAG,CAAA;AACtD,IAAA,MAAM,EAAE,eAAe,KAAA,EAAO,SAAA,EAAW,UAAU,UAAA,EAAW,GAAI,iBAAiB,GAAG,CAAA;AAEtF,IAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAEhD,IAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAEhC,IAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAE9C,IAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAEtC,IAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAE1C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAUA,eAAA,CACE,IAAA,EACA,WAAA,EACA,OAAA,EACA,EAAA,EACe;AACf,IAAA,IAAI,OAAO,gBAAgB,UAAA,EAAY;AACrC,MAAA,MAAMI,UAAAA,GAAY,CAAC,IAAA,KAAe;AAChC,QAAA,MAAM,EAAE,aAAA,EAAe,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,YAAW,GAAI,gBAAA,CAAiBJ,OAAA,CAAY,MAAA,EAAQ,CAAA;AAEvG,QAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAEhD,QAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAEhC,QAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAE9C,QAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAEtC,QAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAE1C,QAAA,OAAO,YAAY,IAAI,CAAA;AAAA,MACzB,CAAA;AACA,MAAA,OAAO,IAAA,CAAK,QAAQ,eAAA,CAAgB,IAAA,EAAM,EAAC,EAAGC,OAAAA,CAAQ,MAAA,EAAO,EAAGG,UAAc,CAAA;AAAA,IAChF;AACA,IAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,MAAA,MAAMA,UAAAA,GAAY,CAAC,IAAA,KAAe;AAChC,QAAA,MAAM,EAAE,aAAA,EAAe,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,YAAW,GAAI,gBAAA,CAAiBJ,OAAA,CAAY,MAAA,EAAQ,CAAA;AAEvG,QAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAEhD,QAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAEhC,QAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAE9C,QAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAEtC,QAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAE1C,QAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,MACrB,CAAA;AACA,MAAA,OAAO,IAAA,CAAK,QAAQ,eAAA,CAAgB,IAAA,EAAM,aAAaC,OAAAA,CAAQ,MAAA,IAAUG,UAAc,CAAA;AAAA,IACzF;AACA,IAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAAe;AAChC,MAAA,MAAM,EAAE,aAAA,EAAe,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,YAAW,GAAI,gBAAA;AAAA,QAChE,OAAA,IAAWJ,QAAY,MAAA;AAAO,OAChC;AAEA,MAAA,IAAA,CAAK,YAAA,CAAa,iBAAiB,aAAa,CAAA;AAEhD,MAAA,IAAA,CAAK,YAAA,CAAa,SAAS,KAAK,CAAA;AAEhC,MAAA,IAAA,CAAK,YAAA,CAAa,mBAAmB,SAAS,CAAA;AAE9C,MAAA,IAAA,CAAK,YAAA,CAAa,YAAY,QAAQ,CAAA;AAEtC,MAAA,IAAA,CAAK,YAAA,CAAa,cAAc,UAAU,CAAA;AAE1C,MAAA,OAAO,GAAI,IAAI,CAAA;AAAA,IACjB,CAAA;AACA,IAAA,OAAO,KAAK,OAAA,CAAQ,eAAA,CAAgB,IAAA,EAAM,WAAA,EAAa,SAAU,SAAc,CAAA;AAAA,EACjF;AACF,CAAA","file":"chunk-5S5X3QPR.js","sourcesContent":["import { propagation, trace } from '@opentelemetry/api';\nimport type { Context } from '@opentelemetry/api';\n\n// Helper function to check if telemetry is active\nexport function hasActiveTelemetry(tracerName: string = 'default-tracer'): boolean {\n try {\n return !!trace.getTracer(tracerName);\n } catch {\n return false;\n }\n}\n\n/**\n * Get baggage values from context\n * @param ctx The context to get baggage values from\n * @returns\n */\nexport function getBaggageValues(ctx: Context) {\n const currentBaggage = propagation.getBaggage(ctx);\n const requestId = currentBaggage?.getEntry('http.request_id')?.value;\n const componentName = currentBaggage?.getEntry('componentName')?.value;\n const runId = currentBaggage?.getEntry('runId')?.value;\n const threadId = currentBaggage?.getEntry('threadId')?.value;\n const resourceId = currentBaggage?.getEntry('resourceId')?.value;\n return {\n requestId,\n componentName,\n runId,\n threadId,\n resourceId,\n };\n}\n","import { context, propagation, SpanKind, SpanStatusCode, trace } from '@opentelemetry/api';\nimport type { Span } from '@opentelemetry/api';\n\nimport { boundedStringify } from '../ai-tracing/serialization';\nimport { getBaggageValues, hasActiveTelemetry } from './utility';\n\ninterface StreamFinishData {\n text?: string;\n usage?: {\n // AI SDK v5 format (VNext paths)\n inputTokens?: number;\n outputTokens?: number;\n reasoningTokens?: number;\n cachedInputTokens?: number;\n // Legacy format (backward compatibility)\n promptTokens?: number;\n completionTokens?: number;\n // Common fields\n totalTokens?: number;\n };\n finishReason?: string;\n toolCalls?: unknown[];\n toolResults?: unknown[];\n warnings?: unknown;\n object?: unknown; // structured output\n}\n\ninterface StreamOptions {\n onFinish?: (data: StreamFinishData) => Promise<void> | void;\n [key: string]: unknown;\n}\n\ninterface EnhancedSpan extends Span {\n __mastraStreamingSpan?: boolean;\n __mastraEnded?: boolean;\n}\n\n/**\n * End a span at most once (guards against double-end bugs across layers).\n */\nfunction endSpanOnce(span: EnhancedSpan) {\n if (span.__mastraEnded) return;\n span.__mastraEnded = true;\n try {\n span.end();\n } catch {\n // best-effort\n }\n}\n\nfunction isStreamingMethod(methodName: string): boolean {\n return methodName === 'stream' || methodName === 'streamLegacy';\n}\n\n/**\n * Attach minimal finish data to a span for streaming methods.\n * Default behavior stores only SMALL summary fields to avoid OOM.\n */\nfunction enhanceStreamingArgumentsWithTelemetry(args: unknown[], span: EnhancedSpan, spanName: string): unknown[] {\n const enhancedArgs = [...args];\n\n // Helper to check if value is a plain object\n const isPlainObject = (val: unknown): val is Record<string, unknown> =>\n val !== null && typeof val === 'object' && !Array.isArray(val);\n\n // Create the enhanced onFinish callback\n const createEnhancedOnFinish = (originalOnFinish?: (data: StreamFinishData) => Promise<void> | void) => {\n const enhancedOnFinish = async (finishData: StreamFinishData) => {\n const telemetryData = {\n text: finishData.text,\n usage: finishData.usage,\n finishReason: finishData.finishReason,\n toolCalls: finishData.toolCalls,\n toolResults: finishData.toolResults,\n warnings: finishData.warnings,\n ...(finishData.object !== undefined && { object: finishData.object }),\n };\n\n span.setAttribute(`${spanName}.result`, boundedStringify(telemetryData));\n span.setStatus({ code: SpanStatusCode.OK });\n endSpanOnce(span);\n\n if (originalOnFinish) return await originalOnFinish(finishData);\n };\n (enhancedOnFinish as any).__hasOriginalOnFinish = !!originalOnFinish;\n return enhancedOnFinish;\n };\n\n // Case 1: Single object argument (e.g., TTS.stream({ text }))\n if (enhancedArgs.length === 1 && isPlainObject(enhancedArgs[0])) {\n const singleArg = enhancedArgs[0] as StreamOptions;\n const originalOnFinish = singleArg.onFinish;\n enhancedArgs[0] = {\n ...singleArg,\n onFinish: createEnhancedOnFinish(originalOnFinish),\n };\n }\n // Case 2: Two-argument signature (model/prompt, options?)\n else {\n const streamOptions =\n enhancedArgs.length > 1 && isPlainObject(enhancedArgs[1]) ? (enhancedArgs[1] as StreamOptions) : {};\n const originalOnFinish = streamOptions.onFinish;\n enhancedArgs[1] = {\n ...streamOptions,\n onFinish: createEnhancedOnFinish(originalOnFinish),\n };\n }\n\n span.__mastraStreamingSpan = true;\n return enhancedArgs;\n}\n\n// Decorator factory\nexport function withSpan(options: {\n spanName?: string;\n skipIfNoTelemetry?: boolean;\n spanKind?: SpanKind;\n tracerName?: string;\n}): any {\n return function (_target: any, propertyKey: string | symbol, descriptor?: PropertyDescriptor | number) {\n if (!descriptor || typeof descriptor === 'number') return;\n\n const originalMethod = descriptor.value as Function;\n const methodName = String(propertyKey);\n\n descriptor.value = function (this: unknown, ...args: unknown[]) {\n if (options?.skipIfNoTelemetry && !hasActiveTelemetry(options?.tracerName)) {\n return originalMethod.apply(this, args);\n }\n\n const tracer = trace.getTracer(options?.tracerName ?? 'default-tracer');\n\n // Determine span name and kind\n let spanName: string;\n let spanKind: SpanKind | undefined;\n\n if (typeof options === 'string') {\n spanName = options;\n } else if (options) {\n spanName = options.spanName || methodName;\n spanKind = options.spanKind;\n } else {\n spanName = methodName;\n }\n\n // Start the span with optional kind\n const span = tracer.startSpan(spanName, { kind: spanKind }) as EnhancedSpan;\n\n // Always bind span to the active context\n let ctx = trace.setSpan(context.active(), span);\n\n // Record input arguments with bounded serialization\n args.forEach((arg, index) => {\n span.setAttribute(`${spanName}.argument.${index}`, boundedStringify(arg));\n });\n\n // Attach baggage-derived fields (these should be small)\n const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);\n\n if (requestId) {\n span.setAttribute('http.request_id', requestId);\n }\n\n if (threadId) {\n span.setAttribute('threadId', threadId);\n }\n\n if (resourceId) {\n span.setAttribute('resourceId', resourceId);\n }\n\n if (componentName) {\n span.setAttribute('componentName', componentName);\n if (runId) {\n span.setAttribute('runId', runId);\n }\n } else if (this && typeof this === 'object' && 'name' in this) {\n const contextObj = this as { name: string; runId?: string };\n span.setAttribute('componentName', contextObj.name);\n if (contextObj.runId) span.setAttribute('runId', contextObj.runId);\n\n // Best-effort baggage update, but do NOT inject undefined properties\n const baggageEntries: Record<string, { value: string }> = {};\n\n baggageEntries.componentName = { value: contextObj.name };\n\n if (contextObj.runId) {\n baggageEntries.runId = { value: contextObj.runId };\n }\n\n if (requestId) {\n baggageEntries['http.request_id'] = { value: requestId };\n }\n\n if (threadId) {\n baggageEntries.threadId = { value: threadId };\n }\n\n if (resourceId) {\n baggageEntries.resourceId = { value: resourceId };\n }\n\n ctx = propagation.setBaggage(ctx, propagation.createBaggage(baggageEntries as any));\n }\n\n try {\n // If this is a streaming method, wrap args before invocation\n const enhancedArgs = isStreamingMethod(methodName)\n ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName)\n : args;\n\n const result = context.with(ctx, () => originalMethod.apply(this, enhancedArgs));\n\n // Promise\n if (result instanceof Promise) {\n return result\n .then(resolvedValue => {\n // For streaming, onFinish is responsible for ending span\n if (isStreamingMethod(methodName)) {\n return resolvedValue;\n }\n\n span.setAttribute(`${spanName}.result`, boundedStringify(resolvedValue));\n span.setStatus({ code: SpanStatusCode.OK });\n return resolvedValue;\n })\n .catch(err => {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: err instanceof Error ? err.message : 'Unknown error',\n });\n if (err instanceof Error) {\n // recordException is okay, but can include stack; rely on OTel/Sentry settings\n span.recordException(err);\n }\n // End span on error - for streaming methods, onFinish won't be called if there's an error\n endSpanOnce(span);\n throw err;\n })\n .finally(() => {\n if (!span.__mastraStreamingSpan) endSpanOnce(span);\n });\n }\n\n // Non-promise return\n if (!isStreamingMethod(methodName)) {\n span.setAttribute(`${spanName}.result`, boundedStringify(result));\n }\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : 'Unknown error',\n });\n if (error instanceof Error) {\n span.recordException(error);\n }\n // End span on error - for streaming methods, onFinish won't be called if there's an error\n endSpanOnce(span);\n throw error;\n } finally {\n // End span for sync non-streaming methods (streaming ends in onFinish or catch)\n if (!isStreamingMethod(methodName) && !span.__mastraEnded) {\n endSpanOnce(span);\n }\n }\n };\n\n return descriptor;\n };\n}\n\n// class-telemetry.decorator.ts\nexport function InstrumentClass(options?: {\n prefix?: string;\n spanKind?: SpanKind;\n excludeMethods?: string[];\n methodFilter?: (methodName: string) => boolean;\n tracerName?: string;\n}) {\n return function (target: any) {\n const methods = Object.getOwnPropertyNames(target.prototype);\n\n methods.forEach(method => {\n if (options?.excludeMethods?.includes(method) || method === 'constructor') return;\n if (options?.methodFilter && !options.methodFilter(method)) return;\n\n const descriptor = Object.getOwnPropertyDescriptor(target.prototype, method);\n if (descriptor && typeof descriptor.value === 'function') {\n Object.defineProperty(\n target.prototype,\n method,\n withSpan({\n spanName: options?.prefix ? `${options.prefix}.${method}` : method,\n skipIfNoTelemetry: true,\n spanKind: options?.spanKind || SpanKind.INTERNAL,\n tracerName: options?.tracerName,\n })(target, method, descriptor),\n );\n }\n });\n\n return target;\n };\n}\n","import { ExportResultCode } from '@opentelemetry/core';\nimport type { ExportResult } from '@opentelemetry/core';\nimport { JsonTraceSerializer } from '@opentelemetry/otlp-transformer';\nimport type { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { IMastraLogger } from '../logger';\nimport type { MastraStorage } from '../storage/base';\nimport { TABLE_TRACES } from '../storage/constants';\n\nexport class OTLPTraceExporter implements SpanExporter {\n private storage: MastraStorage;\n private queue: { data: any[]; resultCallback: (result: ExportResult) => void }[] = [];\n private serializer: typeof JsonTraceSerializer;\n private logger: IMastraLogger;\n private activeFlush: Promise<void> | undefined = undefined;\n\n constructor({ logger, storage }: { logger: IMastraLogger; storage: MastraStorage }) {\n this.storage = storage;\n this.serializer = JsonTraceSerializer;\n this.logger = logger;\n }\n\n export(internalRepresentation: ReadableSpan[], resultCallback: (result: ExportResult) => void): void {\n const serializedRequest = this.serializer.serializeRequest(internalRepresentation);\n // @ts-ignore\n const payload = JSON.parse(Buffer.from(serializedRequest.buffer, 'utf8'));\n const items = payload?.resourceSpans?.[0]?.scopeSpans;\n this.logger.debug(`Exporting telemetry: ${items.length} scope spans to be processed [trace batch]`);\n\n this.queue.push({ data: items, resultCallback });\n\n if (!this.activeFlush) {\n this.activeFlush = this.flush();\n }\n }\n shutdown(): Promise<void> {\n return this.forceFlush();\n }\n\n flush(): Promise<void> {\n const now = new Date();\n const items = this.queue.shift();\n if (!items) return Promise.resolve();\n\n const allSpans: any[] = items.data.reduce((acc, scopedSpans) => {\n const { scope, spans } = scopedSpans;\n for (const span of spans) {\n const {\n spanId,\n parentSpanId,\n traceId,\n name,\n kind,\n attributes,\n status,\n events,\n links,\n startTimeUnixNano,\n endTimeUnixNano,\n ...rest\n } = span;\n\n const startTime = Number(BigInt(startTimeUnixNano) / 1000n);\n const endTime = Number(BigInt(endTimeUnixNano) / 1000n);\n\n acc.push({\n id: spanId,\n parentSpanId,\n traceId,\n name,\n scope: scope.name,\n kind,\n status: JSON.stringify(status),\n events: JSON.stringify(events),\n links: JSON.stringify(links),\n attributes: JSON.stringify(\n attributes.reduce((acc: Record<string, any>, attr: any) => {\n const valueKey = Object.keys(attr.value)[0];\n if (valueKey) {\n acc[attr.key] = attr.value[valueKey];\n }\n return acc;\n }, {}),\n ),\n startTime,\n endTime,\n other: JSON.stringify(rest),\n createdAt: now,\n });\n }\n return acc;\n }, []);\n\n return this.storage\n .batchInsert({\n tableName: TABLE_TRACES,\n records: allSpans,\n })\n .then(() => {\n items.resultCallback({\n code: ExportResultCode.SUCCESS,\n });\n })\n .catch(e => {\n const mastraError = new MastraError(\n {\n id: 'OTLP_TRACE_EXPORT_FAILURE',\n text: 'Failed to export telemetry spans',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.SYSTEM,\n details: {\n attemptedSpanCount: allSpans.length,\n targetTable: TABLE_TRACES,\n firstSpanName: allSpans.length > 0 ? allSpans[0].name : '',\n firstSpanKind: allSpans.length > 0 ? allSpans[0].kind : '',\n firstSpanScope: allSpans.length > 0 ? allSpans[0].scope : '',\n },\n },\n e,\n );\n this.logger.trackException(mastraError);\n this.logger.error('span err:' + mastraError.toString());\n items.resultCallback({\n code: ExportResultCode.FAILED,\n error: e,\n });\n })\n .finally(() => {\n this.activeFlush = undefined;\n });\n }\n async forceFlush(): Promise<void> {\n if (!this.queue.length) {\n return;\n }\n\n await this.activeFlush;\n while (this.queue.length) {\n await this.flush();\n }\n }\n\n __setLogger(logger: IMastraLogger) {\n this.logger = logger;\n }\n}\n","import { context as otlpContext, SpanStatusCode, trace, propagation, context } from '@opentelemetry/api';\nimport type { Tracer, SpanOptions, Context, Span, BaggageEntry } from '@opentelemetry/api';\n\nimport { boundedStringify } from '../ai-tracing/serialization';\nimport { MastraError, ErrorDomain, ErrorCategory } from '../error';\nimport type { OtelConfig } from './types';\nimport { getBaggageValues, hasActiveTelemetry } from './utility';\n\n// Add type declaration for global namespace\ndeclare global {\n var __TELEMETRY__: Telemetry | undefined;\n}\n\nexport class Telemetry {\n public tracer: Tracer = trace.getTracer('default');\n name: string = 'default-service';\n\n private constructor(config: OtelConfig) {\n this.name = config.serviceName ?? 'default-service';\n\n this.tracer = trace.getTracer(this.name);\n }\n\n /**\n * @deprecated This method does not do anything\n */\n public async shutdown() {}\n\n /**\n * Initialize telemetry with the given configuration\n * @param config - Optional telemetry configuration object\n * @returns Telemetry instance that can be used for tracing\n */\n static init(config: OtelConfig = {}): Telemetry {\n try {\n if (!globalThis.__TELEMETRY__) {\n globalThis.__TELEMETRY__ = new Telemetry(config);\n }\n\n return globalThis.__TELEMETRY__;\n } catch (error) {\n const wrappedError = new MastraError(\n {\n id: 'TELEMETRY_INIT_FAILED',\n text: 'Failed to initialize telemetry',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.SYSTEM,\n },\n error,\n );\n throw wrappedError;\n }\n }\n\n static getActiveSpan() {\n const span = trace.getActiveSpan();\n return span;\n }\n\n /**\n * Get the global telemetry instance\n * @throws {Error} If telemetry has not been initialized\n * @returns {Telemetry} The global telemetry instance\n */\n static get(): Telemetry {\n if (!globalThis.__TELEMETRY__) {\n throw new MastraError({\n id: 'TELEMETRY_GETTER_FAILED_GLOBAL_TELEMETRY_NOT_INITIALIZED',\n text: 'Telemetry not initialized',\n domain: ErrorDomain.MASTRA_TELEMETRY,\n category: ErrorCategory.USER,\n });\n }\n return globalThis.__TELEMETRY__;\n }\n\n /**\n * Wraps a class instance with telemetry tracing\n * @param instance The class instance to wrap\n * @param options Optional configuration for tracing\n * @returns Wrapped instance with all methods traced\n */\n traceClass<T extends object>(\n instance: T,\n options: {\n /** Base name for spans (e.g. 'integration', 'agent') */\n spanNamePrefix?: string;\n /** Additional attributes to add to all spans */\n attributes?: Record<string, string>;\n /** Methods to exclude from tracing */\n excludeMethods?: string[];\n /** Skip tracing if telemetry is not active */\n skipIfNoTelemetry?: boolean;\n } = {},\n ): T {\n const { skipIfNoTelemetry = true } = options;\n\n // Skip if no telemetry is active and skipIfNoTelemetry is true\n if (skipIfNoTelemetry && !hasActiveTelemetry()) {\n return instance;\n }\n\n const { spanNamePrefix = instance.constructor.name.toLowerCase(), attributes = {}, excludeMethods = [] } = options;\n\n return new Proxy(instance, {\n get: (target, prop: string | symbol) => {\n const value = target[prop as keyof T];\n\n // Skip tracing for excluded methods, constructors, private methods\n if (\n typeof value === 'function' &&\n prop !== 'constructor' &&\n !prop.toString().startsWith('_') &&\n !excludeMethods.includes(prop.toString())\n ) {\n return this.traceMethod(value.bind(target), {\n spanName: `${spanNamePrefix}.${prop.toString()}`,\n attributes: {\n ...attributes,\n [`${spanNamePrefix}.name`]: target.constructor.name,\n [`${spanNamePrefix}.method.name`]: prop.toString(),\n },\n });\n }\n\n return value;\n },\n });\n }\n\n static setBaggage(baggage: Record<string, BaggageEntry>, ctx: Context = otlpContext.active()) {\n const currentBaggage = Object.fromEntries(propagation.getBaggage(ctx)?.getAllEntries() ?? []);\n const newCtx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n ...currentBaggage,\n ...baggage,\n }),\n );\n return newCtx;\n }\n\n static withContext(ctx: Context, fn: () => void) {\n return otlpContext.with(ctx, fn);\n }\n\n /**\n * method to trace individual methods with proper context\n * @param method The method to trace\n * @param context Additional context for the trace\n * @returns Wrapped method with tracing\n */\n traceMethod<TMethod extends Function>(\n method: TMethod,\n context: {\n spanName: string;\n attributes?: Record<string, string>;\n skipIfNoTelemetry?: boolean;\n parentSpan?: Span;\n },\n ): TMethod {\n let ctx = otlpContext.active();\n const { skipIfNoTelemetry = true } = context;\n\n // Skip if no telemetry is active and skipIfNoTelemetry is true\n if (skipIfNoTelemetry && !hasActiveTelemetry()) {\n return method;\n }\n\n return ((...args: unknown[]) => {\n const span = this.tracer.startSpan(context.spanName);\n\n function handleError(error: unknown) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: (error as Error).message,\n });\n span.end();\n throw error;\n }\n try {\n const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);\n\n // Add all context attributes to span\n if (context.attributes) {\n span.setAttributes(context.attributes);\n }\n\n if (requestId) {\n span.setAttribute('http.request_id', requestId);\n }\n\n if (threadId) {\n span.setAttribute('threadId', threadId);\n }\n\n if (resourceId) {\n span.setAttribute('resourceId', resourceId);\n }\n\n if (context.attributes?.componentName) {\n ctx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n componentName: { value: context.attributes.componentName },\n // @ts-ignore\n runId: { value: context.attributes.runId },\n // @ts-ignore\n 'http.request_id': { value: requestId },\n }),\n );\n } else {\n if (componentName) {\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n } else if (this && this.name) {\n span.setAttribute('componentName', this.name);\n // @ts-ignore\n span.setAttribute('runId', this.runId);\n ctx = propagation.setBaggage(\n ctx,\n propagation.createBaggage({\n componentName: { value: this.name },\n // @ts-ignore\n runId: { value: this.runId },\n // @ts-ignore\n 'http.request_id': { value: requestId },\n // @ts-ignore\n threadId: { value: threadId },\n // @ts-ignore\n resourceId: { value: resourceId },\n }),\n );\n }\n }\n\n // Record input arguments as span attributes (with bounded serialization)\n args.forEach((arg, index) => {\n span.setAttribute(`${context.spanName}.argument.${index}`, boundedStringify(arg));\n });\n\n let result: any;\n otlpContext.with(trace.setSpan(ctx, span), () => {\n result = method(...args);\n });\n\n function recordResult(res: any) {\n span.setAttribute(`${context.spanName}.result`, boundedStringify(res));\n span.end();\n return res;\n }\n\n if (result instanceof Promise) {\n return result.then(recordResult).catch(handleError);\n } else {\n return recordResult(result);\n }\n } catch (error) {\n handleError(error);\n }\n }) as unknown as TMethod;\n }\n\n getBaggageTracer(): Tracer {\n return new BaggageTracer(this.tracer);\n }\n}\n\nclass BaggageTracer implements Tracer {\n private _tracer: Tracer;\n\n constructor(tracer: Tracer) {\n this._tracer = tracer;\n }\n\n startSpan(name: string, options: SpanOptions = {}, ctx: Context) {\n ctx = ctx ?? otlpContext.active();\n const span = this._tracer.startSpan(name, options, ctx);\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(ctx);\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return span;\n }\n\n startActiveSpan<F extends (span: Span) => unknown>(name: string, fn: F): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(name: string, options: SpanOptions, fn: F): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n options: SpanOptions,\n ctx: Context,\n fn: F,\n ): ReturnType<F>;\n startActiveSpan<F extends (span: Span) => unknown>(\n name: string,\n optionsOrFn: SpanOptions | F,\n ctxOrFn?: Context | F,\n fn?: F,\n ): ReturnType<F> {\n if (typeof optionsOrFn === 'function') {\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(otlpContext.active());\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return optionsOrFn(span);\n };\n return this._tracer.startActiveSpan(name, {}, context.active(), wrappedFn as F);\n }\n if (typeof ctxOrFn === 'function') {\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(otlpContext.active());\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return ctxOrFn(span);\n };\n return this._tracer.startActiveSpan(name, optionsOrFn, context.active(), wrappedFn as F);\n }\n const wrappedFn = (span: Span) => {\n const { componentName, runId, requestId, threadId, resourceId } = getBaggageValues(\n ctxOrFn ?? otlpContext.active(),\n );\n // @ts-ignore\n span.setAttribute('componentName', componentName);\n // @ts-ignore\n span.setAttribute('runId', runId);\n // @ts-ignore\n span.setAttribute('http.request_id', requestId);\n // @ts-ignore\n span.setAttribute('threadId', threadId);\n // @ts-ignore\n span.setAttribute('resourceId', resourceId);\n\n return fn!(span);\n };\n return this._tracer.startActiveSpan(name, optionsOrFn, ctxOrFn!, wrappedFn as F);\n }\n}\n"]}