@mastra/core 0.24.8 → 0.24.9-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/CHANGELOG.md +6 -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-FQTJPLCW.cjs → chunk-2L6LTY2M.cjs} +15 -15
  16. package/dist/{chunk-FQTJPLCW.cjs.map → chunk-2L6LTY2M.cjs.map} +1 -1
  17. package/dist/{chunk-V2IMZSNO.js → chunk-3N7RP3UB.js} +3 -3
  18. package/dist/{chunk-V2IMZSNO.js.map → chunk-3N7RP3UB.js.map} +1 -1
  19. package/dist/{chunk-RP4YCZP7.js → chunk-6KCZMULD.js} +3 -3
  20. package/dist/{chunk-RP4YCZP7.js.map → chunk-6KCZMULD.js.map} +1 -1
  21. package/dist/{chunk-E5NCEJEJ.js → chunk-6ZBXSCZR.js} +3 -3
  22. package/dist/{chunk-E5NCEJEJ.js.map → chunk-6ZBXSCZR.js.map} +1 -1
  23. package/dist/{chunk-N6P5GJRO.js → chunk-7XP3ZCBG.js} +7 -7
  24. package/dist/{chunk-N6P5GJRO.js.map → chunk-7XP3ZCBG.js.map} +1 -1
  25. package/dist/{chunk-2BY7C6Y7.js → chunk-AOUR7HV5.js} +4 -4
  26. package/dist/{chunk-2BY7C6Y7.js.map → chunk-AOUR7HV5.js.map} +1 -1
  27. package/dist/{chunk-CNIM7N4E.cjs → chunk-DM46TJNZ.cjs} +17 -17
  28. package/dist/{chunk-CNIM7N4E.cjs.map → chunk-DM46TJNZ.cjs.map} +1 -1
  29. package/dist/{chunk-YYKN3NDZ.cjs → chunk-DQNIWOM3.cjs} +54 -54
  30. package/dist/{chunk-YYKN3NDZ.cjs.map → chunk-DQNIWOM3.cjs.map} +1 -1
  31. package/dist/{chunk-X5JTTWMF.cjs → chunk-FTV3ZCSR.cjs} +9 -9
  32. package/dist/{chunk-X5JTTWMF.cjs.map → chunk-FTV3ZCSR.cjs.map} +1 -1
  33. package/dist/{chunk-6VB52TJV.js → chunk-GLA7XHTK.js} +3 -3
  34. package/dist/{chunk-6VB52TJV.js.map → chunk-GLA7XHTK.js.map} +1 -1
  35. package/dist/{chunk-PPAIPZ6C.js → chunk-GWZTWJLK.js} +6 -45
  36. package/dist/chunk-GWZTWJLK.js.map +1 -0
  37. package/dist/{chunk-YPYLWTZI.cjs → chunk-KPKDAZ5I.cjs} +18 -58
  38. package/dist/chunk-KPKDAZ5I.cjs.map +1 -0
  39. package/dist/chunk-LQJJBWFH.cjs +130 -0
  40. package/dist/chunk-LQJJBWFH.cjs.map +1 -0
  41. package/dist/{chunk-4YYPQOP7.cjs → chunk-MIRRWDFC.cjs} +4 -4
  42. package/dist/{chunk-4YYPQOP7.cjs.map → chunk-MIRRWDFC.cjs.map} +1 -1
  43. package/dist/{chunk-2YE6RNCZ.cjs → chunk-P67ES4L4.cjs} +4 -4
  44. package/dist/{chunk-2YE6RNCZ.cjs.map → chunk-P67ES4L4.cjs.map} +1 -1
  45. package/dist/{chunk-RLYWCJQ6.js → chunk-PTN7GTBG.js} +3 -3
  46. package/dist/{chunk-RLYWCJQ6.js.map → chunk-PTN7GTBG.js.map} +1 -1
  47. package/dist/{chunk-2YN6HGEH.js → chunk-PVUCLWGL.js} +3 -3
  48. package/dist/{chunk-2YN6HGEH.js.map → chunk-PVUCLWGL.js.map} +1 -1
  49. package/dist/{chunk-DSUKMFZY.js → chunk-QCZOYIZC.js} +92 -111
  50. package/dist/chunk-QCZOYIZC.js.map +1 -0
  51. package/dist/{chunk-DISETAP2.cjs → chunk-RLAYS3PT.cjs} +4 -4
  52. package/dist/{chunk-DISETAP2.cjs.map → chunk-RLAYS3PT.cjs.map} +1 -1
  53. package/dist/{chunk-Z6ZIJYKK.js → chunk-RR7QPRXN.js} +4 -4
  54. package/dist/{chunk-Z6ZIJYKK.js.map → chunk-RR7QPRXN.js.map} +1 -1
  55. package/dist/{chunk-RQPGIUUA.cjs → chunk-SJQ6OUHB.cjs} +6 -6
  56. package/dist/{chunk-RQPGIUUA.cjs.map → chunk-SJQ6OUHB.cjs.map} +1 -1
  57. package/dist/{chunk-3IDFSGG3.cjs → chunk-SQ4FHFMU.cjs} +4 -4
  58. package/dist/{chunk-3IDFSGG3.cjs.map → chunk-SQ4FHFMU.cjs.map} +1 -1
  59. package/dist/chunk-UG3C67I3.js +124 -0
  60. package/dist/chunk-UG3C67I3.js.map +1 -0
  61. package/dist/{chunk-5PSD3IKG.cjs → chunk-UK4QLV4O.cjs} +92 -111
  62. package/dist/chunk-UK4QLV4O.cjs.map +1 -0
  63. package/dist/{chunk-ICICKWAG.cjs → chunk-WHW7ZQCM.cjs} +6 -6
  64. package/dist/{chunk-ICICKWAG.cjs.map → chunk-WHW7ZQCM.cjs.map} +1 -1
  65. package/dist/{chunk-GIK7MM2K.js → chunk-YWK4OFUM.js} +3 -3
  66. package/dist/{chunk-GIK7MM2K.js.map → chunk-YWK4OFUM.js.map} +1 -1
  67. package/dist/{chunk-Y2BH2LUD.js → chunk-Z3PIE2HC.js} +10 -10
  68. package/dist/{chunk-Y2BH2LUD.js.map → chunk-Z3PIE2HC.js.map} +1 -1
  69. package/dist/{chunk-RWPKCFZT.cjs → chunk-ZXVDL4TQ.cjs} +4 -4
  70. package/dist/{chunk-RWPKCFZT.cjs.map → chunk-ZXVDL4TQ.cjs.map} +1 -1
  71. package/dist/index.cjs +73 -73
  72. package/dist/index.js +11 -11
  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,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunk4R2TBRS7_cjs = require('./chunk-4R2TBRS7.cjs');
4
+ var chunkLQJJBWFH_cjs = require('./chunk-LQJJBWFH.cjs');
4
5
  var chunk5NTO7S5I_cjs = require('./chunk-5NTO7S5I.cjs');
5
6
  var api = require('@opentelemetry/api');
6
7
  var core = require('@opentelemetry/core');
@@ -30,65 +31,56 @@ function getBaggageValues(ctx) {
30
31
  }
31
32
 
32
33
  // src/telemetry/telemetry.decorators.ts
33
- function safeStringify(obj) {
34
- const seen = /* @__PURE__ */ new WeakSet();
35
- return JSON.stringify(obj, (_key, value) => {
36
- if (typeof value === "function") return "[Function]";
37
- if (typeof value === "bigint") return `${value}n`;
38
- if (value instanceof Error) return { message: value.message, stack: value.stack };
39
- if (typeof value === "object" && value !== null) {
40
- if (seen.has(value)) return "[Circular]";
41
- seen.add(value);
42
- }
43
- return value;
44
- });
45
- }
46
- function isStreamingResult(result, methodName) {
47
- if (methodName === "stream" || methodName === "streamLegacy") {
48
- return true;
49
- }
50
- if (result && typeof result === "object" && result !== null) {
51
- const obj = result;
52
- return "textStream" in obj || "objectStream" in obj || "usagePromise" in obj || "finishReasonPromise" in obj;
34
+ function endSpanOnce(span) {
35
+ if (span.__mastraEnded) return;
36
+ span.__mastraEnded = true;
37
+ try {
38
+ span.end();
39
+ } catch {
53
40
  }
54
- return false;
55
41
  }
56
- function enhanceStreamingArgumentsWithTelemetry(args, span, spanName, methodName) {
57
- if (methodName === "stream" || methodName === "streamLegacy") {
58
- const enhancedArgs = [...args];
59
- const streamOptions = enhancedArgs.length > 1 && enhancedArgs[1] || {};
60
- const enhancedStreamOptions = { ...streamOptions };
61
- const originalOnFinish = enhancedStreamOptions.onFinish;
62
- enhancedStreamOptions.onFinish = async (finishData) => {
63
- try {
64
- const telemetryData = {
65
- text: finishData.text,
66
- usage: finishData.usage,
67
- finishReason: finishData.finishReason,
68
- toolCalls: finishData.toolCalls,
69
- toolResults: finishData.toolResults,
70
- warnings: finishData.warnings,
71
- ...finishData.object !== void 0 && { object: finishData.object }
72
- };
73
- span.setAttribute(`${spanName}.result`, safeStringify(telemetryData));
74
- span.setStatus({ code: api.SpanStatusCode.OK });
75
- span.end();
76
- } catch (error) {
77
- console.warn("Telemetry capture failed:", error);
78
- span.setAttribute(`${spanName}.result`, "[Telemetry Capture Error]");
79
- span.setStatus({ code: api.SpanStatusCode.ERROR });
80
- span.end();
81
- }
82
- if (originalOnFinish) {
83
- return await originalOnFinish(finishData);
84
- }
42
+ function isStreamingMethod(methodName) {
43
+ return methodName === "stream" || methodName === "streamLegacy";
44
+ }
45
+ function enhanceStreamingArgumentsWithTelemetry(args, span, spanName) {
46
+ const enhancedArgs = [...args];
47
+ const isPlainObject = (val) => val !== null && typeof val === "object" && !Array.isArray(val);
48
+ const createEnhancedOnFinish = (originalOnFinish) => {
49
+ const enhancedOnFinish = async (finishData) => {
50
+ const telemetryData = {
51
+ text: finishData.text,
52
+ usage: finishData.usage,
53
+ finishReason: finishData.finishReason,
54
+ toolCalls: finishData.toolCalls,
55
+ toolResults: finishData.toolResults,
56
+ warnings: finishData.warnings,
57
+ ...finishData.object !== void 0 && { object: finishData.object }
58
+ };
59
+ span.setAttribute(`${spanName}.result`, chunkLQJJBWFH_cjs.boundedStringify(telemetryData));
60
+ span.setStatus({ code: api.SpanStatusCode.OK });
61
+ endSpanOnce(span);
62
+ if (originalOnFinish) return await originalOnFinish(finishData);
63
+ };
64
+ enhancedOnFinish.__hasOriginalOnFinish = !!originalOnFinish;
65
+ return enhancedOnFinish;
66
+ };
67
+ if (enhancedArgs.length === 1 && isPlainObject(enhancedArgs[0])) {
68
+ const singleArg = enhancedArgs[0];
69
+ const originalOnFinish = singleArg.onFinish;
70
+ enhancedArgs[0] = {
71
+ ...singleArg,
72
+ onFinish: createEnhancedOnFinish(originalOnFinish)
73
+ };
74
+ } else {
75
+ const streamOptions = enhancedArgs.length > 1 && isPlainObject(enhancedArgs[1]) ? enhancedArgs[1] : {};
76
+ const originalOnFinish = streamOptions.onFinish;
77
+ enhancedArgs[1] = {
78
+ ...streamOptions,
79
+ onFinish: createEnhancedOnFinish(originalOnFinish)
85
80
  };
86
- enhancedStreamOptions.onFinish.__hasOriginalOnFinish = !!originalOnFinish;
87
- enhancedArgs[1] = enhancedStreamOptions;
88
- span.__mastraStreamingSpan = true;
89
- return enhancedArgs;
90
81
  }
91
- return args;
82
+ span.__mastraStreamingSpan = true;
83
+ return enhancedArgs;
92
84
  }
93
85
  function withSpan(options) {
94
86
  return function(_target, propertyKey, descriptor) {
@@ -113,11 +105,7 @@ function withSpan(options) {
113
105
  const span = tracer.startSpan(spanName, { kind: spanKind });
114
106
  let ctx = api.trace.setSpan(api.context.active(), span);
115
107
  args.forEach((arg, index) => {
116
- try {
117
- span.setAttribute(`${spanName}.argument.${index}`, safeStringify(arg));
118
- } catch {
119
- span.setAttribute(`${spanName}.argument.${index}`, "[Not Serializable]");
120
- }
108
+ span.setAttribute(`${spanName}.argument.${index}`, chunkLQJJBWFH_cjs.boundedStringify(arg));
121
109
  });
122
110
  const { requestId, componentName, runId, threadId, resourceId } = getBaggageValues(ctx);
123
111
  if (requestId) {
@@ -131,58 +119,58 @@ function withSpan(options) {
131
119
  }
132
120
  if (componentName) {
133
121
  span.setAttribute("componentName", componentName);
134
- span.setAttribute("runId", runId);
122
+ if (runId) {
123
+ span.setAttribute("runId", runId);
124
+ }
135
125
  } else if (this && typeof this === "object" && "name" in this) {
136
126
  const contextObj = this;
137
127
  span.setAttribute("componentName", contextObj.name);
128
+ if (contextObj.runId) span.setAttribute("runId", contextObj.runId);
129
+ const baggageEntries = {};
130
+ baggageEntries.componentName = { value: contextObj.name };
138
131
  if (contextObj.runId) {
139
- span.setAttribute("runId", contextObj.runId);
132
+ baggageEntries.runId = { value: contextObj.runId };
140
133
  }
141
- ctx = api.propagation.setBaggage(
142
- ctx,
143
- api.propagation.createBaggage({
144
- // @ts-ignore
145
- componentName: { value: this.name },
146
- // @ts-ignore
147
- runId: { value: this.runId },
148
- // @ts-ignore
149
- "http.request_id": { value: requestId },
150
- // @ts-ignore
151
- threadId: { value: threadId },
152
- // @ts-ignore
153
- resourceId: { value: resourceId }
154
- })
155
- );
134
+ if (requestId) {
135
+ baggageEntries["http.request_id"] = { value: requestId };
136
+ }
137
+ if (threadId) {
138
+ baggageEntries.threadId = { value: threadId };
139
+ }
140
+ if (resourceId) {
141
+ baggageEntries.resourceId = { value: resourceId };
142
+ }
143
+ ctx = api.propagation.setBaggage(ctx, api.propagation.createBaggage(baggageEntries));
156
144
  }
157
- let result;
158
145
  try {
159
- const enhancedArgs = isStreamingResult(result, methodName) ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName, methodName) : args;
160
- result = api.context.with(ctx, () => originalMethod.apply(this, enhancedArgs));
146
+ const enhancedArgs = isStreamingMethod(methodName) ? enhanceStreamingArgumentsWithTelemetry(args, span, spanName) : args;
147
+ const result = api.context.with(ctx, () => originalMethod.apply(this, enhancedArgs));
161
148
  if (result instanceof Promise) {
162
149
  return result.then((resolvedValue) => {
163
- if (isStreamingResult(resolvedValue, methodName)) {
164
- return resolvedValue;
165
- } else {
166
- try {
167
- span.setAttribute(`${spanName}.result`, safeStringify(resolvedValue));
168
- } catch {
169
- span.setAttribute(`${spanName}.result`, "[Not Serializable]");
170
- }
150
+ if (isStreamingMethod(methodName)) {
171
151
  return resolvedValue;
172
152
  }
173
- }).finally(() => {
174
- if (!span.__mastraStreamingSpan) {
175
- span.end();
153
+ span.setAttribute(`${spanName}.result`, chunkLQJJBWFH_cjs.boundedStringify(resolvedValue));
154
+ span.setStatus({ code: api.SpanStatusCode.OK });
155
+ return resolvedValue;
156
+ }).catch((err) => {
157
+ span.setStatus({
158
+ code: api.SpanStatusCode.ERROR,
159
+ message: err instanceof Error ? err.message : "Unknown error"
160
+ });
161
+ if (err instanceof Error) {
162
+ span.recordException(err);
176
163
  }
164
+ endSpanOnce(span);
165
+ throw err;
166
+ }).finally(() => {
167
+ if (!span.__mastraStreamingSpan) endSpanOnce(span);
177
168
  });
178
169
  }
179
- if (!isStreamingResult(result, methodName)) {
180
- try {
181
- span.setAttribute(`${spanName}.result`, safeStringify(result));
182
- } catch {
183
- span.setAttribute(`${spanName}.result`, "[Not Serializable]");
184
- }
170
+ if (!isStreamingMethod(methodName)) {
171
+ span.setAttribute(`${spanName}.result`, chunkLQJJBWFH_cjs.boundedStringify(result));
185
172
  }
173
+ span.setStatus({ code: api.SpanStatusCode.OK });
186
174
  return result;
187
175
  } catch (error) {
188
176
  span.setStatus({
@@ -192,10 +180,11 @@ function withSpan(options) {
192
180
  if (error instanceof Error) {
193
181
  span.recordException(error);
194
182
  }
183
+ endSpanOnce(span);
195
184
  throw error;
196
185
  } finally {
197
- if (!(result instanceof Promise) && !isStreamingResult(result, methodName)) {
198
- span.end();
186
+ if (!isStreamingMethod(methodName) && !span.__mastraEnded) {
187
+ endSpanOnce(span);
199
188
  }
200
189
  }
201
190
  };
@@ -470,11 +459,7 @@ var Telemetry = class _Telemetry {
470
459
  }
471
460
  try {
472
461
  let recordResult2 = function(res) {
473
- try {
474
- span.setAttribute(`${context3.spanName}.result`, JSON.stringify(res));
475
- } catch {
476
- span.setAttribute(`${context3.spanName}.result`, "[Not Serializable]");
477
- }
462
+ span.setAttribute(`${context3.spanName}.result`, chunkLQJJBWFH_cjs.boundedStringify(res));
478
463
  span.end();
479
464
  return res;
480
465
  };
@@ -526,11 +511,7 @@ var Telemetry = class _Telemetry {
526
511
  }
527
512
  }
528
513
  args.forEach((arg, index) => {
529
- try {
530
- span.setAttribute(`${context3.spanName}.argument.${index}`, JSON.stringify(arg));
531
- } catch {
532
- span.setAttribute(`${context3.spanName}.argument.${index}`, "[Not Serializable]");
533
- }
514
+ span.setAttribute(`${context3.spanName}.argument.${index}`, chunkLQJJBWFH_cjs.boundedStringify(arg));
534
515
  });
535
516
  let result;
536
517
  api.context.with(api.trace.setSpan(ctx, span), () => {
@@ -612,5 +593,5 @@ exports.Telemetry = Telemetry;
612
593
  exports.getBaggageValues = getBaggageValues;
613
594
  exports.hasActiveTelemetry = hasActiveTelemetry;
614
595
  exports.withSpan = withSpan;
615
- //# sourceMappingURL=chunk-5PSD3IKG.cjs.map
616
- //# sourceMappingURL=chunk-5PSD3IKG.cjs.map
596
+ //# sourceMappingURL=chunk-UK4QLV4O.cjs.map
597
+ //# sourceMappingURL=chunk-UK4QLV4O.cjs.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","boundedStringify","SpanStatusCode","context","SpanKind","JsonTraceSerializer","acc","TABLE_TRACES","ExportResultCode","MastraError","otlpContext","recordResult","wrappedFn"],"mappings":"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","file":"chunk-UK4QLV4O.cjs","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"]}
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkV3VLOOSW_cjs = require('./chunk-V3VLOOSW.cjs');
4
- var chunk4YYPQOP7_cjs = require('./chunk-4YYPQOP7.cjs');
4
+ var chunkMIRRWDFC_cjs = require('./chunk-MIRRWDFC.cjs');
5
5
  var chunk22DLIF7L_cjs = require('./chunk-22DLIF7L.cjs');
6
- var chunkYPYLWTZI_cjs = require('./chunk-YPYLWTZI.cjs');
6
+ var chunkKPKDAZ5I_cjs = require('./chunk-KPKDAZ5I.cjs');
7
7
  var chunk6VOPKVYH_cjs = require('./chunk-6VOPKVYH.cjs');
8
8
 
9
9
  // src/memory/memory.ts
@@ -154,7 +154,7 @@ https://mastra.ai/en/docs/memory/overview`
154
154
  if (config?.workingMemory && "use" in config.workingMemory) {
155
155
  throw new Error("The workingMemory.use option has been removed. Working memory always uses tool-call mode.");
156
156
  }
157
- const mergedConfig = chunkYPYLWTZI_cjs.deepMerge(this.threadConfig, config || {});
157
+ const mergedConfig = chunkKPKDAZ5I_cjs.deepMerge(this.threadConfig, config || {});
158
158
  if (config?.workingMemory?.schema) {
159
159
  if (mergedConfig.workingMemory) {
160
160
  mergedConfig.workingMemory.schema = config.workingMemory.schema;
@@ -252,7 +252,7 @@ https://mastra.ai/en/docs/memory/overview`
252
252
  toolCallIds
253
253
  };
254
254
  const savedMessages = await this.saveMessages({ messages: [message], memoryConfig: config });
255
- const list = new chunk4YYPQOP7_cjs.MessageList({ threadId, resourceId }).add(savedMessages[0], "memory");
255
+ const list = new chunkMIRRWDFC_cjs.MessageList({ threadId, resourceId }).add(savedMessages[0], "memory");
256
256
  return list.get.all.v1()[0];
257
257
  }
258
258
  /**
@@ -267,5 +267,5 @@ https://mastra.ai/en/docs/memory/overview`
267
267
  exports.MastraMemory = MastraMemory;
268
268
  exports.MemoryProcessor = MemoryProcessor;
269
269
  exports.memoryDefaultOptions = memoryDefaultOptions;
270
- //# sourceMappingURL=chunk-ICICKWAG.cjs.map
271
- //# sourceMappingURL=chunk-ICICKWAG.cjs.map
270
+ //# sourceMappingURL=chunk-WHW7ZQCM.cjs.map
271
+ //# sourceMappingURL=chunk-WHW7ZQCM.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/memory/memory.ts"],"names":["MastraBase","augmentWithInit","ModelRouterEmbeddingModel","deepMerge","MessageList"],"mappings":"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","file":"chunk-ICICKWAG.cjs","sourcesContent":["import type { EmbeddingModelV2 } from '@ai-sdk/provider-v5';\nimport type { AssistantContent, UserContent, CoreMessage, EmbeddingModel } from 'ai';\nimport { MessageList } from '../agent/message-list';\nimport type { MastraMessageV2, UIMessageWithMetadata } from '../agent/message-list';\nimport { MastraBase } from '../base';\nimport { ModelRouterEmbeddingModel } from '../llm/model/index.js';\nimport type { Mastra } from '../mastra';\nimport type { MastraStorage, PaginationInfo, StorageGetMessagesArg, ThreadSortOptions } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport type { ToolAction } from '../tools';\nimport { deepMerge } from '../utils';\nimport type { MastraVector } from '../vector';\n\nimport type {\n SharedMemoryConfig,\n StorageThreadType,\n MemoryConfig,\n MastraMessageV1,\n WorkingMemoryTemplate,\n} from './types';\n\nexport type MemoryProcessorOpts = {\n systemMessage?: string;\n memorySystemMessage?: string;\n newMessages?: CoreMessage[];\n};\n/**\n * Interface for message processors that can filter or transform messages\n * before they're sent to the LLM.\n */\nexport abstract class MemoryProcessor extends MastraBase {\n /**\n * Process a list of messages and return a filtered or transformed list.\n * @param messages The messages to process\n * @returns The processed messages\n */\n process(messages: CoreMessage[], _opts: MemoryProcessorOpts): CoreMessage[] | Promise<CoreMessage[]> {\n return messages;\n }\n}\n\nexport const memoryDefaultOptions = {\n lastMessages: 10,\n semanticRecall: false,\n threads: {\n generateTitle: true,\n },\n workingMemory: {\n enabled: false,\n template: `\n# User Information\n- **First Name**: \n- **Last Name**: \n- **Location**: \n- **Occupation**: \n- **Interests**: \n- **Goals**: \n- **Events**: \n- **Facts**: \n- **Projects**: \n`,\n },\n} satisfies MemoryConfig;\n\n/**\n * Abstract base class for implementing conversation memory systems.\n *\n * Key features:\n * - Thread-based conversation organization with resource association\n * - Optional vector database integration for semantic similarity search\n * - Working memory templates for structured conversation state\n * - Handles memory processors to manipulate messages before they are sent to the LLM\n */\nexport abstract class MastraMemory extends MastraBase {\n MAX_CONTEXT_TOKENS?: number;\n\n protected _storage?: MastraStorage;\n vector?: MastraVector;\n embedder?: EmbeddingModel<string> | EmbeddingModelV2<string>;\n private processors: MemoryProcessor[] = [];\n protected threadConfig: MemoryConfig = { ...memoryDefaultOptions };\n #mastra?: Mastra;\n\n constructor(config: { name: string } & SharedMemoryConfig) {\n super({ component: 'MEMORY', name: config.name });\n\n if (config.options) this.threadConfig = this.getMergedThreadConfig(config.options);\n if (config.processors) this.processors = config.processors;\n if (config.storage) {\n this._storage = augmentWithInit(config.storage);\n this._hasOwnStorage = true;\n }\n\n if (this.threadConfig.semanticRecall) {\n if (!config.vector) {\n throw new Error(\n `Semantic recall requires a vector store to be configured.\\n\\nhttps://mastra.ai/en/docs/memory/semantic-recall`,\n );\n }\n this.vector = config.vector;\n\n if (!config.embedder) {\n throw new Error(\n `Semantic recall requires an embedder to be configured.\\n\\nhttps://mastra.ai/en/docs/memory/semantic-recall`,\n );\n }\n\n // Convert string embedder to ModelRouterEmbeddingModel\n if (typeof config.embedder === 'string') {\n this.embedder = new ModelRouterEmbeddingModel(config.embedder);\n } else {\n this.embedder = config.embedder;\n }\n }\n }\n\n /**\n * Internal method used by Mastra to register itself with the memory.\n * @param mastra The Mastra instance.\n * @internal\n */\n __registerMastra(mastra: Mastra): void {\n this.#mastra = mastra;\n }\n\n protected _hasOwnStorage = false;\n get hasOwnStorage() {\n return this._hasOwnStorage;\n }\n\n get storage() {\n if (!this._storage) {\n throw new Error(\n `Memory requires a storage provider to function. Add a storage configuration to Memory or to your Mastra instance.\\n\\nhttps://mastra.ai/en/docs/memory/overview`,\n );\n }\n return this._storage;\n }\n\n public setStorage(storage: MastraStorage) {\n this._storage = augmentWithInit(storage);\n }\n\n public setVector(vector: MastraVector) {\n this.vector = vector;\n }\n\n public setEmbedder(embedder: EmbeddingModel<string>) {\n this.embedder = embedder;\n }\n\n /**\n * Get a system message to inject into the conversation.\n * This will be called before each conversation turn.\n * Implementations can override this to inject custom system messages.\n */\n public async getSystemMessage(_input: {\n threadId: string;\n resourceId?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<string | null> {\n return null;\n }\n\n /**\n * Get tools that should be available to the agent.\n * This will be called when converting tools for the agent.\n * Implementations can override this to provide additional tools.\n */\n public getTools(_config?: MemoryConfig): Record<string, ToolAction<any, any, any>> {\n return {};\n }\n\n protected async createEmbeddingIndex(dimensions?: number, config?: MemoryConfig): Promise<{ indexName: string }> {\n const defaultDimensions = 1536;\n const isDefault = dimensions === defaultDimensions;\n const usedDimensions = dimensions ?? defaultDimensions;\n const separator = this.vector?.indexSeparator ?? '_';\n const indexName = isDefault\n ? `memory${separator}messages`\n : `memory${separator}messages${separator}${usedDimensions}`;\n\n if (typeof this.vector === `undefined`) {\n throw new Error(`Tried to create embedding index but no vector db is attached to this Memory instance.`);\n }\n\n // Get index configuration from memory config\n const semanticConfig = typeof config?.semanticRecall === 'object' ? config.semanticRecall : undefined;\n const indexConfig = semanticConfig?.indexConfig;\n\n // Base parameters that all vector stores support\n const createParams: any = {\n indexName,\n dimension: usedDimensions,\n ...(indexConfig?.metric && { metric: indexConfig.metric }),\n };\n\n // Add PG-specific configuration if provided\n // Only PG vector store will use these parameters\n if (indexConfig && (indexConfig.type || indexConfig.ivf || indexConfig.hnsw)) {\n createParams.indexConfig = {};\n if (indexConfig.type) createParams.indexConfig.type = indexConfig.type;\n if (indexConfig.ivf) createParams.indexConfig.ivf = indexConfig.ivf;\n if (indexConfig.hnsw) createParams.indexConfig.hnsw = indexConfig.hnsw;\n }\n\n await this.vector.createIndex(createParams);\n return { indexName };\n }\n\n public getMergedThreadConfig(config?: MemoryConfig): MemoryConfig {\n if (config?.workingMemory && 'use' in config.workingMemory) {\n throw new Error('The workingMemory.use option has been removed. Working memory always uses tool-call mode.');\n }\n const mergedConfig = deepMerge(this.threadConfig, config || {});\n\n if (config?.workingMemory?.schema) {\n if (mergedConfig.workingMemory) {\n mergedConfig.workingMemory.schema = config.workingMemory.schema;\n }\n }\n\n return mergedConfig;\n }\n\n /**\n * Apply all configured message processors to a list of messages.\n * @param messages The messages to process\n * @returns The processed messages\n */\n protected async applyProcessors(\n messages: CoreMessage[],\n opts: {\n processors?: MemoryProcessor[];\n } & MemoryProcessorOpts,\n ): Promise<CoreMessage[]> {\n const processors = opts.processors || this.processors;\n if (!processors || processors.length === 0) {\n return messages;\n }\n\n let processedMessages = [...messages];\n\n for (const processor of processors) {\n processedMessages = await processor.process(processedMessages, {\n systemMessage: opts.systemMessage,\n newMessages: opts.newMessages,\n memorySystemMessage: opts.memorySystemMessage,\n });\n }\n\n return processedMessages;\n }\n\n processMessages({\n messages,\n processors,\n ...opts\n }: {\n messages: CoreMessage[];\n processors?: MemoryProcessor[];\n } & MemoryProcessorOpts) {\n return this.applyProcessors(messages, { processors: processors || this.processors, ...opts });\n }\n\n abstract rememberMessages({\n threadId,\n resourceId,\n vectorMessageSearch,\n config,\n }: {\n threadId: string;\n resourceId?: string;\n vectorMessageSearch?: string;\n config?: MemoryConfig;\n }): Promise<{ messages: MastraMessageV1[]; messagesV2: MastraMessageV2[] }>;\n\n estimateTokens(text: string): number {\n return Math.ceil(text.split(' ').length * 1.3);\n }\n\n /**\n * Retrieves a specific thread by its ID\n * @param threadId - The unique identifier of the thread\n * @returns Promise resolving to the thread or null if not found\n */\n abstract getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null>;\n\n /**\n * Retrieves all threads that belong to the specified resource.\n * @param resourceId - The unique identifier of the resource\n * @param orderBy - Which timestamp field to sort by (`'createdAt'` or `'updatedAt'`);\n * defaults to `'createdAt'`\n * @param sortDirection - Sort order for the results (`'ASC'` or `'DESC'`);\n * defaults to `'DESC'`\n * @returns Promise resolving to an array of matching threads; resolves to an empty array\n * if the resource has no threads\n */\n abstract getThreadsByResourceId({\n resourceId,\n orderBy,\n sortDirection,\n }: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]>;\n\n abstract getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page: number;\n perPage: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }>;\n\n /**\n * Saves or updates a thread\n * @param thread - The thread data to save\n * @returns Promise resolving to the saved thread\n */\n abstract saveThread({\n thread,\n memoryConfig,\n }: {\n thread: StorageThreadType;\n memoryConfig?: MemoryConfig;\n }): Promise<StorageThreadType>;\n\n /**\n * Saves messages to a thread\n * @param messages - Array of messages to save\n * @returns Promise resolving to the saved messages\n */\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format?: 'v1';\n }): Promise<MastraMessageV1[]>;\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format: 'v2';\n }): Promise<MastraMessageV2[]>;\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV2[] | MastraMessageV1[]>;\n\n /**\n * Retrieves all messages for a specific thread\n * @param threadId - The unique identifier of the thread\n * @returns Promise resolving to array of messages, uiMessages, and messagesV2\n */\n abstract query({ threadId, resourceId, selectBy }: StorageGetMessagesArg): Promise<{\n messages: CoreMessage[];\n uiMessages: UIMessageWithMetadata[];\n messagesV2: MastraMessageV2[];\n }>;\n\n /**\n * Helper method to create a new thread\n * @param title - Optional title for the thread\n * @param metadata - Optional metadata for the thread\n * @returns Promise resolving to the created thread\n */\n async createThread({\n threadId,\n resourceId,\n title,\n metadata,\n memoryConfig,\n saveThread = true,\n }: {\n resourceId: string;\n threadId?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n memoryConfig?: MemoryConfig;\n saveThread?: boolean;\n }): Promise<StorageThreadType> {\n const thread: StorageThreadType = {\n id: threadId || this.generateId(),\n title: title || `New Thread ${new Date().toISOString()}`,\n resourceId,\n createdAt: new Date(),\n updatedAt: new Date(),\n metadata,\n };\n\n return saveThread ? this.saveThread({ thread, memoryConfig }) : thread;\n }\n\n /**\n * Helper method to delete a thread\n * @param threadId - the id of the thread to delete\n */\n abstract deleteThread(threadId: string): Promise<void>;\n\n /**\n * Helper method to add a single message to a thread\n * @param threadId - The thread to add the message to\n * @param content - The message content\n * @param role - The role of the message sender\n * @param type - The type of the message\n * @param toolNames - Optional array of tool names that were called\n * @param toolCallArgs - Optional array of tool call arguments\n * @param toolCallIds - Optional array of tool call ids\n * @returns Promise resolving to the saved message\n * @deprecated use saveMessages instead\n */\n async addMessage({\n threadId,\n resourceId,\n config,\n content,\n role,\n type,\n toolNames,\n toolCallArgs,\n toolCallIds,\n }: {\n threadId: string;\n resourceId: string;\n config?: MemoryConfig;\n content: UserContent | AssistantContent;\n role: 'user' | 'assistant';\n type: 'text' | 'tool-call' | 'tool-result';\n toolNames?: string[];\n toolCallArgs?: Record<string, unknown>[];\n toolCallIds?: string[];\n }): Promise<MastraMessageV1> {\n const message: MastraMessageV1 = {\n id: this.generateId(),\n content,\n role,\n createdAt: new Date(),\n threadId,\n resourceId,\n type,\n toolNames,\n toolCallArgs,\n toolCallIds,\n };\n\n const savedMessages = await this.saveMessages({ messages: [message], memoryConfig: config });\n const list = new MessageList({ threadId, resourceId }).add(savedMessages[0]!, 'memory');\n return list.get.all.v1()[0]!;\n }\n\n /**\n * Generates a unique identifier\n * @returns A unique string ID\n */\n public generateId(): string {\n return this.#mastra?.generateId() || crypto.randomUUID();\n }\n\n /**\n * Retrieves working memory for a specific thread\n * @param threadId - The unique identifier of the thread\n * @param resourceId - The unique identifier of the resource\n * @param memoryConfig - Optional memory configuration\n * @returns Promise resolving to working memory data or null if not found\n */\n abstract getWorkingMemory({\n threadId,\n resourceId,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<string | null>;\n\n /**\n * Retrieves working memory template for a specific thread\n * @param memoryConfig - Optional memory configuration\n * @returns Promise resolving to working memory template or null if not found\n */\n abstract getWorkingMemoryTemplate({\n memoryConfig,\n }?: {\n memoryConfig?: MemoryConfig;\n }): Promise<WorkingMemoryTemplate | null>;\n\n abstract updateWorkingMemory({\n threadId,\n resourceId,\n workingMemory,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n workingMemory: string;\n memoryConfig?: MemoryConfig;\n }): Promise<void>;\n\n /**\n * @warning experimental! can be removed or changed at any time\n */\n abstract __experimental_updateWorkingMemoryVNext({\n threadId,\n resourceId,\n workingMemory,\n searchString,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n workingMemory: string;\n searchString?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<{ success: boolean; reason: string }>;\n\n /**\n * Deletes multiple messages by their IDs\n * @param messageIds - Array of message IDs to delete\n * @returns Promise that resolves when all messages are deleted\n */\n abstract deleteMessages(messageIds: string[]): Promise<void>;\n}\n"]}
1
+ {"version":3,"sources":["../src/memory/memory.ts"],"names":["MastraBase","augmentWithInit","ModelRouterEmbeddingModel","deepMerge","MessageList"],"mappings":";;;;;;;;;AA8BO,IAAe,eAAA,GAAf,cAAuCA,4BAAA,CAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMvD,OAAA,CAAQ,UAAyB,KAAA,EAAoE;AACnG,IAAA,OAAO,QAAA;AAAA,EACT;AACF;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAClC,YAAA,EAAc,EAAA;AAAA,EACd,cAAA,EAAgB,KAAA;AAAA,EAChB,OAAA,EAAS;AAAA,IACP,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,aAAA,EAAe;AAAA,IACb,OAAA,EAAS,KAAA;AAAA,IACT,QAAA,EAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAad;AAWO,IAAe,YAAA,GAAf,cAAoCA,4BAAA,CAAW;AAAA,EACpD,kBAAA;AAAA,EAEU,QAAA;AAAA,EACV,MAAA;AAAA,EACA,QAAA;AAAA,EACQ,aAAgC,EAAC;AAAA,EAC/B,YAAA,GAA6B,EAAE,GAAG,oBAAA,EAAqB;AAAA,EACjE,OAAA;AAAA,EAEA,YAAY,MAAA,EAA+C;AACzD,IAAA,KAAA,CAAM,EAAE,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,MAAA,CAAO,MAAM,CAAA;AAEhD,IAAA,IAAI,OAAO,OAAA,EAAS,IAAA,CAAK,eAAe,IAAA,CAAK,qBAAA,CAAsB,OAAO,OAAO,CAAA;AACjF,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,IAAA,CAAK,UAAA,GAAa,MAAA,CAAO,UAAA;AAChD,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,IAAA,CAAK,QAAA,GAAWC,iCAAA,CAAgB,MAAA,CAAO,OAAO,CAAA;AAC9C,MAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAAA,IACxB;AAEA,IAAA,IAAI,IAAA,CAAK,aAAa,cAAA,EAAgB;AACpC,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA;;AAAA,gDAAA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA;AAErB,MAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,CAAA;;AAAA,gDAAA;AAAA,SACF;AAAA,MACF;AAGA,MAAA,IAAI,OAAO,MAAA,CAAO,QAAA,KAAa,QAAA,EAAU;AACvC,QAAA,IAAA,CAAK,QAAA,GAAW,IAAIC,2CAAA,CAA0B,MAAA,CAAO,QAAQ,CAAA;AAAA,MAC/D,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,WAAW,MAAA,CAAO,QAAA;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAiB,MAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA,EAEU,cAAA,GAAiB,KAAA;AAAA,EAC3B,IAAI,aAAA,GAAgB;AAClB,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,IAAI,OAAA,GAAU;AACZ,IAAA,IAAI,CAAC,KAAK,QAAA,EAAU;AAClB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA;;AAAA,yCAAA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEO,WAAW,OAAA,EAAwB;AACxC,IAAA,IAAA,CAAK,QAAA,GAAWD,kCAAgB,OAAO,CAAA;AAAA,EACzC;AAAA,EAEO,UAAU,MAAA,EAAsB;AACrC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEO,YAAY,QAAA,EAAkC;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAa,iBAAiB,MAAA,EAIH;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,SAAS,OAAA,EAAmE;AACjF,IAAA,OAAO,EAAC;AAAA,EACV;AAAA,EAEA,MAAgB,oBAAA,CAAqB,UAAA,EAAqB,MAAA,EAAuD;AAC/G,IAAA,MAAM,iBAAA,GAAoB,IAAA;AAC1B,IAAA,MAAM,YAAY,UAAA,KAAe,iBAAA;AACjC,IAAA,MAAM,iBAAiB,UAAA,IAAc,iBAAA;AACrC,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,EAAQ,cAAA,IAAkB,GAAA;AACjD,IAAA,MAAM,SAAA,GAAY,SAAA,GACd,CAAA,MAAA,EAAS,SAAS,CAAA,QAAA,CAAA,GAClB,SAAS,SAAS,CAAA,QAAA,EAAW,SAAS,CAAA,EAAG,cAAc,CAAA,CAAA;AAE3D,IAAA,IAAI,OAAO,IAAA,CAAK,MAAA,KAAW,CAAA,SAAA,CAAA,EAAa;AACtC,MAAA,MAAM,IAAI,MAAM,CAAA,qFAAA,CAAuF,CAAA;AAAA,IACzG;AAGA,IAAA,MAAM,iBAAiB,OAAO,MAAA,EAAQ,cAAA,KAAmB,QAAA,GAAW,OAAO,cAAA,GAAiB,MAAA;AAC5F,IAAA,MAAM,cAAc,cAAA,EAAgB,WAAA;AAGpC,IAAA,MAAM,YAAA,GAAoB;AAAA,MACxB,SAAA;AAAA,MACA,SAAA,EAAW,cAAA;AAAA,MACX,GAAI,WAAA,EAAa,MAAA,IAAU,EAAE,MAAA,EAAQ,YAAY,MAAA;AAAO,KAC1D;AAIA,IAAA,IAAI,gBAAgB,WAAA,CAAY,IAAA,IAAQ,WAAA,CAAY,GAAA,IAAO,YAAY,IAAA,CAAA,EAAO;AAC5E,MAAA,YAAA,CAAa,cAAc,EAAC;AAC5B,MAAA,IAAI,WAAA,CAAY,IAAA,EAAM,YAAA,CAAa,WAAA,CAAY,OAAO,WAAA,CAAY,IAAA;AAClE,MAAA,IAAI,WAAA,CAAY,GAAA,EAAK,YAAA,CAAa,WAAA,CAAY,MAAM,WAAA,CAAY,GAAA;AAChE,MAAA,IAAI,WAAA,CAAY,IAAA,EAAM,YAAA,CAAa,WAAA,CAAY,OAAO,WAAA,CAAY,IAAA;AAAA,IACpE;AAEA,IAAA,MAAM,IAAA,CAAK,MAAA,CAAO,WAAA,CAAY,YAAY,CAAA;AAC1C,IAAA,OAAO,EAAE,SAAA,EAAU;AAAA,EACrB;AAAA,EAEO,sBAAsB,MAAA,EAAqC;AAChE,IAAA,IAAI,MAAA,EAAQ,aAAA,IAAiB,KAAA,IAAS,MAAA,CAAO,aAAA,EAAe;AAC1D,MAAA,MAAM,IAAI,MAAM,2FAA2F,CAAA;AAAA,IAC7G;AACA,IAAA,MAAM,eAAeE,2BAAA,CAAU,IAAA,CAAK,YAAA,EAAc,MAAA,IAAU,EAAE,CAAA;AAE9D,IAAA,IAAI,MAAA,EAAQ,eAAe,MAAA,EAAQ;AACjC,MAAA,IAAI,aAAa,aAAA,EAAe;AAC9B,QAAA,YAAA,CAAa,aAAA,CAAc,MAAA,GAAS,MAAA,CAAO,aAAA,CAAc,MAAA;AAAA,MAC3D;AAAA,IACF;AAEA,IAAA,OAAO,YAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAgB,eAAA,CACd,QAAA,EACA,IAAA,EAGwB;AACxB,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA;AAC3C,IAAA,IAAI,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC1C,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,IAAI,iBAAA,GAAoB,CAAC,GAAG,QAAQ,CAAA;AAEpC,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,iBAAA,GAAoB,MAAM,SAAA,CAAU,OAAA,CAAQ,iBAAA,EAAmB;AAAA,QAC7D,eAAe,IAAA,CAAK,aAAA;AAAA,QACpB,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,qBAAqB,IAAA,CAAK;AAAA,OAC3B,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,iBAAA;AAAA,EACT;AAAA,EAEA,eAAA,CAAgB;AAAA,IACd,QAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,GACL,EAGyB;AACvB,IAAA,OAAO,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAU,EAAE,UAAA,EAAY,cAAc,IAAA,CAAK,UAAA,EAAY,GAAG,IAAA,EAAM,CAAA;AAAA,EAC9F;AAAA,EAcA,eAAe,IAAA,EAAsB;AACnC,IAAA,OAAO,KAAK,IAAA,CAAK,IAAA,CAAK,MAAM,GAAG,CAAA,CAAE,SAAS,GAAG,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoFA,MAAM,YAAA,CAAa;AAAA,IACjB,QAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA,GAAa;AAAA,GACf,EAO+B;AAC7B,IAAA,MAAM,MAAA,GAA4B;AAAA,MAChC,EAAA,EAAI,QAAA,IAAY,IAAA,CAAK,UAAA,EAAW;AAAA,MAChC,OAAO,KAAA,IAAS,CAAA,WAAA,EAAA,qBAAkB,IAAA,EAAK,EAAE,aAAa,CAAA,CAAA;AAAA,MACtD,UAAA;AAAA,MACA,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB;AAAA,KACF;AAEA,IAAA,OAAO,aAAa,IAAA,CAAK,UAAA,CAAW,EAAE,MAAA,EAAQ,YAAA,EAAc,CAAA,GAAI,MAAA;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,UAAA,CAAW;AAAA,IACf,QAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,EAU6B;AAC3B,IAAA,MAAM,OAAA,GAA2B;AAAA,MAC/B,EAAA,EAAI,KAAK,UAAA,EAAW;AAAA,MACpB,OAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA,sBAAe,IAAA,EAAK;AAAA,MACpB,QAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,aAAA,GAAgB,MAAM,IAAA,CAAK,YAAA,CAAa,EAAE,QAAA,EAAU,CAAC,OAAO,CAAA,EAAG,YAAA,EAAc,MAAA,EAAQ,CAAA;AAC3F,IAAA,MAAM,IAAA,GAAO,IAAIC,6BAAA,CAAY,EAAE,QAAA,EAAU,UAAA,EAAY,CAAA,CAAE,GAAA,CAAI,aAAA,CAAc,CAAC,CAAA,EAAI,QAAQ,CAAA;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,EAAA,GAAK,CAAC,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAA,GAAqB;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAA,EAAS,UAAA,EAAW,IAAK,OAAO,UAAA,EAAW;AAAA,EACzD;AAiEF","file":"chunk-WHW7ZQCM.cjs","sourcesContent":["import type { EmbeddingModelV2 } from '@ai-sdk/provider-v5';\nimport type { AssistantContent, UserContent, CoreMessage, EmbeddingModel } from 'ai';\nimport { MessageList } from '../agent/message-list';\nimport type { MastraMessageV2, UIMessageWithMetadata } from '../agent/message-list';\nimport { MastraBase } from '../base';\nimport { ModelRouterEmbeddingModel } from '../llm/model/index.js';\nimport type { Mastra } from '../mastra';\nimport type { MastraStorage, PaginationInfo, StorageGetMessagesArg, ThreadSortOptions } from '../storage';\nimport { augmentWithInit } from '../storage/storageWithInit';\nimport type { ToolAction } from '../tools';\nimport { deepMerge } from '../utils';\nimport type { MastraVector } from '../vector';\n\nimport type {\n SharedMemoryConfig,\n StorageThreadType,\n MemoryConfig,\n MastraMessageV1,\n WorkingMemoryTemplate,\n} from './types';\n\nexport type MemoryProcessorOpts = {\n systemMessage?: string;\n memorySystemMessage?: string;\n newMessages?: CoreMessage[];\n};\n/**\n * Interface for message processors that can filter or transform messages\n * before they're sent to the LLM.\n */\nexport abstract class MemoryProcessor extends MastraBase {\n /**\n * Process a list of messages and return a filtered or transformed list.\n * @param messages The messages to process\n * @returns The processed messages\n */\n process(messages: CoreMessage[], _opts: MemoryProcessorOpts): CoreMessage[] | Promise<CoreMessage[]> {\n return messages;\n }\n}\n\nexport const memoryDefaultOptions = {\n lastMessages: 10,\n semanticRecall: false,\n threads: {\n generateTitle: true,\n },\n workingMemory: {\n enabled: false,\n template: `\n# User Information\n- **First Name**: \n- **Last Name**: \n- **Location**: \n- **Occupation**: \n- **Interests**: \n- **Goals**: \n- **Events**: \n- **Facts**: \n- **Projects**: \n`,\n },\n} satisfies MemoryConfig;\n\n/**\n * Abstract base class for implementing conversation memory systems.\n *\n * Key features:\n * - Thread-based conversation organization with resource association\n * - Optional vector database integration for semantic similarity search\n * - Working memory templates for structured conversation state\n * - Handles memory processors to manipulate messages before they are sent to the LLM\n */\nexport abstract class MastraMemory extends MastraBase {\n MAX_CONTEXT_TOKENS?: number;\n\n protected _storage?: MastraStorage;\n vector?: MastraVector;\n embedder?: EmbeddingModel<string> | EmbeddingModelV2<string>;\n private processors: MemoryProcessor[] = [];\n protected threadConfig: MemoryConfig = { ...memoryDefaultOptions };\n #mastra?: Mastra;\n\n constructor(config: { name: string } & SharedMemoryConfig) {\n super({ component: 'MEMORY', name: config.name });\n\n if (config.options) this.threadConfig = this.getMergedThreadConfig(config.options);\n if (config.processors) this.processors = config.processors;\n if (config.storage) {\n this._storage = augmentWithInit(config.storage);\n this._hasOwnStorage = true;\n }\n\n if (this.threadConfig.semanticRecall) {\n if (!config.vector) {\n throw new Error(\n `Semantic recall requires a vector store to be configured.\\n\\nhttps://mastra.ai/en/docs/memory/semantic-recall`,\n );\n }\n this.vector = config.vector;\n\n if (!config.embedder) {\n throw new Error(\n `Semantic recall requires an embedder to be configured.\\n\\nhttps://mastra.ai/en/docs/memory/semantic-recall`,\n );\n }\n\n // Convert string embedder to ModelRouterEmbeddingModel\n if (typeof config.embedder === 'string') {\n this.embedder = new ModelRouterEmbeddingModel(config.embedder);\n } else {\n this.embedder = config.embedder;\n }\n }\n }\n\n /**\n * Internal method used by Mastra to register itself with the memory.\n * @param mastra The Mastra instance.\n * @internal\n */\n __registerMastra(mastra: Mastra): void {\n this.#mastra = mastra;\n }\n\n protected _hasOwnStorage = false;\n get hasOwnStorage() {\n return this._hasOwnStorage;\n }\n\n get storage() {\n if (!this._storage) {\n throw new Error(\n `Memory requires a storage provider to function. Add a storage configuration to Memory or to your Mastra instance.\\n\\nhttps://mastra.ai/en/docs/memory/overview`,\n );\n }\n return this._storage;\n }\n\n public setStorage(storage: MastraStorage) {\n this._storage = augmentWithInit(storage);\n }\n\n public setVector(vector: MastraVector) {\n this.vector = vector;\n }\n\n public setEmbedder(embedder: EmbeddingModel<string>) {\n this.embedder = embedder;\n }\n\n /**\n * Get a system message to inject into the conversation.\n * This will be called before each conversation turn.\n * Implementations can override this to inject custom system messages.\n */\n public async getSystemMessage(_input: {\n threadId: string;\n resourceId?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<string | null> {\n return null;\n }\n\n /**\n * Get tools that should be available to the agent.\n * This will be called when converting tools for the agent.\n * Implementations can override this to provide additional tools.\n */\n public getTools(_config?: MemoryConfig): Record<string, ToolAction<any, any, any>> {\n return {};\n }\n\n protected async createEmbeddingIndex(dimensions?: number, config?: MemoryConfig): Promise<{ indexName: string }> {\n const defaultDimensions = 1536;\n const isDefault = dimensions === defaultDimensions;\n const usedDimensions = dimensions ?? defaultDimensions;\n const separator = this.vector?.indexSeparator ?? '_';\n const indexName = isDefault\n ? `memory${separator}messages`\n : `memory${separator}messages${separator}${usedDimensions}`;\n\n if (typeof this.vector === `undefined`) {\n throw new Error(`Tried to create embedding index but no vector db is attached to this Memory instance.`);\n }\n\n // Get index configuration from memory config\n const semanticConfig = typeof config?.semanticRecall === 'object' ? config.semanticRecall : undefined;\n const indexConfig = semanticConfig?.indexConfig;\n\n // Base parameters that all vector stores support\n const createParams: any = {\n indexName,\n dimension: usedDimensions,\n ...(indexConfig?.metric && { metric: indexConfig.metric }),\n };\n\n // Add PG-specific configuration if provided\n // Only PG vector store will use these parameters\n if (indexConfig && (indexConfig.type || indexConfig.ivf || indexConfig.hnsw)) {\n createParams.indexConfig = {};\n if (indexConfig.type) createParams.indexConfig.type = indexConfig.type;\n if (indexConfig.ivf) createParams.indexConfig.ivf = indexConfig.ivf;\n if (indexConfig.hnsw) createParams.indexConfig.hnsw = indexConfig.hnsw;\n }\n\n await this.vector.createIndex(createParams);\n return { indexName };\n }\n\n public getMergedThreadConfig(config?: MemoryConfig): MemoryConfig {\n if (config?.workingMemory && 'use' in config.workingMemory) {\n throw new Error('The workingMemory.use option has been removed. Working memory always uses tool-call mode.');\n }\n const mergedConfig = deepMerge(this.threadConfig, config || {});\n\n if (config?.workingMemory?.schema) {\n if (mergedConfig.workingMemory) {\n mergedConfig.workingMemory.schema = config.workingMemory.schema;\n }\n }\n\n return mergedConfig;\n }\n\n /**\n * Apply all configured message processors to a list of messages.\n * @param messages The messages to process\n * @returns The processed messages\n */\n protected async applyProcessors(\n messages: CoreMessage[],\n opts: {\n processors?: MemoryProcessor[];\n } & MemoryProcessorOpts,\n ): Promise<CoreMessage[]> {\n const processors = opts.processors || this.processors;\n if (!processors || processors.length === 0) {\n return messages;\n }\n\n let processedMessages = [...messages];\n\n for (const processor of processors) {\n processedMessages = await processor.process(processedMessages, {\n systemMessage: opts.systemMessage,\n newMessages: opts.newMessages,\n memorySystemMessage: opts.memorySystemMessage,\n });\n }\n\n return processedMessages;\n }\n\n processMessages({\n messages,\n processors,\n ...opts\n }: {\n messages: CoreMessage[];\n processors?: MemoryProcessor[];\n } & MemoryProcessorOpts) {\n return this.applyProcessors(messages, { processors: processors || this.processors, ...opts });\n }\n\n abstract rememberMessages({\n threadId,\n resourceId,\n vectorMessageSearch,\n config,\n }: {\n threadId: string;\n resourceId?: string;\n vectorMessageSearch?: string;\n config?: MemoryConfig;\n }): Promise<{ messages: MastraMessageV1[]; messagesV2: MastraMessageV2[] }>;\n\n estimateTokens(text: string): number {\n return Math.ceil(text.split(' ').length * 1.3);\n }\n\n /**\n * Retrieves a specific thread by its ID\n * @param threadId - The unique identifier of the thread\n * @returns Promise resolving to the thread or null if not found\n */\n abstract getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null>;\n\n /**\n * Retrieves all threads that belong to the specified resource.\n * @param resourceId - The unique identifier of the resource\n * @param orderBy - Which timestamp field to sort by (`'createdAt'` or `'updatedAt'`);\n * defaults to `'createdAt'`\n * @param sortDirection - Sort order for the results (`'ASC'` or `'DESC'`);\n * defaults to `'DESC'`\n * @returns Promise resolving to an array of matching threads; resolves to an empty array\n * if the resource has no threads\n */\n abstract getThreadsByResourceId({\n resourceId,\n orderBy,\n sortDirection,\n }: { resourceId: string } & ThreadSortOptions): Promise<StorageThreadType[]>;\n\n abstract getThreadsByResourceIdPaginated(\n args: {\n resourceId: string;\n page: number;\n perPage: number;\n } & ThreadSortOptions,\n ): Promise<PaginationInfo & { threads: StorageThreadType[] }>;\n\n /**\n * Saves or updates a thread\n * @param thread - The thread data to save\n * @returns Promise resolving to the saved thread\n */\n abstract saveThread({\n thread,\n memoryConfig,\n }: {\n thread: StorageThreadType;\n memoryConfig?: MemoryConfig;\n }): Promise<StorageThreadType>;\n\n /**\n * Saves messages to a thread\n * @param messages - Array of messages to save\n * @returns Promise resolving to the saved messages\n */\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format?: 'v1';\n }): Promise<MastraMessageV1[]>;\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format: 'v2';\n }): Promise<MastraMessageV2[]>;\n abstract saveMessages(args: {\n messages: (MastraMessageV1 | MastraMessageV2)[] | MastraMessageV1[] | MastraMessageV2[];\n memoryConfig?: MemoryConfig | undefined;\n format?: 'v1' | 'v2';\n }): Promise<MastraMessageV2[] | MastraMessageV1[]>;\n\n /**\n * Retrieves all messages for a specific thread\n * @param threadId - The unique identifier of the thread\n * @returns Promise resolving to array of messages, uiMessages, and messagesV2\n */\n abstract query({ threadId, resourceId, selectBy }: StorageGetMessagesArg): Promise<{\n messages: CoreMessage[];\n uiMessages: UIMessageWithMetadata[];\n messagesV2: MastraMessageV2[];\n }>;\n\n /**\n * Helper method to create a new thread\n * @param title - Optional title for the thread\n * @param metadata - Optional metadata for the thread\n * @returns Promise resolving to the created thread\n */\n async createThread({\n threadId,\n resourceId,\n title,\n metadata,\n memoryConfig,\n saveThread = true,\n }: {\n resourceId: string;\n threadId?: string;\n title?: string;\n metadata?: Record<string, unknown>;\n memoryConfig?: MemoryConfig;\n saveThread?: boolean;\n }): Promise<StorageThreadType> {\n const thread: StorageThreadType = {\n id: threadId || this.generateId(),\n title: title || `New Thread ${new Date().toISOString()}`,\n resourceId,\n createdAt: new Date(),\n updatedAt: new Date(),\n metadata,\n };\n\n return saveThread ? this.saveThread({ thread, memoryConfig }) : thread;\n }\n\n /**\n * Helper method to delete a thread\n * @param threadId - the id of the thread to delete\n */\n abstract deleteThread(threadId: string): Promise<void>;\n\n /**\n * Helper method to add a single message to a thread\n * @param threadId - The thread to add the message to\n * @param content - The message content\n * @param role - The role of the message sender\n * @param type - The type of the message\n * @param toolNames - Optional array of tool names that were called\n * @param toolCallArgs - Optional array of tool call arguments\n * @param toolCallIds - Optional array of tool call ids\n * @returns Promise resolving to the saved message\n * @deprecated use saveMessages instead\n */\n async addMessage({\n threadId,\n resourceId,\n config,\n content,\n role,\n type,\n toolNames,\n toolCallArgs,\n toolCallIds,\n }: {\n threadId: string;\n resourceId: string;\n config?: MemoryConfig;\n content: UserContent | AssistantContent;\n role: 'user' | 'assistant';\n type: 'text' | 'tool-call' | 'tool-result';\n toolNames?: string[];\n toolCallArgs?: Record<string, unknown>[];\n toolCallIds?: string[];\n }): Promise<MastraMessageV1> {\n const message: MastraMessageV1 = {\n id: this.generateId(),\n content,\n role,\n createdAt: new Date(),\n threadId,\n resourceId,\n type,\n toolNames,\n toolCallArgs,\n toolCallIds,\n };\n\n const savedMessages = await this.saveMessages({ messages: [message], memoryConfig: config });\n const list = new MessageList({ threadId, resourceId }).add(savedMessages[0]!, 'memory');\n return list.get.all.v1()[0]!;\n }\n\n /**\n * Generates a unique identifier\n * @returns A unique string ID\n */\n public generateId(): string {\n return this.#mastra?.generateId() || crypto.randomUUID();\n }\n\n /**\n * Retrieves working memory for a specific thread\n * @param threadId - The unique identifier of the thread\n * @param resourceId - The unique identifier of the resource\n * @param memoryConfig - Optional memory configuration\n * @returns Promise resolving to working memory data or null if not found\n */\n abstract getWorkingMemory({\n threadId,\n resourceId,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<string | null>;\n\n /**\n * Retrieves working memory template for a specific thread\n * @param memoryConfig - Optional memory configuration\n * @returns Promise resolving to working memory template or null if not found\n */\n abstract getWorkingMemoryTemplate({\n memoryConfig,\n }?: {\n memoryConfig?: MemoryConfig;\n }): Promise<WorkingMemoryTemplate | null>;\n\n abstract updateWorkingMemory({\n threadId,\n resourceId,\n workingMemory,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n workingMemory: string;\n memoryConfig?: MemoryConfig;\n }): Promise<void>;\n\n /**\n * @warning experimental! can be removed or changed at any time\n */\n abstract __experimental_updateWorkingMemoryVNext({\n threadId,\n resourceId,\n workingMemory,\n searchString,\n memoryConfig,\n }: {\n threadId: string;\n resourceId?: string;\n workingMemory: string;\n searchString?: string;\n memoryConfig?: MemoryConfig;\n }): Promise<{ success: boolean; reason: string }>;\n\n /**\n * Deletes multiple messages by their IDs\n * @param messageIds - Array of message IDs to delete\n * @returns Promise that resolves when all messages are deleted\n */\n abstract deleteMessages(messageIds: string[]): Promise<void>;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { fetchWithRetry } from './chunk-PPAIPZ6C.js';
1
+ import { fetchWithRetry } from './chunk-GWZTWJLK.js';
2
2
  import { MastraError } from './chunk-PZUZNPFM.js';
3
3
  import { convertUint8ArrayToBase64, convertBase64ToUint8Array, isUrlSupported } from '@ai-sdk/provider-utils-v5';
4
4
  import { randomUUID } from 'crypto';
@@ -3178,5 +3178,5 @@ function convertMessages(messages) {
3178
3178
  }
3179
3179
 
3180
3180
  export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
3181
- //# sourceMappingURL=chunk-GIK7MM2K.js.map
3182
- //# sourceMappingURL=chunk-GIK7MM2K.js.map
3181
+ //# sourceMappingURL=chunk-YWK4OFUM.js.map
3182
+ //# sourceMappingURL=chunk-YWK4OFUM.js.map