@mastra/server 1.67.0-alpha.1 → 1.67.0-alpha.3

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 (191) hide show
  1. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +21 -0
  2. package/dist/{a2a-CW4FVjHx.cjs → a2a-DQ8GeDz4.cjs} +3 -3
  3. package/dist/{a2a-CW4FVjHx.cjs.map → a2a-DQ8GeDz4.cjs.map} +1 -1
  4. package/dist/{a2a-Di7S6YaM.js → a2a-DUBjstWk.js} +3 -3
  5. package/dist/{a2a-Di7S6YaM.js.map → a2a-DUBjstWk.js.map} +1 -1
  6. package/dist/{api-schema-manifest-Cpw4nIVv.cjs → api-schema-manifest-1LriOYQM.cjs} +3 -3
  7. package/dist/{api-schema-manifest-Cpw4nIVv.cjs.map → api-schema-manifest-1LriOYQM.cjs.map} +1 -1
  8. package/dist/{api-schema-manifest-BkKHbFJi.js → api-schema-manifest-DNk8B4kw.js} +3 -3
  9. package/dist/{api-schema-manifest-BkKHbFJi.js.map → api-schema-manifest-DNk8B4kw.js.map} +1 -1
  10. package/dist/{background-tasks-Bl7Hn8h9.js → background-tasks-B4yoNDY_.js} +2 -2
  11. package/dist/{background-tasks-Bl7Hn8h9.js.map → background-tasks-B4yoNDY_.js.map} +1 -1
  12. package/dist/{background-tasks-BJhziawt.cjs → background-tasks-BarPeyNJ.cjs} +2 -2
  13. package/dist/{background-tasks-BJhziawt.cjs.map → background-tasks-BarPeyNJ.cjs.map} +1 -1
  14. package/dist/{builder-registry-Bcpr74BB.js → builder-registry-DI3Ysclf.js} +3 -3
  15. package/dist/{builder-registry-Bcpr74BB.js.map → builder-registry-DI3Ysclf.js.map} +1 -1
  16. package/dist/{builder-registry-BINitddV.cjs → builder-registry-r71f11_E.cjs} +3 -3
  17. package/dist/{builder-registry-BINitddV.cjs.map → builder-registry-r71f11_E.cjs.map} +1 -1
  18. package/dist/{channels-CnEljW9e.js → channels-B_K1oJ7S.js} +2 -2
  19. package/dist/{channels-CnEljW9e.js.map → channels-B_K1oJ7S.js.map} +1 -1
  20. package/dist/{channels-D8e5YDTn.cjs → channels-CGDo0Prv.cjs} +2 -2
  21. package/dist/{channels-D8e5YDTn.cjs.map → channels-CGDo0Prv.cjs.map} +1 -1
  22. package/dist/{conversations-D89Io31L.js → conversations-Bs-k9f9N.js} +2 -2
  23. package/dist/{conversations-D89Io31L.js.map → conversations-Bs-k9f9N.js.map} +1 -1
  24. package/dist/{conversations-DJybpnE5.cjs → conversations-o3AEJjRo.cjs} +2 -2
  25. package/dist/{conversations-DJybpnE5.cjs.map → conversations-o3AEJjRo.cjs.map} +1 -1
  26. package/dist/{dist-B8gYiHIX.js → dist-Bw-Zrv4_.js} +173 -27
  27. package/dist/{dist-B8gYiHIX.js.map → dist-Bw-Zrv4_.js.map} +1 -1
  28. package/dist/{dist-CaVro31X.cjs → dist-Du9y2ur5.cjs} +177 -31
  29. package/dist/{dist-CaVro31X.cjs.map → dist-Du9y2ur5.cjs.map} +1 -1
  30. package/dist/docs/SKILL.md +1 -1
  31. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  32. package/dist/{dynamic-workflows-Cn9MXevC.js → dynamic-workflows-C3DXgmSP.js} +2 -2
  33. package/dist/{dynamic-workflows-Cn9MXevC.js.map → dynamic-workflows-C3DXgmSP.js.map} +1 -1
  34. package/dist/{dynamic-workflows-DSg9_yec.cjs → dynamic-workflows-DeUG3lA2.cjs} +2 -2
  35. package/dist/{dynamic-workflows-DSg9_yec.cjs.map → dynamic-workflows-DeUG3lA2.cjs.map} +1 -1
  36. package/dist/{editor-builder-DeFo8Kl5.cjs → editor-builder-DFh_-7Id.cjs} +2 -2
  37. package/dist/{editor-builder-DeFo8Kl5.cjs.map → editor-builder-DFh_-7Id.cjs.map} +1 -1
  38. package/dist/{editor-builder-DzpPA6dp.js → editor-builder-QRcP8-SQ.js} +2 -2
  39. package/dist/{editor-builder-DzpPA6dp.js.map → editor-builder-QRcP8-SQ.js.map} +1 -1
  40. package/dist/{memory-CVODqy7m.cjs → memory-CE6rUGmo.cjs} +22 -1
  41. package/dist/memory-CE6rUGmo.cjs.map +1 -0
  42. package/dist/{memory-CjWJYFVI.js → memory-Cp3Yo-OX.js} +11 -2
  43. package/dist/{memory-CjWJYFVI.js.map → memory-Cp3Yo-OX.js.map} +1 -1
  44. package/dist/{observability-new-endpoints-BNPjbEXf.cjs → observability-new-endpoints-I2OxQzfY.cjs} +2 -2
  45. package/dist/{observability-new-endpoints-BNPjbEXf.cjs.map → observability-new-endpoints-I2OxQzfY.cjs.map} +1 -1
  46. package/dist/{observability-new-endpoints-CSiMF_Kf.js → observability-new-endpoints-pIq_OWa8.js} +2 -2
  47. package/dist/{observability-new-endpoints-CSiMF_Kf.js.map → observability-new-endpoints-pIq_OWa8.js.map} +1 -1
  48. package/dist/{route-builder-BveLN9LU.js → route-builder-BukcT_Kp.js} +2 -2
  49. package/dist/{route-builder-BveLN9LU.js.map → route-builder-BukcT_Kp.js.map} +1 -1
  50. package/dist/{route-builder-C8n4ugUf.cjs → route-builder-DupY8fkI.cjs} +4 -4
  51. package/dist/{route-builder-C8n4ugUf.cjs.map → route-builder-DupY8fkI.cjs.map} +1 -1
  52. package/dist/{routes-Dgd2S9av.cjs → routes-9i4gAixo.cjs} +11 -10
  53. package/dist/routes-9i4gAixo.cjs.map +1 -0
  54. package/dist/{routes-DCwOOz84.js → routes-DXUcYEc6.js} +12 -11
  55. package/dist/routes-DXUcYEc6.js.map +1 -0
  56. package/dist/{schedules-BcEUUuX_.js → schedules-BzymFGR_.js} +2 -2
  57. package/dist/{schedules-BcEUUuX_.js.map → schedules-BzymFGR_.js.map} +1 -1
  58. package/dist/{schedules-fj9U0_tA.cjs → schedules-DaEv0Usj.cjs} +2 -2
  59. package/dist/{schedules-fj9U0_tA.cjs.map → schedules-DaEv0Usj.cjs.map} +1 -1
  60. package/dist/schema-BF_cZG0Y.js +2 -0
  61. package/dist/schema-C7CvwM1d.cjs +1 -0
  62. package/dist/{schema-Bv9OdW1f-DLSJSqQv.js → schema-D_ikovK6-BzTeMhWf.js} +467 -131
  63. package/dist/schema-D_ikovK6-BzTeMhWf.js.map +1 -0
  64. package/dist/{schema-Bv9OdW1f-CxTiW8RD.cjs → schema-D_ikovK6-DQrOVw5N.cjs} +467 -131
  65. package/dist/schema-D_ikovK6-DQrOVw5N.cjs.map +1 -0
  66. package/dist/server/handlers/a2a.cjs +1 -1
  67. package/dist/server/handlers/a2a.js +1 -1
  68. package/dist/server/handlers/agent-builder.cjs +3 -3
  69. package/dist/server/handlers/agent-builder.js +3 -3
  70. package/dist/server/handlers/agent-controller.cjs +3 -3
  71. package/dist/server/handlers/agent-controller.js +3 -3
  72. package/dist/server/handlers/agent-versions.cjs +2 -2
  73. package/dist/server/handlers/agent-versions.js +2 -2
  74. package/dist/server/handlers/agents.cjs +6 -6
  75. package/dist/server/handlers/agents.js +5 -5
  76. package/dist/server/handlers/auth.cjs +1 -1
  77. package/dist/server/handlers/auth.js +1 -1
  78. package/dist/server/handlers/background-tasks.cjs +1 -1
  79. package/dist/server/handlers/background-tasks.js +1 -1
  80. package/dist/server/handlers/builder-registry.cjs +1 -1
  81. package/dist/server/handlers/builder-registry.js +1 -1
  82. package/dist/server/handlers/channels.cjs +1 -1
  83. package/dist/server/handlers/channels.js +1 -1
  84. package/dist/server/handlers/conversations.cjs +3 -3
  85. package/dist/server/handlers/conversations.js +3 -3
  86. package/dist/server/handlers/datasets.cjs +1 -1
  87. package/dist/server/handlers/datasets.js +1 -1
  88. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  89. package/dist/server/handlers/dynamic-workflows.js +1 -1
  90. package/dist/server/handlers/editor-builder.cjs +1 -1
  91. package/dist/server/handlers/editor-builder.js +1 -1
  92. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  93. package/dist/server/handlers/favorites-enrichment.js +1 -1
  94. package/dist/server/handlers/logs.cjs +2 -2
  95. package/dist/server/handlers/logs.js +2 -2
  96. package/dist/server/handlers/mcp-client-versions.cjs +2 -2
  97. package/dist/server/handlers/mcp-client-versions.js +2 -2
  98. package/dist/server/handlers/mcp.cjs +1 -1
  99. package/dist/server/handlers/mcp.js +1 -1
  100. package/dist/server/handlers/memory.cjs +64 -3
  101. package/dist/server/handlers/memory.cjs.map +1 -1
  102. package/dist/server/handlers/memory.d.ts +47 -0
  103. package/dist/server/handlers/memory.d.ts.map +1 -1
  104. package/dist/server/handlers/memory.js +64 -4
  105. package/dist/server/handlers/memory.js.map +1 -1
  106. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  107. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  108. package/dist/server/handlers/observability-shared.cjs +1 -1
  109. package/dist/server/handlers/observability-shared.js +1 -1
  110. package/dist/server/handlers/observability.cjs +2 -2
  111. package/dist/server/handlers/observability.js +2 -2
  112. package/dist/server/handlers/plans.cjs +2 -2
  113. package/dist/server/handlers/plans.js +2 -2
  114. package/dist/server/handlers/processor-providers.cjs +1 -1
  115. package/dist/server/handlers/processor-providers.js +1 -1
  116. package/dist/server/handlers/processors.cjs +1 -1
  117. package/dist/server/handlers/processors.js +1 -1
  118. package/dist/server/handlers/prompt-block-versions.cjs +2 -2
  119. package/dist/server/handlers/prompt-block-versions.js +2 -2
  120. package/dist/server/handlers/responses.cjs +2 -2
  121. package/dist/server/handlers/responses.js +2 -2
  122. package/dist/server/handlers/responses.storage.cjs +1 -1
  123. package/dist/server/handlers/responses.storage.js +1 -1
  124. package/dist/server/handlers/schedules.cjs +1 -1
  125. package/dist/server/handlers/schedules.js +1 -1
  126. package/dist/server/handlers/scorer-versions.cjs +2 -2
  127. package/dist/server/handlers/scorer-versions.js +2 -2
  128. package/dist/server/handlers/scores.cjs +1 -1
  129. package/dist/server/handlers/scores.js +1 -1
  130. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  131. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  132. package/dist/server/handlers/stored-agents.cjs +3 -3
  133. package/dist/server/handlers/stored-agents.js +3 -3
  134. package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
  135. package/dist/server/handlers/stored-mcp-clients.js +2 -2
  136. package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
  137. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  138. package/dist/server/handlers/stored-scorers.cjs +2 -2
  139. package/dist/server/handlers/stored-scorers.js +2 -2
  140. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  141. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  142. package/dist/server/handlers/stored-skills.cjs +3 -3
  143. package/dist/server/handlers/stored-skills.js +3 -3
  144. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  145. package/dist/server/handlers/stored-workspaces.js +2 -2
  146. package/dist/server/handlers/system.cjs +2 -2
  147. package/dist/server/handlers/system.js +2 -2
  148. package/dist/server/handlers/tool-providers.cjs +1 -1
  149. package/dist/server/handlers/tool-providers.js +1 -1
  150. package/dist/server/handlers/tools.cjs +6 -6
  151. package/dist/server/handlers/tools.js +5 -5
  152. package/dist/server/handlers/utils.cjs +2 -1
  153. package/dist/server/handlers/utils.d.ts +7 -0
  154. package/dist/server/handlers/utils.d.ts.map +1 -1
  155. package/dist/server/handlers/utils.js +2 -2
  156. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  157. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  158. package/dist/server/handlers/vector.cjs +1 -1
  159. package/dist/server/handlers/vector.js +1 -1
  160. package/dist/server/handlers/workflows.cjs +3 -3
  161. package/dist/server/handlers/workflows.js +3 -3
  162. package/dist/server/handlers/workspace.cjs +1 -1
  163. package/dist/server/handlers/workspace.js +1 -1
  164. package/dist/server/handlers.cjs +2 -2
  165. package/dist/server/handlers.js +2 -2
  166. package/dist/server/schemas/index.cjs +4 -2
  167. package/dist/server/schemas/index.js +3 -3
  168. package/dist/server/schemas/memory.d.ts +18 -0
  169. package/dist/server/schemas/memory.d.ts.map +1 -1
  170. package/dist/server/server-adapter/index.cjs +3 -3
  171. package/dist/server/server-adapter/index.js +3 -3
  172. package/dist/server/server-adapter/routes/memory.d.ts +46 -0
  173. package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
  174. package/dist/{utils-DJMUhfvY.cjs → utils-BtkczLrA.cjs} +17 -2
  175. package/dist/utils-BtkczLrA.cjs.map +1 -0
  176. package/dist/{utils-Hz8Hc2cd.js → utils-CMWGBd0O.js} +12 -3
  177. package/dist/utils-CMWGBd0O.js.map +1 -0
  178. package/dist/{utils-B2vd77Fi.js → utils-Duk4hfT_.js} +3 -3
  179. package/dist/{utils-B2vd77Fi.js.map → utils-Duk4hfT_.js.map} +1 -1
  180. package/dist/{utils-CmYnjLcY.cjs → utils-WcR0QSUB.cjs} +5 -5
  181. package/dist/{utils-CmYnjLcY.cjs.map → utils-WcR0QSUB.cjs.map} +1 -1
  182. package/package.json +7 -7
  183. package/dist/memory-CVODqy7m.cjs.map +0 -1
  184. package/dist/routes-DCwOOz84.js.map +0 -1
  185. package/dist/routes-Dgd2S9av.cjs.map +0 -1
  186. package/dist/schema-Bv9OdW1f-CxTiW8RD.cjs.map +0 -1
  187. package/dist/schema-Bv9OdW1f-DLSJSqQv.js.map +0 -1
  188. package/dist/schema-CGeYTFwm.js +0 -2
  189. package/dist/schema-CNKnRmv1.cjs +0 -1
  190. package/dist/utils-DJMUhfvY.cjs.map +0 -1
  191. package/dist/utils-Hz8Hc2cd.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  const require_rolldown_runtime = require("./rolldown-runtime-Bd6kNlEP.cjs");
2
- const require_schema_Bv9OdW1f = require("./schema-Bv9OdW1f-CxTiW8RD.cjs");
3
- require("./schema-CNKnRmv1.cjs");
2
+ const require_schema_D_ikovK6 = require("./schema-D_ikovK6-DQrOVw5N.cjs");
3
+ require("./schema-C7CvwM1d.cjs");
4
4
  const require_sync$1 = require("./sync-C4LbbSKR.cjs");
5
5
  const require_dist = require("./dist-CLQt62Pi.cjs");
6
6
  let zod_v4 = require("zod/v4");
@@ -4694,7 +4694,7 @@ function splitLines(text) {
4694
4694
  return result;
4695
4695
  }
4696
4696
  //#endregion
4697
- //#region ../memory/dist/src-BNyqEQlx.js
4697
+ //#region ../memory/dist/src-TN3MwGgP.js
4698
4698
  var __defProp$3 = Object.defineProperty;
4699
4699
  var __exportAll = (all, no_symbols) => {
4700
4700
  let target = {};
@@ -27418,7 +27418,7 @@ const updateWorkingMemoryTool = (memoryConfig) => {
27418
27418
  };
27419
27419
  if (schema) {
27420
27420
  const standardSchema = (0, _mastra_core_schema.isStandardSchemaWithJSON)(schema) ? schema : (0, _mastra_core_schema.toStandardSchema)(schema);
27421
- const jsonSchema = require_schema_Bv9OdW1f.standardSchemaToJSONSchema(standardSchema, { io: "input" });
27421
+ const jsonSchema = require_schema_D_ikovK6.standardSchemaToJSONSchema(standardSchema, { io: "input" });
27422
27422
  delete jsonSchema.$schema;
27423
27423
  const wrappedJsonSchema = {
27424
27424
  $schema: "http://json-schema.org/draft-07/schema#",
@@ -34739,8 +34739,35 @@ const DEFAULT_TOP_K = 4;
34739
34739
  const VECTOR_DELETE_BATCH_SIZE = 100;
34740
34740
  const DEFAULT_EMBEDDING_CACHE_MAX_SIZE = 1e3;
34741
34741
  /**
34742
- * Concrete implementation of MastraMemory that adds support for thread configuration
34743
- * and message injection.
34742
+ * Gives Mastra agents conversation history, with optional working memory,
34743
+ * semantic recall, and observational memory.
34744
+ *
34745
+ * @remarks
34746
+ * Configure storage on this instance or its Mastra instance before use.
34747
+ * See the bundled docs for setup and conversation identifiers.
34748
+ *
34749
+ * @example
34750
+ * Attach memory to an agent; `yourModel` is your configured model.
34751
+ * ```typescript
34752
+ * import { Agent } from '@mastra/core/agent';
34753
+ * import { Memory } from '@mastra/memory';
34754
+ *
34755
+ * const agent = new Agent({
34756
+ * id: 'assistant',
34757
+ * name: 'Assistant',
34758
+ * instructions: 'You are a helpful assistant.',
34759
+ * model: yourModel,
34760
+ * memory: new Memory(),
34761
+ * });
34762
+ * ```
34763
+ *
34764
+ * @see For documentation bundled with your installed package, locate
34765
+ * `@mastra/memory/package.json` with your project's resolver or package-manager
34766
+ * tooling, then read `dist/docs/SKILL.md` from that package root and follow its
34767
+ * reference links. Use package-manager tools for virtual or archived packages.
34768
+ *
34769
+ * @see [Memory documentation](https://mastra.ai/docs/memory/overview)
34770
+ * if packaged docs are unavailable.
34744
34771
  */
34745
34772
  var Memory = class Memory extends _mastra_core_memory.MastraMemory {
34746
34773
  _omEngine;
@@ -35509,8 +35536,8 @@ ${workingMemory}`;
35509
35536
  if (config.workingMemory?.schema) try {
35510
35537
  const schema = config.workingMemory.schema;
35511
35538
  let convertedSchema;
35512
- if (require_schema_Bv9OdW1f.isStandardSchemaWithJSON(schema)) convertedSchema = schema["~standard"].jsonSchema.output({ target: "draft-07" });
35513
- else convertedSchema = require_schema_Bv9OdW1f.toStandardSchema(schema)["~standard"].jsonSchema.output({ target: "draft-07" });
35539
+ if (require_schema_D_ikovK6.isStandardSchemaWithJSON(schema)) convertedSchema = schema["~standard"].jsonSchema.output({ target: "draft-07" });
35540
+ else convertedSchema = require_schema_D_ikovK6.toStandardSchema(schema)["~standard"].jsonSchema.output({ target: "draft-07" });
35514
35541
  return {
35515
35542
  format: "json",
35516
35543
  content: JSON.stringify(convertedSchema)
@@ -36339,18 +36366,40 @@ Notes:
36339
36366
  * ```
36340
36367
  */
36341
36368
  async cloneThread(args, memoryConfig) {
36342
- const memoryStore = await this.getMemoryStore();
36343
- const config = this.getMergedThreadConfig(memoryConfig);
36344
- const requestedHydrate = args.options?.hydrateMessages ?? true;
36345
- const effectiveHydrate = requestedHydrate || Boolean(this.vector && this.embedder && config.semanticRecall);
36346
- const result = await memoryStore.cloneThread(effectiveHydrate === requestedHydrate ? args : {
36347
- ...args,
36348
- options: {
36349
- ...args.options,
36350
- hydrateMessages: effectiveHydrate
36369
+ const result = await this.copyThread(args, memoryConfig);
36370
+ const { messages } = await (await this.getMemoryStore()).listMessages({
36371
+ threadId: result.thread.id,
36372
+ resourceId: result.thread.resourceId,
36373
+ perPage: false,
36374
+ orderBy: {
36375
+ field: "createdAt",
36376
+ direction: "ASC"
36351
36377
  }
36352
36378
  });
36379
+ return {
36380
+ ...result,
36381
+ clonedMessages: messages
36382
+ };
36383
+ }
36384
+ /**
36385
+ * Copies a thread with all its messages to a new thread without returning the
36386
+ * message payloads. Working memory, observational memory, and semantic-recall
36387
+ * embeddings are carried over exactly as with `cloneThread`; the only difference
36388
+ * is that message content never has to be held in the Node heap at once.
36389
+ *
36390
+ * Use this instead of `cloneThread` when only the new thread id is needed
36391
+ * (e.g. forking a conversation for a subagent).
36392
+ *
36393
+ * @param args - Clone parameters, same as `cloneThread`
36394
+ * @param memoryConfig - Optional memory configuration override
36395
+ * @returns The newly created thread and the source→new message id map
36396
+ */
36397
+ async copyThread(args, memoryConfig) {
36398
+ const memoryStore = await this.getMemoryStore();
36399
+ const config = this.getMergedThreadConfig(memoryConfig);
36400
+ const result = await memoryStore.copyThread(args);
36353
36401
  const sourceResourceId = (await this.getThreadById({ threadId: args.sourceThreadId }))?.resourceId;
36402
+ let priorDestinationResourceWm;
36354
36403
  if (config.workingMemory?.enabled) {
36355
36404
  const scope = config.workingMemory.scope || "resource";
36356
36405
  if (scope === "thread" || scope === "resource" && args.resourceId && args.resourceId !== sourceResourceId) {
@@ -36359,28 +36408,125 @@ Notes:
36359
36408
  resourceId: sourceResourceId,
36360
36409
  memoryConfig
36361
36410
  });
36362
- if (sourceWm) await this.updateWorkingMemory({
36363
- threadId: result.thread.id,
36364
- resourceId: result.thread.resourceId,
36365
- workingMemory: sourceWm,
36366
- memoryConfig
36367
- });
36411
+ if (sourceWm) {
36412
+ if (scope === "resource") priorDestinationResourceWm = (await memoryStore.getResourceById({ resourceId: result.thread.resourceId }))?.workingMemory ?? null;
36413
+ await this.updateWorkingMemory({
36414
+ threadId: result.thread.id,
36415
+ resourceId: result.thread.resourceId,
36416
+ workingMemory: sourceWm,
36417
+ memoryConfig
36418
+ });
36419
+ }
36368
36420
  }
36369
36421
  }
36370
36422
  if (memoryStore.supportsObservationalMemory && sourceResourceId) try {
36371
36423
  await this.cloneObservationalMemory(memoryStore, args.sourceThreadId, sourceResourceId, result);
36372
36424
  } catch (error) {
36373
- try {
36374
- await memoryStore.deleteThread({ threadId: result.thread.id });
36375
- } catch (rollbackError) {
36376
- this.logger.error("Failed to rollback cloned thread after OM clone failure", rollbackError);
36377
- }
36425
+ await this.rollbackCopiedThread(memoryStore, result.thread, "OM clone", false, priorDestinationResourceWm);
36426
+ throw error;
36427
+ }
36428
+ if (this.vector && this.embedder && config.semanticRecall) try {
36429
+ await this.embedCopiedMessagesInBatches(memoryStore, result, config);
36430
+ } catch (error) {
36431
+ await this.rollbackCopiedThread(memoryStore, result.thread, "embedding", true, priorDestinationResourceWm);
36378
36432
  throw error;
36379
36433
  }
36380
- if (this.vector && config.semanticRecall && result.clonedMessages.length > 0) await this.embedClonedMessages(result.clonedMessages, config);
36381
36434
  return result;
36382
36435
  }
36383
36436
  /**
36437
+ * Best-effort compensation when a later step of copyThread fails after the destination thread
36438
+ * was persisted. deleteThread removes the thread, its messages and thread-scoped working memory.
36439
+ * `priorDestinationResourceWm` is the destination resource's working memory before the copy
36440
+ * overwrote it (`null` = none existed); when defined it is restored. When `afterOmClone` is set the OM step already succeeded, so the thread-scoped OM record and
36441
+ * any vectors written so far are dropped too. Resource-scoped OM is left alone: it may be
36442
+ * shared with a pre-existing resource and isn't safe to clear blindly.
36443
+ */
36444
+ async rollbackCopiedThread(memoryStore, thread, failedStep, afterOmClone, priorDestinationResourceWm) {
36445
+ const threadId = thread.id;
36446
+ try {
36447
+ await memoryStore.deleteThread({ threadId });
36448
+ } catch (rollbackError) {
36449
+ this.logger.error(`Failed to rollback copied thread after ${failedStep} failure`, rollbackError);
36450
+ }
36451
+ if (priorDestinationResourceWm !== void 0) try {
36452
+ await memoryStore.updateResource({
36453
+ resourceId: thread.resourceId,
36454
+ workingMemory: priorDestinationResourceWm ?? ""
36455
+ });
36456
+ } catch (rollbackError) {
36457
+ this.logger.error(`Failed to restore resource working memory after ${failedStep} failure`, rollbackError);
36458
+ }
36459
+ if (!afterOmClone) return;
36460
+ if (memoryStore.supportsObservationalMemory) try {
36461
+ await memoryStore.clearObservationalMemory(threadId, thread.resourceId);
36462
+ } catch (rollbackError) {
36463
+ this.logger.error(`Failed to rollback copied thread OM after ${failedStep} failure`, rollbackError);
36464
+ }
36465
+ try {
36466
+ const messageIndexes = await this.getMemoryVectorIndexes([this.messageIndexPrefix]);
36467
+ await Promise.all(messageIndexes.map((indexName) => this.vector.deleteVectors({
36468
+ indexName,
36469
+ filter: { thread_id: threadId }
36470
+ })));
36471
+ } catch (rollbackError) {
36472
+ this.logger.error(`Failed to rollback copied thread vectors after ${failedStep} failure`, rollbackError);
36473
+ }
36474
+ }
36475
+ static CLONE_EMBED_PAGE_SIZE = 100;
36476
+ async embedCopiedMessagesInBatches(memoryStore, copied, config) {
36477
+ const size = Memory.CLONE_EMBED_PAGE_SIZE;
36478
+ const copiedIds = Object.values(copied.messageIdMap ?? {});
36479
+ if (copiedIds.length > 0) {
36480
+ for (let i = 0; i < copiedIds.length; i += size) {
36481
+ const { messages } = await memoryStore.listMessagesById({ messageIds: copiedIds.slice(i, i + size) });
36482
+ if (messages.length > 0) await this.embedClonedMessages(messages, config);
36483
+ }
36484
+ return;
36485
+ }
36486
+ const { messages } = await memoryStore.listMessages({
36487
+ threadId: copied.thread.id,
36488
+ resourceId: copied.thread.resourceId,
36489
+ perPage: false,
36490
+ includeTotal: false
36491
+ });
36492
+ for (let i = 0; i < messages.length; i += size) await this.embedClonedMessages(messages.slice(i, i + size), config);
36493
+ }
36494
+ async updateThreadResourceId({ threadId, resourceId, memoryConfig }) {
36495
+ const memoryStore = await this.getMemoryStore();
36496
+ const config = this.getMergedThreadConfig(memoryConfig);
36497
+ const migratesVectors = Boolean(this.vector && this.embedder && config.semanticRecall);
36498
+ if (!migratesVectors) {
36499
+ const existing = await memoryStore.getThreadById({ threadId });
36500
+ if (existing && existing.resourceId === resourceId) return existing;
36501
+ }
36502
+ const thread = await memoryStore.updateThreadResourceId({
36503
+ threadId,
36504
+ resourceId
36505
+ });
36506
+ if (migratesVectors) try {
36507
+ const { messages } = await memoryStore.listMessages({
36508
+ threadId,
36509
+ perPage: false
36510
+ });
36511
+ const messageIndexes = await this.getMemoryVectorIndexes([this.messageIndexPrefix]);
36512
+ await Promise.all(messageIndexes.map(async (indexName) => {
36513
+ await this.vector.deleteVectors({
36514
+ indexName,
36515
+ filter: { thread_id: threadId }
36516
+ });
36517
+ }));
36518
+ if (messages.length > 0) await this.embedClonedMessages(messages, config);
36519
+ } catch (error) {
36520
+ this.logger.error("Failed to migrate semantic-recall vectors during thread transfer", {
36521
+ threadId,
36522
+ resourceId,
36523
+ error: error instanceof Error ? error.message : String(error)
36524
+ });
36525
+ throw new Error(`Thread "${threadId}" was transferred to resource "${resourceId}", but migrating its semantic-recall vectors failed. The thread's messages may not surface under resource-scoped recall until the vectors are re-indexed. Cause: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
36526
+ }
36527
+ return thread;
36528
+ }
36529
+ /**
36384
36530
  * Clone observational memory records when cloning a thread.
36385
36531
  * Thread-scoped: always cloned to the new thread.
36386
36532
  * Resource-scoped: cloned only when the resourceId changes (same resourceId shares OM naturally).
@@ -40158,7 +40304,7 @@ Return the actual exported names of the units, as well as the file names.`,
40158
40304
  maxSteps: 100
40159
40305
  });
40160
40306
  else {
40161
- const jsonSchema = require_schema_Bv9OdW1f.standardSchemaToJSONSchema((0, _mastra_core_schema.toStandardSchema)(output));
40307
+ const jsonSchema = require_schema_D_ikovK6.standardSchemaToJSONSchema((0, _mastra_core_schema.toStandardSchema)(output));
40162
40308
  result = await agent.generateLegacy(prompt, {
40163
40309
  experimental_output: jsonSchema,
40164
40310
  maxSteps: 100
@@ -47066,4 +47212,4 @@ const agentBuilderWorkflows = {
47066
47212
  //#endregion
47067
47213
  exports.agentBuilderWorkflows = agentBuilderWorkflows;
47068
47214
 
47069
- //# sourceMappingURL=dist-CaVro31X.cjs.map
47215
+ //# sourceMappingURL=dist-Du9y2ur5.cjs.map