@mastra/server 1.66.1-alpha.0 → 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.
- package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +21 -0
- package/dist/{a2a-CW4FVjHx.cjs → a2a-DQ8GeDz4.cjs} +3 -3
- package/dist/{a2a-CW4FVjHx.cjs.map → a2a-DQ8GeDz4.cjs.map} +1 -1
- package/dist/{a2a-Di7S6YaM.js → a2a-DUBjstWk.js} +3 -3
- package/dist/{a2a-Di7S6YaM.js.map → a2a-DUBjstWk.js.map} +1 -1
- package/dist/{api-schema-manifest-Cpw4nIVv.cjs → api-schema-manifest-1LriOYQM.cjs} +3 -3
- package/dist/{api-schema-manifest-Cpw4nIVv.cjs.map → api-schema-manifest-1LriOYQM.cjs.map} +1 -1
- package/dist/{api-schema-manifest-BkKHbFJi.js → api-schema-manifest-DNk8B4kw.js} +3 -3
- package/dist/{api-schema-manifest-BkKHbFJi.js.map → api-schema-manifest-DNk8B4kw.js.map} +1 -1
- package/dist/{background-tasks-Bl7Hn8h9.js → background-tasks-B4yoNDY_.js} +2 -2
- package/dist/{background-tasks-Bl7Hn8h9.js.map → background-tasks-B4yoNDY_.js.map} +1 -1
- package/dist/{background-tasks-BJhziawt.cjs → background-tasks-BarPeyNJ.cjs} +2 -2
- package/dist/{background-tasks-BJhziawt.cjs.map → background-tasks-BarPeyNJ.cjs.map} +1 -1
- package/dist/{builder-registry-Bcpr74BB.js → builder-registry-DI3Ysclf.js} +3 -3
- package/dist/{builder-registry-Bcpr74BB.js.map → builder-registry-DI3Ysclf.js.map} +1 -1
- package/dist/{builder-registry-BINitddV.cjs → builder-registry-r71f11_E.cjs} +3 -3
- package/dist/{builder-registry-BINitddV.cjs.map → builder-registry-r71f11_E.cjs.map} +1 -1
- package/dist/{channels-CnEljW9e.js → channels-B_K1oJ7S.js} +2 -2
- package/dist/{channels-CnEljW9e.js.map → channels-B_K1oJ7S.js.map} +1 -1
- package/dist/{channels-D8e5YDTn.cjs → channels-CGDo0Prv.cjs} +2 -2
- package/dist/{channels-D8e5YDTn.cjs.map → channels-CGDo0Prv.cjs.map} +1 -1
- package/dist/{conversations-D89Io31L.js → conversations-Bs-k9f9N.js} +2 -2
- package/dist/{conversations-D89Io31L.js.map → conversations-Bs-k9f9N.js.map} +1 -1
- package/dist/{conversations-DJybpnE5.cjs → conversations-o3AEJjRo.cjs} +2 -2
- package/dist/{conversations-DJybpnE5.cjs.map → conversations-o3AEJjRo.cjs.map} +1 -1
- package/dist/{dist-DS38AI6C.js → dist-Bw-Zrv4_.js} +193 -22
- package/dist/{dist-DS38AI6C.js.map → dist-Bw-Zrv4_.js.map} +1 -1
- package/dist/{dist-B0Yl4ENo.cjs → dist-Du9y2ur5.cjs} +197 -26
- package/dist/{dist-B0Yl4ENo.cjs.map → dist-Du9y2ur5.cjs.map} +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +1 -1
- package/dist/{dynamic-workflows-Cn9MXevC.js → dynamic-workflows-C3DXgmSP.js} +2 -2
- package/dist/{dynamic-workflows-Cn9MXevC.js.map → dynamic-workflows-C3DXgmSP.js.map} +1 -1
- package/dist/{dynamic-workflows-DSg9_yec.cjs → dynamic-workflows-DeUG3lA2.cjs} +2 -2
- package/dist/{dynamic-workflows-DSg9_yec.cjs.map → dynamic-workflows-DeUG3lA2.cjs.map} +1 -1
- package/dist/{editor-builder-DeFo8Kl5.cjs → editor-builder-DFh_-7Id.cjs} +2 -2
- package/dist/{editor-builder-DeFo8Kl5.cjs.map → editor-builder-DFh_-7Id.cjs.map} +1 -1
- package/dist/{editor-builder-DzpPA6dp.js → editor-builder-QRcP8-SQ.js} +2 -2
- package/dist/{editor-builder-DzpPA6dp.js.map → editor-builder-QRcP8-SQ.js.map} +1 -1
- package/dist/{memory-CVODqy7m.cjs → memory-CE6rUGmo.cjs} +22 -1
- package/dist/memory-CE6rUGmo.cjs.map +1 -0
- package/dist/{memory-CjWJYFVI.js → memory-Cp3Yo-OX.js} +11 -2
- package/dist/{memory-CjWJYFVI.js.map → memory-Cp3Yo-OX.js.map} +1 -1
- package/dist/{observability-new-endpoints-BNPjbEXf.cjs → observability-new-endpoints-I2OxQzfY.cjs} +2 -2
- package/dist/{observability-new-endpoints-BNPjbEXf.cjs.map → observability-new-endpoints-I2OxQzfY.cjs.map} +1 -1
- package/dist/{observability-new-endpoints-CSiMF_Kf.js → observability-new-endpoints-pIq_OWa8.js} +2 -2
- package/dist/{observability-new-endpoints-CSiMF_Kf.js.map → observability-new-endpoints-pIq_OWa8.js.map} +1 -1
- package/dist/{route-builder-BveLN9LU.js → route-builder-BukcT_Kp.js} +2 -2
- package/dist/{route-builder-BveLN9LU.js.map → route-builder-BukcT_Kp.js.map} +1 -1
- package/dist/{route-builder-C8n4ugUf.cjs → route-builder-DupY8fkI.cjs} +4 -4
- package/dist/{route-builder-C8n4ugUf.cjs.map → route-builder-DupY8fkI.cjs.map} +1 -1
- package/dist/{routes-Dgd2S9av.cjs → routes-9i4gAixo.cjs} +11 -10
- package/dist/routes-9i4gAixo.cjs.map +1 -0
- package/dist/{routes-DCwOOz84.js → routes-DXUcYEc6.js} +12 -11
- package/dist/routes-DXUcYEc6.js.map +1 -0
- package/dist/{schedules-BcEUUuX_.js → schedules-BzymFGR_.js} +2 -2
- package/dist/{schedules-BcEUUuX_.js.map → schedules-BzymFGR_.js.map} +1 -1
- package/dist/{schedules-fj9U0_tA.cjs → schedules-DaEv0Usj.cjs} +2 -2
- package/dist/{schedules-fj9U0_tA.cjs.map → schedules-DaEv0Usj.cjs.map} +1 -1
- package/dist/schema-BF_cZG0Y.js +2 -0
- package/dist/schema-C7CvwM1d.cjs +1 -0
- package/dist/{schema-Bv9OdW1f-DLSJSqQv.js → schema-D_ikovK6-BzTeMhWf.js} +467 -131
- package/dist/schema-D_ikovK6-BzTeMhWf.js.map +1 -0
- package/dist/{schema-Bv9OdW1f-CxTiW8RD.cjs → schema-D_ikovK6-DQrOVw5N.cjs} +467 -131
- package/dist/schema-D_ikovK6-DQrOVw5N.cjs.map +1 -0
- package/dist/server/handlers/a2a.cjs +1 -1
- package/dist/server/handlers/a2a.js +1 -1
- package/dist/server/handlers/agent-builder.cjs +3 -3
- package/dist/server/handlers/agent-builder.js +3 -3
- package/dist/server/handlers/agent-controller.cjs +3 -3
- package/dist/server/handlers/agent-controller.js +3 -3
- package/dist/server/handlers/agent-versions.cjs +2 -2
- package/dist/server/handlers/agent-versions.js +2 -2
- package/dist/server/handlers/agents.cjs +6 -6
- package/dist/server/handlers/agents.js +5 -5
- package/dist/server/handlers/auth.cjs +1 -1
- package/dist/server/handlers/auth.js +1 -1
- package/dist/server/handlers/background-tasks.cjs +1 -1
- package/dist/server/handlers/background-tasks.js +1 -1
- package/dist/server/handlers/builder-registry.cjs +1 -1
- package/dist/server/handlers/builder-registry.js +1 -1
- package/dist/server/handlers/channels.cjs +1 -1
- package/dist/server/handlers/channels.js +1 -1
- package/dist/server/handlers/conversations.cjs +3 -3
- package/dist/server/handlers/conversations.js +3 -3
- package/dist/server/handlers/datasets.cjs +1 -1
- package/dist/server/handlers/datasets.js +1 -1
- package/dist/server/handlers/dynamic-workflows.cjs +1 -1
- package/dist/server/handlers/dynamic-workflows.js +1 -1
- package/dist/server/handlers/editor-builder.cjs +1 -1
- package/dist/server/handlers/editor-builder.js +1 -1
- package/dist/server/handlers/favorites-enrichment.cjs +1 -1
- package/dist/server/handlers/favorites-enrichment.js +1 -1
- package/dist/server/handlers/logs.cjs +2 -2
- package/dist/server/handlers/logs.js +2 -2
- package/dist/server/handlers/mcp-client-versions.cjs +2 -2
- package/dist/server/handlers/mcp-client-versions.js +2 -2
- package/dist/server/handlers/mcp.cjs +1 -1
- package/dist/server/handlers/mcp.js +1 -1
- package/dist/server/handlers/memory.cjs +64 -3
- package/dist/server/handlers/memory.cjs.map +1 -1
- package/dist/server/handlers/memory.d.ts +47 -0
- package/dist/server/handlers/memory.d.ts.map +1 -1
- package/dist/server/handlers/memory.js +64 -4
- package/dist/server/handlers/memory.js.map +1 -1
- package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
- package/dist/server/handlers/observability-new-endpoints.js +1 -1
- package/dist/server/handlers/observability-shared.cjs +1 -1
- package/dist/server/handlers/observability-shared.js +1 -1
- package/dist/server/handlers/observability.cjs +2 -2
- package/dist/server/handlers/observability.js +2 -2
- package/dist/server/handlers/plans.cjs +2 -2
- package/dist/server/handlers/plans.js +2 -2
- package/dist/server/handlers/processor-providers.cjs +1 -1
- package/dist/server/handlers/processor-providers.js +1 -1
- package/dist/server/handlers/processors.cjs +1 -1
- package/dist/server/handlers/processors.js +1 -1
- package/dist/server/handlers/prompt-block-versions.cjs +2 -2
- package/dist/server/handlers/prompt-block-versions.js +2 -2
- package/dist/server/handlers/responses.cjs +2 -2
- package/dist/server/handlers/responses.js +2 -2
- package/dist/server/handlers/responses.storage.cjs +1 -1
- package/dist/server/handlers/responses.storage.js +1 -1
- package/dist/server/handlers/schedules.cjs +1 -1
- package/dist/server/handlers/schedules.js +1 -1
- package/dist/server/handlers/scorer-versions.cjs +2 -2
- package/dist/server/handlers/scorer-versions.js +2 -2
- package/dist/server/handlers/scores.cjs +1 -1
- package/dist/server/handlers/scores.js +1 -1
- package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
- package/dist/server/handlers/stored-agent-favorites.js +3 -3
- package/dist/server/handlers/stored-agents.cjs +3 -3
- package/dist/server/handlers/stored-agents.js +3 -3
- package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
- package/dist/server/handlers/stored-mcp-clients.js +2 -2
- package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
- package/dist/server/handlers/stored-prompt-blocks.js +2 -2
- package/dist/server/handlers/stored-scorers.cjs +2 -2
- package/dist/server/handlers/stored-scorers.js +2 -2
- package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
- package/dist/server/handlers/stored-skill-favorites.js +3 -3
- package/dist/server/handlers/stored-skills.cjs +3 -3
- package/dist/server/handlers/stored-skills.js +3 -3
- package/dist/server/handlers/stored-workspaces.cjs +2 -2
- package/dist/server/handlers/stored-workspaces.js +2 -2
- package/dist/server/handlers/system.cjs +2 -2
- package/dist/server/handlers/system.js +2 -2
- package/dist/server/handlers/tool-providers.cjs +1 -1
- package/dist/server/handlers/tool-providers.js +1 -1
- package/dist/server/handlers/tools.cjs +6 -6
- package/dist/server/handlers/tools.js +5 -5
- package/dist/server/handlers/utils.cjs +2 -1
- package/dist/server/handlers/utils.d.ts +7 -0
- package/dist/server/handlers/utils.d.ts.map +1 -1
- package/dist/server/handlers/utils.js +2 -2
- package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
- package/dist/server/handlers/validate-agent-instructions.js +1 -1
- package/dist/server/handlers/vector.cjs +1 -1
- package/dist/server/handlers/vector.js +1 -1
- package/dist/server/handlers/workflows.cjs +3 -3
- package/dist/server/handlers/workflows.js +3 -3
- package/dist/server/handlers/workspace.cjs +1 -1
- package/dist/server/handlers/workspace.js +1 -1
- package/dist/server/handlers.cjs +2 -2
- package/dist/server/handlers.js +2 -2
- package/dist/server/schemas/index.cjs +4 -2
- package/dist/server/schemas/index.js +3 -3
- package/dist/server/schemas/memory.d.ts +18 -0
- package/dist/server/schemas/memory.d.ts.map +1 -1
- package/dist/server/server-adapter/index.cjs +3 -3
- package/dist/server/server-adapter/index.js +3 -3
- package/dist/server/server-adapter/routes/memory.d.ts +46 -0
- package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
- package/dist/{utils-DJMUhfvY.cjs → utils-BtkczLrA.cjs} +17 -2
- package/dist/utils-BtkczLrA.cjs.map +1 -0
- package/dist/{utils-Hz8Hc2cd.js → utils-CMWGBd0O.js} +12 -3
- package/dist/utils-CMWGBd0O.js.map +1 -0
- package/dist/{utils-B2vd77Fi.js → utils-Duk4hfT_.js} +3 -3
- package/dist/{utils-B2vd77Fi.js.map → utils-Duk4hfT_.js.map} +1 -1
- package/dist/{utils-CmYnjLcY.cjs → utils-WcR0QSUB.cjs} +5 -5
- package/dist/{utils-CmYnjLcY.cjs.map → utils-WcR0QSUB.cjs.map} +1 -1
- package/package.json +6 -6
- package/dist/memory-CVODqy7m.cjs.map +0 -1
- package/dist/routes-DCwOOz84.js.map +0 -1
- package/dist/routes-Dgd2S9av.cjs.map +0 -1
- package/dist/schema-Bv9OdW1f-CxTiW8RD.cjs.map +0 -1
- package/dist/schema-Bv9OdW1f-DLSJSqQv.js.map +0 -1
- package/dist/schema-CGeYTFwm.js +0 -2
- package/dist/schema-CNKnRmv1.cjs +0 -1
- package/dist/utils-DJMUhfvY.cjs.map +0 -1
- 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
|
|
3
|
-
require("./schema-
|
|
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-
|
|
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 =
|
|
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#",
|
|
@@ -34695,7 +34695,24 @@ function isSystemReminderMessage(message) {
|
|
|
34695
34695
|
const firstTextPart = message.content.parts.find((part) => part.type === "text");
|
|
34696
34696
|
return typeof firstTextPart?.text === "string" && firstTextPart.text.startsWith("<system-reminder");
|
|
34697
34697
|
}
|
|
34698
|
-
function
|
|
34698
|
+
function isRecallSignalType(type) {
|
|
34699
|
+
return type === "user" || type === "state" || type === "reactive" || type === "notification" || type === "user-message" || type === "system-reminder";
|
|
34700
|
+
}
|
|
34701
|
+
function getRecallSignalType(message) {
|
|
34702
|
+
if (!isRecord(message.content)) return void 0;
|
|
34703
|
+
for (const part of message.content.parts) if ((part.type === "data-signal" || part.type === "data-user-message") && isRecord(part.data) && isRecallSignalType(part.data.type)) return part.data.type;
|
|
34704
|
+
const metadata = message.content.metadata;
|
|
34705
|
+
if (message.role === "signal" && isRecord(metadata) && isRecord(metadata.signal)) {
|
|
34706
|
+
if (isRecallSignalType(metadata.signal.type)) return metadata.signal.type;
|
|
34707
|
+
}
|
|
34708
|
+
return isSystemReminderMessage(message) ? "system-reminder" : void 0;
|
|
34709
|
+
}
|
|
34710
|
+
function filterSystemReminderMessages(messages, includeSystemReminders, hideSignals) {
|
|
34711
|
+
if (hideSignals === false) return messages;
|
|
34712
|
+
if (hideSignals !== void 0) return messages.filter((message) => {
|
|
34713
|
+
const type = getRecallSignalType(message);
|
|
34714
|
+
return type === void 0 || hideSignals !== true && !hideSignals.includes(type);
|
|
34715
|
+
});
|
|
34699
34716
|
if (includeSystemReminders) return messages;
|
|
34700
34717
|
return messages.filter((message) => !isSystemReminderMessage(message));
|
|
34701
34718
|
}
|
|
@@ -34722,8 +34739,35 @@ const DEFAULT_TOP_K = 4;
|
|
|
34722
34739
|
const VECTOR_DELETE_BATCH_SIZE = 100;
|
|
34723
34740
|
const DEFAULT_EMBEDDING_CACHE_MAX_SIZE = 1e3;
|
|
34724
34741
|
/**
|
|
34725
|
-
*
|
|
34726
|
-
* and
|
|
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.
|
|
34727
34771
|
*/
|
|
34728
34772
|
var Memory = class Memory extends _mastra_core_memory.MastraMemory {
|
|
34729
34773
|
_omEngine;
|
|
@@ -34913,7 +34957,7 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
|
|
|
34913
34957
|
});
|
|
34914
34958
|
}
|
|
34915
34959
|
async recall(args) {
|
|
34916
|
-
const { threadId, resourceId, perPage: perPageArg, page, orderBy, threadConfig, vectorSearchString, includeSystemReminders, filter, includeTotal } = args;
|
|
34960
|
+
const { threadId, resourceId, perPage: perPageArg, page, orderBy, threadConfig, vectorSearchString, includeSystemReminders, hideSignals, filter, includeTotal } = args;
|
|
34917
34961
|
const config = this.getMergedThreadConfig(threadConfig || {});
|
|
34918
34962
|
const semanticRecallEnabled = Boolean(config.semanticRecall);
|
|
34919
34963
|
const span = this.createMemorySpan("recall", args.observabilityContext, {
|
|
@@ -35012,7 +35056,7 @@ var Memory = class Memory extends _mastra_core_memory.MastraMemory {
|
|
|
35012
35056
|
const messages = filterSystemReminderMessages(new _mastra_core_agent.MessageList({
|
|
35013
35057
|
threadId,
|
|
35014
35058
|
resourceId
|
|
35015
|
-
}).add(rawMessages, "memory").get.all.db(), includeSystemReminders);
|
|
35059
|
+
}).add(rawMessages, "memory").get.all.db(), includeSystemReminders, hideSignals);
|
|
35016
35060
|
const { total, page: resultPage, perPage: resultPerPage, hasMore } = paginatedResult;
|
|
35017
35061
|
const recallResult = {
|
|
35018
35062
|
messages,
|
|
@@ -35492,8 +35536,8 @@ ${workingMemory}`;
|
|
|
35492
35536
|
if (config.workingMemory?.schema) try {
|
|
35493
35537
|
const schema = config.workingMemory.schema;
|
|
35494
35538
|
let convertedSchema;
|
|
35495
|
-
if (
|
|
35496
|
-
else convertedSchema =
|
|
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" });
|
|
35497
35541
|
return {
|
|
35498
35542
|
format: "json",
|
|
35499
35543
|
content: JSON.stringify(convertedSchema)
|
|
@@ -36322,10 +36366,40 @@ Notes:
|
|
|
36322
36366
|
* ```
|
|
36323
36367
|
*/
|
|
36324
36368
|
async cloneThread(args, memoryConfig) {
|
|
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"
|
|
36377
|
+
}
|
|
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) {
|
|
36325
36398
|
const memoryStore = await this.getMemoryStore();
|
|
36326
|
-
const result = await memoryStore.cloneThread(args);
|
|
36327
36399
|
const config = this.getMergedThreadConfig(memoryConfig);
|
|
36400
|
+
const result = await memoryStore.copyThread(args);
|
|
36328
36401
|
const sourceResourceId = (await this.getThreadById({ threadId: args.sourceThreadId }))?.resourceId;
|
|
36402
|
+
let priorDestinationResourceWm;
|
|
36329
36403
|
if (config.workingMemory?.enabled) {
|
|
36330
36404
|
const scope = config.workingMemory.scope || "resource";
|
|
36331
36405
|
if (scope === "thread" || scope === "resource" && args.resourceId && args.resourceId !== sourceResourceId) {
|
|
@@ -36334,28 +36408,125 @@ Notes:
|
|
|
36334
36408
|
resourceId: sourceResourceId,
|
|
36335
36409
|
memoryConfig
|
|
36336
36410
|
});
|
|
36337
|
-
if (sourceWm)
|
|
36338
|
-
|
|
36339
|
-
|
|
36340
|
-
|
|
36341
|
-
|
|
36342
|
-
|
|
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
|
+
}
|
|
36343
36420
|
}
|
|
36344
36421
|
}
|
|
36345
36422
|
if (memoryStore.supportsObservationalMemory && sourceResourceId) try {
|
|
36346
36423
|
await this.cloneObservationalMemory(memoryStore, args.sourceThreadId, sourceResourceId, result);
|
|
36347
36424
|
} catch (error) {
|
|
36348
|
-
|
|
36349
|
-
|
|
36350
|
-
|
|
36351
|
-
|
|
36352
|
-
|
|
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);
|
|
36353
36432
|
throw error;
|
|
36354
36433
|
}
|
|
36355
|
-
if (this.vector && config.semanticRecall && result.clonedMessages.length > 0) await this.embedClonedMessages(result.clonedMessages, config);
|
|
36356
36434
|
return result;
|
|
36357
36435
|
}
|
|
36358
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
|
+
/**
|
|
36359
36530
|
* Clone observational memory records when cloning a thread.
|
|
36360
36531
|
* Thread-scoped: always cloned to the new thread.
|
|
36361
36532
|
* Resource-scoped: cloned only when the resourceId changes (same resourceId shares OM naturally).
|
|
@@ -40133,7 +40304,7 @@ Return the actual exported names of the units, as well as the file names.`,
|
|
|
40133
40304
|
maxSteps: 100
|
|
40134
40305
|
});
|
|
40135
40306
|
else {
|
|
40136
|
-
const jsonSchema =
|
|
40307
|
+
const jsonSchema = require_schema_D_ikovK6.standardSchemaToJSONSchema((0, _mastra_core_schema.toStandardSchema)(output));
|
|
40137
40308
|
result = await agent.generateLegacy(prompt, {
|
|
40138
40309
|
experimental_output: jsonSchema,
|
|
40139
40310
|
maxSteps: 100
|
|
@@ -47041,4 +47212,4 @@ const agentBuilderWorkflows = {
|
|
|
47041
47212
|
//#endregion
|
|
47042
47213
|
exports.agentBuilderWorkflows = agentBuilderWorkflows;
|
|
47043
47214
|
|
|
47044
|
-
//# sourceMappingURL=dist-
|
|
47215
|
+
//# sourceMappingURL=dist-Du9y2ur5.cjs.map
|